OpenPose で人の動きを取得し、3D再構成するシリーズの第2回です。Part 1 では OpenPose を導入して2Dキーポイントを取得しました。今回は、複数カメラの2Dキーポイントを正確な3Dに変換するために不可欠なカメラキャリブレーションを扱います。Part 1 を未見の方は先にそちらから(本記事は OpenPose が動く前提です)。

カメラキャリブレーションは、次の4つのマイルストーンで進めます。
- 放射・接線方向の歪み(Radial & tangential distortion)
- カメラの内部・外部パラメータ(Intrinsics & extrinsics)
- 投影行列(Projection matrix)
- バンドル調整(Bundle adjustment)
1. 放射・接線方向の歪み
カメラのレンズは直線を歪ませます(フレーム端で壁やチェッカーボードが湾曲して見える)。歪みはフレームの端ほど大きく、補正しないと以降の精度が下がります。MATLAB・Python/OpenCV など多くのライブラリで補正できますが、本チュートリアルでは、最適化を対話的に可視化できて扱いやすい MATLAB の Camera Calibrator アプリを使います。

MATLAB で Apps → Camera Calibrator(無ければインストール)。チェッカーボードのフレームを追加します。撮影時は、ボードをフレーム内で動かし、特に端に持っていき、様々な角度に傾けると、係数を精度よく推定できます。パターンは Checkerboard を選び、マスのサイズ(ここでは 25 mm)を入力。MATLAB が各フレームの角(コーナー)を検出します。

Options で放射歪み係数を2つか3つ選び(歪みが強ければ3)、必要なら接線歪み/スキューも追加します(ここでは放射のみ)。Calibrate を押すと、再投影誤差の棒グラフ(このデモは平均誤差 0.51 px)とチェッカーボード姿勢の3D表示が出ます。しきい値をドラッグして誤差の大きいフレームを除外し、再計算。納得したらパラメータをエクスポートすると、歪み係数とカメラの内部パラメータ行列が得られます(次で使います)。

2. 内部・外部パラメータ
内部パラメータ(Intrinsics)はカメラ内部の値で、焦点距離(焦点から像面までの距離)と主点(像面のx/y中心)です。これらを内部パラメータ行列にまとめます(Camera Calibrator が出力)。
外部パラメータ(Extrinsics)は、世界座標系に対するカメラの姿勢で、回転行列と並進ベクトル(カメラがどれだけ離れ、どの向きを見ているか)で表します。内部パラメータと歪み係数があれば、OpenCV の cv2.undistortPoints に「点・内部パラメータ行列・歪み係数」を渡して2D点の歪みを補正できます。

3. 投影行列
投影行列は、内部と外部パラメータを1つの 3×4 行列にまとめたもので、3Dの世界座標点を2Dの画像点に対応づけます。求め方は主に2つ:
- チェッカーボード法 — 外部パラメータと歪みを同時に計算できるが、全カメラが同じチェッカーボードを同時に見る必要がある。被験者を360度囲むカメラ配置では非現実的。
- キャリブレーションケージ(校正枠) — 3D座標が既知の点を、全カメラから同時に見える剛体。本チュートリアルはこちら。

ケージでは各基準点の3D座標(例: (0,0,0)、(0,50,0)、(0,100,0)。マーカー間50 cm、ポール間100 cm)と、各カメラでの対応する2D画像点 (u, v) が分かります。このデモは12台のカメラ・12基準点。手順:
- 3Dと2D座標を標準化(DLTの解の品質が上がる)。
- 各点の3D↔2D対応を DLT(Direct Linear Transform)の式に整形し、1点あたり2行(12点で24行)を積み上げて大きな行列に。
- 特異値分解(SVD)を適用。最後の成分から投影行列が得られる。
- 逆標準化して最終的な投影行列を得る。
これをカメラごとに繰り返します。(動画のDLT・再構成コードは、著者がクレジットしているオープンソースの GitHub リポジトリを基に改変したものです。)
4. バンドル調整
最後にバンドル調整で投影行列を精密化します。最小二乗最適化(SciPy の least_squares)で、既知の3D校正点と、全カメラ視点から再構成した3D点との誤差を最小化します。結果として、最適化された投影行列(各 3×4・12パラメータ)がカメラ台数分(ここでは12台)得られます。
バンドル調整は3D再構成に依存するため、ここでは設定までにとどめ、詳細は Part 3 で扱います。
デモのセットアップ
全体を通して、被験者を約360度囲む12台のカメラ、既知3D点を持つキャリブレーションケージ(マーカー間50 cm、ポール間100 cm)、25 mm のチェッカーボード(歪み補正は43フレーム)を使用しています。
次回
歪みを補正し、投影行列を校正できたら、いよいよ Part 3 は3D再構成です。全カメラの2Dキーポイントを三角測量して3Dの動きに復元します。見逃さないよう、YouTube のチャンネル登録をぜひ。
著者について
Takashi Fukushima — スポーツ・運動科学 × Human Pose Estimation × Computer Vision × XR を横断して研究・開発しています。
- YouTube(登録): Takashi Fukushima|Sports Science & Pose Estimation
- 研究(ORCID): orcid.org/0000-0002-7318-3384
- ウェブサイト: takashifukushima.com
- お問い合わせ: お問い合わせフォーム