Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 开放式CV——SfM的几种方法_Opencv_Computer Vision_Camera Calibration - Fatal编程技术网

Opencv 开放式CV——SfM的几种方法

Opencv 开放式CV——SfM的几种方法,opencv,computer-vision,camera-calibration,Opencv,Computer Vision,Camera Calibration,我有一个任务: 我们有一个系统在工作,其中一个摄像头围绕一个人的头部做一个半圆形。我们知道摄像机矩阵和每帧的旋转/平移。(失真和更多…但我希望首先在没有这些参数的情况下工作) 我的任务是,我只有相机矩阵,这是不变的,在这个移动,和图像(超过100)。现在我必须一帧一帧地获得平移和旋转,并将其与现实世界中的旋转和平移进行比较(从我拥有的系统中,但仅用于比较,我也证明了它!) 到目前为止,我采取的第一步是: 使用OpenCV Cookbook中的robustMatcher-works finde-4

我有一个任务:

我们有一个系统在工作,其中一个摄像头围绕一个人的头部做一个半圆形。我们知道摄像机矩阵和每帧的旋转/平移。(失真和更多…但我希望首先在没有这些参数的情况下工作)

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

到目前为止,我采取的第一步是:

  • 使用OpenCV Cookbook中的robustMatcher-works finde-40-70匹配每帧-可见外观非常好
  • 我使用GetBasic()获取基本矩阵。我使用来自robustMatcher和RANSAC的鲁棒点
  • 当我得到F时,我可以用我的相机矩阵K得到Essentialmatrix E,如下所示:
  • 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具有三角剖分功能,仅此一项