红外与可见光融合算法——TIF介绍及python和MATLAB代码实现

本文参考知乎上一位大神 “冲上云霄” 的文章 融合算法一—TIF
作者在知乎上详细介绍了近年来常见的十几种融合算法,很有参考意义。
另外,知乎上 张星辰 对融合算法的整理,以及提出来的参考标准 VIFB: 一个可见光与红外图像融合Benchmark 可以多了解一下。

1 算法的核心思想

根据介绍,TIF算法是将图像分成基础层和细节层,之后再按加权相加。
基础层,就是将图像进行均值滤波(文中用的是35),均值滤波后的图像就是基础层,原图减去基础层就是细节层。
基础层的权重是0.5,细节层的权重计算,具体如下:
图像算法
图像 A A A 按均值滤波(35)和中值滤波(3)分别产生两张图像,两张图像做差,产生一张差值图,就是右侧那个黑白的。假设将其命名为 ξ a \xi_a ξa ,由于是彩色图像,自己用的是欧拉距离,就是RGB三者的差的平方和再开根号。
在这里插入图片描述

同理,可以求出图像 B B B ξ b \xi_b ξb
细节层权重的确定就由这两个加权产生。
ω a = ξ a ξ a + ξ b ω b = ξ b ξ a + ξ b \omega_a=\frac{\xi_a}{\xi_a+\xi_b}\\ \omega_b=\frac{\xi_b}{\xi_a+\xi_b} ωa=ξa+ξbξaωb=ξa+ξbξb
我按文章 VIFB: 一个可见光与红外图像融合Benchmark 中提供的GitHub地址下载了测试图像:

红外图像红外图像

可见光图像可见光图像
文中给出的测试结果:
在这里插入图片描述
自己做的结果
在这里插入图片描述
图像上目视感觉,结果差不多。
时间上单张测试时间是0.04s。

2 再来说下踩过的坑

作为初学者的我,踩的坑还是比较多的。

1 计算时的默认处理

编写代码的时候,主要是图像读取的时候我用的是

cv2.imread(p1_path, cv2.IMREAD_COLOR)

像素每一位默认是unit8,计算过程中的时候,超过255的数值会自动减去255再计算,或者用cv2.add、cv2.subtract这些,会对超过255的数默认为255。写代码的时候要注意这些。我是将unit8换成float来计算的。

2 分母出现NAN的处理

如前所述,计算 ω a = ξ a ξ a + ξ b \omega_a=\frac{\xi_a}{\xi_a+\xi_b} ωa=ξa+ξbξa 时,分母中出现了 0 值,造成最终图像结果上有一些黑点。对此,我是将 ξ a + 0.01 \xi_a+0.01 ξa+0.01 来避免 0 值出现的。

3 代码下载

MATLAB 的代码(Two scale image fusion),是从网上下载的,对此,我和测试图像同事打包成一个,放在下载文件里。
下载链接如下:
https://download.csdn.net/download/jayandchuxu/13631905

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值