Azure Kinect 調整関数を使用する

調整関数を使用すると、Azure Kinect デバイス上の各センサーの座標系間でポイントを変換できます。 イメージ全体の変換を必要とするアプリケーションでは、変換関数で使用できる高速操作を利用できます。

調整データを取得する

座標系変換を実行するには、デバイスの調整値を取得する必要があります。 調整データは k4a_calibration_t データ型に格納されます。 これは、関数 k4a_device_get_calibration ()を使用してデバイスから取得されます。 調整データは、各デバイスだけでなく、カメラの動作モードにも固有です。 したがって、k4a_device_get_calibration () には、入力として depth_mode および color_resolution パラメーターが必要です。

OpenCV の互換性

調整パラメーターは OpenCV と互換性があります。 個々のカメラ調整パラメーターの詳細については、OpenCV のドキュメントもご覧ください。 また、k4a_calibration_t 型とそれに対応する OpenCV データ構造との変換を示した、SDK の OpenCV 互換性の例もご覧ください。

座標変換関数

次の図は、Azure Kinect のさまざまな座標系と、それらを変換する関数を示しています。 図を単純にするために、ジャイロスコープと加速度計の 3D 座標系は省略しています。

座標変換

レンズの歪みに関する注記:2D 座標は、SDK 内の歪んだイメージを常に参照します。 この SDK の歪み補正の例では、イメージの歪み補正を示しています。 一般に、3D ポイントはレンズの歪みの影響を受けません。

3D 座標系間で変換する

関数 k4a_calibration_3d_to_3d () は、カメラの非組み込み調整を使用して、ソース座標系の 3D ポイントを、ターゲットの座標系の 3D ポイントに変換します。 ソースとターゲットは、4 つの 3D 座標系 (カラー カメラ、深度カメラ、ジャイロスコープ、または加速度計) のいずれかに設定できます。 ソースとターゲットが同一の場合は、未変更の入力 3D ポイントが出力として返されます。

2D および 3D 座標系間で変換する

関数 k4a_calibration_3d_to_2d () は、ソース座標系の 3D ポイントをターゲット カメラの 2D ピクセル座標に変換します。 この関数は、多くの場合、射影関数と呼ばれます。 ソースを 4 つの 3D 座標系のいずれかに設定できますが、ターゲットは深度またはカラー カメラである必要があります。 ソースとターゲットが異なる場合、入力 3D ポイントは k4a_calibration_3d_to_3d () を使用して、ターゲット カメラの 3D 座標系に変換されます。 3D ポイントがターゲット カメラの座標系に表示されると、対応する 2D ピクセル座標が、ターゲット カメラの組み込み調整を使用して計算されます。 3D ポイントがターゲット カメラの可視領域から外れた場合、有効な値は 0 に設定されます。

関数 k4a_calibration_3d_to_2d () は、ソース カメラの 2D ピクセル座標をターゲット カメラの座標系の 3D ポイントに変換します。 ソースは、カラーまたは深度カメラである必要があります。 ターゲットは、4 つの 3D 座標系のいずれかに設定できます。 2D ピクセル座標に加えて、ソース カメラのイメージのピクセルの深度値 (ミリメートル単位) は、関数への入力として必要です。カラー カメラのジオメトリで深度値を取得するには、関数 k4a_transformation_depth_image_to_color_camera () を使用する方法があります。 関数は、ソース カメラの組み込み調整を使用して、ソース カメラの中心点から指定されたピクセル座標を通る 3D 射線を計算します。 この場合、深度値が、この射線の3D ポイントの正確な位置を検索するために使用されます。 この操作は、多くの場合、逆射影関数と呼ばれます。 ソース カメラとターゲット カメラが異なる場合、関数は、k4a_calibration_3d_to_3d () を使用して、3D ポイントをターゲットの座標系に変換します。 2D ピクセル座標がソース カメラの可視領域から外れた場合、有効な値は 0 に設定されます。

2D 座標系間で変換する

関数 k4a_calibration_2d_to_2d() は、ソース カメラの 2D ピクセル座標をターゲット カメラの 2D ピクセル座標に変換します。 ソースとターゲットは、カラーまたは深度カメラに設定する必要があります。 この関数には、カメラ イメージのピクセルの深度値 (ミリメートル単位) が入力として必要です。カラー カメラのジオメトリで深度値を取得するには、関数 k4a_transformation_depth_image_to_color_camera () を使用する方法があります。 k4a_calibration_2d_to_3d () を呼び出して、ソース カメラ システムの 3D ポイントに変換します。 続いて k4a_calibration_3d_to_2d () を呼び出して、ターゲット カメラ イメージの 2D ピクセル座標に変換します。 k4a_calibration_2d_to_3d() または k4a_calibration_3d_to_2d() が無効な結果が返された場合、有効な値は 0 に設定されます。

次のステップ

これでカメラ調整について学習したので、次の方法も学習できます

次の内容も確認できます

座標系