gpt4 book ai didi

matlab - 在matlab中使用FFT去除图像中的图案和噪声

转载 作者:太空宇宙 更新时间:2023-11-03 19:09:32 29 4
gpt4 key购买 nike

我正在使用 clown.jpg 图像来去除其明显的图案/噪点。

enter image description here

我在对图像进行 FFT 之前所做的第一步是将其重新缩放为二次方的正方形图像(即 256 x 256)。在 matlab 中使用 FFT 和 fftshift 给出了快速傅里叶变换,其强度位于图像的中心。下图是使用前面提到的函数的结果。

enter image description here

我通过手动将 FFT 图像上的“星星”归零成功地去除了图案/噪声,如下所示:

enter image description here

通过 IFFT,我得到了质量更好的图片(未显示)。

我的问题是是否有自动将“星星”归零的方法?由于我们不想删除最亮的“星”、DC 分量或低值,因此我创建了一个将图像置零的间隔。这样的阈值如下:

filter = (fLog > .7*max(fLog(:)) ) | (fLog < .25*max(fLog(:)) )

where fLog is the log(1+abs(Fourier image)) and .7 and .25 are the corresponding
interval percentages.

输出掩码(我将乘以傅立叶图像)如下所示。黑色对应于 0 的值,白色对应于 1 的值。请注意,此掩码的过滤会移除一些“星星”并保留一些 DC 分量。显然这种方法不是最好的。

enter image description here

我正在阅读有关执行高通滤波器的内容,但这似乎会删除傅里叶图像中的所有外部值。这是基于我之前的测试(我没有包括那些图像)。

除了 DC 分量之外,您有什么建议可以突出显示高强度值吗?理想情况下,我想让面具看起来像:

enter image description here

来源:http://users.accesscomm.ca/bostrum/Imaging/tips/tip1.html

在另一个站点中,提到使用“高通和电平校正 FFT 数据以仅保留代表光栅图案的杂散点”。我不清楚该怎么做。

来源:http://www.robotplanet.dk/graphics/raster_removal/

非常感谢您的帮助。

这是我的源代码来帮助:

I = imread('clown.jpg'); % Read Image

% convert to grayscale
I = rgb2gray(I);

% normalize the image and conver to doubleI
I = double(mat2gray(I));

% Resize the image
I = imresize(I, [256 256]);

% get the size of the image
[rows,cols] = size(I);

% apply FFT
f = fftshift(fft2(I));

% used to plot the image
fLog = log(1 + abs(f));

% filter by a range based on fLog

filter = (fLog > .7*max(fLog(:)) ) | (fLog < .25*max(fLog(:)) );

B = abs(ifft2(f.*filter));

colormap(gray)
subplot(2,2,1),imagesc(I); title('Original Image')
subplot(2,2,2),imagesc(fLog); title('Fourier Image')
subplot(2,2,3),imagesc(filter); title('Zeroed Fourier Image')
subplot(2,2,4),imagesc(B); title('Cleaned Image')
annotation('textbox', [0 0.9 1 0.1], ...
'String', 'Fourier Analysis on Clown Image', ...
'EdgeColor', 'none', ...
'HorizontalAlignment', 'center', ...
'FontSize', 15, ...
'FontWeight', 'bold')

最佳答案

我尝试检测频域中的局部最大幅值,并将它们连同它们的邻域归零。它并不完全干净,但至少在某种程度上实现了一些自动归零。 enter image description here

我的代码:

I=I-mean(I(:));
f = fftshift(fft2(I));
fabs=abs(f);

roi=3;thresh=400;
local_extr = ordfilt2(fabs, roi^2, ones(roi)); % find local maximum within 3*3 range

result = (fabs == local_extr) & (fabs > thresh);

[r, c] = find(result);
for i=1:length(r)
if (r(i)-128)^2+(c(i)-128)^2>400 % periodic noise locates in the position outside the 20-pixel-radius circle
f(r(i)-2:r(i)+2,c(i)-2:c(i)+2)=0; % zero the frequency components
end
end

Inew=ifft2(fftshift(f));
imagesc(real(Inew)),colormap(gray),

关于matlab - 在matlab中使用FFT去除图像中的图案和噪声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20531110/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com