以下是用频率域锐化滤波器处理图像的 MATLAB 代码:
% 读取原始图片
I = imread('image.jpg');
figure; imshow(I); title('原始图片');
% 转换为灰度图像
Igray = rgb2gray(I);
% 对输入图像进行傅里叶变换,并将结果平移对称以使频率零点在中心
F = fftshift(fft2(double(Igray)));
% 定义锐化滤波器
% H = 2*(D0^2-D^2)/(D0^2+D^2),其中D为频率,D0为截止频率
D0 = 30;
[M, N] = size(F);
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 = 2*((D0^2 - D.^2)./(D0^2 + D.^2));
H(D < 1) = 0;
% 在频域中将输入图像和滤波器相乘
G = H .* F;
% 对G进行逆傅里叶变换并进行幅度值归一化
g = real(ifft2(ifftshift(G)));
g = g-min(g(:));
g = g/max(g(:));
% 输出结果
figure; imshow(g); title('锐化后的图像');
在上述代码中,首先读取原始图像并将其转换为灰度图像。然后对灰度图像进行傅里叶变换,并定义频率域锐化滤波器,通过将输入图像和滤波器在频域相乘来获取锐化后的图像。最后进行幅度归一化,并显示锐化后的图像。
原始图像:
锐化后的图像: