【问题标题】:Issues while warping image using Homography mat constructed using matches given by BF Matcher使用 BF Matcher 给出的匹配构造的 Homography mat 扭曲图像时出现问题
【发布时间】:2018-05-26 00:08:00
【问题描述】:

我们正在尝试不断地处理两个摄像头捕获的图像帧,每两帧处理一次,然后将它们拼接以获得完整的视图。为了做到这一点,我们有 1.提取的冲浪特征。 2.使用 Flann Matcher 得到两个图像之间的匹配。 3.使用这些匹配计算单应矩阵。 4.在右图应用warpPerspective。

//To get the surf keypoints and descriptors:

cuda::SURD_CUDA surf(700);
surf(leftImgGpu, cuda::GpuMat(), keyPointsGpuA, descriptorsAGpu);
surf(rightImgGpu, cuda::GpuMat(), keyPointsGpuB, descriptorsBGpu);
surf.downloadKeypoints(keypointsAGpu, keypoiintsA);
surf.downloadKeypoints(keypointsBGpu, keypoiintsB);

//Flann based matcher:
FlannBasedMatcher matcher(new cv::flann::KDTreeIndexParams(4), new 
cv::flann::SearchParams())

//To get the homography matrix:
vector<Point2f> imgPtsA, imgPtsB;
for(int i=0;i<matches.size();i++){
    imgPtsB.push_back(keypointsB[matches[i].queryIdx].pt);
    imgPtsA.push_back(keypointsA[matches[i].trainIdx].pt);
}
Mat H=findHomography(imgPtsA, imgPtsB, CV_RANSAC);
 
//To a warp right image:
warpPerspective(rightImg, warpRight, H, rightImg.size());

我们有两个问题: 问题一: 扭曲的图像3 正在移动。左右摄像头是固定的,我们正在处理的图像(leftright)每次几乎都是一样的。我们怀疑匹配和单应矩阵存在一些问题,因为扭曲的图像没有正确出现。 问题 2: 我们最初使用 BF Matcher 来获取匹配项。当使用这些匹配构建 Homography 垫时,我们得到了奇怪的结果。使用基于 Flann 的匹配器后,结果相对较好。

【问题讨论】:

    标签: computer-vision blending homography image-stitching warp


    【解决方案1】:

    要通过拼接创建适当的“全景”图像,相机需要几乎位于空间中的相同位置,否则会出现视差错误(请参阅here)。在一般情况下,单应性只能扭曲图像中的单个平面,以便将其与其挂件注册。因此,这将是可能的,例如只缝合地板(当然,如果它为特征提供了足够的纹理)。

    因此,您不能期望得到稳定的结果,因为单应性无法对这种转换进行建模。更形象:椅子的前侧只在右图中可见,因此无法将这个区域与左图“匹配”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-31
      • 2013-06-01
      • 2016-07-03
      • 1970-01-01
      • 2013-01-31
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      相关资源
      最近更新 更多