拼接航拍图像
stitching aerial images
我正在尝试将 2 张航拍图像拼接在一起,重叠很少,可能重叠<500 像素。这些图像具有 3600x2100 分辨率。我正在使用OpenCV库来完成这项任务。
这是我的方法:
1. Find feature points and match points between the two images.
2. Find homography between two images
3. Warp one of the images using the homgraphy
4. Stitch the two images
现在我正在尝试让它与两个图像一起工作。我在执行第 3 步和可能的步骤 2 时遇到问题。我使用OpenCV库中的findHomography()
来获取两张图像之间的单调。然后我用同源图在我的一张图片上打电话给warpPerspective()
。
该方法的问题在于转换后的图像全部失真。此外,它似乎只转换了图像的某个部分。我不知道为什么它没有改变整个图像。
有人可以给我一些关于我应该如何处理这个问题的建议吗?
谢谢
在您发布的结果中,我可以看到您至少有一个关键点不匹配。如果你使用findHomography(src, dst, 0)
,它会弄乱你的同形异义词。您应该改用findHomography(src, dst, CV_RANSAC)
。
您也可以尝试使用 warpAffine
而不是 warpPerspective
。
编辑:在您问题评论中发布的结果中,我的印象是匹配工作非常稳定。这意味着您也应该能够通过该示例获得良好的结果。由于您似乎主要必须处理翻译,因此您可以尝试使用以下草图算法过滤掉异常值:
- 计算平均(或中位数)运动矢量
x_avg
- 计算归一化点积
<x_avg, x_match>
- 如果点积小于阈值,则丢弃
x_match
为了使它适用于重叠较小的图像,您必须查看检测器、描述符和匹配项。您没有指定使用哪些描述符,但我建议使用 SIFT 或 SURF 描述符以及相应的检测器。您还应该设置检测器参数以进行密集采样(即,尝试检测更多特征)。
你可以参考这个略有相关的答案: OpenCV - 图像拼接
要使用同形异义拼接图像,应该注意的最重要的事情是在两个图像中找到对应点。对应点中的异常值越小,生成的同源异构词越好。使用强大的技术,如RANSAC以及OpenCV(使用CV_RANSAC作为选项)的FindHomography()函数,如果内在的百分比超过异常值的百分比,仍然可以生成合理的单应性。还要确保传递给 FindHomography 函数的对应点中至少有 4 个内在值。
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 拼接图像无法检测常见特征点
- Opencv 拼接多个图像
- OpenCv中实时视频流的图像拼接
- OpenCV将浮点数据馈送到图像拼接过程中
- 矢量<矢量>ROI的图像拼接使用<Rect>
- 图像拼接细节与OpenCV
- 将两个图像拼接在一起的问题
- 在openv中拼接2个图像
- OpenCV图像拼接,图像分辨率大于1080 * 1080
- 拼接图像插值
- 拼接全景图像
- c++ OpenCV天空图像拼接
- 拼接航拍图像
- 将航拍图像拼接成地图