最近纠结了很久这个双目视觉的问题,
因为之前一直能够不错的生成点云的设备突然抽了,非常的诡异、、、
花了很久很久研究这个问题,调了调stereoBM的参数,但结果总是不对。
于是,直觉告诉我可能是有某些人动过相机位置了,
然后就有了接下来的故事……

如图,这两个例子都是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,右边是现在的,差距太明显了。
