数字图像处理(3)——频域图像增强

news2024/11/25 21:35:14

🔥博客主页:是dream

🚀系列专栏:深度学习环境搭建、环境配置问题解决、自然语言处理、语音信号处理、项目开发

💘每日语录:贤才,难进易出;庸才,易进易初出;奴才,易进难出。

🎉感谢大家点赞👍收藏⭐指正✍️

 

 

一、实验内容

(1)傅里叶变换

        实验内容:分别使用OpenCV和Numpy工具包中的函数进行傅里叶变换,要求显示图像移中后的幅值谱和相位谱,以及重构后的图像。结果展示部分应包含原图、幅值谱、相位谱、重构图像。

(2)图像加噪和频域滤波

        实验内容:先给图像添加高斯噪声(0均值,0.1方差),再使用理想低通滤波器对图像进行低通平滑滤波,分析不同截止频率的滤波性能。结果展示部分应包括原图、噪声图、频域噪声图幅值谱、滤波后幅值谱、滤波后相位谱、重构图像等。

二、实验环境

        PaddlePaddle 2.3.2,Python==3.7,Numpy,Cv2,Matplotlib,RAM 8GB

三、实验过程

(1)傅里叶变换思路

        首先添加高斯噪声到原始图像。可以使用均值为0和方差为0.1的高斯噪声。进行傅里叶变换,然后计算频域幅值谱和相位谱。设计不同截止频率的理想低通滤波器。可以尝试不同的截止频率值,如r1、r2、r3等。对频域图像进行滤波,将低频部分保留,高频部分丢弃,以实现低通滤波。计算滤波后的频域幅值谱。进行傅里叶逆变换,以重构滤波后的图像。显示一组图像,包括原始图像、噪声图像、频域噪声图幅值谱、不同截止频率下的滤波后幅值谱、滤波后相位谱、重构图像。

        代码实现如下:

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties

# 1. 读取图像
img = cv.imread('./work/img/paopao.jpg', 0)

# 2. 傅里叶变换
# 2.1 正变换
f_transform = np.fft.fft2(img)

# 2.2 频谱中心化
f_transform_shifted = np.fft.fftshift(f_transform)

# 2.3 计算频谱和相位谱
# 直角坐标转换为极坐标: cv.cartToPolar()函数
magnitude_spectrum, phase_spectrum = cv.cartToPolar(f_transform_shifted.real, f_transform_shifted.imag)

# 3. 傅里叶逆变换
# 3.1 反变换
f_transform_unshifted = np.fft.ifftshift(f_transform_shifted)
reconstructed_image = np.fft.ifft2(f_transform_unshifted)

# 3.2 计算灰度值
reconstructed_image = np.abs(reconstructed_image).astype(np.uint8)

# 4. 图像显示
font = FontProperties(fname="SimHei.ttf")  # 使用系统中的SimHei字体

plt.subplot(2, 3, 1), plt.imshow(img, cmap='gray')
plt.title('原始图像', fontproperties=font)

plt.subplot(2, 3, 2), plt.imshow(np.log(magnitude_spectrum), cmap='gray')
plt.title('幅值谱', fontproperties=font)

plt.subplot(2, 3, 3), plt.imshow(phase_spectrum, cmap='gray')
plt.title('相位谱', fontproperties=font)

plt.subplot(2, 3, 4), plt.imshow(reconstructed_image, cmap='gray')
plt.title('重构图像', fontproperties=font)

plt.show()

        实验结果: 

(2)图像加噪和频域滤波思路

        首先,读取原始图像,然后添加高斯噪声以模拟实际图像的噪声情况。接下来,进行傅里叶变换,将图像转换到频域,分析其幅值谱和相位谱。然后,设计理想低通滤波器,并应用不同截止频率进行滤波,以比较滤波性能。最后,进行傅里叶逆变换以重构图像。实验结果以一组图像形式呈现,包括原始图像、噪声图、频域噪声图幅值谱、不同截止频率下的滤波后幅值谱、滤波后相位谱以及重构图像,以清晰展示频域滤波在去除噪声和恢复图像方面的效果。

        代码实现:

import cv2
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties
font = FontProperties(fname="SimHei.ttf")
# 1. 读取图像
img = cv2.imread('./work/img/paopao.jpg',0)

# 2. 添加高斯噪声
def addGaussianNoise(image, mean=0, var=0.1):
    row, col = image.shape
    sigma = var ** 0.5
    gauss = np.random.normal(mean, sigma, (row, col))
    noisy = image + gauss
    noisy = np.clip(noisy, 0, 255)
    noisy = noisy.astype(np.uint8)
    return noisy

img_noisy = addGaussianNoise(img)

# 3. 傅里叶变换
f_transform = np.fft.fft2(img_noisy)
fshift = np.fft.fftshift(f_transform)

# 4. 计算幅值谱
magnitude_spectrum0 = 20 * np.log(1 + np.abs(fshift))

# 5. 理想低通滤波
r = 20  # 截止频率的设置
[m, n] = fshift.shape
H = np.zeros((m, n), dtype=complex)  # 滤波核
for i in range(m):
    for j in range(n):
        d = np.sqrt((i - m/2)**2 + (j - n/2)**2)
        if d < r:
            H[i, j] = 1

G = fshift * H  # 理想低通滤波
magnitude_spectrum1 = 20 * np.log(1 + np.abs(G))

# 6. 傅里叶逆变换
f1 = np.fft.ifftshift(G)
img_reconstructed = np.abs(np.fft.ifft2(f1)).astype(np.uint8)

# 7. 图像显示
plt.subplot(2, 3, 1), plt.imshow(img, cmap='gray')
plt.title('原始图像', fontproperties=font)

plt.subplot(2, 3, 2), plt.imshow(img_noisy, cmap='gray')
plt.title('噪声', fontproperties=font)

plt.subplot(2, 3, 3), plt.imshow(magnitude_spectrum0, cmap='gray')
plt.title('频域噪声图', fontproperties=font)

plt.subplot(2, 3, 4), plt.imshow(magnitude_spectrum1, cmap='gray')
plt.title('滤波后的幅值谱', fontproperties=font)

plt.subplot(2, 3, 5), plt.imshow(np.angle(fshift), cmap='gray')
plt.title('频谱(有噪声)', fontproperties=font)

plt.subplot(2, 3, 6), plt.imshow(img_reconstructed, cmap='gray')
plt.title('最终图像', fontproperties=font)

plt.show()

        实验结果: 

四、实验心得 

        在本次实验中,首先读取一张原始图像并添加高斯噪声,以模拟实际噪声情况。然后,进行了傅里叶变换,计算了频域的幅值谱和相位谱。接下来,设计不同截止频率的理想低通滤波器,以控制滤波的效果,并对频域图像进行滤波,保留了低频部分,丢弃高频部分,实现低通滤波。尝试不同的截止频率值以观察滤波性能的变化。然后,计算滤波后的频域幅值谱。最后,进行傅里叶逆变换以重构滤波后的图像,并将一组图像显示出来,包括原始图像、噪声图像、频域噪声图幅值谱、不同截止频率下的滤波后幅值谱、滤波后相位谱、重构图像。

        然后就是如何给图像添加高斯噪声,这是一个常见的图像处理问题。接着使用傅里叶变换技术将图像从空间域转换到频域,以便进行频域滤波操作。通过理想低通滤波器,能够控制截止频率,从而实现不同程度的频域平滑滤波。这对于去除高频噪声或细节以及实现图像平滑非常有用。通过调整截止频率,可以观察到不同滤波效果,这对于理解滤波器设计的重要性非常有帮助。此外,接着就是进行傅里叶逆变换,将滤波后的频域图像恢复到空间域,得到重构图像。这样可以比较原始图像和滤波后的图像,从而评估滤波的效果。 

 

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

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

相关文章

IDA入门【二】IDA数据显示窗口

主窗口 IDA图形视图 图形视图会让人联想到程序流程图&#xff0c;因为它将一个函数分解成许多基本块&#xff0c;以生动显示该函数由一个块到另一个块的控制流程。 在屏幕上你会发现&#xff0c;IDA使用不同的彩色箭头区分函数块之间各种类型的流。 根据测试条件&#xff0c…

【Spring实战】15 Logback

文章目录 1. 依赖2. 配置3. 打印日志4. 启动程序5. 验证6. 调整日志级别7. 代码详细总结 Spring 作为一个现代化的 Java 开发框架&#xff0c;提供了很多便利的功能&#xff0c;其中包括灵活而强大的日志记录。本文将介绍如何结合 Spring 和 Logback 配置和使用日志&#xff0c…

旅游平台网页前后端

功能清单 游客功能 用户注册、登录登录权限拦截按名称搜索房间支付流程查看订单信息和状态评论预定过的房间&#xff0c;并自动修改订单状态查看统计剩余房间数量&#xff0c;数量为0时不可预定 管理员功能 房间分类管理 类型的删除、修改、查询&#xff08;准备添加增添功能…

一文通透Text Embedding模型:从text2vec、openai-ada-002到m3e、bge

前言 本文一开始是属于此文《知识库问答LangChainLLM的二次开发&#xff1a;商用时的典型问题及其改进方案》的1.2节&#xff0c;但为把Text Embedding模型阐述的更为精准、全面&#xff0c;特把那部分的内容抽取出来&#xff0c;不断完善成此文 第一部分 衡量文本向量表示效果…

【Java系列】文件操作详解

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Java系列专栏】【JaveEE学习专栏】 本专栏旨在分享学习JavaEE的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 …

天气预报网站windy的使用简介

原来这些文章我都写在QQ日志里&#xff0c;只为方便自己翻阅&#xff0c;但QQ日志很不好的地方就是没有查找功能&#xff0c;自己想翻看都很不方便&#xff0c;以后就还是在熟悉的CSDN作记录吧。 windy是个很不错的天气预报网站&#xff0c;对喜欢钓鱼的我来说&#xff0c;能方…

Python-docx 深入word源码 带有序号的段落无法设置段后、段前距离、间距等段落属性

如果使用p doc.add_paragraph(内容, styleList Number)来创建序号段落&#xff0c;会发现设置序号段落之间的段前、段后以及段落间距无法生效。后来将docx库生成的word文档打开后发现段落的设置出现问题&#xff0c;如下图红框所示&#xff0c;将该选项去掉即可使段落间距属性…

软件设计模式 --- 类,对象和工厂模式的引入

Q1&#xff1a;什么是软件设计模式&#xff1f; A&#xff1a;软件设计模式&#xff0c;又称设计模式。它是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。综上&…

mysql原理--MySQL基于规则的优化

设计 MySQL 的大叔依据一些规则&#xff0c;竭尽全力的把一些很糟糕的语句转换成某种可以比较高效执行的形式&#xff0c;这个过程也可以被称作 查询重写 &#xff08;就是人家觉得你写的语句不好&#xff0c;自己再重写一遍&#xff09;。 1.条件化简 我们编写的查询语句的搜…

怎么给直播录屏?超简单教程,一学就会!

随着直播行业的兴起&#xff0c;许多玩家和观众都希望能够录制直播内容以方便随时回顾或与他人分享。可是怎么给直播录屏呢&#xff1f;本文将详细介绍两种流行的直播录屏方法。通过学习这两种工具&#xff0c;你可以轻松实现直播录屏&#xff0c;记录并分享你的直播内容。 怎么…

jsp结合servlet

servlet配置 环境配置2023.12.31 idea配置搭建 创建一个普通的java项目 由于新版idea去除了add framework support的ui显示&#xff0c;可以在左边项目栏中使用快捷键shiftk或者setting中搜索add framework support在修改对应的快捷键 点击ok然后应该就是下面这样的结果 这里…

Zookeeper-Zookeeper选举源码

看源码方法&#xff1a; 1、先使用&#xff1a;先看官方文档快速掌握框架的基本使用 2、抓主线&#xff1a;找一个demo入手&#xff0c;顺藤摸瓜快速静态看一遍框架的主线源码&#xff0c;画出源码主流程图&#xff0c;切勿一开始就陷入源码的细枝末节&#xff0c;否则会把自…

用户侧智能配电与智能用电系统的应用及未来——安科瑞 顾烊宇

摘要&#xff1a;随着科技的发展&#xff0c;电力系统正逐步向智能化、数字化、互联网化迈进。智能配电与智能用电是电力产业发展的重要方向&#xff0c;将为传统电力系统带来革命性的变革。本文将对智能配电和智能用电的概念、特点、关键技术及应用进行详细介绍。 1、智能配电…

SQL Server从0到1——基本语法

信息收集 用户&#xff1a; 当前用户名&#xff1a; select user 用户权限&#xff1a; 服务器级别&#xff1a; select IS_SRVROLEMEMBER(sysadmin) 数据库级别&#xff1a; select IS_MEMBER(db_owner) 2005的xp_cmdshell 你要知道他的权限一般是system 而2008他是nt …

云计算:OpenStack 分布式架构添加LVM存储(单控制节点与多计算节点)

目录 一、实验 1.环境 2.安装并配置控制节点 3. 安装并配置存储节点 4.使用LVM存储 一、实验 1.环境 (1) 主机 表1 主机 主机架构IP备注controller控制节点192.168.204.210已部署compute01计算节点1192.168.204.211 已部署compute02计算节点2192.168.204.212已部署sto…

Docker:部署若依前后端分离版

Docker&#xff1a;部署若依前后端分离版 1. 停止天翼云上的原来跑的若依项目2. 停止腾讯云上的若依项目3. 使用Docker部署3.1 天翼云数据库&Redis3.1.1 部署数据库3.1.2 部署Redis数据库3.1.1 部署Nginx(这里被天翼云坑了换的腾讯云运行nginx) 3.2 腾讯云部署后端&前端…

ubuntu 20.04 自由切换 python 的版本

问题描述 当前 ubuntu 20.04 默认安装了多个 python 的版本&#xff0c;执行 python 时&#xff0c;默认版本是 Python 2.7.18 zhangszzhangsz:~$ python Python 2.7.18 (default, Jul 1 2022, 12:27:04) [GCC 9.4.0] on linux2 Type "help", "copyright&quo…

【unity知识点】Unity 协程Coroutine

文章目录 前言使用协程的步骤&#xff1a;使用场景示例&#xff1a;yield return new WaitForSeconds和yield return new WaitForFixedUpdate的区别开始和停止携程完结 前言 Unity 协程是一种特殊的函数&#xff0c;可以在游戏中实现延迟执行、按顺序执行和异步操作等功能。它…

多人协同开发git flow,创建初始化项目版本

文章目录 多人协同开发git flow&#xff0c;创建初始化项目版本1.gitee创建组织模拟多人协同开发2.git tag 打标签3.git push origin --tags 多人协同开发git flow&#xff0c;创建初始化项目版本 1.gitee创建组织模拟多人协同开发 组织中新建仓库 推送代码到我们组织的仓库 2…

uni-app设置地图显示

使用前需到**高德开放平台&#xff08;https://lbs.amap.com/&#xff09;**创建应用并申请Key 登录 高德开放平台&#xff0c;进入“控制台”&#xff0c;如果没有注册账号请先根据页面提示注册账号 打开 “应用管理” -> “我的应用”页面&#xff0c;点击“创建新应用”&…