【发布时间】:2014-03-16 08:05:15
【问题描述】:
在实现图像中噪声检测的简单想法时出现错误。让I 表示噪声图像,I 的每个像素由I(x,y) 表示。定义了以I(x, y) 为中心的大小为3X3 的滑动窗口。首先,我们估计窗口的中心像素是否是噪声。为了区分噪声和信号,我们计算窗口的平均值m 和标准差s。如果像素在m-s 和m+s 之间,则它是信号,否则为噪声,我们将应用中值滤波。
算法:
- 阅读图片
I。 - 获取大小为
3X3的滑动窗口或遮罩。 - 计算掩码的平均值
m和标准差s。 - 计算阈值如下:
t1 = m-s和t2 = m+s 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)- 对整个图像重复步骤 3、4 和 5。
- 显示生成的图像。
我尝试如下实现这个算法
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(:)));
请帮帮我。
【问题讨论】: