zhxcumt 发表于 2007-6-13 12:27

滤波结果为何漆黑一片

我是菜鸟,为了毕业设计才不得不用MATLAB.请各位高手看一下,这是一个焦盐去糟的例子,是我模仿一个程序写的(例子是一个加正弦噪声的图象,但我不知道怎么加正弦噪声),但运行出来是漆黑一片
im=imread('shiyan1.gif');
im1=imnoise(im,'salt & pepper',0.02);
figure(1)
imshow(im1)
I=im1;
F=fft2(I);
Fshift=fftshift(F);
F_magnitude=abs(Fshift);
figure(2)
imshow(log( F_magnitude),[]);
r = 10; %低通的中心半径,自己观察
m=256;
n=256;
for i=1:m
for j=1:n
if (((i-m/2)^2+(j-n/2)^2) < r^2 )
mask(i,j) = 1;
else
mask(i,j) = 0;
end
end
end
>> im2_fft=log(F_magnitude).*mask;
>> im2=ifft(ifftshift(im2_fft));
figure(3)
>> imshow(im2);

[ 本帖最后由 eight 于 2007-6-13 16:01 编辑 ]

花如月 发表于 2007-6-13 13:21

没说明你的目的和程序要完成什么功能,别人怎么帮你呢?

w89986581 发表于 2007-6-13 13:29

回复 #2 花如月 的帖子

他人为加入噪点,然后进行低通滤波,看看消除噪点的效果。

不是搞图像处理的,我搞不定。不过有两点要修改:1.ifft要换成ifft2;2.最后一条代码为imshow(uint8(real(im2)));

[ 本帖最后由 w89986581 于 2007-6-13 13:42 编辑 ]

花如月 发表于 2007-6-13 14:21

呵呵,原来如此。看看这个是你想要的结果么?
im=imread('shiyan1.gif');
im=imadjust(im);
im1=imnoise(im,'salt & pepper',0.02);
F=fft2(double(im1));
Fshift=fftshift(F);
%F_magnitude=abs(Fshift);这句没必要的
figure(1)
imshow(log( F_magnitude),[]);
r = 30; %低通的中心半径,自己观察
m=256;n=256;
for i=1:m
for j=1:n
   if (((i-m/2)^2+(j-n/2)^2) < r^2 )
         mask(i,j) = 1;
   else
         mask(i,j) = 0;
   end
   end
end
im2_fft=Fshift.*mask;
im2=ifft2(ifftshift(im2_fft));
figure(2)
subplot(131),imshow(im),title('原图');
subplot(132),imshow(im1),title('加噪图');
subplot(133),imshow(uint8(real(im2)));
title('低通滤波图');

补充一点:如果对最后的滤波图效果不满意,还可以考虑进行对比度调节

[ 本帖最后由 花如月 于 2007-6-13 14:41 编辑 ]

zhxcumt 发表于 2007-6-13 14:44

谢谢帮助,这正是想得到的结果
页: [1]
查看完整版本: 滤波结果为何漆黑一片