gpt4 book ai didi

opencv - 打开 CV - SfM 的几种方法

转载 作者:太空宇宙 更新时间:2023-11-03 20:49:53 27 4
gpt4 key购买 nike

我有一个任务:

我们有一个系统可以让摄像头围绕人头转半圈。我们知道相机矩阵和每一帧的旋转/平移。 (失真等等......但我想先在没有这些参数的情况下工作)

我的任务是我只有 Camera Matrix 和图像(超过 100 张),它在这个移动过程中是不变的。现在我必须逐帧获取平移和平移,并将其与现实世界中的旋转和平移进行比较(从我拥有但仅用于比较的系统,我也证明了这一点!)

到目前为止我做的第一步:

  1. 使用 OpenCV Cookbook 中的 robustMatcher - 找到工作 - 40-70 匹配每帧 - 可见看起来非常好!
  2. 我用 getFundamental() 得到了 fundamentalMatrix。我使用来自 robustMatcher 和 RANSAC 的稳健点。
  3. 当我得到 F 时,我可以像这样用我的 CameraMatrix K 得到 Essentialmatrix E:

cv::Mat E = K.t() * F * K;//发现于圣经HZ第9.12章

现在我们需要使用 SVD 从 E 中提取 R 和 t。顺便说一句,camera1 的位置只是零,因为我们必须从某个地方开始。

cv::SVD svd(E);
cv::SVD svd(E);

cv::Matx33d W(0,-1,0, //HZ 9.13
1,0,0,
0,0,1);

cv::Matx33d Wt(0,1,0,//W^
-1,0,0,
0,0,1);

cv::Mat R1 = svd.u * cv::Mat(W) * svd.vt; //HZ 9.19
cv::Mat R2 = svd.u * cv::Mat(Wt) * svd.vt; //HZ 9.19

//R1 or R2???
R = R1; //R2

//t=+u3 or t=-u3?
t = svd.u.col(2); //=u3

这是我的真实状态!

我的计划是:

  1. 对所有点进行三角测量以获得 3D 点
  2. 将帧 i 与帧 i++ 连接起来
  3. 以某种方式可视化我的 3D 点!

现在我的问题是:

  1. 这个强大的匹配器过时了吗?还有其他方法吗?
  2. 我在第二步中描述的使用这些点是否错误?一定要用失真之类的方式转换吗?
  3. 我在这里提取的 R 和 t 是什么?是从camera1的角度来看camera1和camera2之间的旋转和平移吗?
  4. 当我阅读圣经、论文或其他地方时,我发现 R 和 t 有 4 种可能!´P′ = [UWV^T |+u3] 或 [UWV^T |−u3] 或 [UW^TV^T |+u3] 或 [UW^TV^T |−u3]´P´ 是第二幅图像的投影矩阵。这意味着 t 可能是 - 或 + 而 R 可能完全不同?!我发现我应该计算一个点到 3D 中并找出这个点是否在两个相机的前面,然后我找到了正确的矩阵!我在网上找到了一些这段代码,他只是说这没有进一步计算:cv::Mat R1 = svd.u * cv::Mat(W) * svd.vtt = svd.u.col(2);//=u3为什么这是正确的?如果不是——我将如何在 OpenCV 中进行三角测量?我将这个翻译与给我的翻译进行了比较。 (首先我必须将平移和旋转与 camera1 相关,但我现在明白了!)但它不一样。我的程序的值只是让我们称它为从正负跳转。但它应该更恒定,因为相机在一个恒定的圆圈中移动。我确信某些轴可能会被切换。我知道翻译只是从 -1 到 1,但我想我可以从我的结果中提取一个因素到我的比较值,然后它应该是相似的。

以前有人做过这样的事情吗?

很多人用棋盘来标定相机,但我不能用这种方法来获取外参数。

我知道视觉 sfm 可以以某种方式做到这一点。 (在 youtube 上有一个视频,其中有人绕着一棵树走,并从这些图片中使用视觉 sfm 重建这棵树)这与我必须做的完全相同。

最后一个问题:

有人知道可视化我的 3D 点的简单方法吗?我更喜欢 MeshLab。有这方面的经验吗?

最佳答案

Many people doing a camera calibration by using a chessboard, but I can't use this method to get the extrinsic parameters.

棋盘或棋盘用于查找内部/内部矩阵/参数,而不是外部参数。你是说你已经有了内部矩阵,我想这就是你的意思

We know the camera matrix and ...

你在youtube上看到的那些视频也是这样做的,摄像头已经校准好了,也就是内部矩阵是已知的。

is this robust matcher dated? is there a other method?

我没有那本书,所以看不到代码也无法回答这个问题。

Is it wrong to use this points as descriped at my second step? Must they be converted with distortion or something?

您需要先取消径向扭曲,参见undistortPoints .

What R and t is this i extract here? Is it the rotation and translation between camera1 and camera2 with point of view from camera1?

R 是第二个相机在第一个相机坐标系中的方向。 T 是第二台摄像机在该坐标系中的位置。它们有多种用途。

When I read at the bible or papers or elsewhere i find that there are 4 possibilities how ....

阅读圣经的相关部分,那里解释得很好,三角剖分是幼稚的方法,那里解释了更好的方法。

Does somebody know an easy way to visualize my 3D Points?

要在 Meshlab 中查看它们,一种非常简单的方法是将 3D 点的坐标保存在 PLY 文件中,这是一种极其简单的格式,并且受到 Meshlab 和几乎所有其他 3D 模型查看器的支持。

关于opencv - 打开 CV - SfM 的几种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11938107/

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