【图像融合】红外与可见光的融合与配准算法【Matlab 290期】

一、简介

可见光与红外图像融合(Visible and infrared image fusion)是图像融合领域的一个分支。其在很多领域都有应用,例如可见光与红外图像融合跟踪(RGB-T tracking)、人脸识别、人耳识别、SLAM、国防领域。因此,多年以来,一直是比较活跃的研究领域。

从方法上来讲,主要包含基于空间域的和基于变换域的方法。

基于空间域的方法是指直接在空间域对源图像进行操作从而得到融合图像的方法,主要包含基于像素的(pixel-based)、基于块的(block-based)和基于区域(region-based)的方法。

基于变换域的方法是指首先将源图像变换到某个变换域,然后在该变换域内进行图像融合(一般以系数的形式),最后再用逆变换得到融合图像的过程。常用的变换包括多尺度变换(例如小波变换)、压缩感知、稀疏表达等。

近年来,随着深度学习的发展,深度学习技术也被引入到了可见光与红外图像融合领域。包括CNN,GAN等在内的一些深度学习模型被应用到了可见光与红外图像融合领域,并取得了不错的效果。

然而,从可见光与红外图像融合这个研究方向出现以来,该方向的研究就存在一个重大问题:缺乏benchmark。这主要表现在以下几个方面:

首先,没有统一的数据集。尽管有一些数据集相对常用,但并没有形成标准或者共识,因此在文献里,普遍存在测试图片不一致的情况。很多时候,是张三用A图片测试性能,而李四用B图像对在测试性能。

其次,没有统一的评价指标。和目标跟踪等有ground truth的领域不同,图像融合领域一般没有ground truth,从而导致对融合结果的评价没有标准答案。因此,图像融合领域的性能评价一般分类两部分:定性评价和定量评价。

定性评价也称主观评价,即靠人眼去观察融合图像的质量。尽管定性评价很重要,但显然主观性太强,毕竟“众口难调”,每个人的评判标准都不一样。定量评价是指使用一些评价指标(evaluation metrics)去对融合图像进行评价。然而,由于前述的没有标准答案存在的缘故,目前也没有统一的评价指标。事实上,到目前为止,研究人员大约设计了不下30种各种各样的评价指标用于评价融合图像的质量。然而,这些指标中并不存在最好的指标。指标的评价效果非常取决于测试图像,并且指标之间还存在互相矛盾的现象。因此,在文献中通常的做法是只展示对自己算法有利的几组指标的结果。

基于上述两个原因,在可见光与红外图像融合领域,缺乏一个统一的benchmark来客观、全面地评价算法性能。目前的文献里基本上都是“王婆卖瓜,自卖自夸”。考虑到这些情况,以及目标跟踪等领域普遍存在benchmark(如OTB, VOT等),我们认为制作可见光与红外图像融合领域的benchmark是非常有必要的。

二、源代码

%% section I: Read source images(读取源图像)
clear all
set(0,'defaultfigurecolor','w') 
DistortFlag = 0;%input('Is there distortion of infrared image? :\n');(需要判断红外图像是否失真)
[I1gray, I2gray, I1rgb, I2rgb, f1, f2, path] = cp_readImage;...
%     (0,'F:\',['I' num2str(infrared) '.jpg'], ['V' num2str(visible) '.jpg']);
%% section II: Resize images based on the minimum imaclosege height(根据最小图像闭合高度调整图像大小)
height = size(I1gray,1);
[I1, I2, scale] = cp_resizeImage(I1gray,I2gray,height);
%% section III: Registrate iteratively & Coarse matching(反复注册和粗略匹配)
close all;
clc;
I1_itea = I1;
iterationNum = 1;
iteration = 0;
Runtime = 0;
maxRMSE = 4*ceil(size(I2,1)/300);
AffineTrans = zeros([3 3 iterationNum]);
while  iteration < iterationNum
    fprintf('\n%d(th) iteration of registration...\n',iteration);
    [P1,P2, Rt,corner12] = cp_registration(I1_itea,I2, 20, maxRMSE,iteration, 1,  0,      6, 1    ,I2gray);
                        % cp_registration(I1,    I2, theta,maxRMSE,iteration,zoom+,zoom-,Lc,showflag,I2gray)
    Runtime = Rt + Runtime
    [I1_itea,affmat] = cp_getAffine(I1_itea,I2,P1,P2); % [v1,u1]==[v2,u2]
    iteration = iteration+1;
    AffineTrans(:,:,iteration) = affmat.T;
end
% Points of I1gray after resize (调整大小的点位置)
P1  = [P1 ones([length(P1) 1])];
[pos_cor1,~] = find(corner12(:,1) == 0);
for iteration = iteration:-1:2
    P1 = P1 / AffineTrans(:,:,iteration-1);
    cor12 = [corner12(1:pos_cor1-1,1:2) ones(pos_cor1-1,1)] / AffineTrans(:,:,iteration-1);
    P1(:,1:2) = P1(:,1:2) ./ P1(:,3);
    P1(:,3) = ones(length(P1),1);
    corner12(1:pos_cor1-1,1:2) = cor12(:,1:2) ./ cor12(:,3);
    corner12(1:pos_cor1-1,3) = ones(pos_cor1-1,1);
end
P1 = P1(:,1:2);
corner12 = corner12(:,1:2);
% Correct matches in the source images
P1(:,2) = size(I1gray,1) / 2 + scale(1) * ( P1(:,2)-size(I1,1)/2);
P1(:,1) = size(I1gray,2) / 2 + scale(1) * ( P1(:,1)-size(I1,2)/2);
corner12(1:pos_cor1-1,2) = size(I1gray,1) / 2 + scale(1) * ( corner12(1:pos_cor1-1,2)-size(I1,1)/2);
corner12(1:pos_cor1-1,1) = size(I1gray,2) / 2 + scale(1) * ( corner12(1:pos_cor1-1,1)-size(I1,2)/2);
P2(:,2) = size(I2gray,1) / 2 + scale(2) * ( P2(:,2)-size(I2,1)/2);
P2(:,1) = size(I2gray,2) / 2 + scale(2) * ( P2(:,1)-size(I2,2)/2);
corner12(pos_cor1+1:end,2) = size(I2gray,1) / 2 + scale(2) * ( corner12(pos_cor1+1:end,2)-size(I2,1)/2);
corner12(pos_cor1+1:end,1) = size(I2gray,2) / 2 + scale(2) * ( corner12(pos_cor1+1:end,1)-size(I2,2)/2);
%% section IV: Fine matching
P3 = cp_subpixelFine(P1,P2); % Fine matching
%% section V: Show visual registration result
[~,affmat] = cp_getAffine(I1gray,I2gray,P1,P3);
Imosaic = cp_graymosaic(I1gray, I2gray, affmat);
figure, subplot(121),imshow(Imosaic);subplot(122),imshow(cp_rgbmosaic(I1rgb,I2rgb,affmat));
cp_showResult(I1rgb,I2rgb,I1gray,I2gray,affmat,3); % checkborder image
cp_showMatch(I1rgb,I2rgb,P1,P2,[],'Before Subpixel Fining');
cp_showMatch(I1rgb,I2rgb,P1,P3,[],'After Subpixel Fineing');
% imwrite(cp_rgbmosaic(I1rgb,I2rgb,affmat),['D:\' f1(1:end-4) '_Mosaic.jpg']);
%% Obtain reference transformation matrix manually

三、运行结果

【图像融合】红外与可见光的融合与配准算法【Matlab 290期】_第1张图片
【图像融合】红外与可见光的融合与配准算法【Matlab 290期】_第2张图片

四、备注

完整代码或者代写添加QQ912100926
往期回顾>>>>>>
【图像压缩】图像处理教程系列之图像压缩【Matlab 074期】
【图像分割】图像处理教程系列之图像分割(一)【Matlab 075期】
【图像分割】图像处理教程系列之图像分割(二)【Matlab 076期】
【模式识别】银行卡号之识别【Matlab 077期】
【模式识别】指纹识别【Matlab 078期】
【图像处理】基于GUI界面之DWT+DCT+PBFO改进图像水印隐藏提取【Matlab 079期】
【图像融合】CBF算法之图像融合【Matlab 080期】
【图像去噪】自适应形态学之图像去噪【Matlab 081期】
【图像增强】DEHAZENET和HWD之水下去散射图像增强【Matlab 082期】
【图像增强】PSO寻优ACE之图像增强【Matlab 083期】
【图像重建】ASTRA算法之图像重建【Matlab 084期】
【图像分割】四叉树之图像分割【Matlab 085期】
【图像分割】心脏中心线之提取【Matlab 086期】
【图像识别】SVM植物叶子之疾病检测和分类【Matlab 087期】
【图像识别】基于GUI界面之模板匹配手写数字识别系统【Matlab 088期】
【图像识别】基于GUI界面之不变矩的数字验证码识别【Matlab 089期】
【图像识别】条形码识别系统【Matlab 090期】
【图像识别】基于GUI界面RGB和BP神经网络之人民币识别系统【Matlab 091期】
【图像识别】CNN卷积神经网络之验证码识别【Matlab 092期】
【图像分类】极限学习分类器之对遥感图像分类【Matlab 093期】
【图像变换】DIBR-3D之图像变换【Matalb 094期】
【图像分割】模糊聚类算法之FCM图像分割【Matlab 095期】
【模式识别】银行监控系统之人脸识别【Matlab 096期】
【模式识别】基于GUI界面之疲劳检测系统【Matlab 097期】
【图像识别】国外车牌识别【Matlab 098期】
【图像分割】最大类间方差法(otsu)之图像分割【Matlab 099期】
【图像分割】直觉模糊C均值聚类之图像分割IFCM【Matlab 100期】
【图像分割】基于matlab形态学重建和过滤改进FCM算法(FRFCM)之图像分割【Matlab 101期】
【图像增强】局部对比度增强CLAHE算法之直方图增强【Matlab 102期】
【图像融合】Frequency Partition之图像融合【Matlab 103期】
【图像评价】SVM之图像无参考质量评价【Matlab 104期】
【图像边缘检测】最小二乘法用于椭圆边缘检测【Matlab 105期】
【图像加密】基于GUI界面之混沌系统图像加密解密【Matlab 106期】
【图像配准】SIFT算法之图像配准【Matlab 107期】
【图像分割】随机游走算法用于图像分割【Matlab 108期】
【图像分割】形态学重建和过滤改进FCM算法(FRFCM)用于图像分割【Matlab 109期】
【图像分割】图像分割IFCM之直觉模糊C均值聚类【Matlab 110期】
【图像增强】区域相似变换函数与蜻蜓算法之灰度图像增强【Matlab 111期】
【图像直线拟合】最小二乘法之图像直线拟合【Matlab 112期】
【图像去雾】暗通道之图像去雾【Matlab 113期】
【图像识别】基于matlab GUI界面之路面裂缝识别【Matlab 114期】
【图像识别】身份证号码之识别【Matlab 115期】
【图像聚类】FCM和改进之FCM脑部CT图像聚类【Matlab 116期】
【图像评价】CCF算法之图像质量评价【Matlab 117期】
【图像分割】蚁群优化模糊聚类之图像分割【Matlab 118期】
【模式识别】基于GUI界面之水果检测系统【Matlab 119期】
【模式识别】基于GUI界面之水果分类系统【Matlab 120期】
【模式识别】基于GUI界面之水果分级系统【Matlab 121期】
【模式识别】人脸识别之检测脸、眼、鼻子和嘴【Matlab 122期】
【图像处理】基于 GUI界面之图像加解密【Matlab 124期】
【模式识别】基于GUI界面BP网络之手写体大写字母识别【Matlab 125期】
【图像分割】基于GUI界面之医学影像分割【Matlab 126期】
【图频处理】基于GUI界面之环图像处理与音乐播放系统【Matlab 127期】
【图像隐藏】基于Laguerre 变换之图像隐藏【Matlab 128期】
【图像处理】基于dwt函数之实现二维小波变换【Matlab 129期】
【图像处理】分形插值算法之调换图片【Matlab 130期】
【图像边缘检测】基于GUI界面之图像边缘检测系统【Matlab 131期】
【图像分割】基于GUI界面之彩色图像分割【Matlab 132期】
【图像去噪】基于GUI界面之图像滤波去噪【Matlab 133期】
【图像几何运算】基于GUI界面之图像几何运算系统【Matlab 134期】
【图像处理】基于GUI界面之图像处理系统【Matlab 135期】
【图像识别】基于matlab之细胞识别和边缘检测【Matlab 136期】
【模式识别】反馈神经Hopfield的数字识别【Matlab 172期】
【模式识别】指纹图像细节特征提取 【Matlab 173期】
【图像分割】RGB HSV YCbCr Lab颜色空间人脸检测之图像分割【Matlab 174期】
【图像压缩】小波变换之图像压缩【Matlab 175期】
【模式识别】基于GUI界面的火灾检测【Matlab 230期】
【模式识别】基于Hough变换的答题卡识别【Matlab 231期】
【模式识别】二值膨胀差分和椒盐滤波之教室内人数识别系统【Matlab 232期】
【小波变换】基于GUI界面DWT与SVD算法的数字水印 【Matlab 233期】
【模式识别】基于GUI界面的指针式表盘识别【Matlab 234期】
【模式识别】基于Hough变换图片车道线检测 【Matlab 235期】
【图像分割】粒子群优化T熵图像分割【Matlab 236期】
【图像分割】粒子群优化指数熵图像分割【Matlab 237期】
【图像分割】粒子群优化指数熵图像分割【Matlab 238期】
【模式识别】基于GUI贝叶斯最小错误率手写数字识别【Matlab 239期】
【模式识别】PCA手写数字识别【Matlab 240期】
【模式识别】特征匹配的英文印刷字符识别【Matlab 241期】
【模式识别】知识库的手写体数字识别【Matlab 242期】
【模式识别】银行卡数字识别【Matlab 243期】
【边缘检测】插值法亚像素边缘检测【Matlab 248期】
【图像识别】表情检测【Matlab 288期】
【图像检测】LSD直线检测【Matlab 289期】

你可能感兴趣的:(matlab,图像处理)