On Sat, May 12, 2018 at 10:24:34PM +0200, Paul B Mahol wrote: > Signed-off-by: Paul B Mahol <one...@gmail.com> > --- > libavfilter/vf_nlmeans.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/libavfilter/vf_nlmeans.c b/libavfilter/vf_nlmeans.c > index 82e779ce85..6c9c9d312d 100644 > --- a/libavfilter/vf_nlmeans.c > +++ b/libavfilter/vf_nlmeans.c > @@ -39,6 +39,7 @@ > #include "video.h" > > struct weighted_avg { > + float max_weight; > float total_weight; > float sum; > }; > @@ -403,6 +404,7 @@ static int nlmeans_slice(AVFilterContext *ctx, void *arg, > int jobnr, int nb_jobs > if (patch_diff_sq < s->max_meaningful_diff) { > const unsigned weight_lut_idx = patch_diff_sq * > s->pdiff_lut_scale; > const float weight = s->weight_lut[weight_lut_idx]; // > exp(-patch_diff_sq * s->pdiff_scale) > + wa[x].max_weight = FFMAX(weight, wa[x].max_weight); > wa[x].total_weight += weight; > wa[x].sum += weight * src[x]; > } > @@ -422,8 +424,10 @@ static void weight_averages(uint8_t *dst, ptrdiff_t > dst_linesize, > for (y = 0; y < h; y++) { > for (x = 0; x < w; x++) { > // Also weight the centered pixel > - wa[x].total_weight += 1.f; > - wa[x].sum += 1.f * src[x]; > + if (!isnormal(wa[x].max_weight)) > + wa[x].max_weight = 1.f; > + wa[x].total_weight += wa[x].max_weight; > + wa[x].sum += src[x] * wa[x].max_weight; > dst[x] = av_clip_uint8(wa[x].sum / wa[x].total_weight); > } > dst += dst_linesize;
Do you mind adding a cpw/center-pixel-weight option with multiple modes? "one" and "max" for a start would be nice, then eventually advanced modes can be added. Please also mention https://arxiv.org/pdf/1211.1656 at least in the commit description. -- Clément B.
signature.asc
Description: PGP signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel