频率域滤波图像复原之逆滤波的python实现——数字图像处理

news2024/9/30 21:21:59

逆滤波原理

逆滤波是一种在频率域进行的图像复原技术,常用于修复由运动模糊等因素引起的图像退化。具体步骤如下:

**频率域表示:**首先,将退化的图像通过傅里叶变换从空间域转换到频率域。这使得图像的频率成分变得明显,便于分析和处理。

**退化模型识别:**在频率域中,图像退化通常可以表示为原始图像与某个退化函数(比如运动模糊)的卷积。逆滤波需要识别这个退化函数,这通常需要一定的先验知识或假设。

**设计逆滤波器:**逆滤波器的设计基于退化函数的逆。如果已知或假设了退化函数的形式,那么可以计算其在频率域的逆。这个逆滤波器理论上可以完全抵消退化效果。

应用逆滤波器:将设计好的逆滤波器应用于退化图像。在频率域中,这通常表示为对退化图像的频率响应和逆滤波器的频率响应进行乘法操作。

逆傅里叶变换:处理完毕后,通过逆傅里叶变换将图像从频率域转换回空间域,得到复原后的图像。

然而,逆滤波也有其局限性。例如,当退化函数不是很精确时,或者图像包含噪声时,直接应用逆滤波可能会放大这些错误或噪声,导致复原效果不理想。因此,在实际应用中,逆滤波通常与其他技术(如威纳滤波)结合使用,以改善复原质量。

公式表示

设 H(u,v) 是已知的退化函数在频率域的表示,G(u,v) 是退化图像在频率域的表示,那么根据线性系统理论,退化过程可以表示为:
在这里插入图片描述
其中 ,F(u,v) 是原始图像在频率域的表示,N(u,v) 是加性噪声。
在理想情况下(忽略噪声),退化过程可以简化为:
G(u,v)=H(u,v)⋅F(u,v)

逆滤波的目的是通过逆转 H(u,v) 的影响来恢复 F(u,v)。如果 H(u,v) 是已知且没有零点,那么逆滤波器 H^-1 (u,v) 可以表示为:
在这里插入图片描述
因此,复原图像 F^ (u,v) 可以通过逆滤波器处理退化图像 G(u,v) 来获得:
在这里插入图片描述
最后,通过对 F^(u,v) 进行逆傅里叶变换,可以得到空间域中的复原图像。
需要注意的是,当 H(u,v) 接近或等于零的时候,上述逆滤波器会放大噪声,这是逆滤波的主要局限性之一。在实际应用中,为了避免这种情况,通常会对逆滤波器进行一定的修改或者使用其他更加稳健的复原方法。

python实现下图

在这里插入图片描述

提示

这是一幅经过参数k=0.0025的大气湍流模型退化后的图像,。结果依次显示用不同截止半径限制频率后逆滤波得到的结果。,限制滤波频率是通过对比值G(u,v)/H(u,v)应用一个阶数为10的巴特沃斯低通函数来实现的,4幅结果图的截止频率分别为float(“inf”)(对应着全滤波)、40、60、70。

python代码

 import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('Fig0525.tif', 0)
rows = img.shape[0]
cols = img.shape[1]

Cx = rows//2
Cy = cols//2

dft = np.fft.fft2(img)
dft_shift = np.fft.fftshift(dft)

img_list = []
img_name_list = []

# 大气湍流模型的参数
k = 0.0025

# 构造退化函数
H = np.zeros((rows, cols))
for x in range(rows):
    for y in range(cols):
        D = ((x - Cx) ** 2 + (y - Cy) ** 2) ** (5/6)
        H[x, y] = np.exp(-k * D)

# 构造巴特沃斯低通滤波器
radius = [float("inf"), 40, 60, 70]
n = 10
for D0 in radius:
    HB = np.zeros((rows, cols))
    for x in range(rows):
        for y in range(cols):
            D = np.sqrt((x-Cx)**2 + (y-Cy)**2)
            HB[x, y] = 1 / (1 + (D/D0)**(2*n))

    dft_filtered = np.multiply(np.multiply(dft_shift, 1/H), HB)
    img_result = np.abs(np.fft.ifft2(np.fft.fftshift(dft_filtered)))
    img_list.append(img_result)
    img_name_list.append('r=' + str(D0))

_, axs = plt.subplots(2, 2)

for i in range(2):
    for j in range(2):
        axs[i, j].imshow(img_list[i * 2 + j], cmap='gray')
        axs[i, j].set_title(img_name_list[i * 2 + j])
        axs[i, j].axis('off')

#plt.savefig('inverse_filter.jpg')
plt.show()

结果展示

在这里插入图片描述

总结

图像复原是一种客观的操作,通过使用退化现象的先验知识重建或恢复一副退化的图像;图像在形成、传输和记录的过程中,由于受多种原因的影响,图像的质量会有下降,典型表现为图像模糊、失真、有噪声等,这一降质的过程称为图像的退化。而图像复原试图利用退化现象的某种先验知识(即退化模型),把已经退化了的图像加以重建和复原。其目的就是尽可能地减少或去除在获取图像过程中发的图像质量的下降(退化),恢复被退化图像的本来面目。
逆滤波复原过程:对退化的图像进行二位傅里叶变换;计算系统点扩散函数的二位傅里叶变换;引入H(fx,fy)计算并且对结果进行逆傅里叶变换。
逆滤波:简单的就是将退化函数去除,直接的逆滤波没有什么意义,只处理了靠近直流分量的部分,其他不做处理。如果加入巴特沃斯低通滤波器,效果会好点,可是在运动模糊的图片中就不好使了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1362941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

metaSPAdes,megahit,IDBA-UB:宏基因组装软件安装与使用

metaSPAdes,megahit,IDBA-UB是目前比较主流的宏基因组组装软件 metaSPAdes安装 GitHub - ablab/spades: SPAdes Genome Assembler #3.15.5的预编译版貌似有问题,使用源码安装试试 wget http://cab.spbu.ru/files/release3.15.5/SPAdes-3.15.5.tar.gz tar -xzf SP…

STM32 JLINK SWD调试器手动复位才能烧写的问题

STM32 JLINK SWD调试器手动复位才能烧写的问题 Chapter1 STM32 JLINK SWD调试器手动复位才能烧写的问题 Chapter1 STM32 JLINK SWD调试器手动复位才能烧写的问题 原文链接:https://blog.csdn.net/denghuajing/article/details/121649667 问题 只有手动复位的情况下…

小游戏实战丨基于PyGame的俄罗斯方块小游戏

文章目录 写在前面PyGame五子棋注意事项系列文章写在后面 写在前面 本期内容:基于pygame的俄罗斯方块小游戏 下载地址:https://download.csdn.net/download/m0_68111267/88700182 实验环境 python3.11及以上pycharmtkinter PyGame Pygame是一个非常…

优化|PLSA理论与实践

PLSA又称为概率潜在语义分析,是一种利用概率生成模型对文本集合进行话题分析的无监督学习方法。该模型最大的特点是加入了主题这一隐变量,文本生成主题,主题生成单词,从而得到单词-文本共现矩阵。本文将对包含物理学、计算机科学、…

PHP进阶-实现网站的QQ授权登录

授权登录是站点开发常见的应用场景,通过社交媒体一键授权可以跳过注册站点账户的繁琐操作。本文将讲解如何用PHP实现QQ授权登录。首先,我们需要申请QQ互联开发者账号获得APPID和密钥;接着,我们下载QQ官方SDK:PHP SDK v…

分布式数据之复制(Replication)

1.简介 1.1简介——使用复制的目的 在分布式系统中,数据通常需要被分散在多台机器上,主要为了达到以下目的: 扩展性,数据量因读写负载巨大,一台机器无法承载,数据分散在多台机器 上可以有效地进行负载均衡…

【无标题】MySQL8修改非root用户密码

首先查看修改的用户信息,我这里用户名是demo,host是**%** 然后使用alter命令修改密码 这里USER后的参数是第一步里查询得到的user与host的组合。ALTER USER demo% IDENTIFIED WITH mysql_native_password BY 新密码;可能会出现的错误: 如果百…

故障诊断 | 基于FFT频谱与小波时频图的双流CNN轴承故障诊断模型(matlab +python)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 故障诊断 | 基于FFT频谱与小波时频图的双流CNN轴承故障诊断模型(matlab python) 基于FFT频谱与小波时频图的双流CNN轴承故障诊断模型 特征拼接 python(pytorch) 基于2D-…

【Unity】 HTFramework框架(四十七)编辑器日志中使用超链接的技巧

更新日期:2024年1月3日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 日志中使用超链接超链接-网络地址超链接-本地地址超链接-项目资源文件超链接-脚本对象 日志中使用超链接 在编辑器控制台Console中的日志是支持富文本的&…

SpringSecurity集成JWT实现后端认证授权保姆级教程-环境搭建篇

🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云专家博主 📌 擅长领域:全栈工程师、爬虫、ACM算法 💒 公众号:知识浅谈 🔥网站…

HTML 使用 ruby 给汉字加拼音

使用 ruby 给汉字加拼音 兼容性 使用 ruby 给汉字加拼音 大家有没有遇到过要给汉字头顶上加拼音的需求? 如果有的话, 你是怎么解决的呢? 如果费尽心思, 那么你可能走了很多弯路, 因为 HTML 原生就有这样的标签来帮我们实现类似的需求. <ruby> ruby 本身是「红宝石」…

详解Keras3.0 Callbacks API : TensorBoard(可视化工具)

TensorBoard TensorBoard是TensorFlow提供的可视化工具。需要安装TensorFlow才能使用此回调。此回调记录TensorBoard的事件&#xff0c;包括&#xff1a;度量汇总图、训练图可视化、重量直方图、采样剖面。 keras.callbacks.TensorBoard(log_dir"logs",histogram_…

spring之推断构造方法

目录 源码流程(属于Bean生命周期中的实例化阶段) 1. AbstractAutowireCapableBeanFactory类中的createBeanInstance()方法去创建Bean 实例 2. 根据BeanDefinition加载类得到Class对象 3. 如果BeanDefinition绑定了一个Supplier,那就调用Supplier的get方法得到一个对象并直接…

【java爬虫】首页显示沪深300指数走势图以及前后端整合部署方法

添加首页 本文我们将在首页添加沪深300指数成立以来的整体走势数据展示&#xff0c;最后的效果是这样的 单独贴一张沪深300整体走势图 我感觉从总体上来看指数还是比较稳的&#xff0c;没有特别大的波动&#xff0c;当然&#xff0c;这只是相对而言哈哈。 首先是前端页面 &l…

Vue新手村(一)

目录 1、Vue简介——Vue的特点 2、Vue的第一个页面 3.Vue的简单使用介绍 3.1、{{ }}的使用 3.2、v-text和v-html 3.2.1、v-text和{{ }}的区别 3.2.2、v-html和v-text的区别 3.3、v-on【事件绑定】 3.3.1、绑定事件的语法 3.3.2、语法简化 3.3.3、传参 3.4、v-show和…

组合数据(Python实现)

一、主要目的&#xff1a; 1&#xff0e;熟悉组合数据的类型。 2&#xff0e;掌握列表、元组、字典、集合等组合数据的创建、访问方法。 3&#xff0e;掌握组合数据推导式的使用方法 4&#xff0e;熟悉组合数据的常见应用。 二、主要内容和结果展示&#xff1a; 1. 使用两…

二手买卖、废品回收小程序 在app.json中声明permission scope.userLocation字段 教程说明

处理二手买卖、废品回收小程序 在app.json中声明permission scope.userLocation字段 教程说明 sitemapLocation 指明 sitemap.json 的位置&#xff1b;默认为 ‘sitemap.json’ 即在 app.json 同级目录下名字的 sitemap.json 文件 找到app.json这个文件 把这段代码加进去&…

每日一题——LeetCode997

方法一 个人方法&#xff1a; 这题的意思就是1-n里面找到一个数&#xff0c;它不指向任何数&#xff0c;其他数都要指向它 找到没有指向任何数的那个idx&#xff0c;如果不存在这样的数那么就返回-1如果找到了这样的数&#xff0c;还要继续判断其它的所有数是否都指向它&…

斯坦福家用机器人开源项目

模仿学习在机器人技术领域取得了显著进展&#xff0c;它通过学习人类的演示来完成任务&#xff0c;并展示出了令人印象深刻的表现。然而&#xff0c;目前的研究大多集中在桌面操作上&#xff0c;缺乏实现通用移动性和灵活性所需的关键要素。 在这项研究中&#xff0c;开源项目…