立体视觉中,怎样提取左、右图像中特定的特征点进行立体匹配?如下图中抓手上的几个标识点,在匹配时如何只提取这几个标识点进行匹配

极线校正后的照片
形态学约束之后的结果

中心提取

三维扫描结果(标志点为红色标记)
通过标志点把两次双目拍照的点云拼接到一起

希望对你有帮助。


1. 用角点检测方法把左右图像特征点提取;如 HARRIS,Harris and M. Stephens (1988).「A combined corner and edge detector」

2. 根据立体视觉标定结果计算外极线,对于左图像上任一特征点,在右图像上利用极线约束进行搜索匹配。如果不想自己写,OpenCV有现成的类。

参考:极线约束(epipolar constraint)

三维空间中一点p,投影到两个不同的平面I1、I2,投影点分别为p1,p2。

p、p1、p2在三维空间内构成一个平面S。

S与面I1的交线L1过p1点,称之为对应于p2的极线。同理S与I2的交线称之为对应于p1

的极线(对应于左边图像点的极线在右边图像上,右边与之相同)。如图:

所谓极线约束就是说同一个点在两幅图像上的映射,已知左图映射点p1,那么右图映射点p2一

定在相对于p1的极线上,这样可以减少待匹配的点数量。


这种预设标志点建议用模板匹配,应该会比较好提取,右边那个看不全,可能你模板得就著可见性最差的那个选,或者用一大一小两个模板综合来看,这是连续大量图像的做法。这种贴标志点的办法多年前就被用来做三维测量了,可以参考的东西应该不少,标志点应该是不用旋转角度都一样,或者你换一种方形标志点来做(黑色方形、中间是个白色圆点,这种标志点在三维测量里面用得比较多)会规避掉旋转角度的问题。想来应该用不到上SIFT、SURF这种旋转、尺度不变性的特征提取匹配演算法(如果你有这两种演算法的现成代码应该也能用,但是有点儿高射炮打蚊子的感觉)。

如果你就一对儿两幅图,偷懒的办法是载入图像依次单击滑鼠把几个点的大概位置点出来,程序根据滑鼠位置取ROI来检测特征点。MATLAB的相机标定工具箱有类似的做法可以参考

标志点都提取出之后就是极线匹配那一套了,有答案说得很清楚。


题主说的立体匹配的意思是指算视差吗?

如果是手工控制可以指定坐标的吧,代码写死或者滑鼠点击的方式(可以参考网路上一些滑鼠事件的程序)

自动化批量处理,可以先提特征,匹配,再用匹配上的特征点直接计算视差,这样找到的点不一定是你要的那几个点。

还有如果你题目描述中给的带黑白圈的这张图就是你原始数据的话,可以找找有没有具有旋转不变性模板匹配的方法,帮你在图中搜出这几个黑白圈的位置,再考虑匹配的问题。


我觉得两个思路吧,一个是两个相机中的标志点分别提取,再一个个对应过去,一个是再提取过程中用两幅图像互为参考,不断缩小提取范围,提高精度,两个都可以各有优劣。至于具体在图像中用什么特征,我觉得模板匹配就可以啊,这个比较简单,其他的也可以用颜色特征,显著性,二维直方图。。估计最好用的还是模板和颜色特征。啊,深度学习也可以,估计效果会不错
假设双目相机已经标定(参考极线约束理论)。分析了下这个图片,个人觉得第一步是对两幅图提取特征点(可以采用角点检测,然后根据点周围颜色、梯度特征等筛选出图中所示的特征点);接下来就是在极线范围内搜索,对特征点进行匹配,计算视差;最后根据相机内参数计算每个特征点的距离。
推荐阅读:
相关文章