一、前言
傅里叶变换是图像变换的一种常用方法,傅里叶变换在图像处理中扮演着核心角色,它通过将图像从空间域转换到频率域,获取图像的频率成分,因为有些特征在空间域很难处理,但在频率域比较容易处理。这一转换有助于分析图像中的高频(细节、边缘)和低频(平滑区域)信息,进而实现图像去噪、压缩、特征提取及图像增强等处理。通过修改频率域中的信息,可以针对性地优化图像质量,再经逆傅里叶变换回空间域,得到我们希望得到的处理后的图像。
傅里叶变换本身通常不直接用于边缘提取,因为它是一种频域分析工具,主要用于分析图像的频率成分。然而,傅里叶变换的变种——高通滤波或带通滤波,在图像处理中可以用来增强图像的边缘信息,因为边缘信息在图像中通常对应高频成分。下面,提供一个使用MATLAB进行图像边缘提取的示例,其中通过高通滤波和数学形态学来实现。这个示例将包括以下几个步骤:
1.读取图像
2.转换图像到频域(使用二维快速傅里叶变换FFT)
3.创建高通滤波器(使用简单的圆形高通滤波器和butterworth高通滤波器)
4.应用高通滤波器,将滤波后的图像从频域转换回空间域(使用逆FFT)
5.数学形态学运算
6.显示结果
二、MATLAB程序代码
clear all; %清除所有变量
close all; %关闭所有图形窗口
clc; %清屏
imtool close all; %关闭图像工具箱
% 步骤 1: 读取图像
%img = imread('cameraman.tif'); % 读取图像
img = imread('coins.png'); % 读取图像
%img = imread('e:\fruit1.jpg'); % 读取RGB彩色图像
if size(img, 3) == 3
img = rgb2gray(img); % 如果图像是彩色的,则转换为灰度图像
end
% 步骤 2: 转换图像到频域
F = fft2(double(img));
Fshift = fftshift(F); % 将零频率分量移到频谱中心-即变换后的坐标原点移到窗口中心,因而围绕坐标中心是低频,向外是高频分量。
% 步骤 3: 创建一个高通滤波器
% 使用一个简单的圆形高通滤波器(依据实际情况可以选择不同的滤波器,如巴特沃斯高通滤波器)
[rows, cols] = size(Fshift);
%D0 = 10; % 滤波器的截止频率-依据实际情况可以调整-AI推荐值
D0 = 19; % 滤波器的截止频率-依据实际情况可以调整
%D0 = 30; % 滤波器的截止频率-依据实际情况可以调整
[x, y] = meshgrid(-cols/2:cols/2-1, -rows/2:rows/2-1);
D = sqrt(x.^2 + y.^2);
H = double(D > D0); % 生成高通滤波器
% 应用高通滤波器
Fshift_filtered = Fshift .* H;
% 步骤 4: 将滤波后的图像从频域转换回空间域
img_filtered = ifftshift(Fshift_filtered);
img_edge = ifft2(img_filtered);
img_edge = real(img_edge); % 取实部
img_edge = uint8(abs(img_edge)); % 转换为8位无符号整数
max(img_edge(:))
min(img_edge(:))
imtool(img_edge);
%% 步骤 5: 图像的二值化数学形态学处理
bw=im2bw(img_edge,graythresh(img_edge));
%bw=im2bw(img_edge,22/255);
bw=bwareaopen(bw,200);%移除小目标
bw_fill=imfill(bw,'holes');
figure,imshow(bw_fill);
SE=strel('disk',15);
img_edge_final=bwmorph(imopen(bw_fill,SE),'remove');
figure,imshow(img_edge_final);
%img_edge=imadjust(img_edge);
% 步骤 6: 显示结果
figure,
subplot(2,2,1),imshow(img), title('Original Image');
subplot(2,2,2), imshow(img_edge, []), title('Edge Image by High-Pass Filtering');
subplot(2,2,3), imhist(img_edge), title('Edge Image histgram');
subplot(2,2,4), imshow(img_edge_final), title('Edge Image by High-Pass Filtering and Mathematical Morphology');
-
三、主要运行结果
- 注:本文图像使用的是MATLAB自带的灰度图像coins.png,本程序也可以对彩色图像进行边缘处理,但滤波器可能需要依据实际情况进行设计(如选用Butterworth滤波器)。
-
四、程序修改完善(使用butterworth滤波器进行高通滤波)
- clear all; % 清除所有变量
close all; % 关闭所有图形窗口
clc; % 清屏
imtool close all; % 关闭图像工具箱的所有窗口
% 步骤 1: 读取图像
img = imread('coins.png'); % 读取图像
if size(img, 3) == 3
img = rgb2gray(img); % 如果图像是彩色的,则转换为灰度图像
end
% 步骤 2: 转换图像到频域
F = fft2(double(img));
Fshift = fftshift(F); % 将零频率分量移到频谱中心
% 步骤 3: 创建一个巴特沃斯高通滤波器
[rows, cols] = size(Fshift);
D0 = 30; % 滤波器的截止频率,可以根据实际情况调整
[x, y] = meshgrid(-cols/2:cols/2-1, -rows/2:rows/2-1);
D = sqrt(x.^2 + y.^2);
n = 2; % 巴特沃斯滤波器的阶数
H = 1 ./ (1 + (D0./D).^(2*n)); % 生成巴特沃斯高通滤波器
% 应用高通滤波器
Fshift_filtered = Fshift .* H;
% 步骤 4: 将滤波后的图像从频域转换回空间域
img_filtered = ifftshift(Fshift_filtered);
img_edge = ifft2(img_filtered);
img_edge = real(img_edge); % 取实部
img_edge = uint8(abs(img_edge)); % 转换为8位无符号整数
% 显示滤波后的边缘图像
figure, imshow(img_edge, []), title('Edge Image by Butterworth High-Pass Filtering');
% 步骤 5: 图像的二值化数学形态学处理
bw = im2bw(img_edge, graythresh(img_edge));
bw = bwareaopen(bw, 200); % 移除小目标
bw_fill = imfill(bw, 'holes');
% 使用形态学开运算进一步处理图像
SE = strel('disk',1);
%SE = strel('disk',15); %修改结构圆盘参数
img_edge_final = bwmorph(imclose(bw_fill, SE),'remove');
% 显示处理后的边缘图像
figure, imshow(img_edge_final), title('Edge Image by Butterworth High-Pass Filtering and Mathematical Morphology');
% 步骤 6: 显示原始图像和结果
figure,
subplot(2,2,1), imshow(img), title('Original Image');
subplot(2,2,2), imshow(img_edge, []), title('Edge Image by Butterworth High-Pass Filtering');
subplot(2,2,3), imhist(img_edge), title('Edge Image Histogram');
subplot(2,2,4), imshow(img_edge_final), title('Edge Image by Butterworth High-Pass Filtering and Mathematical Morphology'); - 主要运行结果如下:
-
五、讨论
- 在边缘提取方面,巴特沃斯滤波器和圆形高通滤波器各有优势。巴特沃斯滤波器以其平坦的通带特性.陡峭的截止特性和较小的相位延迟,在保留图像边缘信息方面表现出色。而圆形高通滤波器则以其空间频率的选择性、简单的实现方式和可调的截止频率,在突出高频边缘信息方面具有优势。而对于噪声较多的图像,可以选择具有较好频率选择性的巴特沃斯滤波器;而对于需要突出高频边缘信息的场景,则可以考虑使用圆形高通滤波器。对本此图像处理效果对比来看,使用Butterworth滤波器取得了较好的效果。
- 如果大家觉得本文对大家学习和研究有帮助,请关注、收藏、点赞,谢谢大家!