如何去除高斯噪音?

时间:2014-06-17 12:37:19

标签: image matlab image-processing

我必须从此图像中删除高斯噪声(之前,我必须过滤它并添加噪声)。然后,我必须使用函数" o"我的成绩是基于这个功能的低效率。我正在尝试和尝试不同的东西,但我无法消除这种噪音,所以我可以获得一个好成绩:/任何帮助吗?

   img=imread('liftingbody.png');
   img=double(img)/255;
   maska1=[1 1 1; 1 5 1; 1 1 1]/13;
   odfiltrowany=imfilter(img,maska1);
   zaszumiony=imnoise(odfiltrowany,'gaussian');
   nowy=wiener2(zaszumiony);
   nowy4=medfilt2(nowy);

   o=1/512.*sqrt(sum(sum(img-nowy4).^2));

   subplot(311); imshow(img);
   subplot(312); imshow(zaszumiony);
   subplot(313); imshow(nowy);

2 个答案:

答案 0 :(得分:1)

尝试使用噪声图像卷积高斯滤波器以消除高斯噪声,如下所示:

nowx=conv2(zaszumiony,fspecial('gaussian',[3 3],1.5),'same')/(sum(sum(fspecial('gaussian',[3 3],1.5))));

它应该会减少你的功能。

尝试使用滤波器的强度(即1.5值)和内核的大小(即[3 3]值),以将噪声降至最低。

答案 1 :(得分:1)

添加到@ ALM865的答案,您也可以使用imfilter。事实上,这是您用于图像的推荐功能,因为imfilter具有专门针对图像的优化。 conv2是任何2D信号的更通用的功能。

我还在这里回答了如何选择标准差和最终高斯滤波器/内核的大小:By which measures should I set the size of my Gaussian filter in MATLAB?

从本质上讲,一旦你选择了你想要的标准差,就会发现在你的过滤操作中使用floor(6*sigma) + 1 x floor(6*sigma) + 1高斯内核。假设sigma = 2,您将获得13 x 13内核。正如ALM865所说,您可以使用fspecial创建高斯内核。您指定'gaussian'标志,然后是内核的大小和之后的标准差。就这样:

sigma = 2;
width = 6*sigma + 1;
kernel = fspecial('gaussian', [width width], sigma);
out = imfilter(zaszumiony, kernel, 'replicate');

imfilter接收要过滤的图像,要用于过滤图像的卷积内核,以及一个可选标记,用于指定当内核不完全适合时沿图像像素边框发生的情况在图像内。 'replicate'表示它只是沿着边框复制像素,因此复制它们。还有其他选项,例如填充值(通常为零),圆形填充和对称填充。

使用标准偏差,直到得到你认为的好结果。