matlab处理噪声的问题

来源:百度知道 编辑:UC知道 时间:2024/09/23 00:39:36
我用的是Sigma平滑滤波器
原理:构造一个5×5大小模板,计算模板的标准差σ,置信区间为当前像素值的±2σ范围。将模板中落在置信范围内的像素的均值替换原来的像素值。
写出如下程序:
image=imread('trees.tif');
[m,n]=size(image);
image1=imnoise(image,'Gaussian',0,0.002); % 加高斯噪声
image1=imnoise(image,'salt & pepper',0.01); %加椒盐噪声
image1=double(image1);
figure,imagesc(image1);

image2=image1;
for i=3:m-2
for j=3:n-2
temp=image1(i-2:i+2,j-2:j+2);
sig=std(temp);
min=round(image1(i,j)-2*sig);
max=round(image1(i,j)+2*sig);
sum=0;
q=0;
for k=1:3
for l=1:3
if min < image1(k,l) && image1(k,l) < max
sum=sum+image1(k,l);
q=q+1;
end
end
end
equ=sum/q;
equ=round(equ);
image2(i,j)=equ;
end
end

figure,imagesc

俺茶饭不思,辗转反侧多年,程序如下:

%高斯噪声下的滤波

image=imread('bacteria.tif');
[m,n]=size(image);
image1=imnoise(image,'Gaussian',0,0.002); %加高斯噪声
image1=double(image1); %将uint8转换成双精度
figure,imagesc(image1),colormap(gray) %显示滤波前的图像

%Sigma滤波

image2=image1;

for i=3:m-2
for j=3:n-2
temp=image1(i-2:i+2,j-2:j+2);
q=std(temp(:));
max=image1(i,j)+2*q;
min=image1(i,j)-2*q;
temp1=zeros(5,5);
temp2=temp;
t=0;
for r=1:5
for s=1:5
if temp2(r,s)<=max & temp2(r,s)>=min
temp1(r,s)=temp2(r,s);
t=t+1;
else
temp1(r,s)=0;
end
end
end
tem=sum(temp1(:))/t;
image2(i,j)=tem;
end
end %做5×5的