多模态图像配准融合——UMF-CMGR网络复现测试(详细图文教程)

在这里插入图片描述

💪 专业从事且热爱图像处理,图像处理专栏更新如下👇:
📝《图像去噪》
📝《超分辨率重建》
📝《语义分割》
📝《风格迁移》
📝《目标检测》
📝《暗光增强》
📝《模型优化》
📝《模型实战部署》


在这里插入图片描述

一、传统方法和深度学习方法在图像配准融合方面对比

本博文基于深度学习方法进行讲解,传统方法见同专栏另外一篇博文,后续会发表。

相比传统的配准融合算法,深度学习方法在配准和融合方面具有以下几个显著优势:

自动学习特征:
传统算法:通常依赖于手工设计的特征(如边缘、角点、纹理等),这些特征的选取依赖于人为经验,且难以适应复杂的场景。
深度学习方法:通过卷积神经网络(CNN)等结构,能够自动从数据中学习多层次的特征,从而避免了手工设计特征的局限性,且可以捕捉更加复杂的模式和特征。

更强的鲁棒性:
传统算法:对图像噪声、光照变化、旋转、缩放等变换比较敏感,尤其是在处理高维数据或复杂场景时,性能容易下降。
深度学习方法:通过大规模数据训练的网络能够更好地适应多样化的场景,对于图像中的噪声、光照变化、形变等情况具有更好的鲁棒性。

处理非刚性变形:
传统算法:通常对刚性配准有较好表现,但处理非刚性(如人体或器官的变形)时难度较大,效果有限。
深度学习方法:特别是基于深度卷积网络的配准方法,可以学习复杂的非刚性变形模型,能更好地处理变形较大的图像场景,如医学图像中的器官配准。

计算效率高:
传统算法:许多经典算法如互信息法、刚体变换法、特征点匹配法等,随着数据维度增大,计算时间会显著增加,处理效率较低。
深度学习方法:在训练好模型后,推理阶段的计算效率通常很高,尤其是通过并行计算(如GPU)的加速,可以快速进行图像配准和融合,适合实时应用。

多模态数据的有效融合:
传统算法:在多模态(如红外和可见光,CT和MRI等)数据的融合中,传统方法往往依赖于预先定义的规则或特定的相似性度量,效果有限。
深度学习方法:可以通过端到端的训练过程,学习不同模态数据之间的映射和相关性,从而自动融合多模态信息,提高配准的准确性和融合的有效性。

可扩展性和适应性:
传统算法:一般需要为每个具体应用场景单独调整参数或算法架构,适应性较差。
深度学习方法:具有很好的扩展性和泛化能力,训练好的模型可以在不同的任务和场景中进行迁移和微调(如通过迁移学习),无需从头开发新算法。

端到端优化:
传统算法:配准和融合通常分为多个独立步骤进行处理,每一步可能都会引入误差。
深度学习方法:可以构建端到端的网络模型,通过一次优化完成整个配准和融合的过程,减少了中间步骤的误差累积,提升了整体性能。

对上面对比总结:与传统的配准融合算法相比,深度学习方法具备自动学习特征的能力,能够避免手工设计特征的局限性,且对噪声、光照变化等具有更强的鲁棒性。它在处理非刚性变形时表现优异,尤其适合复杂的图像场景。同时,深度学习方法通过端到端的训练,实现更高效的计算,并能自动学习多模态数据的映射与相关性,提升了多模态数据的融合效果。此外,深度学习模型具有很好的扩展性和适应性,推理阶段效率更高,适合实时应用,使其在复杂的配准融合任务中逐渐成为传统算法的有力替代。

二、UMF-CMGR网络

UMF-CMGR网络的大致思想为:先通过感知风格迁移网络(CPSTN)将可见光图像转换为伪红外图像;然后使用多级细化配准网络(MRRN)预测红外图像和伪红外图像之间的位移矢量场,在单模态下配准图像;最后使用双路径交互融合网络(DIFN)进行融合。

2.1 网络结构

每个模块可单独处理,也可串联后实现最终的融合效果。整体网络结构图见下:

CPSTN:跨模态风格转换网络,负责将可见光图像的风格特征传递到红外图像中,由风格提取器和生成器组成。

MRRN:错位区域细化网络,专门处理图像中的不对齐区域,包含多尺度卷积网络和注意力机制,用于逐步改善配准效果。

DIFN:细节注入和融合网络,负责将红外和可见光图像的细节和特征信息融合,生成高质量的融合图像,由细节注入和融合网络构成。

在这里插入图片描述

2.2 CPSTN模块

CPSTN(Cross-Patch Style Transfer Network)模块功能:CPSTN 的主要任务是进行跨模态风格转换,旨在将可见光图像的风格特征转移到红外图像中。通过这种方式,可以将跨模态图像的外观差异最小化,从而为后续的图像融合和配准打下基础。

组成:该模块由风格提取器(style extractor)和生成器(generator)构成。风格提取器从可见光图像中提取局部风格特征,而生成器则将这些风格特征与红外图像相结合,从而生成具有可见光风格的红外图像。它采用了基于Patch的风格转换方法,从而增强图像的局部一致性。

2.3 MRRN模块

MRRN(Misaligned Region Refinement Network)模块功能:MRRN 负责处理图像中的未对齐区域,通过逐步修正这些区域来提高配准效果。由于红外和可见光图像可能存在视角差异或其他几何不一致性,MRRN 针对这些不对齐区域进行细化和修正。

组成:该模块通常包含多尺度卷积网络,用于对图像进行特征提取和对齐区域的修正。它通过融合上下文信息,逐步改善错位区域的对齐效果。此外,它还结合了注意力机制,用于关注那些需要进一步修正的区域,从而提升整体配准的精度。

2.4 DIFN模块

DIFN(Detail Injection and Fusion Network)模块功能:DIFN 的主要任务是将红外和可见光图像中的细节信息进行融合,从而生成最终的融合图像。该模块负责将红外图像中的热信息和可见光图像中的纹理信息有机结合。

组成:DIFN 由细节注入网络(detail injection network)和融合网络(fusion network)组成。细节注入网络提取可见光图像中的纹理细节,并将其与红外图像中提取的热特征相结合。随后,融合网络将这些信息整合在一起,生成包含丰富细节和热信息的高质量融合图像。

更多的网络结构及损失函数看原文。

三、源码包准备

作者开源了源代码,官网源码地址为:Github,从作者的论文和源码中学到了很多,感谢原作者。

英文论文地址:paper,中文论文地址:paper_CN

原作者提供的资料比较零散,有些地方没有说明白,我在原作者基础上,查阅多方资料归纳总结在了一个源码包中,包含训练集,测试集,配准的模型权重文件和融合的模型权重文件等,便于后续学者学习使用。获取配套教程源码包的方法文章末扫码到公众号「视觉研坊」中回复关键字:多模态图像配准融合UMF-CMGR。获取下载链接。

下载我提供的源码解压后的样子见下:

在这里插入图片描述

模型权重见下:

在这里插入图片描述
在这里插入图片描述

数据集存放在根目录下的dataset文件夹中:

在这里插入图片描述

四、环境准备

下面是我自己的运行环境,有各个包的版本信息,仅供参考,其它版本也行。

在这里插入图片描述

五、数据准备

数据集存放在根目录下的dataset文件夹中:

在这里插入图片描述

自己的数据集存放在dataset/raw文件夹下:

在这里插入图片描述

我提供的测试数据和相关文件在dataset\raw\ctest\Road221路径下:

在这里插入图片描述

注意:测试样本红外和可见光的分辨率得调整为256*256,且对应图片名一致,否则会报错。

下面是Road221文件夹中各个子文件的内容:

在这里插入图片描述

五、生成扭曲变形红外图

此步骤是先生成扭曲变形的图像和.npy文件,后续要用到。

5.1 修改配置参数

主要修改红外样本路径,可见光样本路径和最终的输出保存路径,红外样本见下:

在这里插入图片描述

可见光样本见下:

在这里插入图片描述

具体参数修改见下:

在这里插入图片描述

5.2 扭曲变形图生成结果

直接运行get_test_data.py脚本,输出结果保存在dst参数指定的test文件夹中,见下:

在这里插入图片描述

test文件夹中的样例图见下:

在这里插入图片描述

5.3 显著图生成结果

补:原作者提到了get_svs_map.py脚本用于生成显著图,我没看懂这步骤生成的图用于干啥,在后续中每用到,学者可以跳过,下面展示一下显著图。

在这里插入图片描述

运上面get_svs_map.py脚本的输出:

在这里插入图片描述
在这里插入图片描述

六、使用CPSTN生成伪红外图像

原作者虽然提供了RoadScene的伪红外图像,但是里面的图像和RoadScene数据集官网的图片有区别,这一步骤必须自己生成。

6.1 配置参数修改

需要修改的配置参数见下:

在这里插入图片描述
在这里插入图片描述

下面是Configuration配置项里的参数:

在这里插入图片描述
上面配置参数可在下面直接复制:

--dataroot
F:\Code\Python\UMF-CMGR\UMF-CMGR-main\dataset\Calibration_plate_512512\vi
--name
rgb2ir_paired_Road_edge_pretrained
--model
test
--no_dropout
--preprocess
none
--results_dir
F:\Code\Python\UMF-CMGR\UMF-CMGR-main\dataset\Calibration_plate_512512\fake_ir

6.2 运行伪红外生成脚本

参数配置好后直接运行test.py脚本:

在这里插入图片描述

6.3 伪红外图像生成结果

下面是我自己生成的伪红外图像,在配置文件中–results_dir指定的路径下:

在这里插入图片描述

七、图像配准

7.1 报错

在运行脚本test_reg.py脚步时,报错:AssertionError: Mismatch ir:FLIR_00603.jpg vi:FLIR_00578_fake.png.

在这里插入图片描述

问题分析:

这个报错发生在数据加载过程中,具体问题是 ir_path.name 和 it_path.name 不匹配,导致了 assert 语句的失败。也就是说,红外图像 (ir) 和可见光图像 (it) 的文件名不相同。具体代码见下:

在这里插入图片描述

解决办法:

将伪红外图像和红外想的文件名和图片格式修改为一致,批量修改图片名的方法,见另外一篇博文:批量修改图片名

在这里插入图片描述

7.2 关于disp的问题

我看官网上很多人提问关于disp的问题,原作者回应将相关代码删除不影响,见下:

在这里插入图片描述

有其他学者反应去掉disp后配准融合没变化,没反应,关于disp的问题,我没有删除,我通过源码,猜测disp参数应该传入上面5.1步骤中生成的.npy文件,依据见下,在joint_data.py脚本JoinTestData类中进行传参时,有disp:

在这里插入图片描述

我的disp文件内容见下,来自于5.1步骤中get_test_data.py脚本结果:

在这里插入图片描述

7.3 参数配置

运行配准的测试脚本,需要修改参数见下:

在这里插入图片描述

7.4 运行配准脚本

下面是启动配准的命令:

 python test_reg.py

在这里插入图片描述

7.5 配准结果

配准结果的输出见下:

在这里插入图片描述

八、融合

8.1 参数修改

融合的脚本为Test/test_reg_fusion.py,此脚本大部分代码和配准脚本test_reg.py是一样的,添加了融合代码,需要修改的参数见下:

在这里插入图片描述

权重的存放位置在前面第三大节中提示了。

8.2 运行融合脚本

在终端中运行下面命令:

python test_reg_fusion.py 

在这里插入图片描述

8.3 融合结果输出

融合的最终结果保存到配置文件–dst_fus指定的路径中,见下:

在这里插入图片描述

九、融合结果分析

RoadScene测试

下面是我自己的融合结果和原作者提供的融合结果对比,左上图为可见光图,右上图为红外图,左下图为原作者融合结果,右下图为我自己复现融合结果:

场景1:

在这里插入图片描述

场景2:

在这里插入图片描述

场景3:

在这里插入图片描述

场景4:

在这里插入图片描述

九、总结

从上面的融合结果分析中可以看出,我没有复现出原作者的效果,有偏差,关于训练和测试,作者原论文和Github上提供的信息非常少,我不确定是自己复现哪步出问题,有很多疑点。我测是自己的红外和可见光数据,场景为标定板,部门场景下能够较好的配准融合,倾斜标定板场景就配不准了。

以上仅为个人理解归纳后复现的过程,仅供参考,欢迎学者纠错,有较好复现效果的分享交流。

感谢您阅读到最后!😊总结不易,多多支持呀🌹 点赞👍收藏⭐评论✍️,您的三连是我持续更新的动力💖

关注公众号「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

视觉研坊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值