Opencv 开放式CV——SfM的几种方法
我有一个任务: 我们有一个系统在工作,其中一个摄像头围绕一个人的头部做一个半圆形。我们知道摄像机矩阵和每帧的旋转/平移。(失真和更多…但我希望首先在没有这些参数的情况下工作) 我的任务是,我只有相机矩阵,这是不变的,在这个移动,和图像(超过100)。现在我必须一帧一帧地获得平移和旋转,并将其与现实世界中的旋转和平移进行比较(从我拥有的系统中,但仅用于比较,我也证明了它!) 到目前为止,我采取的第一步是:Opencv 开放式CV——SfM的几种方法,opencv,computer-vision,camera-calibration,Opencv,Computer Vision,Camera Calibration,我有一个任务: 我们有一个系统在工作,其中一个摄像头围绕一个人的头部做一个半圆形。我们知道摄像机矩阵和每帧的旋转/平移。(失真和更多…但我希望首先在没有这些参数的情况下工作) 我的任务是,我只有相机矩阵,这是不变的,在这个移动,和图像(超过100)。现在我必须一帧一帧地获得平移和旋转,并将其与现实世界中的旋转和平移进行比较(从我拥有的系统中,但仅用于比较,我也证明了它!) 到目前为止,我采取的第一步是: 使用OpenCV Cookbook中的robustMatcher-works finde-4
cv::mate=K.t()*F*K//可在《圣经》第9.12章中找到
现在我们需要用奇异值分解从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
这是我的真实身份
我的计划是:
对所有点进行三角剖分以获得三维点
将帧i与帧i++连接
以某种方式可视化我的3D点李>
现在我的问题是:
这个健壮的匹配器有日期吗?还有别的方法吗李>
使用我在第二步中描述的这些点是错误的吗?它们必须被扭曲或其他东西转化吗
这里我提取的R和t是多少?是否是camera1和camera2之间的旋转和平移以及camera1的视角李>
当我在圣经、报纸或其他地方阅读时,我发现R和t有四种可能!
'P′=[UWV^T|+u3]order[UWV^T|−u3]order[UW^TV^T |+u3]order[UW^TV^T|−u3]'
P’是第二个图像的投影矩阵。
这意味着t可能是-或+和R可能完全不同?!
我发现我应该将一个点计算成3D,并找出这一点是否位于两个摄像头前面,然后我找到了正确的矩阵!
我在互联网上找到了一些代码,他只是说了这些,没有进一步计算:
cv::Mat R1=svd.u*cv::Mat(W)*svd.vt
及
t=svd.u.col(2)//=u3
为什么这是正确的?如果不是,我将如何在OpenCV中进行三角剖分?
我把这个译文和给我的译文作了比较。(首先,我必须转移相对于camera1的平移和旋转,但我现在得到了这个!)但它不一样。我的程序的值是从正跳到负。但它应该更恒定,因为相机在一个恒定的圆中移动。
我确信某些轴可能会被切换。我知道翻译是从-1到1,但我想我可以从我的结果中提取一个因子来比较,然后应该是相似的李>
以前有人做过这样的事吗
很多人用棋盘来校准相机,但我不能用这种方法来获得外部参数
我知道VisualSFM可以以某种方式做到这一点。(youtube上有一段视频,其中有人绕着一棵树走,并从这些图片中获得使用visual sfm重建这棵树的图像)
这和我要做的差不多
最后一个问题:
有人知道可视化我的3D点的简单方法吗?我更喜欢MeshLab。有经验吗
很多人用棋盘来校准相机,但我不能用这种方法来获得外部参数
棋盘或棋盘用于查找内部/内部矩阵/参数,而不是外部参数。你是说你已经有了内部矩阵,我想这就是你的意思
我们知道摄像机矩阵和
你在youtube上看到的那些视频也做了同样的事情,摄像机已经校准,也就是说,内部矩阵是已知的
这个健壮的匹配器有日期吗?还有别的方法吗
我没有那本书,所以看不到密码也回答不了这个问题
使用我在第二步中描述的这些点是错误的吗?它们必须被扭曲或其他东西转化吗
首先需要取消径向失真,请参见
这里我提取的R和t是多少?是否是camera1和camera2之间的旋转和平移以及camera1的视角
R是第二个摄影机在第一个摄影机坐标系中的方向。T是第二个摄像机在坐标系中的位置。这些有几个用途
当我在圣经、报纸或其他地方阅读时,我发现有4种可能
阅读圣经的相关章节,这里有很好的解释,三角测量是一种幼稚的方法,这里有更好的解释
有人知道可视化我的3D点的简单方法吗
要在Meshlab中查看它们,一个非常简单的方法是将3D点的坐标保存在PLY文件中,这是一种非常简单的格式,并且受到Meshlab和几乎所有其他3D模型查看器的支持。在本文“五点相对姿势问题的有效解决方案”中,Nistér解释了一种非常好的方法,可以确定四种配置中哪一种是正确的(谈论r和T)
我试过健壮的匹配器,我认为它非常好。这个匹配器的问题是速度非常慢,因为它使用SURF,也许你应该尝试使用其他检测器和提取器来提高速度。我还认为OpenCV中计算基本矩阵的函数不需要Ransac参数,因为方法速率和对称性在去除异常值方面做得很好,你应该尝试使用8点参数
OpenCV具有三角剖分功能,仅此一项