2013-08-18 3 views
-3

Я новичок в opencv, но хочу учиться. Мне интересно, возможно ли что-то, описанное ниже.3D-поворот 3D-объекта матча

Камера видит белый карандаш (трубка, цилиндр и т. Д.) На темном фоне. Я хочу извлечь вращение объекта в 3D-пространстве и использовать его в своей программе. Он не должен быть очень точным или быстрым (даже ~ 10 кадров в секунду).

Я, очевидно, ищу решение, но для некоторого руководства: что посмотреть, что читать, как эта процедура называется профессионалами.

ответ

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.