Ter*_*ept 6 opencv computer-vision camera-calibration
我有一个任务:
我们有一个系统工作,相机在人头周围做半个圆圈.我们知道相机矩阵和每帧的旋转/平移.(失真和更多...但我想首先没有这些参数工作)
我的任务是我只有相机矩阵,它在此移动时保持不变,以及图像(超过100).现在我必须逐帧进行平移和旋转,并将其与现实世界中的旋转和平移进行比较(来自我所拥有的系统,但仅用于比较,我也证明了它!)
到目前为止我做的第一步:
cv::Mat E = K.t() * F * K; //Found at the Bible HZ Chapter 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
Run Code Online (Sandbox Code Playgroud)
这是我的实际状态!
我的计划是:
现在我的问题是:
cv::Mat R1 = svd.u * cv::Mat(W) * svd.vt
和
t = svd.u.col(2); //=u3
为什么这是正确的?如果不是 - 我将如何在OpenCV中进行这种三角测量?我把这个翻译与给我的翻译进行了比较.(首先我必须将翻译和旋转转移到camera1,但我现在得到了这个!)但它不一样.我的程序的值只是让我们称它从加上跳过太减去.但它应该更加稳定,因为相机在一个恒定的圆圈中移动.我确信有些轴可能会被切换.我知道翻译只是从-1到1,但我想我可以从我的结果中提取一个因子到我的比较值,然后它应该是类似的.有人之前做过这样的事吗?
很多人通过使用棋盘进行相机校准,但我无法使用此方法获取外部参数.
我知道视觉系统可以以某种方式做到这一点.(在youtube上是一个视频,有人在树上走动,从这些图片中获取使用visual sfm对这棵树进行重建)这与我必须做的完全相同.
最后一个问题:
有人知道可视化我的3D点的简单方法吗?我更喜欢MeshLab.有一些经验吗?
很多人用棋盘进行相机标定,但我无法使用这种方法来获取外在参数。
国际象棋棋盘或棋盘用于查找内部/固有矩阵/参数,而不是外部参数。你是说你已经有了内部矩阵,我想这就是你的意思
我们知道相机矩阵并且......
你在youtube上看到的那些视频也做了同样的事情,相机已经被校准了,也就是说内部矩阵是已知的。
这个强大的匹配器过时了吗?还有其他方法吗?
我没有那本书,所以看不到代码并回答这个问题。
按照我的第二步所述使用这些点是否错误?它们必须通过扭曲或其他方式进行转换吗?
您需要首先取消径向扭曲,请参阅unactorPoints。
我在这里提取的 R 和 t 是什么?是从camera1的角度来看camera1和camera2之间的旋转和平移吗?
R 是第二个相机在第一个相机坐标系中的方向。T 是第二个摄像机在该坐标系中的位置。这些有多种用途。
当我阅读圣经、论文或其他地方时,我发现有 4 种可能性......
阅读圣经的相关部分,那里解释得很好,三角测量是幼稚的方法,那里解释了更好的方法。
有人知道一种简单的方法来可视化我的 3D 点吗?
要在 Meshlab 中查看它们,一种非常简单的方法是将 3D 点的坐标保存在 PLY 文件中,这是一种非常简单的格式,Meshlab 和几乎所有其他 3D 模型查看器都支持。
| 归档时间: |
|
| 查看次数: |
3049 次 |
| 最近记录: |