热红外、可见光图像配准融合

使用DJI M300RTK配备H20T云台相机进行光伏面板表面缺陷自动化检测。

H20T云台相机配备一个2000w变焦镜头、一个1200w广角镜头、一个30w红外热成像镜头、一个激光测距传感器。

为了对更好地进行数据分析,需要首先把红外图像和可见光图像进行对齐。

Python中的图像红外和可见光图片融合算法 可见光与红外图像融合_图像融合


Python中的图像红外和可见光图片融合算法 可见光与红外图像融合_图像配准_02

考虑两图像视角差异较小,首先采用的方法是手动计算(也就是手动数像素/(ㄒoㄒ)/~~)两图像的尺度因子偏移进行粗略配准,参考博客:

热红外/可见光图像融合 认为两相机的相对位置关系不变,粗略认为根据一对图像计算出来的两视角图像映射关系可以应用于其他时刻拍摄的图像配准。

但实际上由于H20T云台相机无法保证红外相机和变焦相机触发严格同步(变焦相机的触发时间有将近1s的延迟),导致红外图像和可见光图像的视角偏移和无人机的运动速度相关,因此这种配准方法精度难以保障。

Python中的图像红外和可见光图片融合算法 可见光与红外图像融合_图像配准_03


Python中的图像红外和可见光图片融合算法 可见光与红外图像融合_计算机视觉_04

考虑采用图像拼接的方法,分别提取两张图像特征点,然后计算特征描述子,再根据描述子对特征点进行匹配,根据匹配点计算单应矩阵,从而实现图像视角的转换,进而实现图像拼接。

主要参考这两篇博客进行实现:
OpenCV探索之路(二十四)图像拼接和图像融合技术全景拼接——两张图像拼接

但是由于红外和可见光图像特征差异较大,直接根据描述子进行特征匹配出现了较多误匹配,无法实现较好的拼接效果。
因此考虑首先提取边缘特征再进行特征点提取,并且由于两图像视角差别较小,考虑对特征点匹配添加先验约束。刚好看到这么一篇文章可供参考:
红外与可见光图像配准算法–MATLAB版

还有一个简单粗暴但有效的方法是手动选取两幅图像中的若干匹配点对进行单应矩阵计算。参考计算两幅图像的单应矩阵。

这种方法不可能对所有的图像对都手动提匹配点对,只能认为两相机相对位置关系不变,因此所有的图像对都采用相同的映射关系,存在的问题和前面提到的一样。

Python中的图像红外和可见光图片融合算法 可见光与红外图像融合_计算机视觉_05

由于没有考虑镜头畸变,配准效果都不太理想。
考虑单独对两相机进行标定,但是设备不在手头,因此考虑采用以下两种方式进行畸变矫正:
利用直线特征进行单幅图像畸变校正方法从两幅图像的取得相机畸变系数

由于硬件的限制(无法同步触发、变焦镜头参数一致性难以保障),最佳的配准方法应该仅基于图像,由图像中的特征点、线实现图像畸变矫正与对齐。在此还有很多可以深入开展的研究。

方法还在完善中,在此仅做一个简单的记录。
这次实现过程中也加深了一些概念的理解:
等距变换、相似变换、仿射变换和射影变换单应性矩阵的理解及求解单应矩阵

2021.3.9
偶然找到电力设备红外和可见光图像配准方法 并且代码已经开源,效果相当不错。
但是在光伏面板这个应用场景中,由于光伏面板图像存在大量重复的相似结构,因此仍然存在大量误匹配。
为了解决这一问题,考虑划分粗配准+精配准两个阶段,使用相机外参作为先验约束,再利用图像特征进行精准匹配。

原本没考虑这个问题的复杂性,查阅相关资料后发现针对这个问题存在许多现有研究可供参考,包括以下开源项目:
基于形态学方法的红外、可见光图像配准基于深度学习框架的红外、可见光图像融合Infrared and visible image fusion using Latent Low-Rank RepresentationVIFB:A Visible and Infared Image Fusion Benchmark (源码尚未公开)
(不过图像融合与图像配准还是有区别的,配准主要是求解两个图像像素之间的映射关系,图像融合是在配准的基础上进行的,对图像中的有效信息进行综合。)
这个工作还有很多内容可以深入挖掘,但由于时间问题只能暂时搁置。后面再回来继续填坑