错误:MATLAB中的图像噪声检测

时间:2014-03-16 08:05:16

标签: matlab image-processing

在实现图像中噪声检测的简单构思时,我遇到了错误。设I表示噪声图像,I的每个像素表示I(x,y)。定义了以3X3为中心的大小为I(x, y)的滑动窗口。首先,我们估计窗口的中心像素是否是噪声。为了区分噪声和信号,我们计算窗口的平均值m和标准偏差s。如果像素介于m-sm+s之间,那么它是一个信号,否则会产生噪声,我们将应用中值滤波器。

算法:

  1. 阅读图片I
  2. 使用大小为3X3的滑动窗口或面具。
  3. 从掩码中计算平均值m和标准差s
  4. 按如下方式计算阈值:t1 = m-st2 = m+s
  5. IF t1 <= I(x,y) and I(x,y) <= t2, THEN Result(x,y) = I(x,y) ELSE Result(x, y) = medfilt2(I(x,y)
  6. 在整个图像上重复步骤3,4和5。
  7. 显示结果图像。
  8. 我尝试按如下方式实现此算法

    clc;
    close all;
    clear all;
    
    I=imread('lena.jpg');
    I=rgb2gray(I);
    
    Out = blockproc(I,[3 3],@(x) noisedetection(x.data(:)));
    
    imshow(out);
    

    函数noisedetection如下:

    function x=noisedetection(y)
    s=std2(y(:)); % Calculating Standard deviation
    m=mean2(y(:)); % Calulating Mean
    t1=m-s; % Threshold 1
    t2=m+s; % Threshold 2
    [m n]=size(y);
    
    for i=1:m
        for j=1:n
    
    
    if (t1<=y(i,j) & y(i,j)<=t2)
        iout(i,j)=y(i,j)
    else
        iout(i,j)=medfilt2(y(i,j)) % Filtering only when the pixel does not fall in the interval [t1,t2] 
    end
        end
    end
    x=iout
    

    但是我收到以下错误

        Subscripted assignment dimension mismatch.
    
    Error in blockprocInMemory (line 151)
        b(last_row_start:end,last_col_start:end,:) = lr_output;
    
    Error in blockproc (line 237)
        result_image = blockprocInMemory(source,fun,options);
    
    Error in detection (line 8)
    Out = blockproc(I,[3 3],@(x) noisedetection(x.data(:)));
    

    请帮帮我。

2 个答案:

答案 0 :(得分:1)

  1. blockproc为您提供不同的块。而是使用nlfilter。

  2. iout(i,j)=medfilt2(y(i,j)) 是一个错误的陈述。 medfilt2只进行中值过滤,它不会给你中位数。要获得中值,只需使用median(y(:))

  3. 这是错误的:(t1<=y(i,j) & y(i,j)<=t2)

  4. 另外你有交叉发布。查看:https://dsp.stackexchange.com/questions/15033/error-image-noise-detection-in-matlab/15036?noredirect=1#comment25759_15036

    上述链接中给出了$ 3 ^ rd $的说明。

答案 1 :(得分:0)

这意味着您没有为输出参数指定任何内容。我想你应该分配给x而不是iout (i, j)