我正在運行OpenCV 2.4.2。OpenCV未校準相機校正用於三維重建
我的項目包含一個3D人臉識別。
我正嘗試從未校準相機拍攝的圖像對創建3D模型。 我的目標是獲得一些3D功能用於識別過程。
我試圖校準和糾正相機,但我沒有得到好的結果。 我做下列步驟操作: - 計算的基本矩陣感謝「findFundamentalMat」 - - 使用「stereoRectifyUncalibrated」來獲得單應矩陣 - 2個圖像特徵 之間找到對應 - 提取衝浪從2個圖像 使用的功能「 warpPerspective「與第一個圖像和第一個單應矩陣來查看結果。
我有一個非常壞的結果,我不知道現在該做什麼...
是糾正算法?任何建議?
什麼樣的3D功能可以用來獲得更好的人臉識別?
這裏的校準代碼:
/// Conversione di 1 vettore di keypoints in 2 vettori di Point2f
vector<int> pointIndexesLeft;
vector<int> pointIndexesFront;
for (vector<DMatch>::iterator it= matches_FL.begin(); it!= matches_FL.end(); ++it) {
// Estrazione degli indici
pointIndexesLeft.push_back(it->queryIdx);
pointIndexesFront.push_back(it->trainIdx);
}
// Convrsione dei keypoints in Point2f
vector<cv::Point2f> selPointsLeft, selPointsFront;
KeyPoint::convert(keypoints_left,selPointsLeft,pointIndexesLeft);
KeyPoint::convert(keypoints_front,selPointsFront,pointIndexesFront);
// Calcolo della matrice fondamentale
Mat F = findFundamentalMat(
Mat(selPointsFront), // points in first image
Mat(selPointsLeft), // points in second image
CV_FM_RANSAC); // 8-point method
/// Rettifico la camera
Mat H1,H2;
stereoRectifyUncalibrated(selPointsFront, selPointsLeft, F, img_front.size(), H1, H2,3);
Mat out_right= Mat::zeros(img_front.rows, img_front.cols, img_front.depth());
Mat out_left= Mat::zeros(img_left.rows, img_left.cols, img_front.depth());
warpPerspective(img_front,out_right, H1, img_front.size(), INTER_LINEAR | WARP_INVERSE_MAP, BORDER_TRANSPARENT);
warpPerspective(img_left,out_left, H2, img_left.size(), INTER_LINEAR | WARP_INVERSE_MAP, BORDER_TRANSPARENT);
imshow("out_right", out_right);
imshow("out_left", out_left);
預先感謝您
我沒有辦法校準相機,因爲它們來自在線數據集,所以我無法計算內在和外在矩陣。我已經計算出兩張圖像之間的匹配。然後我已經計算了F矩陣和「stereoRectifyUncalibrated」H1和H2,然後是視差圖。我從視差圖和「虛構」Q矩陣計算了「reprojectImageTo3D」(我不知道如何構建這個矩陣,所以我使用了身份矩陣)。你對Triangulate意味着什麼?你可以更具體嗎?我想使用3D功能(如果你有任何想法使用什麼功能)進行識別 – Gappa