【发布时间】:2016-03-05 19:33:12
【问题描述】:
我正在对特定图像执行 2D FFT,我得到了它的光谱分量。现在该图像已与另一张图像叠加以产生周期性噪声。
原始图像以及周期性噪声版本如下所示:
原图
周期性噪声图像
为了过滤掉它,我使用手动框来掩盖幅度谱中相对于其他分量相当大的分量,如下所示。
完成后,我执行了逆 FFT,但我没有得到原始图像。
有谁知道我做错了什么?
下面是屏蔽值的代码,然后继续对屏蔽的光谱图像进行逆二维 FFT:
pat1 = imread('Pattern1.png');
spec_orig = fft2(double(pat1));
spec_orig2 = abs(spec_orig);
spec_img = fftshift(spec_orig2);
for j = 115:125
for n = 96:106
spec_img(n,j) = 0;
end
for n = 216:226
spec_img(n,j) = 0;
end
for n = 274:284
spec_img(n,j) = 0;
end
for n = 298:308
spec_img(n,j) = 0;
end
for n = 12:22
spec_img(n,j) = 0;
end
for n = 37:47
spec_img(n,j) = 0;
end
end
%Getting Back the Image for Pattern1
figure;subplot(2,1,1);
spec_img = log(1 + spec_img);
imshow(spec_img,[]);
subplot(2,1,2);
ptnfx = ifft2(spec_img);
imshow(ptnfx);
【问题讨论】:
-
可以通过使用数组索引来删除开头的双 for 循环:
spec_img([96:106 216:226],115:125)=0等。 -
@AndrasDeak 不知道你能做到这一点 - 谢谢!
-
没问题。这就是我建议熟悉 matlab 本身的原因:) 牢牢掌握该语言的基本要素可以让您的生活更轻松,您的代码也更加优雅和高效。
-
您是否在 MATLAB Central 论坛中提出问题,他们说它过于宽泛或在这里?这个问题当然不是太宽泛。您向我们展示了您的尝试以及卡在哪里。这非常适合 StackOverflow。
-
顺便说一句,你当然可以继续问图像处理问题:D。我是两个人中唯一一个在那个标签上有金徽章的人,所以这证明了我是多么喜欢这个地区。
标签: matlab image-processing filtering signal-processing fft