【问题标题】:How to remove gaussian noise?如何去除高斯噪声?
【发布时间】:2014-06-17 12:37:18
【问题描述】:

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

【问题讨论】:

    标签: image matlab image-processing


    【解决方案1】:

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

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

    它应该会稍微减少你的 o 函数。

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

    【讨论】:

      【解决方案2】:

      添加到@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' 表示它只是沿边界复制像素,从而复制它们。还有其他选项,例如填充值(通常为零)、圆形填充和对称填充。

      反复调整标准差,直到得到你认为好的结果。

      【讨论】:

        猜你喜欢
        • 2021-12-07
        • 1970-01-01
        • 2020-03-24
        • 2016-02-07
        • 2012-01-26
        • 1970-01-01
        • 2014-08-26
        • 2016-08-17
        • 2014-09-23
        相关资源
        最近更新 更多