Hello everybody,

I have already discussed this with Igor. There are two different bugs in the assembling of frames. I think this needs some attention because it made libfprint unusable for me and it affects all sensors.

In forward mode every frame stores the delta from the previous frame, in reverse mode it stores the delta to the next frame. This causes images to use the wrong delta while assembling in forward mode. The resulting stitching artifacts may be subtle when the movement was continuous, because the deltas will be similar.

---
libfprint/assembling.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/libfprint/assembling.c b/libfprint/assembling.c
index 1052f99..bf2ff13 100644
--- a/libfprint/assembling.c
+++ b/libfprint/assembling.c
@@ -279,11 +279,18 @@ struct fp_img *fpi_assemble_frames(struct fpi_frame_asmbl_ctx *ctx,
 do {
  fpi_frame = stripe->data;

-       y += fpi_frame->delta_y;
-       x += fpi_frame->delta_x;
+       if(reverse) {
+       y += fpi_frame->delta_y;
+       x += fpi_frame->delta_x;
+       }

  aes_blit_stripe(ctx, img, fpi_frame, x, y);

+       if(!reverse) {
+       y += fpi_frame->delta_y;
+       x += fpi_frame->delta_x;
+       }
+
  stripe = g_slist_next(stripe);
  i++;
 } while (i < stripes_len);
--
2.14.3


The second bug is in reverse mode. The last image is always misplaced because the sign of the delta vector isn't corrected. This bug is always be visible.

---
libfprint/assembling.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libfprint/assembling.c b/libfprint/assembling.c
index bf2ff13..0781006 100644
--- a/libfprint/assembling.c
+++ b/libfprint/assembling.c
@@ -131,8 +131,8 @@ static unsigned int do_movement_estimation(struct fpi_frame_asmbl_ctx *ctx,

  if (reverse) {
   find_overlap(ctx, prev_stripe, cur_stripe, &min_error);
-       prev_stripe->delta_y = -prev_stripe->delta_y;
-       prev_stripe->delta_x = -prev_stripe->delta_x;
+       cur_stripe->delta_y = -cur_stripe->delta_y;
+       cur_stripe->delta_x = -cur_stripe->delta_x;
  }
  else
   find_overlap(ctx, cur_stripe, prev_stripe, &min_error);
--
2.14.3


I have opened a ticket on bugzilla (https://bugs.freedesktop.org/show_bug.cgi?id=105027) and hope to see this confirmed and merged soon.

Timur

_______________________________________________
fprint mailing list
fprint@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/fprint

Reply via email to