我有一台定制的相机,它包含3个单独的镜头+按三角形排列的滤镜,所以在每次拍摄中我都会得到3个单波段灰度图像(r,g,b)。我想把它们合并成RGB。
问题是,由于3个透镜在物理上是分开的,因此它们捕获的图像没有对齐。因此,当我在软件包QGIS中使用命令qdal_merge时,结果看起来很奇怪。我可能还需要调整r,g,b的重量。我把原始的r、g、b图像和我使用qgis生成的输出放在这个dropbox文件夹中。
是否有现有的开源工具来进行对齐和合并?如果没有,我如何使用opencv?
使用简单的像素强度距离度量(如距离平方和(SSD))组合R、G、B图像是可能的。一个更好的度量是归一化互相关(NCC)(参见维基百科),它首先将图像矩阵归一化为单位向量,并计算这些单位向量的点积(来自2个输入图像)。NCC值越高,两个输入图像的相似性就越大。但是,NCC相似性可能不足以计算两个高分辨率图像的最佳对齐,例如您提供的TIFF图像。因此,应该使用如下所述的下采样方法以较小的尺寸对齐两个输入图像,然后在重新缩放图像时简单地计算偏移。
因此,对于输入图像red
、green
和blue
,有两种方法可以将它们对齐为单个RGB图像:
- 将
blue
图像作为参考图像,例如,w.r.t.,我们将其对准red
和green
图像。现在考虑red
和blue
图像。在特定窗口内,使用NCC相似性度量计算red
和blue
图像的最佳对准偏移,并找到shifted_red
图像。对green
和blue
图像执行相同操作。现在将shifted_red
、shifted_green
和blue
图像组合以获得最终的RGB图像 - 对于高分辨率图像,请确定
scale_count
。递归地,在每一步都将图像大小调整一半,计算red
图像相对于blue
图像的偏移量,重新缩放偏移量并应用它。进行这种递归多尺度对齐的好处是减少了计算时间,提高了对齐精度(你不知道搜索解(1)的对齐偏移量的最佳窗口大小,因此这将更好地工作)。重复此方法计算green
和blue
通道的对准,然后如(1)所示组合最终结果
由于这个问题在计算摄影课程的作业中很常见,我不打算分享任何代码。然而,我已经实现了这两种方法,并对您提供的图像进行了实验。我不知道哪个输入图像是红色的,所以我有两个结果(重新缩放以减小文件大小):
如果IMG_0290_1.tif
为红色,IMG_0290_2.tif
为绿色,IMG_0290_3.tif
为蓝色:
如果red
:1、green
:2、blue
:3 ,则RGB结果
如果IMG_0290_3.tif
是红色,IMG_0290_2.tif
是绿色,IMG_0290_1.tif
是蓝色(这对我来说更正确):
如果red
:3、green
:2、blue
:1