问题标签 [disparity-mapping]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
595 浏览

opencv - 通过软件更改立体视觉基线

我正在尝试使用远处物体的立体系统来估计距离。我已经纠正了校准过程后获得的图像,并建立了视差图。

现在是否可以通过更改立体校准参数来更改基线(以及可达到的最大深度);例如相机矩阵中包含的向量 T 或图像中心 Cx?

0 投票
1 回答
4871 浏览

opencv - OpenCV 上的图形切割

我正在尝试使用 opencv 上的 cvFindStereoCorrespondenceGC() 函数来实现图形切割算法,以找到比使用 BM 时更准确的差异。由于某种原因,我没有此功能;他们在 opencv 2.4.5 中摆脱了它吗?我还能如何实现图形切割?谢谢。

0 投票
1 回答
1615 浏览

opencv - Opencv cvFindStereoCorrespondenceGC(), disparityLeft / disparityRight

我正在使用图形切割 cvFindStereoCorrespondenceGC() 函数:

void cvFindStereoCorrespondenceGC(const CvArr *left, const CvArr *right, CvArr *disparityLeft, CvArr *disparityRight, CvStereoGCState *state, int useDisparityGuess = 0)。

我的问题是:我应该得到的 disparityLeft 和 disparityRight 地图是什么?

不应该只有一个像 cvFindStereoCorrespondenceBM() 给你的视差图吗?

cvFindStereoCorrespondenceBM(const CvArr *left, const CvArr *right, CvArr *disparity, CvStereoBMState *state)

0 投票
1 回答
6481 浏览

matlab - 立体视觉:深度估计

我正在从事立体视觉任务,我想获得立体视觉相机和物体之间的距离。我正在使用带有计算机视觉系统工具箱的 Matlab。
我使用“Matlab 的相机校准工具箱”校准了相机,因此我有左右相机的内在参数和外在参数(右相机与左相机的位置)。我还有一对校正后的图片和他们的视差图。为了估计视差,我使用了 Matlab 函数 disparity()。我知道相机的基线和焦距,但我的结果仍然是错误的。

但我知道距离是 cca 600 mm。这个公式对吗?单位呢?mm * mm / pixel != mm. 特别是我想使用相机矩阵(内在参数)进行计算,但我不知道如何。我会感谢任何提示。

0 投票
0 回答
1406 浏览

python - opencv ReprojectImageto3D 给出的值趋于无穷大

我正在使用 stereocalibrate 和 stereorectify 来获取 Q 矩阵。我将此作为 cv.ReprojectImageto3D 的输入以获取深度图。但是当我尝试显示结果时,许多值被计算为无穷大。

在重新投影之前我是否需要更改或缩放任何内容。我们得到的结果是像素吗?

图片链接:http: //i43.tinypic.com/2gtau5s.png

在此处输入图像描述 非常感谢提前

0 投票
0 回答
609 浏览

opencv - 为什么视差数必须能被 16 整除?

为什么在 OpenCv 中视差数,在视差图的创建中,必须能被 16 整除?

0 投票
1 回答
4073 浏览

c++ - 在 OpenCV 中调用 stereoRectify 会导致异常:帧指针无效

对于我的雇主,我将已经实现的图像校正方法的结果与相应的 OpenCV 实现的结果进行比较。但是,一旦调用 OpenCV 函数,就会引发异常。

OpenCV 整流函数的头文件是

作为 InputArray 和 OutputArray 我使用了类型的对象

. 由于已知相机的校准,我用正确的值手动初始化输入矩阵。根据相应的文档页面,矩阵具有以下大小:

我像这样初始化矩阵:

对于所有矩阵,我使用 CV_64F 作为值类型。

我在控制台上打印了矩阵的内容,以验证所有值是否设置正确(四舍五入):

相机矩阵1:
| 6654; 0, 1231 |
| 0; 6654; 1037 |
| 0; 0; 1 |

distCoeffs1:
| -4.57e-009;5.94e-017;3.68e-008;-3.46e-008;6.37e-023 |

相机矩阵2:
| 6689; 0, 1249 |
| 0; 6689; 991 |
| 0; 0; 1|

distCoeffs2:
| -4.72e-009;2.88e-016;6.2e-008;-8.74e-008;-8.18e-024 |

回复:
| 0.87; -0.003, -0.46 |
| 0.001; 0.999; -0.003 |
| 0.46; 0.002; 0.89 |

电话:
| 228; 0; 0; 0 |

到目前为止,一切对我来说似乎都是正确的。此外,我将输出矩阵初始化为单位矩阵(使用 cv::Mat::eye(...)),大小如下:

最后,所需的 cv::Size 对象设置为宽度 2448 和高度 2050(相机获取的图像的大小)。一旦我将参数传递给 OpenCV

,程序崩溃。控制台上的错误消息指出

opencv_core248, void cdecl cv::error(class cv::Exception const & ptr64) +0x152 (无效帧指针)

由于所有矩阵和 cv::Size 对象都已正确初始化,我看不出有什么问题。对于任何建议,我很感激。

0 投票
2 回答
2224 浏览

opencv - 使用 BM 和 SGBM 方法的立体重建问题

我已经使用 OpenCV 的棋盘校准例程校准了我的立体相机。我目前正在使用获得的内在和外在矩阵来纠正我的消息并使用块匹配方法(我使用了 BM 和 SGBM 并获得了相同的结果)最终转到 3D 点云。

不幸的是,我在我的 3D 点云中发现了问题,并且由于某种原因,在深度值方面似乎存在错误的“步骤”。

我使用了一个简单的实验来成像一堆有很多纹理的污垢,我希望看到一致的重建,但我发现其中一部分处于正确的深度值,而其余部分似乎平躺在地上。我已经尝试改变我的立体标记大小、最大/最小差异值等。但我仍然没有看到任何变化。我也尝试过水平和垂直成像,但问题仍然存在于两个视图中。

谁能建议我可能做错了什么?

视差图像 - 水平设置 3D 重建点云 - 水平设置 3D 重建点云 - 垂直设置 左校正图像 右校正图像

目前,更简单的 BM 参数如下所述:

0 投票
1 回答
1260 浏览

matlab - 如何从立体几何参数估计视差/深度图限制?

我正在尝试估计立体对中某些点之间差异的上限。我知道以下参数:

收敛角:2.2°

基线:77 毫米

焦距:6.3毫米

X分辨率:72

Y分辨率:72

分辨率单位:0x2(英寸)

我知道 x 方向(沿极线)上的对应点之间的距离变化高达约 120 像素......我已经看到,对于前景中的点,这个距离很小,因为背景中的点更大,我想要一个自动建立这个距离的上限的方法......我的问题是我是否可以使用这些参数估计这个上限(不估计视差/深度图)..我不需要视差的确切值而只是一个近似值改变我的安全上限。

注意我没有传感器尺寸:(

感谢所有回复!

0 投票
3 回答
1698 浏览

matlab - Matlab中基本矩阵的不同结果

我正在实现立体匹配,并且作为预处理,我正在尝试在没有相机校准的情况下校正图像。我正在使用冲浪检测器来检测和匹配图像上的特征并尝试对齐它们。找到所有匹配项后,我使用以下函数删除所有不在核线上的内容:

问题是,如果我用相同的数据运行这个函数,我仍然会得到不同的结果,导致在相同数据上的每次运行中产生的视差图存在差异。在这里您可以看到一些匹配的结果不同:

内联点

更新:我认为差异是由 RANSAC 方法引起的,但是使用 LMedS、MSAC,我仍然在相同的数据上得到不同的结果