RGB与Depth融合方法总结

1:在MMFNet中作者提出了几种传统的融合方法,(a)将RGB和Depth首先concat然后经过卷积最后生成特征图。(b)将RGB和Depth分别进行卷积,然后再add融合。(c)将RGB和Depth先进行卷积,经过transformation,再经过反卷积,融合起来。(d)RGB和Depth分别卷积,将depth融合再分别经过卷积,最后经过反卷积。这些经典的方法仍然有参考意义。


2MMFNet的融合方法,其中RCU模块就像是SENet的雏形,不过当时还没有提出注意力机制。MRF模块就参考了上图中的b。

在这里插入图片描述在这里插入图片描述
3:我自己试过的通过ASPP来对RGB和Depth进行特征提取,但是效果很不好。类似于这一种,分别对RGB和Depth进行PPM或者ASPP操作,然后进行拼接,最后经过1x1卷积,效果都不够好,可以说不如注意力机制。
在这里插入图片描述
4:出自Deep Surface Normal Estimation with Hierarchical RGB-D Fusion,是用来预测表面法线的,还没有看,先挖个坑。
在这里插入图片描述
5:接着就是注意力机制,包括SA-Gate,将RGB和Depth进行拼接,然后经过global pooling操作,得到1x1卷积再与本身相乘,然后再经过拼接,经过softmax得到一个权重,与原始图片进行相乘,两个注意力都用到了,他的点在于图像的去噪,将图像分离,去噪,融合,再分离,再融合。
在这里插入图片描述
6:在ESANet中应用了SENet中的Sequeeze-and-Excitation模块,将RGB和Depth分别进行
Sequeeze-and-Excitation,经过通道注意力,会学到应该关注于那些通道,相当于某些通道乘了一个大的权重,然后再与深度进行融合。
在这里插入图片描述
6:除了应用SENet中即插即用的模块,CANet还应用了非局部注意力来融合RGB和Depth。这个方法在DANet的创新点上进行创新。
DANet:
DANet
CANet
在这里插入图片描述
在这里插入图片描述
CANet意图很清晰,通过RGB和Depth进行非局部注意力,得到的权重乘以Depth,然后和RGB进行融合,分别在空间上和通道上进行注意力融合,得到的结果再进行1x1卷积和纹理融合,可以说融合的很充分了。

随便揣测一下,这些操作都像是非局部注意力深度可分离卷积的变形,非局部注意力,通过两个modality进行注意力得到的权重乘以原来的图片,深度可分离卷积,通过卷积核来聚合多个通道的信息,在经过1x1卷积来进行空间的遍历。

综上这是目前看到的RGB和Depth融合策略,以后看到了再补充。
-------------------------------------------------------补充-----------------------------------------------------------------------------------------------------
7:最近读了一篇
CMX**,是nyu数据集上排名第一的方法,包含了深度与RGB融合方法:
在这里插入图片描述
其中FRM模块与SA-Gate的方法十分类似,都是通过进行特征图校准来去噪,CMX通过逐通道校准和逐空间校准,最后生成两个输出,SA-Gate则是通过通道的压缩和聚合来实现的,不过本质上也是注意力。
除此以外CMX还是用了Transformer来进行特征的交互和融合,最后再通过一个通道编码得到最终输出。
----------------------------------------------------------------------补充-----------------------------------------------------------------------------------
8:最近读了一篇FRNet,作者受到SA-Gate的启发,提出了一种跨层跨模态的融合策略。主要使用这种top-down结构,通过将高层次语义信息和低层次特征信息进行融合。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
----------------------------------------------------------------------补充-----------------------------------------------------------------------------------
9:这是一篇2022最新的文章,Attention-based Dual Supervised Decoder for RGBD Semantic Segmentation,没有代码。和之前的融合方法有差别,但是差别不大。每一层融合之后不连接,融合方法就是注意力,创新点主要是后面的双分支decoder。在depth分支上采样到最后起到了监督的作用。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
---------------------------------------------------------------补充----------------------------------------------------------------------------------
10TransD-Fusion:transformer用于RGB-D融合来进行语义分割,在两个分支encoder的尾部进行融合。通过自注意力,交叉注意力,深度引导三步进行融合。在NYU上的miou达到了55.5。其中融合的部位和CANet一样,融合的方法在CMX也使用到了,交叉的transformer注意力。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
11:在看TransD-Fusion文章的时候,他引用了一篇文章PGDENet: Progressive Guided Fusion and Depth Enhancement Network for RGB-D Indoor Scene Parsing也是RGB-D融合的,我就进去看了一下架构图,和之前的FRNet几乎一样,模型很像,就不仔细看了。
在这里插入图片描述
主要看一下PCFM模块和DEM模块:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
12:RGB‑D Gate‑guided edge distillation for indoor semantic segmentation文章引入了边界引导,RGB和Depth分别处理,其中融合的结果作为一条单独的分支进行传递。在边界特征部分用到了原始GT进行边缘提取的边缘损失。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
13:深度引导多尺度RGB特征融合。
在这里插入图片描述

<think>好的,我现在需要回答用户关于如何将深度RGB图像进行融合的技术方法,使用OpenCVPython。首先,我需要回顾一下用户提供的引用资料,看看有没有相关的技术点可以直接应用。 首先,用户提到的引用[2][3]中提到了cv2.addWeightedcv2.add函数,这两个函数都是用于图像融合的。特别是cv2.addWeighted,它允许对两张图像进行加权相加,这可能适用于深度RGB融合。而引用[4]提到了图像叠加时的参数设置,比如dtype,这可能需要注意输出图像的格式是否正确。 接下来,我需要确定深度RGB图像的尺寸是否一致。如果尺寸不同,需要先进行对齐或调整大小。用户可能没有提到这一步,但在实际操作中这是必须的,所以应该在回答中提醒用户先调整尺寸。 然后,考虑颜色通道的问题。RGB图像有三个通道,而深度图通常是单通道的灰度图。直接使用cv2.addWeighted可能会因为通道数不同而出错。因此,可能需要将深度图转换为三通道,比如复制灰度通道三次,使其RGB图像的结构一致。这一步在引用[3]中提到过cv2.add处理图像相加时的饱操作,但这里可能需要先扩展通道。 另外,用户可能希望将深度信息以某种方式叠加到RGB图像上,比如用颜色映射来增强可视化效果。这时候可能需要应用颜色映射函数,如cv2.applyColorMap,将深度图转换为伪彩色图像,然后再RGB图像融合。例如,使用JET颜色映射可以让深度信息更直观。 此外,用户可能对融合后的效果有不同的需求,比如透明度调整。这时候使用cv2.addWeighted的alphabeta参数可以调整两者的权重,gamma参数也能微调整体亮度。引用[2]详细讲解了这些参数的使用,需要引用这一点来说明如何调整融合效果。 还需要考虑数据类型的问题。深度图可能存储为16位或浮点型数据,而RGB图像通常是8位无符号整数。在融合前,可能需要将深度图归一化到0-255范围,并转换为8位,以避免数据类型不匹配导致的错误。引用[3]中提到cv2.add是饱操作,处理溢出时会自动截断,但归一化仍然是必要的步骤。 最后,可能需要提供代码示例,展示从读取图像、调整尺寸、转换通道、应用颜色映射到融合的完整流程。同时,提醒用户注意图像路径是否正确,以及如何处理可能的异常情况,比如图像加载失败。 总结步骤应该是:加载图像→调整尺寸→处理深度图(归一化、颜色映射、扩展通道)→融合(使用addWeighted)→显示保存结果。在每一步中,需要结合引用中的函数注意事项,确保用户能正确实施。</think>### 深度RGB图像融合技术方法(OpenCV Python) #### 1. **图像预处理** - **尺寸对齐**:确保深度RGB图像的尺寸一致,使用`cv2.resize()`调整尺寸[^3]。 - **通道扩展**:深度图为单通道,需转换为3通道(例如复制灰度通道): ```python depth_colormap = cv2.cvtColor(depth_image, cv2.COLOR_GRAY2BGR) ``` #### 2. **深度图可视化增强** - **归一化**:将深度数据缩放到0-255范围: ```python depth_normalized = cv2.normalize(depth_image, None, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8U) ``` - **伪彩色映射**:使用`cv2.applyColorMap()`增强深度图的可视化效果(例如JET颜色): ```python depth_colored = cv2.applyColorMap(depth_normalized, cv2.COLORMAP_JET) ``` #### 3. **图像融合方法** - **加权融合**:通过`cv2.addWeighted()`实现透明度叠加[^2]: ```python alpha = 0.5 # RGB权重 beta = 0.5 # 深度图权重 blended = cv2.addWeighted(rgb_image, alpha, depth_colored, beta, gamma=0) ``` - **掩模融合**:若需保留特定区域,可结合`cv2.bitwise_and()`掩模: ```python mask = cv2.threshold(depth_normalized, 0, 255, cv2.THRESH_BINARY)[1] masked_rgb = cv2.bitwise_and(rgb_image, rgb_image, mask=mask) ``` #### 4. **完整代码示例** ```python import cv2 # 读取图像(假设已对齐尺寸) rgb_image = cv2.imread("rgb.jpg") depth_image = cv2.imread("depth.png", cv2.IMREAD_GRAYSCALE) # 单通道读取 # 深度图归一化伪彩色 depth_norm = cv2.normalize(depth_image, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U) depth_colored = cv2.applyColorMap(depth_norm, cv2.COLORMAP_JET) # 加权融合RGB 50% + 深度图50%) result = cv2.addWeighted(rgb_image, 0.5, depth_colored, 0.5, 0) # 显示结果 cv2.imshow("Blended", result) cv2.waitKey(0) ``` #### 5. **注意事项** - **数据类型**:确保深度RGB图像均为`uint8`类型,避免计算溢出。 - **颜色空间**:若RGB图像为BGR格式(OpenCV默认),伪彩色深度图需其一致。 - **应用场景**:常用于AR、3D重建、自动驾驶等领域,增强环境感知[^1]。
评论 69
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值