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