gpt4 book ai didi

c++ - 用于 3D 重建的 OpenCV 未校准相机校正

转载 作者:太空宇宙 更新时间:2023-11-03 22:34:10 24 4
gpt4 key购买 nike

我正在运行 OpenCV 2.4.2。

我的项目包含 3D 人脸识别。

我正在尝试根据未校准相机拍摄的一对图像创建 3D 模型。
我的目标是获得一些用于识别过程的 3D 特征。

我正在尝试校准和校正相机,但没有得到好的结果。
我做了这些步骤:

  • 从 2 张图像中提取 SURF 特征
  • 找到 2 个图像特征之间的对应关系
  • 借助 findFundamentalMat 计算了基本矩阵
  • 使用stereoRectifyUncalibrated 获取单应矩阵
  • 使用 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);

最佳答案

首先,第一次检测/识别与 3D 重建无关。假设您确实想通过一台未校准的相机对物体进行 3D 重建,您通常有两种选择:

1) 首先使用校准图案(通常是象棋图案)校准相机;请参阅 camera_calibration.cpp 示例。

2) 你可以同时校准和做 3D 重建,最简单的过程是这样的:首先使用任何特征检测算法提取显着点(特征)(每个都有优点和缺点,但是用任何一个然后你应该得到工作结果),提取找到的特征的描述符,匹配两张条件良好的照片的描述符,找到基本矩阵 F,从 F 中提取两个投影矩阵(3x4 矩阵),三角化匹配的特征,然后继续通过切除递归:使用新照片中已经计算和匹配特征的 3D 点来计算其相机矩阵(内部和外部矩阵),对新照片带来的新特征进行三角测量,并对整个重建空间进行束调整(相机和 3D 点)。

祝你好运!

关于c++ - 用于 3D 重建的 OpenCV 未校准相机校正,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12468426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com