Image 如何去除高斯噪声?

Image 如何去除高斯噪声?,image,matlab,image-processing,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); zaszumion

我必须从这张图像中去除高斯噪声(之前,我必须过滤它并添加噪声)。然后,我必须使用函数“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);

尝试将高斯滤波器与噪声图像进行卷积,以去除高斯噪声,如下所示:

nowx=conv2(zaszumiony,fspecial('gaussian',[3 3],1.5),'same')/(sum(sum(fspecial('gaussian',[3 3],1.5))));
它应该在一定程度上减少你的o函数


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

除了@ALM865的答案外,还可以使用
imfilter
。事实上,这是推荐用于图像的函数,因为
imfilter
专门针对图像进行了优化
conv2
是任何2D信号的更通用功能

我还回答了如何选择标准偏差以及最终高斯滤波器/内核的大小:

本质上,一旦你选择了你想要的标准偏差,你会发现一个
floor(6*sigma)+1xfloor(6*sigma)+1
Gaussian内核用于你的过滤操作。假设
sigma=2
,您将得到一个
13x13
内核。正如ALM865所说,您可以使用
fspecial
创建高斯内核。您可以指定
'gaussian'
标志,后跟内核的大小和之后的标准偏差。因此:

sigma = 2;
width = 6*sigma + 1;
kernel = fspecial('gaussian', [width width], sigma);
out = imfilter(zaszumiony, kernel, 'replicate');
imfilter
接收要过滤的图像、要用于过滤图像的卷积内核,以及一个可选标志,该标志指定当内核不完全适合图像时沿图像像素边界发生的情况
'replicate'
意味着它只是沿着边框复制像素,从而复制它们。还有其他选项,例如使用值填充(通常为零)、循环填充和对称填充

反复使用标准偏差,直到得到您认为是好的结果