2015-4-21 - 誰動了我的相機(2015-4-22 更新)

最近纠结了很久这个双目视觉的问题,

因为之前一直能够不错的生成点云的设备突然抽了,非常的诡异、、、

花了很久很久研究这个问题,调了调stereoBM的参数,但结果总是不对。

于是,直觉告诉我可能是有某些人动过相机位置了,

然后就有了接下来的故事……

Screenshot from Matlab
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
Stereo Rig Rectified Images Comparison