傅里叶变换去除图像条纹杂讯实现步骤

2023-11-02 09:20

本文主要是介绍傅里叶变换去除图像条纹杂讯实现步骤,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

导读:

    图像处理一般分为空间域和频域处理,有些情况下,在空间域处理很难得到好的效果,这时候我们可以考虑将其转换到空间域处理。


    空间域的处理方法比较多,比如傅里叶变换和小波变换等。频域方法处理的一般步骤是:

    ① 将图像从空间域转换到频域;

    ② 在频域处理(挑选或剔除特定的频段);

    ③ 频域处理后再转换到空间域


 

傅里叶变换频域处理步骤: 

    ① 图像做傅里叶变换--转换到频域;

    ② 在频域处理(对频谱图像处理,剔除不需要的频段);

    ③ 反傅里叶变换--转换到空间域;

    ④ 如果不能一次得到最终效果,可能还需要添加一些blob分析方法


 

傅里叶变换频域图特点: 

    傅里叶变换理论与公式这里不做介绍,大家有兴趣自行搜索。先看下如下图片:

图片

对应的使用fft_image()转换后的傅里叶频谱图像

read_image (Image, 'C:/Users/3252314061/Desktop/1.png')fft_image (Image, ImageFFT)

图片

    原图水平方向上变化更多,所以频谱图水平方向更亮。竖直方向变化不比水平方向多,所以较水平方向暗。下图正好相反:

图片

傅里叶变换后的频谱图:

图片

    原图竖直方向上变化更多,所以频谱图竖直方向更亮。水平方向变化不比竖直方向多,所以较竖直方向暗。

    fft_image()变换后频谱图像中心为低频部分,越往边缘是高频部分。

    再看看下面的图像,频谱图变化也是沿着圆形的各个方向,反应像素灰度值的变化情况:

图片

图片


 

傅里叶变换去除图像条纹杂讯步骤:

图1--竖直条纹杂讯:

图片

    由观察可知,这幅图像有很多竖直条纹杂讯,沿水平方向变化较大,那么频谱图水平方向应该较亮,用fft_image()变换后效果:

图片

    那么如果我们想去除竖直条纹,就可以将频谱图中水平的亮线条区域抹掉(用灰度值0填充),如下:

图片

图片

    然后fft_image_inv()反傅里叶变换看下效果:

fft_image_inv (ImageResult, ImageFFTInv)

图片


图2-水平条纹杂讯:

图片

    由观察可知,这幅图像有很多水平条纹杂讯,沿竖直方向变化较大,那么频谱图竖直方向应该较亮,用fft_image()变换后效果:

图片

    那么如果我们想去除水平条纹,就可以将频谱图中竖直的亮线条区域抹掉(用灰度值0填充),如下:

图片

图片

    然后fft_image_inv()反傅里叶变换看下效果:

图片

图3-水平垂直条纹杂讯:

图片

    傅里叶频谱图:

图片

    水平和竖直方向均抹除:

图片

图片

    反傅里叶变换效果:

图片

    完整代码(Halcon实现):​​​​​​​

read_image (Image, './imgs/5.PNG')rgb1_to_gray (Image, GrayImage)fft_image (GrayImage, ImageFFT)
gen_rectangle1 (ROI_0, 2.97368, 217.535, 179.635, 227.458)gen_rectangle1 (TMP_Region, 209.41, 217.535, 387.064, 226.465)union2 (ROI_0, TMP_Region, ROI_0)gen_rectangle1 (TMP_Region, 193.53, 234.404, 203.455, 374.316)union2 (ROI_0, TMP_Region, ROI_0)gen_rectangle1 (TMP_Region, 193.53, 74.6458, 204.447, 207.612)union2 (ROI_0, TMP_Region, ROI_0) paint_region (ROI_0, ImageFFT, ImageResult, 0, 'fill')fft_image_inv (ImageResult, ImageFFTInv)

    如果是彩色图,就先将彩图通道分离,在每个通道做傅里叶变换处理,然后反变换后合并通道即可,下面是视频效果展示:

    傅里叶变换去除条纹杂讯效果演示视频


    核心代码与实现步骤上面已展示,大家可以验证实现。如需所有图片素材与代码,欢迎加入公众号右下角知识星球获取。本文代码为Halcon实现,OpenCV实现步骤将在后续文章中更新,欢迎持续关注,感谢。

这篇关于傅里叶变换去除图像条纹杂讯实现步骤的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/329630

相关文章

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java