最近纠结了很久这个双目视觉的问题,
因为之前一直能够不错的生成点云的设备突然抽了,非常的诡异、、、
花了很久很久研究这个问题,调了调stereoBM的参数,但结果总是不对。
于是,直觉告诉我可能是有某些人动过相机位置了,
然后就有了接下来的故事……
Screenshot from Matlab
如图,这两个例子都是rectfied images,这是用matlab的detectSURFFeatures函数找的feature,然后再extract画到图上的、
总感觉这个对极线并不是很准确,理论上来说应该都是直线才对、、、
所以说,我得重新跳calibration dance了,好悲伤。
(这样的图用stereoBM/LibELAS做出来的视差图不吃翔就怪了……
顺便给这个很简单的matlab程序po上来,算是测试下SyntaxHighlighter
<br />
%Reference: MathWorks Documentation for Computer Vision Toolbox<br />
[fileL,pathL]=uigetfile('*.*','Select Left Image');<br />
[fileR,pathR]=uigetfile('*.*','Select Right Image');</p>
<p>I1=imread([pathL, fileL]);<br />
I2=imread([pathR, fileR]);</p>
<p>%comment the following two lines for grayscale images<br />
I1=rgb2gray(I1);<br />
I2=rgb2gray(I2);</p>
<p>figure;<br />
imshowpair(I1,I2, 'ColorChannels','red-cyan');<br />
title('I1 (Red); I2 (Cyan)');</p>
<p>blobs1 = detectSURFFeatures(I1, 'MetricThreshold', 2000);<br />
blobs2 = detectSURFFeatures(I2, 'MetricThreshold', 2000);</p>
<p>[features1, validBlobs1] = extractFeatures(I1, blobs1);<br />
[features2, validBlobs2] = extractFeatures(I2, blobs2);</p>
<p>indexPairs = matchFeatures(features1, features2, 'Metric', 'SAD', ...<br />
'MatchThreshold', 5);</p>
<p>matchedPoints1 = validBlobs1(indexPairs(:,1),:);<br />
matchedPoints2 = validBlobs2(indexPairs(:,2),:);</p>
<p>figure;<br />
showMatchedFeatures(I1, I2, matchedPoints1, matchedPoints2);<br />
legend('Putatively matched points in I1', 'Putatively matched points in I2');</p>
<p>
/* 题外话:准备以后多多在博客上发一些工作记录、、、*/
所以说,今天用之前的存下来的rosbag里的数据做了点比对,
左图是以前的相机的epipolar line,右边是现在的,差距太明显了。
Stereo Rig Rectified Images Comparison