JA EN

カメラキャリブレーションの基礎 - 内部パラメータと歪み補正の実践ガイド

· 約 9 分で読めます

カメラキャリブレーションとは - なぜ必要なのか

カメラキャリブレーション (Camera Calibration) は、カメラの光学的・幾何学的特性を数学的に記述するパラメータを推定する処理です。3D 空間の点が 2D 画像上のどの位置に投影されるかを正確に予測するために不可欠であり、コンピュータビジョンのほぼすべてのタスクの基盤となります。

キャリブレーションが必要な場面:

カメラパラメータの分類:

内部パラメータはカメラとレンズの組み合わせが変わらない限り一定ですが、ズームレンズの場合は焦点距離ごとにキャリブレーションが必要です。外部パラメータはカメラが移動するたびに変化します。一般的なキャリブレーションでは、既知のパターン (チェスボード等) を複数角度から撮影し、対応点から全パラメータを同時推定します。

ピンホールカメラモデル - 投影の数学的記述

ピンホールカメラモデルは、レンズの厚みを無視し、光が 1 点 (ピンホール) を通過して像面に投影される理想的なカメラを数学的に記述します。実際のカメラの近似モデルとして広く使用されます。

投影方程式: 3D 空間の点 (X, Y, Z) が画像上の点 (u, v) に投影される関係は、以下の行列方程式で表されます。

s[u, v, 1]^T = K[R|t][X, Y, Z, 1]^T

ここで K は内部パラメータ行列 (カメラ行列)、[R|t] は外部パラメータ (3x4 行列)、s はスケール因子です。

内部パラメータ行列 K:

K = [[fx, 0, cx], [0, fy, cy], [0, 0, 1]]

一般的なカメラの内部パラメータ例: iPhone 14 Pro (メインカメラ): fx ≈ 3,000 px、cx ≈ 2,016 px、cy ≈ 1,512 px (4,032 × 3,024解像度)。GoPro Hero 11: fx ≈ 1,500 px (広角のため焦点距離が短い)。産業用カメラ (5MP、8mm レンズ): fx ≈ 2,800 px。

焦点距離が大きいほど望遠 (狭い画角)、小さいほど広角 (広い画角) になります。主点のずれが大きい場合はレンズの取り付け精度に問題がある可能性があります。

レンズ歪みモデル - 放射歪みと接線歪み

実際のレンズは理想的なピンホールモデルからの逸脱 (歪み) を生じます。歪みを正確にモデル化し補正することで、計測精度が大幅に向上します。OpenCV では 5 つの歪み係数 (k1, k2, p1, p2, k3) を標準的に使用します。

放射歪み (Radial Distortion): レンズの中心からの距離に応じて発生する歪みです。光軸から離れるほど歪みが大きくなります。

x_distorted = x(1 + k1*r² + k2*r⁴ + k3*r⁶)

y_distorted = y(1 + k1*r² + k2*r⁴ + k3*r⁶)

ここで r² = x² + y² (正規化座標での中心からの距離)。一般的な値: 広角レンズ k1 ≈ -0.3、標準レンズ k1 ≈ -0.05、望遠レンズ k1 ≈ 0.01。

接線歪み (Tangential Distortion): レンズとセンサーが完全に平行でない場合に発生する歪みです。製造精度に依存し、通常は放射歪みより小さい値です。

x_distorted = x + 2*p1*x*y + p2*(r² + 2*x²)

y_distorted = y + p1*(r² + 2*y²) + 2*p2*x*y

一般的な値: p1, p2 ≈ ±0.001。高品質なレンズでは無視できるレベルですが、安価なレンズや Web カメラでは補正が必要です。GoPro のような超広角レンズでは、さらに高次の歪み係数 (k4, k5, k6) や薄プリズムモデルが必要になる場合があります。

Zhang 法によるキャリブレーション手順

Zhang 法 (2000) は、平面パターン (チェスボード) を複数角度から撮影するだけでカメラの全パラメータを推定できる実用的な手法です。特別な装置が不要で、OpenCV に完全実装されているため、最も広く使用されるキャリブレーション手法です。

必要な機材:

撮影のガイドライン:

OpenCV での実装手順:

再投影誤差の評価: キャリブレーション結果の品質は再投影誤差 (Reprojection Error) で評価します。推定パラメータで 3D 点を画像に再投影し、検出点との距離を計算します。良好なキャリブレーションでは 0.1-0.5 ピクセル、許容範囲は 1.0 ピクセル以下です。1.0 を超える場合は撮影条件やパターン検出を見直す必要があります。

歪み補正の実装と応用

キャリブレーションで得られた歪み係数を使って、撮影画像の歪みを除去する処理を解説します。歪み補正は 3D 計測の前処理として必須であり、正確な補正が後続処理の精度を決定します。

OpenCV での歪み補正:

補正後の画像サイズ: 歪み補正により画像の端が欠けるため、cv2.getOptimalNewCameraMatrix() で新しいカメラ行列を計算します。alpha=0 で黒い領域を完全に除去 (画像が小さくなる)、alpha=1 で全ピクセルを保持 (黒い領域が残る) します。用途に応じて alpha を 0-1 の間で調整します。

魚眼レンズの補正: 通常の歪みモデルでは 180° 以上の画角を持つ魚眼レンズに対応できません。OpenCV の cv2.fisheye モジュールは等距離射影モデルを使用し、超広角レンズのキャリブレーションと補正に対応しています。cv2.fisheye.calibrate()cv2.fisheye.undistortImage() を使用します。

キャリブレーション結果の保存: 推定したパラメータは YAML または JSON 形式で保存し、アプリケーションで読み込んで使用します。OpenCV の cv2.FileStorage クラスで簡単に保存・読み込みが可能です。カメラとレンズの組み合わせが変わらない限り、一度のキャリブレーションで長期間使用できます。

高精度キャリブレーションのテクニックとトラブルシューティング

産業用途や研究用途で要求される高精度なキャリブレーション (再投影誤差 0.1 ピクセル以下) を実現するためのテクニックと、よくある問題の解決策を解説します。

高精度化のテクニック:

トラブルシューティング:

自動キャリブレーション: SLAM (Simultaneous Localization and Mapping) システムでは、特徴点の追跡から自動的にカメラパラメータを推定するセルフキャリブレーションが使用されます。ORB-SLAM3 や COLMAP は、シーン内の自然な特徴点から内部パラメータを推定する機能を持っています。精度はパターンベースに劣りますが、事前準備なしで利用できる利点があります。

関連記事

単眼深度推定の技術と応用 - 1 枚の画像から奥行きを推定する手法

単眼深度推定の原理から MiDaS、DPT などの最新モデル、自動運転や AR への応用まで、深度マップ生成技術を体系的に解説します。

パノラマ合成のアルゴリズム詳解 - 特徴点検出からシームレスブレンディングまで

複数画像からパノラマを合成する技術を詳解。特徴点マッチング、ホモグラフィ推定、画像ワーピング、マルチバンドブレンディングの各ステップを実装レベルで解説します。

ステレオビジョンと距離計測 - 視差から 3D 情報を復元する技術

ステレオビジョンの原理から実装まで完全解説。エピポーラ幾何、ステレオマッチング、視差マップから距離計算までの手順をコード例とともに紹介します。

ブレ除去 (デブラー) の原理と実践 - モーションブラーからピンボケまで

画像のブレ除去技術を体系的に解説。ウィーナーフィルタ、ブラインドデコンボリューション、深層学習ベースの最新手法まで原理と実装を網羅します。

工業検査における画像処理技術 - 外観検査から寸法計測まで

製造業の品質管理で使われる画像処理技術を体系的に解説。欠陥検出、寸法計測、パターンマッチング、深層学習による異常検知の実践手法を紹介します。

パース補正の原理と実践 - 建築写真の歪みを正確に修正する技術

透視変換の数学的原理からソフトウェアでの実践的な補正手順まで解説。建築写真やドキュメントスキャンのパースペクティブ歪みを正確に修正する方法を紹介します。

関連用語