iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 27
0
自我挑戰組

我的影像視覺定位學習筆記系列 第 27

day27-stereo camera triangulate深度相機 三角測量

  • 分享至 

  • xImage
  •  

再校正完一組深度相機的時候,
我們要開始對特徵點進行三角測量,
可以跟單目相機的情況一樣假設左邊的相機沒有旋轉位移,
透過校正出來的R|t來推算出右邊相機的投影矩陣,
也可以讀取直接校正出來的外部參數P1、P2,左右相機的投影矩陣來做三角測量,
有了左右相機的投影矩陣以及特徵點匹配的結果,
我們就能做三角測量還原特徵點的3D座標。

而在雙目相機的情況下我們能做的事情更多了,
我們可以透過兩個相機之間的空間關係,
來過濾我們的特徵點匹配,而不是僅透過描述符的差異來過濾匹配的結果。
https://ithelp.ithome.com.tw/upload/images/20191013/201211275YS7Jf5C4B.png
我們可以透過兩個相機之間的基礎矩陣來精細特徵點的影像座標,
也許這樣能讓三角測量還原的3D點座標更為精準。
而你也可以劃出核線來看匹配的情況是否在核線上面。
https://ithelp.ithome.com.tw/upload/images/20191013/201211270wiD2QMn8B.png

for( i = 0; i < nimages; i++ )
{
    int npt = (int)imagePoints[0][i].size();
    cv::Mat imgpt[2];
    for( k = 0; k < 2; k++ )
    {
        imgpt[k] = cv::Mat(imagePoints[k][i]);
        undistortPoints(imgpt[k], imgpt[k], cameraMatrix[k], distCoeffs[k], cv::Mat(), cameraMatrix[k]);
        computeCorrespondEpilines(imgpt[k], k+1, F, lines[k]);
    }
    for( j = 0; j < npt; j++ )
    {
        double errij = fabs(imagePoints[0][i][j].x*lines[1][j][0] +
                            imagePoints[0][i][j].y*lines[1][j][1] + lines[1][j][2]) +
                       fabs(imagePoints[1][i][j].x*lines[0][j][0] +
                            imagePoints[1][i][j].y*lines[0][j][1] + lines[0][j][2]);
        err += errij;
    }
    npoints += npt;
}
cout << "average reprojection err = " <<  err/npoints << endl;

你可以觀察校正深度相機時如何利用轉換的核線a、b、c來計算再投影誤差,
也可以利用相同的係數來在影像上繪製對應的核線。


上一篇
day26-calcOpticalFlowPyrLK光流
下一篇
day28-stereo camera剛體轉換 手眼問題 正交 Procrustes 問題
系列文
我的影像視覺定位學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言