匹配对象的3D旋转

时间:2013-08-18 12:45:36

标签: opencv computer-vision

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

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

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

1 个答案:

答案 0 :(得分:1)

由于几何模糊,不可能从任意对象的一个​​图像中提取3D旋转。您可以获得与对象的不同坐标/方向相同的图像。但是您可以在屏幕图像平面中提取旋转角度。 您可以使用时刻来解决此问题。首先,你应该将图像二值化。你可以使用一些颜色过滤teqnique。当您具有二值化图像时,您可以评估时刻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