[Python图像处理] 小波变换执行图像融合

news2024/11/27 16:46:05

小波变换执行图像融合

    • 图像融合基础
    • 使用小波变换执行图像融合
    • 图像融合
    • 相关链接

图像融合基础

图像融合是将多个输入图像组合到单个输出图像中的过程,输出图像中包含比单个输入图像更好的场景描述。一个好的图像融合方法应当具备以下属性:

  • 它可以保留不同图像上的大多数有用信息
  • 它不会产生干扰或误导图像视觉外观或后续图像处理步骤的伪影
  • 它必须具有鲁棒性
  • 它不应丢弃输入图像中的任何显着信息

使用小波变换执行图像融合

在本节中,我们将学习如何使用 pywt 执行图像融合操作(小波系数会被融合)。

(1) 首先导入所需的 Python 库:

import pywt
import cv2
import numpy as np
import numpy as np
import matplotlib.pylab as plt

(2) 定义函数 fuseCoeff(),根据融合方法定义系数融合:

def fuseCoeff(cooef1, cooef2, method):
    if (method == 'mean'):
        cooef = (cooef1 + cooef2) / 2
    elif (method == 'min'):
        cooef = np.minimum(cooef1,cooef2)
    elif (method == 'max'):
        cooef = np.maximum(cooef1,cooef2)
    else:
        cooef = []

    return cooef

(3) 指定融合方法(可以为 minmean 等):

fusion_method = 'mean'

(4) 读取要融合的输入图像。我们将使用同一原始图像的两个不同版本,第一个图像的左边部分模糊,第二个图像的右边部分模糊。我们的目标是将这两个图像中的细节相互融合:

im1 = cv2.imread('4.jpg',0)
im2 = cv2.imread('5.jpg',0)

(5) 我们两个图像的大小相同,因此需要调整图像具有相同的尺寸大小:

im2 = cv2.resize(im2,(im1.shape[1], im1.shape[0]))

图像融合

(1) 在每个输入图像上执行小波变换,计算相应的系数:

wavelet = 'sym2' #'bior1.1' #'haar' #'db1'
cooef1 = pywt.wavedec2(im1[:,:], wavelet)
cooef2 = pywt.wavedec2(im2[:,:], wavelet)

(2) 对于两个图像中的每个级别,根据所需选项执行融合:

fused_cooef = []
for i in range(len(cooef1)):
    if(i == 0):
        fused_cooef.append(fuseCoeff(cooef1[0], cooef2[0], fusion_method))
    else:
        c1 = fuseCoeff(cooef1[i][0], cooef2[i][0],fusion_method)
        c2 = fuseCoeff(cooef1[i][1], cooef2[i][1], fusion_method)
        c3 = fuseCoeff(cooef1[i][2], cooef2[i][2], fusion_method)
        fused_cooef.append((c1,c2,c3))

(3) 融合系数后,我们需要使用 IDWT 传输回去,以获取图像:

#print(len(fused_cooef))
fused_image = pywt.waverec2(fused_cooef, wavelet)

(4) 将输出值规范化为 unit8 数据范围内:

fused_image = 255*fused_image / np.max(fused_image)
fused_image = fused_image.astype(np.uint8)

(5) 最后,绘制原始图像、平均图像和小波融合的图像如下:

plt.figure(figsize=(20,20))
plt.gray()
plt.subplot(221), plt.imshow(im1), plt.axis('off'), plt.title('Image1', size=10)
plt.subplot(222), plt.imshow(im2), plt.axis('off'), plt.title('Image2', size=10)
plt.subplot(223), plt.imshow(im1//2 + im2// 2), plt.axis('off'), plt.title('Average Image', size=10) #cv2.cvtColor(fused_image,cv2.COLOR_BGR2RGB))

plt.subplot(224), plt.imshow(fused_image), plt.axis('off'), plt.title('Fused Image with Wavelets', size=10) #cv2.cvtColor(fused_image,cv2.COLOR_BGR2RGB))
plt.tight_layout()
plt.show()

得到的结果图像如下所示:

图像融合

从以上结果图像可以看出,与平均图像输出相比,使用小波进行图像融合得到的输出图像中的细节更加丰富(使用 PSNR 作为评估标准)。

相关链接

Python图像处理【1】图像与视频处理基础
Python图像处理【2】探索Python图像处理库
Python图像处理【3】Python图像处理库应用
Python图像处理【4】图像线性变换
Python图像处理【5】图像扭曲/逆扭曲
Python图像处理【6】通过哈希查找重复和类似的图像
Python图像处理【7】采样、卷积与离散傅里叶变换
Python图像处理【8】使用低通滤波器模糊图像
Python图像处理【9】使用高通滤波器执行边缘检测
Python图像处理【10】基于离散余弦变换的图像压缩
Python图像处理【11】利用反卷积执行图像去模糊
Python图像处理【12】基于小波变换执行图像去噪

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

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

相关文章

JavaScript实现用while语句计算1+n的和的代码

以下为输入圆的半径,输出周长、体积和面积实现结果的代码和运行截图 目录 前言 一、实现用while语句计算1n的和 1.1运行流程及思想 1.2代码段 1.3 JavaScript语句代码 1.4运行截图 【附加】用while计算110的和 1.1代码段 1.3 运行截图 前言 1.若有选择,您…

如何为ChatGPT应用程序自定义模型-微调(fine-tuning)

介绍 通过微调,您可以通过提供以下内容从通过 API 提供的模型中获得更多收益: 比提示设计更高质量的结果能够训练比提示所能容纳的更多示例由于提示时间较短,可以节省代币更低的延迟请求 GPT-3 已经对来自开放互联网的大量文本进行了预训练…

Opencv C++图像处理(全)

文章目录 Opencv官方资料BUG集合一、入门基础1.1、头文件说明&#xff1a;#include <opencv2/opencv.hpp>1.2、头文件说明&#xff1a;#include <opencv2/highgui/highgui.hpp>1.3、计算消费时间函数1.3.1、耗时&#xff1a;getTickCount()1.3.2、频率&#xff1a;…

项目管理-团队管理的4个激励理论

冲突和竞争 冲突&#xff1a;是指两个或两个以上的社会单元在目标上互不相容或互相排斥&#xff0c;从而产生心理上的或行为上的矛盾。冲突并不一定是有害的&#xff0c; “一团和气”的集体不一定是一个高效率的集体。对于有害的冲突要设法加以解决或减少&#xff1b;对有益的…

大三生变身AI顾问入职Prada 抢饭碗的AI造出新饭碗

“ChatGPT让我有点焦虑&#xff0c;我长大了还能找到工作吗&#xff1f;”这是一名小学生透过视频表达的担忧&#xff0c;她有点懊恼&#xff0c;“GPT简直无所不能&#xff0c;会画画、编程、写论文、创作音乐......而我们还在学加减乘除。”这段视频让网友直呼&#xff0c;AI…

并发编程基石:管程

大家好&#xff0c;我是易安&#xff01; 如果有人问我学习并发并发编程&#xff0c;最核心的技术点是什么&#xff0c;我一定会告诉他&#xff0c;管程技术。Java语言在1.5之前&#xff0c;提供的唯一的并发原语就是管程&#xff0c;而且1.5之后提供的SDK并发包&#xff0c;也…

Java新提案,最终还是靠近C#了

Java是一门非常优秀的编程语言&#xff0c;特别是生态繁荣&#xff0c;成熟的轮子很多&#xff0c;各种解决方案都有&#xff0c;要开发一个项目&#xff0c;只需把轮子组装&#xff0c;并根据自己的项目&#xff0c;进行自定义修改&#xff0c;可以极大地提升开发效率。 曾经…

构建OVS网络

构建OVS网络 1. 配置虚拟机环境 &#xff08;1&#xff09;配置虚拟机交换机 1 创建一个名为br-xd的虚拟交换机。 # ovs-vsctl add-br br-xd 2 查询虚拟交换机。 # ovs-vsctl show 5a1cd870-fc31-4820-a7f4-b75c19450582 Bridge br-xd Port br-xd …

QT C++入门学习(1) QT Creator安装和使用

Qt官方下载 Qt 官网有一个专门的资源下载网站&#xff0c;所有的开发环境和相关工具都可以从这里下载&#xff0c;具体地址是&#xff1a;http://download.qt.io/ 进入链接后&#xff0c;是一个文件目录&#xff0c;依次进入这个路径&#xff1a;archive/qt/5.12/5.12.9/qt-o…

NXP公司LPC21XX+W25Q128实现外扩Flash

W25Q128FV串行Flash存储器由65536页组成&#xff0c;每一页256字节&#xff0c;总共128Mbit&#xff0c;相当于16M字节的存储空间。一次写入可操作高达256字节&#xff0c;擦除可以按16个页擦除&#xff08;即一个Sector&#xff09;&#xff0c;128个页擦除&#xff08;八个Se…

元宇宙营销策略、玩法与案例

“元宇宙”依旧是当下品牌创新营销的重要形式&#xff0c;从时趣的行业观察来看&#xff0c;大量品牌方都有着元宇宙的营销意向&#xff0c;但在营销落地上存在不同的进度。一个显而易见的事实是&#xff0c;元宇宙不仅仅是一个虚拟的游戏空间&#xff0c;更是一个未来人人都会…

泛型编程 之模板(template)

C另一种编程思想称为 泛型编程&#xff0c;主要利用的技术就是模板 目录 C另一种编程思想称为 泛型编程&#xff0c;主要利用的技术就是模板 一、概念 二、函数模板 1、语法与使用&#xff1a; 2、函数模板注意事项 3、普通函数与函数模板的区别 4、普通函数与函数模板的调用规…

“探究二叉搜索树:从原理到实现“

&#x1f4d6;作者介绍&#xff1a;22级树莓人&#xff08;计算机专业&#xff09;&#xff0c;热爱编程&#xff1c;目前在c&#xff0b;&#xff0b;阶段>——目标Windows&#xff0c;MySQL&#xff0c;Qt&#xff0c;数据结构与算法&#xff0c;Linux&#xff0c;多线程&…

数量形状遗传率及计算方法

数量性状的遗传率/遗传力(heritability) (1)表型值及其方差的分量 1. 表型值及其剖分 某数量性状的表型值就是实际所度量或观察到的数值。表型值受许多外界因素如士壤、肥力、水分、光照、温度等的改变而发生变异&#xff0c;这种变异归因于环境因素。任何一个数量性状的表现…

SentiBank Dector上手指南

​ 官网链接&#xff1a;https://www.ee.columbia.edu/ln/dvmm/vso/download/sentibank.html SentiBank Detector可以抽取图片中的形容词-名词对&#xff0c;之前一直看到&#xff0c;这次复现模型才第一次用到&#xff0c;上手的时候有点手足无措&#xff0c;因为官网在如何使…

傅里叶变换解析

p.s.本文无论是cos还是sin&#xff0c;都统一用“正弦波”(Sine Wave)一词来代表简谐波。 一、什么是频域 从我们出生&#xff0c;我们看到的世界都以时间贯穿&#xff0c;股票的走势、人的身高、汽车的轨迹都会随着时间发生改变。这种以时间作为参照来观察动态世界的方法我们称…

自动驾驶技术的优势、局限性及未来发展趋势

自动驾驶技术是当前汽车行业的热门话题之一。该技术的发展&#xff0c;不仅可以提高车辆的安全性和行驶效率&#xff0c;还可以为人们的出行带来更多便利。但与此同时&#xff0c;自动驾驶技术也存在着许多争议和挑战。接下来从以下四个方面谈一下我对自动驾驶技术的看法。 一…

贝叶斯决策理论

贝叶斯决策理论的相关知识 贝叶斯的思想&#xff1a;顾名思义&#xff0c;贝叶斯决策论是利用概率来进行决策&#xff0c;是概率框架下的方法。贝叶斯决策论是利用概率的不同分类决策与相应的决策代价之间的平衡&#xff0c;核心思想是决策问题可以通过概率的形式来描述。 1.…

数量性状基因座QTL及其作图

数量性状基因座作图原理与步骤 经典的数量遗传分析方法 ->只能分析控制数量性状表现的众多基因的综合遗传效应,无法准确鉴别基因的数目、单个基因在染色体上的位置和遗传效应 (1)数量性状基因座(QTL) Quantitative trait loci: QTL 数量性状位点(基因座) 所谓QTL是指通过…

基于TCP的C/S模型代码实现

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…