初级会员
注册日期: 2010-05-30
年龄: 38
帖子: 3
声望力: 0
|
关于图像去噪的问题(附代码),求助大侠!!先谢谢了!
各位大侠好:
我要实现基于直方图的高斯噪声滤波,我参考资料(关于去椒盐噪声的)实现了去除椒盐噪声的程序(加权中值法),那请问一下各位大侠,怎么才能用加权中值法去除高斯噪声?麻烦各位了,先谢谢了!
附代码:
I=imread('D:\Documents and Settings\Owner\实验2\2-原图.jpg');
figure(1);
subplot(3,2,1),imshow(I);%显示原图像
subplot(3,2,2),imhist(I);
J=imnoise(I,'salt & pepper',0.2);%加椒盐噪声
%J=imnoise(I,'gaussian',0.1);%加高斯噪声
subplot(3,2,3),imshow(J);%显示加椒盐噪声后的图像
subplot(3,2,4),imhist(J);
[m,n,k]=size(J);
newJ=J;% 随机生成一个矩阵newJ(m,n)
dj=double(J);
width_param=3;%窗口宽度参数
height_param=3;%窗口高度参数
window_width=2*width_param+1;
window_height=2*height_param+1;
%dj=uint8(dj);
%figure(4);
%subplot(2,2,1),imshow(dj);%显示加高斯噪声后的图像
%subplot(2,2,2),imhist(dj);
h=zeros(1,256);
for a=1:m %求和
for b=1:n
h(J(a,b)+1)=h(J(a,b)+1)+1;
end
end
w=zeros(1,256);
for huidu=1:256
w(huidu)=h(huidu)/(m*n);
end
G=J;
%初始化矩阵为1
for i=1:m
for j=1:n
G(i,j)=1;
end
end
grayMatrix=G;
for i=1:m
for j=1:n
max_value = 0;%最大灰度
min_value = 255;%最小灰度
i_min = i-width_param;
if(i_min<1)
i_min=1;
end
i_max = i+width_param;
if(i_max>255)
i_max=255;
end
j_min = j-height_param;
if(j_min<1)
j_min=1;
end
j_max = j+height_param;
if(j_max >255)
j_max =255;
end
for i1 =i_min:i_max;
for j1 =j_min:j_max;
if J(i1,j1)>max_value
max_value=J(i1,j1);
end
if J(i1,j1)<min_value
min_value=J(i1,j1);
end
end
end
if max_value==J(i,j) || min_value==J(i,j)
G(i,j)=0;%确认为噪声点
weight_sum=0;
sum=0;
%计算回测灰度值
for i1 =i_min:i_max;
for j1 =j_min:j_max;
weight_sum = weight_sum + w(J(i1,j1)+1);
sum=sum + J(i1,j1)*w(J(i1,j1)+1);
end
end
predict_value = sum/weight_sum;
grayMatrix(i,j)=predict_value;
end
end
end
for i=1:m
for j=1:n
if(G(i,j)==0)
J(i,j)=grayMatrix(i,j);
end
end
end
subplot(3,2,5),imshow(J);%显示加椒盐噪声后的图像
subplot(3,2,6),imhist(J);
|