2

cvCalibrateCamera2() を使用してカメラのキャリブレーションを行おうとしていますが、ストレージの問題に遭遇しました: 返されたintrinsic_matrixとdistortion_coeffsに無効な浮動小数点数(=NaN)が含まれています。

それが私がやっていることです(休憩はこれを完全に残す責任があります):

image_points     =cvCreateMat(board_total,2,CV_32FC1); if (!image_points) break;
object_points    =cvCreateMat(board_total,3,CV_32FC1); if (!object_points) break;
point_counts     =cvCreateMat(1,1,CV_32SC1);           if (!point_counts) break;
intrinsic_matrix =cvCreateMat(3,3,CV_32FC1);           if (!intrinsic_matrix) break;
corners          =new CvPoint2D32f[board_total];       if (!corners) break;
distortion_coeffs=cvCreateMat(4,1,CV_32FC1);           if (!distortion_coeffs) break;

int found = cvFindChessboardCorners(gray_image, board_sz, corners,corner_count,CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS );
if (found==0) break;

「gray_image」は私の入力画像で、「corners」には正しいチェス盤のコーナー座標が含まれています。

cvFindCornerSubPix(gray_image, corners,*corner_count, cvSize(11,11),cvSize(-1,-1), cvTermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 30, 0.1 ));
for (j=0; j<board_total; j++)
{
    CV_MAT_ELEM(*image_points, float,0,0) = corners[j].x;
    CV_MAT_ELEM(*image_points, float,0,1) = corners[j].y;
    CV_MAT_ELEM(*object_points,float,0,0) = (float) j/board_w;
    CV_MAT_ELEM(*object_points,float,0,1) = (float) (j%board_w);
    CV_MAT_ELEM(*object_points,float,0,2) = 0.0f;
}
CV_MAT_ELEM(*point_counts, int,0,0) = board_total;

CV_MAT_ELEM( *intrinsic_matrix, float, 0, 0 ) = 1.0f;
CV_MAT_ELEM( *intrinsic_matrix, float, 1, 1 ) = 1.0f;
cvCalibrateCamera2(object_points,image_points,point_counts,cvGetSize( gray_image ),intrinsic_matrix,distortion_coeffs,NULL,NULL,0);

ここで cvCalibrateCamera2() は機能しているようで、例外は発生しませんが、結果を取得しようとすると、すべてのフロート「d」が無効になります:

float d;
for (i=0; i<3; i++)
 for (j=0; j<3; j++)
{
   d=CV_MAT_ELEM(*intrinsic_matrix,float,i,j);
   calib_data->intrinsic[i][j]=(int)OAPC_ROUND(d*1000000,0);
}
for (i=0; i<4; i++)
{
   d=CV_MAT_ELEM(*distortion_coeffs,float,i,0);
   calib_data->distortion[i]=(int)OAPC_ROUND(d*100000000,0);
}

ここで何が問題なのですか?

4

0 に答える 0