matlab进行傅里叶变换对图片边缘进行提取的代码
时间: 2023-08-14 13:03:14 浏览: 105
用matlab进行边缘提取的代码
以下是 Matlab 中使用傅里叶变换进行图像边缘提取的示例代码:
```matlab
% 读取图片并转成灰度图
img = rgb2gray(imread('image.jpg'));
% 对图片进行傅里叶变换
F = fft2(img);
% 将频谱中心移到图像中心
Fc = fftshift(F);
% 构造高通滤波器
[M, N] = size(img);
H = zeros(M, N);
r = 50; % 半径
cx = M/2; cy = N/2; % 中心点坐标
for i = 1:M
for j = 1:N
d = sqrt((i-cx)^2 + (j-cy)^2);
if d > r
H(i,j) = 1; % 高通滤波器
end
end
end
% 将滤波器应用于频谱
G = Fc .* H;
% 将频谱中心移回原位置
Gc = ifftshift(G);
% 对滤波后的频谱进行反傅里叶变换
g = ifft2(Gc);
% 取实部并做归一化
g = real(g);
g = (g - min(g(:))) / (max(g(:)) - min(g(:)));
% 显示结果
imshow(g);
```
在代码中,我们首先读取了一张图片并将其转换成灰度图。然后,我们使用 `fft2` 函数对图像进行二维傅里叶变换,并使用 `fftshift` 函数将频谱中心移到图像中心。接下来,我们构造了一个高通滤波器,通过将滤波器应用于频谱,可以实现对低频分量的抑制,从而提取出图像的边缘信息。然后,我们使用 `ifftshift` 函数将频谱中心移回原位置,使用 `ifft2` 函数对滤波后的频谱进行反傅里叶变换,得到图像的边缘信息。最后,我们取实部并归一化,将结果显示出来。
阅读全文