0

opencv と openNi を使用して、kinect と HD カメラを調整します。RGBDCaptureKinect のメソッドを使用します。

元のコード:

// camera -> world coordinate helper function
void freenect_camera_to_world(freenect_device* dev, int cx, int cy, int wz, double* wx, double* wy)
{
    double ref_pix_size = dev->registration.zero_plane_info.reference_pixel_size;
    double ref_distance = dev->registration.zero_plane_info.reference_distance;

      // We multiply cx and cy by these factors because they come from a 640x480 image,

// but the zero plane pixel size is for a 1280x1024 image.

// However, the 640x480 image is produced by cropping the 1280x1024 image

// to 1280x960 and then scaling by .5, so aspect ratio is maintained, and

// we should simply multiply by two in each dimension.
double factor = 2 * ref_pix_size * wz / ref_distance;
*wx = (double)(cx - DEPTH_X_RES/2) * factor;
*wy = (double)(cy - DEPTH_Y_RES/2) * factor;
}

私は freenect_camera_to_world 関数を自分で書いていますが、それが正しいのかわかりませんか?

void freenect_camera_to_world(int cx,int cy,int wz, double *wx,double *wy)
{
double ref_pix_size = 0.1042; //how can I know these two value for my kienct?
double ref_distance = 120.0; 

double factor = 2*ref_pix_size*wz/ref_distance;
*wx = (double)(cx - DEPTH_X_RES/2)*factor;
*wy = (double)(cy - DEPTH_Y_RES/2)*factor;
}

1、kienct のこれら 2 つの値を知るにはどうすればよいですか?ref_pix_size と ref_distance

2、それは「ゼロプレーンのピクセルサイズは1280x1024の画像用」の基準ですか???

4

1 に答える 1

1

ref_pix_size と ref_distance は各 Kinect のハードウェアに含まれており、Kinect ごとに異なります。これは、工場でハードウェア ボードに接着されたときのわずかな違いにより、深度カメラがビデオ カメラに対して異なる位置に配置されているためです。ただし、次の場所から直接読み取る場合は、心配する必要はありません。

dev->registration.zero_plane_info.reference_pixel_size;
dev->registration.zero_plane_info.reference_distance;

kinect のステレオ キャリブレーション後にそれらを計算できます: http://wiki.ros.org/kinect_calibration/technical ただし、freenect には色と深度の画像を調整するためのかなり優れた既定のパラメーターがあるため、手動でキャリブレーションする必要はありません。 FREENECT_DEPTH_REGISTERED を使用します。

于 2014-04-22T16:43:56.540 に答える