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

图像变换算法

1.1 傅里叶变换 (Fourier Transform)

介绍

傅里叶变换是一种数学变换,用于将图像从空间域转换到频率域。它广泛应用于图像去噪和滤波。

原理

傅里叶变换将图像表示为频率成分的叠加,使得频率成分可以独立处理。通过对频率成分的分析和处理,可以实现对图像的去噪、增强和其他操作。

公式

连续傅里叶变换:

离散傅里叶变换(DFT):

案例1

使用Python和OpenCV进行傅里叶变换。

代码解析
import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
image = cv2.imread('image.jpg', 0)# 进行傅里叶变换
dft = cv2.dft(np.float32(image), flags=cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)# 计算频谱图
magnitude_spectrum = 20 * np.log(cv2.magnitude(dft_shift[:,:,0], dft_shift[:,:,1]))# 显示原始图像和频谱图
plt.subplot(121), plt.imshow(image, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])plt.subplot(122), plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])plt.show()

案例2:低通滤波器应用

在医学图像处理中,经常使用傅里叶变换进行低通滤波,以去除图像中的噪声。

代码解析
import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
image = cv2.imread('image.jpg', 0)# 进行傅里叶变换
dft = cv2.dft(np.float32(image), flags=cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)# 创建一个低通滤波器
rows, cols = image.shape
crow, ccol = rows // 2 , cols // 2
mask = np.zeros((rows, cols, 2), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1# 应用滤波器并逆变换
fshift = dft_shift * mask
f_ishift = np.fft.ifftshift(fshift)
img_back = cv2.idft(f_ishift)
img_back = cv2.magnitude(img_back[:,:,0], img_back[:,:,1])# 显示结果
plt.subplot(131), plt.imshow(image, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])plt.subplot(132), plt.imshow(mask[:,:,0], cmap='gray')
plt.title('Mask'), plt.xticks([]), plt.yticks([])plt.subplot(133), plt.imshow(img_back, cmap='gray')
plt.title('After LPF'), plt.xticks([]), plt.yticks([])plt.show()

生活场景案例

傅里叶变换在图像压缩、去噪和医学成像中应用广泛。

总结

傅里叶变换将图像从空间域转换到频率域,便于频率分析和处理。

1.2 离散余弦变换 (Discrete Cosine Transform, DCT)

介绍

离散余弦变换(DCT)用于将图像分解为不同频率的余弦分量,广泛应用于图像压缩,如JPEG。

原理

DCT将图像表示为余弦函数的线性组合,有效地集中能量,使得大部分能量集中在较少的DCT系数中,便于压缩。

公式

一维离散余弦变换:

案例:JPEG图像压缩

在JPEG图像压缩中,DCT用于将图像块分解为频率成分,然后仅保留低频分量进行压缩。

代码解析
import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
image = cv2.imread('image.jpg', 0)# 进行离散余弦变换
dct = cv2.dct(np.float32(image))# 显示原始图像和DCT结果
plt.subplot(121), plt.imshow(image, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])plt.subplot(122), plt.imshow(dct, cmap='gray')
plt.title('DCT Image'), plt.xticks([]), plt.yticks([])plt.show()

生活场景案例

DCT在JPEG图像压缩中广泛应用,通过压缩高频成分减少数据量。

总结

DCT将图像分解为余弦分量,实现能量集中和数据压缩。

1.3 小波变换 (Wavelet Transform)

介绍

小波变换用于多分辨率分析,可以在不同尺度上分析图像特征,广泛应用于图像压缩和去噪。

原理

小波变换通过小波函数将图像分解为不同尺度和位置的子带,可以有效地表示图像中的局部特征。

公式

连续小波变换:

案例

使用Python和PyWavelets进行小波变换。

代码解析
import pywt
import cv2
import matplotlib.pyplot as plt# 读取图像
image = cv2.imread('image.jpg', 0)# 进行小波变换
coeffs2 = pywt.dwt2(image, 'bior1.3')
LL, (LH, HL, HH) = coeffs2# 显示结果
plt.figure(figsize=(12, 3))
titles = ['Approximation', ' Horizontal detail', 'Vertical detail', 'Diagonal detail']
for i, a in enumerate([LL, LH, HL, HH]):plt.subplot(1, 4, i + 1)plt.imshow(a, cmap='gray')plt.title(titles[i])plt.xticks([]), plt.yticks([])plt.show()

案例2:图像去噪

小波变换可以用于图像去噪,通过分解图像,滤除高频噪声并重构图像。

代码解析
import pywt
import cv2
import matplotlib.pyplot as plt# 读取图像
image = cv2.imread('image.jpg', 0)# 进行小波变换
coeffs2 = pywt.dwt2(image, 'bior1.3')
LL, (LH, HL, HH) = coeffs2# 进行去噪处理
coeffs2_filtered = LL, (LH * 0.5, HL * 0.5, HH * 0.5)# 重构图像
image_reconstructed = pywt.idwt2(coeffs2_filtered, 'bior1.3')# 显示结果
plt.subplot(131), plt.imshow(image, cmap='gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])plt.subplot(132), plt.imshow(LL, cmap='gray')
plt.title('Approximation'), plt.xticks([]), plt.yticks([])plt.subplot(133), plt.imshow(image_reconstructed, cmap='gray')
plt.title('Denoised Image'), plt.xticks([]), plt.yticks([])plt.show()

生活场景案例

小波变换在医学图像处理、数据压缩和去噪等领域有重要应用。

总结

小波变换通过多分辨率分析,有效处理图像中的细节和特征,实现压缩和去噪。

相关文章:

图像变换算法

1.1 傅里叶变换 (Fourier Transform) 介绍 傅里叶变换是一种数学变换,用于将图像从空间域转换到频率域。它广泛应用于图像去噪和滤波。 原理 傅里叶变换将图像表示为频率成分的叠加,使得频率成分可以独立处理。通过对频率成分的分析和处理&#xff0…...

谷粒商城实战笔记-131~132-商城业务-商品上架-构造sku检索属性和库存查询

文章目录 一,131-商城业务-商品上架-构造sku检索属性1,开发目标2,详细设计2.1,根据spu_id获取所有的规格参数2.2,根据上一步中查询结果进一步确认是否可搜索2.3,将可搜索的属性封装到Java模型中 二&#xf…...

【Python学习-UI界面】PyQt5 QLabel小部件

序号组件说明详细介绍链接1QLabel用作占位符,用于显示不可编辑的文本、图像,或者动画GIF的电影。它也可以用作其他小部件的助记符键。2QLineEdit是最常用的输入字段。它提供了一个框,可以输入一行文本。要输入多行文本,需要使用QT…...

vue项目打包问题

缓存导致打包后js文件404 修改vue.config.js打包输出文件名为动态,例如取当前时间戳。 在index.html文件添加meta标签设置不缓存。 更新完包,假如用户此刻正访问某一个页面时,访问的包还是原来的情况导致出现bug 解决VUE项目更新后需要客户手…...

C++标准模板库(STL)|容器|vector| queue|

对STL进行总结,STL是standard template library的简写,是C中的一个标准模板库,用于实现常用的数据结构和算法,它是C程序员经常使用的一个工具箱。STL 的主要目的是提高开发效率和代码质量,使得程序员可以更加便捷地完成…...

【Android】安卓四大组件之Service用法

文章目录 使用Handler更新UIService基本特点启动方式非绑定式服务使用步骤 绑定式服务步骤 生命周期非绑定式启动阶段结束阶段 绑定式启动阶段结束阶段 前台Service使用步骤结束结束Service本身降级为普通Service降级为普通Service 使用Handler更新UI 主线程创建Handler对象&a…...

Python爬虫入门实战(详细步骤)

1. 技术选型 爬虫这个功能,我个人理解是什么语言都能写的,只要能正常发送 HTTP 请求,将响应回来的静态页面模版 HTML 上把我们所需要的数据提取出来就可以了,原理很简单,这个东西当然可以手动去统计收集,但…...

5、Linux : 网络相关

OSI七层网络模型 TCP/IP四层 概念模型 对应网络协议 应用层(Application) HTTP、TFTP, FTP, NFS, WAIS、 表示层(Presentation) 应用层 Telnet, Rlogin, SNMP, Gopher 会话层(Session) SMTP…...

Linux中针对文件权限的解析

1.文件权限详细解析: -rw-r--r--. 1 root root 114 4月 10 16:32 100.txt 1)-rw-r--r--. 总共11位 第一个“-”和最后一个“.”不用去管,剩下 rw- r-- r-- 属主 属组 其他人 u g o 第一个是“-”表示普通文件 第一个是“d”表示文件目录 …...

【0304】psql 执行“VACUUM FULL”命令的背后实现过程

1. 概述 在前面讲解Postgres内核中解析器相关(【0297】Postgres内核之 INSERT INTO 原始解析树 转 Query 树 (1))内容时,曾提到过,Postgres内核大致将用户下发的SQL语句分为三大类,这里的VACUUM FULL属于CMD_UTILITY; 因此直接调用utility.c(实用程序)中的对应函数。…...

Java常见面试题-11-MongoDb

文章目录 MongoDB 是什么?MongoDB 和关系型数据库 mysql 区别MongoDB 有 3 个数据库分别是什么?MongoDB 中的数据类型MongoDB 适用业务场景 MongoDB 是什么? mongodb 是属于文档型的非关系型数据库,是开源、高性能、高可用、可扩…...

PBLOCK

PBLOCK是附加到Vivado中分配给Pblocks的单元格的只读属性 设计套房。 Pblock是一组单元格,以及一个或多个指定 Pblock所包含的设备资源。在平面规划过程中使用了Pblocks 将其放置到组相关逻辑中,并将其分配到目标设备的某个区域。请参阅 Vivado设计套件用…...

电子纸打造智能、自动化、绿色的工作流程

电子纸打造智能、自动化、绿色的工作流程 RFID技术最早在1940年代问世,1980年开始商业化使用。直到现在RFID(无线射频识别)技术已经深入到我们生活的方方面面。特别是在工业生产、物流运输等领域,RFID技术发挥着越来越重要的作用…...

Redis 的6种回收策略(淘汰策略)详解

Redis 的6种回收策略(淘汰策略)详解 1、Redis的六种淘汰策略1. volatile-lru2. volatile-ttl3. volatile-random4. allkeys-lru5. allkeys-random6. no-eviction 2、使用策略规则 💖The Begin💖点点关注,收藏不迷路&am…...

SQL注入sqli-labs-master关卡一

本文环境搭建使用的是小皮,靶机压缩包:通过百度网盘分享的文件:sqli-labs-php7-master.zip 链接:https://pan.baidu.com/s/1xBfsi2lyrA1QgUWycRsHeQ?pwdqwer 提取码:qwer 下载解压至phpstudy的WWW目录下即可。 第一…...

LeetCode面试题Day6|LeetCode238 除自身以外数组的乘积、LeetCode134 加油站

题目1: 指路: . - 力扣(LeetCode)238 除自身以外数组的乘积 思路与分析: 除去自身元素求其他元素的乘积,或许第一反应会是数组元素积乘再除以遍历到的元素,定义一个结果数组再对应放结果值&…...

猫头虎分享:Python库 FastAPI 的简介、安装、用法详解入门教程

🐯 猫头虎分享:Python库 FastAPI 的简介、安装、用法详解入门教程 🚀 📄 摘要 作为一名专注于Python和人工智能开发的技术博主,猫头虎经常在开发过程中遇到各种挑战。最近,有粉丝问到如何高效地构建API&a…...

python连接MySQL数据库使用pymysql

开头 经过这么一段时间的学生信息管理系统的摸爬滚打,不断的学习更新的知识,不断修改自己的认知,针对pymysql以及MySQL数据库的知识做个总结,以纪念我这段时间的学习。 目录 开头 pymysql的使用流程 1.导入pymysql的工具包 方…...

AI时代下的编程趋势:程序员如何提升核心竞争力

随着人工智能和机器学习技术的飞速发展,大型语言模型和AI生成代码(AIGC)工具如ChatGPT、Midjourney、Claude等层出不穷,AI辅助编程逐渐成为现实。在这一变革的浪潮中,程序员群体面临着前所未有的挑战和机遇。一些人担忧…...

C#:基本语法

写在前面 本人在实习过程需要用C#进行开发,但本人之前的技术栈是C方向,所以在菜鸟教程上速通了一下C#的基本语法,总的来说和C还是非常相似的。 1 关键字 using关键字:使用命名空间class:使用类 2 注释 /* 这个程序…...

个人情况随笔

自我介绍技术世界的探索者,一名对代码充满热情的初学者。虽然起步较晚,但始终相信编程是解决问题的艺术,而不仅仅是敲键盘。过往的经历或许与技术无关,但逻辑分析、团队协作和持续学习的能力,是无论哪个领域都通用的财…...

北京交通大学校内邮箱配置指南:Windows与Mac系统自带邮件应用全攻略

1. 为什么需要配置校内邮箱? 作为北京交通大学的师生,校内邮箱是重要的通讯工具。无论是接收学校通知、提交作业,还是与导师同学沟通,都需要用到这个官方邮箱。很多同学第一次使用时,可能会被各种服务器设置搞得一头雾…...

超越序列:让AI以“面向对象”的方式理解与规划物理世界

从下一个token预测到下一个对象预测,我们如何重新思考AI生成与机器人控制 引言:大模型的“顺序陷阱” 在人工智能领域,以GPT为代表的大语言模型通过预测下一个token(文本片段)的方式,展现了令人惊叹的文本理解和生成能力。然而,这种自回归生成范式本质上是一种顺序处理…...

复旦微FM33单片机GPIO的“高级”玩法:用FL库实现软件PWM、按键扫描和LED流水灯

复旦微FM33单片机GPIO的“高级”玩法:用FL库实现软件PWM、按键扫描和LED流水灯 在嵌入式开发中,GPIO(通用输入输出)是最基础也是最常用的外设之一。对于复旦微FM33系列单片机来说,除了基本的电平控制,通过巧…...

算法解析 | 深入EGO Planner:无ESDF的实时避障与轨迹优化

1. EGO Planner的核心创新:告别ESDF的实时避障革命 第一次接触EGO Planner时,最让我惊讶的是它居然完全抛弃了传统路径规划中视为"标配"的ESDF(欧几里得符号距离场)。这就像看到有人不用GPS导航,仅凭直觉就能…...

C++ 与 事务多版本并发控制(MVCC):在 C++ 存储内核中利用时间戳排序实现无锁读写冲突控制

各位开发者、架构师,以及对高性能并发系统充满热情的同仁们,大家好!今天,我们将深入探讨一个在现代数据库和存储系统中至关重要的主题:多版本并发控制(MVCC),并聚焦于如何在 C 存储内…...

2025届必备的五大降AI率神器实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能生成文本普及起来后,各种各样的AI检测系统被创造出来,为了应…...

macOS 26.4推送,新增充电上限,利好电池寿命

macOS 26.4 新增自定义充电上限,有效延长 Mac 电池寿命。搭配CleanMyMac电池监控功能,实时掌握健康度、循环次数与温度,软硬结合保护电池。苹果于2026年3月24日正式推送了macOS Tahoe 26.4版本更新。本次更新最受关注的变化,是为M…...

Buildroot与Qt5的X11VNC集成:解决EGLFS与XCB插件冲突的实践指南

1. 为什么需要X11VNC与Qt5集成? 在嵌入式开发中,远程调试图形界面是个常见需求。想象一下,你的设备可能放在工厂车间或者户外,每次修改代码后都要跑到设备前查看效果,这效率实在太低。X11VNC就像给你的设备装了个"…...

无损音频存储的终极解决方案:FLAC 1.5.0如何帮你节省50%存储空间?

无损音频存储的终极解决方案:FLAC 1.5.0如何帮你节省50%存储空间? 【免费下载链接】flac Free Lossless Audio Codec 项目地址: https://gitcode.com/gh_mirrors/fl/flac 你是否曾为高品质音乐文件占用大量硬盘空间而苦恼?是否在音质完…...