错误:MATLAB中的图像噪声检测
我在实现图像中噪点检测的简单方法时遇到了错误。 设I
表示噪声图像, I
每个像素用I(x,y)
。 定义了以I(x, y)
为中心的大小为3X3
滑动窗口。 首先,我们估计窗口的中心像素是否是噪声。 为了区分噪声和信号,我们计算窗口的平均m
和标准偏差s
。 如果像素在ms
和m+s
,那么它是一个信号,否则就是噪声,我们将应用中值滤波器。
算法:
I
。 3X3
大小的面罩。 m
和标准偏差s
。 t1 = ms
和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)
我试图按如下方式实现这个算法
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(:)));
请帮帮我。
blockproc为您提供不同的块。 而是使用nlfilter。
iout(i,j)=medfilt2(y(i,j))
是一个错误的陈述。 medfilt2只做中值过滤,它不会给你中位数。 要获得中间值,只需使用median(y(:))
。
这是错误的: (t1<=y(i,j) & y(i,j)<=t2)
。
另外你有交叉发布。 查看:https://dsp.stackexchange.com/questions/15033/error-image-noise-detection-in-matlab/15036?noredirect=1#comment25759_15036
在上面的链接中给出$ 3 ^ rd $的解释。
这意味着你没有分配任何东西给你的输出参数。 我想你应该分配给x
而不是iout (i, j)
上一篇: Error: Image Noise detection in MATLAB
下一篇: how to remove salt and pepper noise from images using python?