当前位置: 首页 > news >正文

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

一、前言

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

傅里叶变换本身通常不直接用于边缘提取,因为它是一种频域分析工具,主要用于分析图像的频率成分。然而,傅里叶变换的变种——高通滤波或带通滤波,在图像处理中可以用来增强图像的边缘信息,因为边缘信息在图像中通常对应高频成分。下面,提供一个使用MATLAB进行图像边缘提取的示例,其中通过高通滤波和数学形态学来实现。这个示例将包括以下几个步骤:

1.读取图像
2.转换图像到频域(使用二维快速傅里叶变换FFT)

3.创建高通滤波器
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,本程序也可以对彩色图像进行边缘处理,但滤波器可能需要依据实际情况进行设计。
  • 如果大家觉得本文对大家学习和研究有帮助,请关注、收藏、点赞,谢谢大家!
http://www.lryc.cn/news/420835.html

相关文章:

  • Haproxy的ACL介绍及应用实例
  • final finally finalize 区别?
  • C语言常用的内存函数
  • MP4 H.264 MPEG-4 MPEG-2
  • nvm 切换、安装 Node.js 版本
  • 基于区块链的合同存证应用开发
  • 每日一题~ abc 365 E 异或运算(拆位+贡献)
  • 前端八股文笔记【三】
  • AI学习记录 - transformer的Embedding层
  • 23-PCB封装名称的统一添加与管理
  • 【Python从入门到进阶】62、Pandas中DataFrame对象案例实践
  • 使用Python实现深度学习模型:智能环境监测与预警
  • ThreadLocal的使用场景是什么
  • 【网络爬虫篇】逆向实战—某东:滑块验证码(逆向登录)2024.8.7最新发布,包干货,包详细
  • 为什么优质的酱香白酒都会带点苦味?
  • 软件测试常见面试题
  • 面试经典算法150题系列-接雨水
  • 【C++】 类型转换深度探索:揭开类型转换的奥秘
  • 深入探索Webkit的Web Authentication API:安全与便捷的融合
  • Vue - 关于v-wave 波浪动画组件
  • 计算机网络408考研 2019
  • 实时捕捉与追溯:得物基于 eBPF 打造云上网络连接异常摄像头
  • ubuntu14.04图形界面配置
  • 51单片机-第八节-蜂鸣器
  • Windows命令查看WiFi密码
  • 不同环境下RabbitMQ的安装-2 ARM架构、X86架构、Window系统环境下安装RabbitMQ
  • C++(week16): C++提高:(六) Qt提高
  • go 时间转时间戳的时区设置问题
  • MySQL 常见日志清理策略
  • 3大管人绝招让你的手下心服口服