【可见光与红外图像融合】基于laplace分解的图像融合与伪彩色应用中的问题

最近完成了图像融合的仿真算法实现,对近期的工作进行总结。
一、Laplace变换的基本方法
二、Laplace融合的步骤与代码
三、伪彩色应用下,Laplace融合结果对效果展示的一些思考。

一、Laplace变换的基本方法

方法只是简单说明下一下,相关介绍的文章比较多。主要注意一点:基于高斯变换的时候,上采样过程实际包括了两个步骤,1、先进行隔行隔列的上采样。2、对上采样结果进行4倍高斯核滤波。
这个滤波动作是为了补充下采样过程中的能量损失,高斯滤波后会让像素值变小,所以需要对应的进行补充回去。4倍率的选择与参数高斯滤波运算的数量是相关的,可以简单用5*5的窗口直接推导下,补0的上采样图中,0不参与计算,正好差4倍。上采样过程与下采样过程是一一对应的。
所以,下采样过程如果使用均值滤波,那在上采样过程中则应该进行均值滤波的2倍处理,也可以使用双线性插值进行扩充,原则就是把下采样的能量/像素强度的丢失找回来。
以下是简单的变换过程示意图。其中G(0)为原图,L(0)为拉普拉斯的第0层。
拉普拉斯变换过程

  • Laplace图像变换基于图像的高斯金字塔,LapAlace的顶层与高斯金字塔相同,其他层则是对高斯金字塔进行下采样结果(缩放后)进行上采样,再与原图相减的过程。
  • Laplace图像变换的结果即生成了拉普拉斯金字塔,而其中顶层金字塔(最小尺寸)包含了图像的低频信息,其他层包含了图像的高频信息。借由LapLACE金字塔,图像被拆分成高频与低频两大部分

二、Laplace融合的步骤与代码

对于配准图像的融合,分三步:1、分解。2、选择对应的融合策略对高频和低频进行融合。3、对融合后的拉普拉斯金字塔进行逆变换。以下是简单示意:

图像融合的步骤
一、分解过程
使用opencv的pyrDown和pyrUp可以容易的完成高斯上下采样。

def LPTrans(data, kernelSize=5, level=3):
    """
    Apply laplacian filter transformation on the input data.

    Parameters:
    - data: Input data to be transformed.
    - kernelSize (int): Size of the kernel used for blurring. Default is 5.
    - level (int): Level of transformation. Default is 3.

    Returns:
    Transformed data after applying the laplacian filter.
    """
    lpPyramid = []
    current = data.copy()
    if blurType == 1:
        for i in range(level): 
            if i < level - 1:
                downsampled=cv.pyrDown(current)
                Laplace = current-cv.pyrUp(downsampled)#pyrUp方法为补0并卷积
                lpPyramid.append(Laplace)
                current = downsampled
            else:
                lpPyramid.append(current)
            current = downsampled
    return lpPyramid

二、逆变换过程

def LPInverseTrans(mixPyramid,kernelSize = 5):
    levels = len(mixPyramid)
    mixData = mixPyramid[-1].copy() 
    # 初始化重构的图像为金字塔的最后一层(最低分辨率的图像)
    for level in range(levels - 2, -1, -1):
        upsampled = cv.pyrUp(mixData)
        mixData = mixPyramid[level] + upsampled
   return mixData

三、整体流程

def FuseByLP(vLData,iRData):
	# LP变换
	kernelSize,level= 3,3
	vLLpPyramid = LPTrans(vLData,kernelSize,level)
	iRLpPyramid = LPTrans(iRData,,kernelSize,level)
	#cv.imshow('vLLpPyramid[0]',vLLpPyramid[0])
	#cv.imshow('vLLpPyramid[2]',vLLpPyramid[2])

	# 融合
	baseMixData = MixBase(vLLpPyramid[-1],iRLpPyramid[-1])
	mixType = 2 #1:abs 2:region
	detailMixData = MixDetail(vLLpPyramid[0:-1],iRLpPyramid[0:-1],mixType)

	# LP逆变换
	mixPyramid=[]
	mixPyramid.extend(detailMixData)
	mixPyramid.append(baseMixData)
	fuseData = LPInverseTrans(mixPyramid,blurtype,kernelSize)
	return fuseData 

其中:MixBase 和 MixDetail表示分别对低频和高频图像进行融合,可以根据自己任务特点选择对应的融合策略。本文对于低频部分采用区域匹配的加权融合,高频部分则用区域能量取大的方法

四、部分分解过程图
从左到右分别为拉普拉斯分解的G(0),G(1),G(2)层。上半部分为红外图,下半部分为可见光图。
在这里插入图片描述

在这里插入图片描述

三、伪彩色应用下,Laplace融合结果对效果展示的一些思考

我们知道,红外图像采集为黑白图像,通常为了适应人眼的观察,会对红外图像进行色彩叠加。叠加的色彩通常与温度相关,如在红色模式的映射下,温度越高,颜色越红,最高处呈白色,反之则越暗。
而经过融合了可将光细节的红外图像,一定程度上发生了失真,其伪彩色不再能完全正确反应色彩与温度的关系。
对此,采用了两种伪彩色方式,两种叠加伪彩的时机对结果进行了对比。
每张图片中
第一行:红外图,可见光图,融合图
第二行:原始伪彩图,替换色彩伪彩图,重映射伪彩图
1、使用hot模式
在这里插入图片描述
在这里插入图片描述
2.使用RAINBOW模式
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

沉木渡香

感谢鼓励!

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

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

打赏作者

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

抵扣说明:

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

余额充值