傅里叶变换结合数学形态学进行边缘增强和边缘提取

一、前言

    傅里叶变换是图像变换的一种常用方法,傅里叶变换在图像处理中扮演着核心角色,它通过将图像从空间域转换到频率域,获取图像的频率成分,因为有些特征在空间域很难处理,但在频率域比较容易处理。这一转换有助于分析图像中的高频(细节、边缘)和低频(平滑区域)信息,进而实现图像去噪、压缩、特征提取及图像增强等处理。通过修改频率域中的信息,可以针对性地优化图像质量,再经逆傅里叶变换回空间域,得到我们希望得到的处理后的图像。

傅里叶变换本身通常不直接用于边缘提取,因为它是一种频域分析工具,主要用于分析图像的频率成分。然而,傅里叶变换的变种——高通滤波或带通滤波,在图像处理中可以用来增强图像的边缘信息,因为边缘信息在图像中通常对应高频成分。下面,提供一个使用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滤波器取得了较好的效果。
  • 如果大家觉得本文对大家学习和研究有帮助,请关注、收藏、点赞,谢谢大家!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值