我得到了 2 张几乎平行的照片,而且彼此之间的距离并不远。
我正在使用 OpenCV 尝试创建视差图(立体对应)。
因为我试图在现实世界的场景中使用它,所以使用棋盘校准有点不切实际。
因此,我正在使用stereoRectifyUncalibrated()。
我尝试比较结果,使用 2 组不同的对应点进行整改:
- 手动选择点(指向和单击)
- 从 SURF 生成并使用 RANSAC 过滤的点
输入图像1:http:
//i.stack.imgur.com/2TCi3.jpg
输入图像2:http:
//i.stack.imgur.com/j1fFA.jpg
(请注意,在将图像用于校正等之前,我会对图像进行不失真处理)
使用 SURF 和 RANSAC 校正图像:(
按顺序排列 1 和 2):http :
//i.stack.imgur.com/pwbUw.jpg http://i.stack.imgur.com/mb7TM.jpg
使用手动选择的点校正图像(更不准确!):http:
//i.stack.imgur.com/Bodeg.jpg
现在,问题是,查看结果,我们看到 surf 版本几乎完全纠正了。(极线对齐得很好)。
虽然手动选择的点版本被纠正得很糟糕......极线远未对齐。
但是当我们使用我们的校正来查看 openCV 的 sgBM() 的结果时:
手动点结果
:http:
//i.stack.imgur.com/N8Cyp.png
SURF 点结果:
http://i.stack.imgur。 com/tGsCN.jpg
SURF 点显示的视差/深度更准确/正确(校正良好的版本)。那里并不奇怪。
然而,实际检测到的对象像素和对象边界实际上在严重纠正的版本上要好得多。
例如,在校正不好的视差图中,您可以看到笔实际上是笔,并且具有笔的形状,但在校正好的视差图中却没有。
问题是,为什么?
我该如何解决?(我试着玩弄 sgBM() 参数,确保它们对于两者等都是相同的,但它没有任何效果。正是由于某种原因,单独的不同校正使严重校正的图像看起来不错(尊重到对象边界))。