【问题标题】:Match object's 3D rotation [closed]匹配对象的 3D 旋转
【发布时间】:2013-08-18 12:45:36
【问题描述】:

我是opencv的新手,但愿意学习。我想知道下面描述的事情是否可行。

相机在深色背景上看到一支白色铅笔(管、圆柱体等)。我想在 3D 空间中提取对象的旋转并在我的程序中使用它。它不必非常准确或快速(即使 ~10fps 也可以)。

我显然在寻找解决方案,但需要一些指导:看什么、读什么、专业人员如何调用此过程。

【问题讨论】:

    标签: opencv computer-vision


    【解决方案1】:

    由于几何模糊,不可能从任意对象的一张图像中提取 3D 旋转。您可以获得具有不同对象坐标/方向的相同图像。但是您可以在屏幕图像平面中提取旋转角度。 您可以使用时刻来解决此问题。首先你应该二值化图像。您可以使用一些颜色过滤技术来制作它。当您将图像二值化后,您可以评估矩 http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html。完成后,您可以计算角度如下:

    ...
        double M00=moments.m00;
        double M20=moments.m20;
        double M02=moments.m02;
        double M11=moments.m11;
        // Center of mass
        double xc=M10/M00;
        double yc=M01/M00;        
    
        double A=(M20/M00)-xc*xc;
        double B=2*((M11/M00)-xc*yc);
        double C=(M02/M00)-yc*yc;
        // Ellipse axis
        double LL=sqrt( ( (A+C)+sqrt(B*B+(A-C)*(A-C)) )/2)*2;
        double LW=sqrt( ( (A+C)-sqrt(B*B+(A-C)*(A-C)) )/2)*2;
    
        // 
        M20=moments.mu20;
        M02=moments.mu02;
        M11=moments.mu11;
    
        double theta=(atan2(2*M11,(M02-M20))/2)*(180/M_PI);
    ...
    

    如果您使用已知大小的平面对象,则可以估计 3D 旋转。您可以估计单应矩阵。并将其分解为旋转和平移。例如这里描述的:http://hal.archives-ouvertes.fr/docs/00/17/47/39/PDF/RR-6303.pdf

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 2011-09-02
      相关资源
      最近更新 更多