在OpenCV中生成亚像素精度视差图
Generate subpixel accuracy disparity map in OpenCV
目的是为校准的立体图像生成视差图。
使用OpenCV函数cv::projectPoints()将3D模型投影到一对校准的立体图像上(左/右)。cv::projectPoints()在cv::Point2f中的2D图像坐标上给出点,这是亚像素精度。
由于一些3D点被投影到同一像素区域上,我只保留具有较小深度/Z的点,因为更远的点被更近的点遮挡。
通过这样做,我可以分别获得左图像和右图像的两个索引图像。索引图像的每个像素指的是其在3D模型(存储在std::vector中)或2D(std::vector)中的位置。
以下片段应简要解释程序:
std::vector<cv::Point3f> model_3D;
std::vector<cv::point2f> projectedPointsL, projectedPointsR;
cv::projectPoints(model_3D, rvec, tvec, P1.colRange(0,3), cv::noArray(), projectedPointsL);
cv::projectPoints(model_3D, rvec, tvec, P2.colRange(0,3), cv::noArray(), projectedPointsR);
// Each pixel in indexImage is a index pointing to a position in the vector of projected points
cv::Mat indexImageL, indexImageR;
// This function filter projected points and return the index image
filterProjectedPoints(projectedPointsL, model_3D, indexImageL);
filterProjectedPoints(projectedPointsR, model_3D, indexImageR);
为了生成视差图,我可以:
1.对于视差图中的每个像素,在左/右索引图像中找到相应的像素位置,并减去它们的位置。这种方式给出了整数视差(而不是亚像素精度);
2.对于视差图中的每个像素,在左/右投影点上找到其2D(浮动精度)位置,并计算x轴上的差异作为视差。这种方式会产生亚像素精度差异。
第一种方法是直接的,并且由于忽略亚像素投影点而引入误差。然而,第二种方式也引入了误差,因为(来自相同3D点的)一对投影像素可能被投影到像素内的不同位置。例如,左图像中的投影点为(115.28980.393),右图像中的投射点为(145.68679.883)。它在视差图中的位置为(11580),视差可以为:145.686-115.289=30.397。正如您所看到的,它们可能并没有完全行对齐以具有相同的y坐标。
问题是:1.两种方式都正确吗(引入错误除外)?2.如果第二种方式是正确的,如果在计算亚像素精度视差时误差是可忽略的。
好吧,你也可以告诉我,在这种情况下,你将如何计算亚像素视差图。
在校正图像对中,视差简单地为d=f*b/(z+f)
,其中f是焦距,b是两个相机之间的基线,z是到垂直于图像平面的对象的距离。这假设了一个基本的针孔相机模型。
通过近似z>>f,这就变成了d=f*b/z,即d与z的倒数性质。
所以你可以分析计算视差图。
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 如何将CMSampleBufferRef/CIImage/UIImage转换为像素,例如uint8_t[]
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 如何使用 sdl2 快速绘制像素网格?
- 如何在C++中进行像素操作? - Linux
- 他们如何将红外锁定像素转换为镜头前方 1m 的正常平面上的位置
- 访问随机图像像素的快速方法,最多一次
- OpenCV 像素访问点与 at() - 不同的值
- 如何使用 freetype2 访问单色位图中的像素状态
- 尝试渲染像素坐标时,简单线条渲染失败
- 计算另一个图像像素满足条件的像素值的平均值
- 如何返回定义良好的内存部分?例如来自图像数据的像素的颜色值
- 在Qt-cpp中通过像素获取QString的子字符串
- 在OpenCV中生成亚像素精度视差图
- 以亚像素精度检测激光线中心