[FFmpeg-devel] [PATCH 2/3] delogo: Use weighted interpolation

Stefano Sabatini stefasab at gmail.com
Sun Jun 23 12:06:33 CEST 2013


On date Wednesday 2013-06-19 16:18:06 +0200, Jean Delvare encoded:
> The original delogo algorithm interpolates both horizontally and
> vertically and uses the average to compute the resulting sample. This
> works reasonably well when the logo area is almost square. However
> when the logo area is significantly larger than high or higher than
> large, the result is largely suboptimal.
> 
> The issue can be clearly seen by testing the delogo filter with a fake
> logo area that is 200 pixels large and 2 pixels high. Vertical
> interpolation gives a very good result in that case, horizontal
> interpolation gives a very bad result, and the overall result is poor,
> because both are given the same weight.
> 
> Even when the logo is roughly square, the current algorithm gives poor
> results on the borders of the logo area, because it always gives
> horizontal and vertical interpolations an equal weight, and this is
> suboptimal on borders. For example, in the middle of the left hand
> side border of the logo, you want to trust the left known point much
> more than the right known point (which the current algorithm already
> does) but also much more than the top and bottom known points (which
> the current algorithm doesn't do.)
> 

> By properly weighting each known point when computing the value of
> each interpolated pixel, the visual result is much better, especially
> on borders and/or for high or large logo areas. This makes the
> algorithm slightly slower but I'd say it is completely worth it.

How much slower (-benchmark or use libavutil/time.h macros to test the
processing loop)?

What if you add a flag for setting the enhanced quality?

> 
> The algorithm I implemented guarantees that the weight of each of the
> 4 known points directly depends on its distance to the interpolated
> point. It is largely inspired from the original algorithm, the key
> difference being that it computes the relative weights globally
> instead of separating the vertical and horizontal interpolations and
> combining them afterward.
> 
> Signed-off-by: Jean Delvare <khali at linux-fr.org>
> ---
> I am using unsigned long long here because the computations would
> otherwise possibly overflow when the logo area is big.
> 
>  libavfilter/vf_delogo.c      |   25 +++-
>  tests/ref/fate/filter-delogo |  218 +++++++++++++++++++++----------------------
>  2 files changed, 126 insertions(+), 117 deletions(-)
[...]

The change itself looks reasonable.
-- 
FFmpeg = Fancy and Fantastic Minimalistic Patchable Enhanced Gladiator


More information about the ffmpeg-devel mailing list