2 Stimmen

Verwendung des POSIT-Algorithmus in OpenCV

Ich übe den POSIT-Algorithmus in OpenCV, indem ich dem Tutorial folge http://opencv.willowgarage.com/wiki/Posit

Mein Ziel ist es, die Pose eines 3D-Objekts zu schätzen und insbesondere das Problem der unbekannten Tiefe zu lösen. In diesem Tutorial handelt es sich um einen Würfel mit einer Seitenlänge von 10 mm.

Teil des Codes:

std::vector<CvPoint2D32f> projectedPoints;
...
CvMat poseMatrix = cvMat( 4, 4, CV_32F, pose );  // pose moves object coord. to camera coord.
for ( size_t  p=0; p<modelPoints.size(); p++ )
{
    float modelPoint[] =  { modelPoints[p].x, modelPoints[p].y, modelPoints[p].z, 1.0f };
    CvMat modelPointMatrix = cvMat( 4, 1, CV_32F, modelPoint );
    float point3D[4];
    CvMat point3DMatrix = cvMat( 4, 1, CV_32F, point3D )
    //Transform the points from model space coordinates to camera space
    //The pose must be transposed because is in OpenGL format
    cvGEMM( &poseMatrix, &modelPointMatrix, 1.0, NULL, 0.0, &point3DMatrix, CV_GEMM_A_T );
    //Project the transformed 3D points
    CvPoint2D32f point2D = cvPoint2D32f( 0.0, 0.0 );
    if ( point3D[2] != 0 )
    {
            point2D.x = cvmGet( intrinsics, 0, 0 ) * point3D[0] / point3D[2]; // this is fx * X/Z
            point2D.y = cvmGet( intrinsics, 1, 1 ) * point3D[1] / point3D[2]; // this is fy * Y/Z
    }
    projectedPoints.push_back( point2D );
}

Gemäß der Gleichung ist Z bereits bekannt. Wie kann POSIT unbekannte Tiefe lösen? oder in diesem Tutorial gelöst?

Irgendeine Idee, bitte!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X