[fprint] Assembling of frames is broken
Vasily Khoruzhick
anarsoul at gmail.com
Fri Mar 2 22:07:01 UTC 2018
Hi Timur,
On Wed, Feb 28, 2018 at 12:41 PM, Timur Celik <clktmr at gmail.com> wrote:
> 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.
Thanks for report. I'll try to look into it this weekend.
> ---
> 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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/fprint
More information about the fprint
mailing list