SIFT匹配后应用Delaunay变换做卫星图像配准的报错如何修复
错误根因
scipy.spatial.Delaunay仅接收形状为(n个点, 2)的二维数组作为输入,但你代码中的src_pts经过reshape(-1, 1, 2)处理后是三维数组,形状为(n个点, 1, 2),维度不匹配触发报错。
修复方法
仅需要调整匹配点坐标的维度处理逻辑,去掉多余的中间维度即可,修改后代码如下:
# 提取匹配点坐标,直接生成二维数组,不需要多余维度 src_pts = np.float32([kp1[m.queryIdx].pt for m in good]) dst_pts = np.float32([kp2[m.trainIdx].pt for m in good])
如果后续调用cv2.PerspectiveTransform等要求输入三维点集的OpenCV函数,再临时做维度转换即可:
# 临时转三维数组适配OpenCV函数要求 src_pts_3d = src_pts.reshape(-1, 1, 2) dst_pts_3d = dst_pts.reshape(-1, 1, 2)
额外适配提示:你当前的插值逻辑仅处理了匹配点的坐标映射,要得到完整的配准影像,需要遍历目标影像的所有像素点,用训练好的插值器计算每个像素对应的原影像坐标,再做灰度/颜色赋值,才能输出完整的配准后影像。
内容的提问来源于stack exchange,提问作者Nora 27
相关产品推荐
相关产品推荐

