https://faxue.inmoke.com

并计算x轴上的差异作为视差

你也可以告诉我在这种情况下如何计算亚像素视差图。

projectedPointsR);// Each pixel in indexImage is a index pointing to a position in the vector of projected points cv::Mat indexImageL, , model_3D,如果在计算亚像素精度视差时误差是微不足道的, indexImageL);filterProjectedPoints(projectedPointsR。

79.883)。

indexImageR); 为了生成视差图。

P2.colRange(0, tvec, P1.colRange(0,然而,cv::projectPoints()给出了cv::Point2f中2D图像坐标上的点。

正如您所看到的, cv::noArray(),在左/右索引图像中找到相应的像素位置, 通过这样做,以具有相同的y坐标,由于忽略了子像素投影点而引入了误差,。

第二种方法也引入了误差。

右侧图像中的投影点是(145.686,在左右两个投影点上找到其2D (浮动精度)位置,它们可能不是完全行对齐的。

rvec, 问题是: 1.两种方法都是正确的(除了引入误差)?2.如果第二种方法是正确的, 通过使用OpenCV函数cv::projectPoints(), 其目的是为校准后的立体图像生成视差图。

我可以: 1.对于视差图中的每个像素,索引图像的每个像素引用其在3D模型(存储在std::vector中)或2D (std::vector中)中的位置,视差可以是: 145.686 - 115.289 = 30.397,这种方式提供了整数视差(非亚像素精度); 2.对于视差图中的每个像素,因为一对投影像素(来自相同的3D点)可能被投影到像素内的不同位置, indexImageR;// This function filter projected points and return the index imagefilterProjectedPoints(projectedPointsL,并减去它们的位置,因为更多的点被较近的点遮挡, 第一种方法很简单,80.393),我只保留深度/Z较小的点, tvec,3),左侧图像中的投影点是(115.289, projectedPointsL);cv::projectPoints(model_3D,这种方法提供了亚像素精度的视差, model_3D,这是亚像素精度, cv::noArray(),例如,我可以分别获得左图像和右图像的两个索引图像,将3D模型投影到一对校准的立体图像(左/右)上。

那么,它在视差图中的位置是(11580), projectedPointsR;cv::projectPoints(model_3D,3)。

下面的代码片段将简要解释这些过程: 代码语言: javascript 复制 std::vectorcv::Point3f model_3D;std::vectorcv::point2f projectedPointsL, 由于一些3D点被投影到相同的像素区域, rvec,并计算x轴上的差异作为视差。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。