如何将绿色波段和红外线图像与openCV对齐?

时间:2016-01-04 13:03:46

标签: python opencv rgb infrared

我有两个想要使用openCV对齐的图像。其中一个图像是真彩色图像的绿色条带,另一个是几乎相同区域的近红外图像(偏移约为180像素)。对于这种对齐,我想使用python-opencv 3.0和ORB算法。我使用以下脚本来创建KNNmatches:

img1 = cv2.imread('rgb.png',1)
img2 = cv2.imread('nir.png',0)
img1=img1[:,:,1]

orb = cv2.ORB_create()

kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)

bf = cv2.BFMatcher()
matches = bf.knnMatch(des1,des2, k=2)

good = []
for m,n in matches:
    if m.distance < 0.75*n.distance:
        good.append([m])

img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,flags=2,outImg=None)

但是,当我使用我的图片时,我只会使用以下图片进行一些匹配:

https://imgur.com/wiYO6Lp

你们中的任何人都知道如何最好地对齐这些图像吗?如果这是在错误的论坛上发布的,请提前感谢并道歉。

1 个答案:

答案 0 :(得分:1)

下一步是从你的&#34;好匹配&#34;中提取关键点位置,用这些来计算一个3x3变换矩阵,将一个图像的角转换为另一个。

对于这种情况,假设我们想要将img2转换为与img1对齐。首先,我们提取好匹配的位置:

pts1 = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)
pts2 = np.float32([kp2[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)

然后我们找到转换矩阵:

M = cv2.findHomography(pts2, pts1)

最后,我们可以应用转换:

warpedImg2 = cv2.warpPerspective(img2, M, img1.shape)

以下是使用Python在OpenCV中进行特征检测的great resource