图像处理 - 如何应用方框滤波平滑化

3

编辑:我的盒子滤波器的描述是非常错误的(在一个盒子滤波器中所有权重应该是相同的),但是提供的答案确实解决了图片上的问题。也就是没有确保权重之和等于1的错误。

我正在学习计算机图形学课程,我在尝试使用平滑盒子滤波器时遇到了一些问题。在我的尝试中,我使用了一个3x3的掩模,并将其与源图像卷积。我的书中给出的公式为离散情况下的1/(2r+1)和连续情况下的1/2r,其中r是从中心像素到半径。因此,我正在为3x3掩模的每个值分配权重,如下:

b a b
a 1 a
b a b

其中a为1/3,b为1/((2*sqrt(2))+1)

然后将其与源图像卷积。

我使用的特定库是CImg,可以在这里找到:http://cimg.sourceforge.net/,我也可以包含我的源代码和结果。

#include "CImg.h"
#include <cmath>

using namespace cimg_library;
int main() 
{
     CImg<unsigned char> image("zhbackground.bmp"), image2("zhbackground.bmp");
     double a = 1.0/3.0;
     double b = 1.0/((2.0*sqrt(2.0))+1.0);
     CImg<> mask = CImg<>(3,3).fill(b,a,b,a,1,a,b,a,b);
     image2.convolve(mask);
     CImgDisplay main_disp(image,"original"), main_disp2(image2, "second");
     while(1)
     {
        main_disp.wait();main_disp2.wait();
     }
}

original second

1个回答

3

滤波器权重应该总和为1.0,但是您的权重不是。


读到这个时感觉很蠢,花了大约十分钟才明白该怎么做来修复它,感觉更蠢了。显然只需将权重相加并将权重除以总和即可。 - Tim
@Tim 对不起,我可能可以更有帮助一些。而且不需要自责,我认为这是一个经常被忽视的点。另外,如果有任何权重小于0.0或大于1.0,则还需要添加夹紧(clamping)。 - Mark Ransom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接