Eug*_*neB 6 opencv computer-vision disparity-mapping stereo-3d
我尝试根据来自KITTI立体图像数据集的图像创建点云,以便稍后我可以估计某些对象的 3D 位置。
原始图像看起来像这样。
到目前为止我所拥有的:
window_size = 9
minDisparity = 1
stereo = cv2.StereoSGBM_create(
blockSize=10,
numDisparities=64,
preFilterCap=10,
minDisparity=minDisparity,
P1=4 * 3 * window_size ** 2,
P2=32 * 3 * window_size ** 2
)
Run Code Online (Sandbox Code Playgroud)
window_size = 9
minDisparity = 1
stereo = cv2.StereoSGBM_create(
blockSize=10,
numDisparities=64,
preFilterCap=10,
minDisparity=minDisparity,
P1=4 * 3 * window_size ** 2,
P2=32 * 3 * window_size ** 2
)
Run Code Online (Sandbox Code Playgroud)
生成的矩阵如下所示(此时我怀疑它是否正确):
[[ 1. 0. 0. -614.37893072]
[ 0. 1. 0. -162.12583194]
[ 0. 0. 0. 680.05186262]
[ 0. 0. -1.87703644 0. ]]
Run Code Online (Sandbox Code Playgroud)
现在问题部分开始:)
将不胜感激任何帮助!
reprojectImageTo3D负数吗?一般来说,不会,至少对于 Z 值而言。reprojectImageTo3D 返回的值是相对于相机原点的真实世界坐标,因此 Z 值为负值意味着该点位于相机后面(这在几何上是不正确的)。X 和 Y 值可以为负,因为相机原点位于 FOV 的中心,因此负 X 值表示该点位于“左侧”,负 Y 值表示该点位于“下方”。但对于 Z 值来说,不,它们不应该是负数。
你的 Q 矩阵几乎是恒等式,因为我认为你在调用 时错误地设置了旋转矩阵stereoRectify。当您传递rotation和 时translation,这是从相机 1 到相机 2 的单个旋转,而不是从相机 1 到相机 2 的组合旋转。您所做的是在转置其中一个旋转后将两个旋转相乘;相反,你应该只通过R_L(因为根据你的描述,我认为这意味着它是从左到右相机的旋转)。
我对 KITTI 数据集不熟悉,但调用后返回的值reprojectImageTo3D是现实世界的单位,通常是米。
返回的坐标reprojectImageTo3D是相对于相机原点的真实世界坐标。如果您有拍摄照片的相机的 GPS 坐标,则可以使用(X, Y, Z)从重投影返回的坐标来操作纬度/经度值。
| 归档时间: |
|
| 查看次数: |
1092 次 |
| 最近记录: |