-6

我在 MATLAB 中读取图像'abc.jpg'并将其数据类型转换为 double.Display 图像。将图像的大小存储在 M 和 N 中。x、y、u 和 v 的所有循环都运行到图像大小。 在此处输入图像描述

现在我想知道 1:如何将上面的输入图像乘以(-1)^x+yTo Center the Transform To U = M/2 And V = N/2

2:乘以ideal HPF(High Pass Filter) with value of D=50.其中 D 是理想 HPF 的半径大小。

与理想 HPF 相乘后,生成的图像将如下所示。 在此处输入图像描述

4

4 回答 4

3

既然你放了一个赏金,我写了一个增强的回复。

我应该提到,您可能需要在计算 fft 之前考虑使用适当的窗口过滤器以避免边框伪影(我在下面的代码中包含了这个选项)。我希望它有所帮助。

这是对您的代码的建议:

a=rgb2gray(imread('abc.jpg'))
D=50;
[x y i]=size(a);

生成汉宁窗口以抑制边框伪影:(可选)

hannx = hann(x); hanny = hann(y);
Hann = hannx * hanny';

计算加权图像的 2D fft:(如果不需要,请删除 .*Hann)

FreqDomain=fftshift(fft2(a.*Hann));

生成半径为 D 的圆盘形二进制掩码:

Mask = fspecial('disk',D)==0;
Mask = imresize(padarray(Mask, [floor((x/2)-D) floor((y/2)-D)], 1, 'both'), [x y]);

屏蔽频域图像:

MaskedFFT=FreqDomain.*Mask;

计算逆 FFT:

Filtereda=ifft2(MaskedFFT, 'symmetric');

请注意,代码假设D小于x/2y/2

于 2013-11-09T16:59:47.017 回答
3

理想的 HPF 是一个 0-1 滤波器,可将所有低于 的频率降至零D

>> sz = size( a ); % size of image, assuming image is gray-level and not color
>> [u v] = meshgrid( .5 * linspace( -sz(1), sz(1), sz(1) ),...
                     .5 * linspace( -sz(2), sz(2), sz(2) ) ); % construct the grid for the freq domain
>> hpf = ifftshift( sqrt( u.^2 + v.^2 ) <= D ); % construct the filter
>> A = fft2( a ); 
>> fA = A.*hpf; % apply the filter in freq domain
>> fa = abs( ifft2( fA ) ); % back to image domain
于 2013-11-04T06:29:45.407 回答
1

我不确定你到底想做什么,但似乎你正在尝试实现一个基于 FFT 的高通滤波器。

这就是我将如何进行:

a=imread('abc.jpg')
FreqDomain=fftshift(fft(a));

fftshift以 0 频率分量为中心)

然后裁剪FreqDomain到您喜欢的任何截止点,并应用于ifft裁剪的图像。

于 2013-10-31T14:11:38.000 回答
1
n1=rgb2gray(imread('fin.jpg'));
imshow(n1);

F=fft2(double(n1));

%计算图像大小

[M,N]=size(F);

%距离半径大小

D0=50;
n=2;
u=0:(M-1);
v=0:(N-1);
idx=find(u>M/2);
u(idx)=u(idx)-M;
idy=find(v>N/2);
v(idy)=v(idy)-N;
[V,U]=meshgrid(v,u);

使用距离公式计算高通滤波器的 % 距离

D=sqrt(U.^2+V.^2);

H=double(D>D0);
subplot(2,1,1);
imshow(fftshift(H));
G=H.*F;
g=real(ifft2(double(G)));
[a,b]=size(g);
for x=1:a
    for y=1:b
        sharpen_image(x,y)=(g(x,y))*(-1)^((x)+(y));
    end
end
figure
imshow(sharpen_image);

输出

在此处输入图像描述

于 2013-11-10T09:15:49.277 回答