我正在嘗試使用Emgu/OpenCV來校準Kinect相機和外部相機。 我卡住了,我真的很感激任何幫助。通過基本矩陣校正未校準的相機
我選擇通過基礎矩陣,即極線幾何來做到這一點。 但結果並非如我所料。結果圖像是黑色的,或根本沒有意義。 Mapx和mapy點通常都等於無限或無限,或者全部等於0.00,並且很少有常規值。
這是我試圖做到整改:從組圖像
1)查找圖像點得到像點的兩個數組(一個爲每個攝像頭)。我用棋盤和FindChessboardCorners函數完成了這個工作。
2)找到基本矩陣
CvInvoke.cvFindFundamentalMat(points1Matrix, points2Matrix,
_fundamentalMatrix.Ptr, CV_FM.CV_FM_RANSAC,1.0, 0.99, IntPtr.Zero);
我是否通過所有收集的點從整組圖像,或只是從兩個圖像試圖糾正?
3)查找單對應性矩陣
CvInvoke.cvStereoRectifyUncalibrated(points11Matrix, points21Matrix,
_fundamentalMatrix.Ptr, Size, h1.Ptr, h2.Ptr, threshold);
4)獲取MapX與mapy
double scale = 0.02;
CvInvoke.cvInvert(_M1.Ptr, _iM.Ptr, SOLVE_METHOD.CV_LU);
CvInvoke.cvMul(_H1.Ptr, _M1.Ptr, _R1.Ptr,scale);
CvInvoke.cvMul(_iM.Ptr, _R1.Ptr, _R1.Ptr, scale);
CvInvoke.cvInvert(_M2.Ptr, _iM.Ptr, SOLVE_METHOD.CV_LU);
CvInvoke.cvMul(_H2.Ptr, _M2.Ptr, _R2.Ptr, scale);
CvInvoke.cvMul(_iM.Ptr, _R2.Ptr, _R2.Ptr, scale);
CvInvoke.cvInitUndistortRectifyMap(_M1.Ptr,_D1.Ptr, _R1.Ptr, _M1.Ptr,
mapxLeft.Ptr, mapyLeft.Ptr) ;
我有一個問題在這裏...因爲我沒有使用校準圖像,我的相機矩陣和失真係數是什麼?我如何從基本矩陣或單應性矩陣中獲得它?
5)重映射
CvInvoke.cvRemap(src.Ptr, destRight.Ptr, mapxRight, mapyRight,
(int)INTER.CV_INTER_LINEAR, new MCvScalar(255));
而且這並不返回好的結果。如果有人會告訴我我做錯了什麼,我將不勝感激。
我有25組圖像,棋盤圖案大小9x6。