メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

単一カメラ キャリブレーター アプリの使用

R2026a

カメラ キャリブレーターの概要

カメラ キャリブレーター アプリを使用して、カメラの内部パラメーターを推定できます。これらのカメラ パラメーターはさまざまなコンピューター ビジョンの応用に使用できます。これらのアプリケーションには、イメージからレンズ歪みの影響を除去する、平面オブジェクトを測定する、複数カメラからの 3 次元シーンを再構成するなどの用途があります。

Camera capturing checkerboard calibration patterns posed at various angles. All checkerboard calibration patterns are within the field of view of the camera. Additional workflow diagram; Prepare, Add Images, Calibrate, Evalute, Improve, and Export.

次のワークフローを使用してカメラをキャリブレーションし、ベスト プラクティスに従ってキャリブレーション イメージを準備およびキャプチャし、キャリブレーションの精度を評価します。

カメラ キャリブレーター アプリには、カメラ キャリブレーション ワークフローを実装するための一連の関数が組み込まれています。これらの関数は、MATLAB® ワークスペースで直接使用できます。これらの関数のリストについては、カメラのキャリブレーションのトピックを参照してください。

キャリブレーション パターンの選択

カメラ キャリブレーター アプリは、チェッカーボード、サークル グリッド、AprilTag、ChArUco、およびカスタム検出器のパターンをサポートしています。これらの各パターンおよび印刷可能なパターンを含む PDF ファイルの詳細については、Calibration Patternsを参照してください。このアプリは、最大 195 度の視野 (FOV) をもつカメラをキャリブレーションできます。

キャリブレーション イメージのキャプチャ

最良のキャリブレーション結果を得るには、10 ~ 20 個のキャリブレーション パターンのイメージを使用します。キャリブレーターには少なくとも 3 個のイメージが必要です。非圧縮のイメージまたは PNG などの可逆圧縮形式を使用します。キャリブレーターが機能するには、キャリブレーション パターンとカメラの設定が一連の要件を満たしていなければなりません。カメラの設定およびイメージのキャプチャの詳細については、カメラの準備とカメラ キャリブレーション用イメージの撮影を参照してください。

カメラ キャリブレーター アプリの使用

アプリを開く

  • MATLAB ツールストリップ: [アプリ] タブの [イメージ処理とコンピューター ビジョン] セクションで、[カメラ キャリブレーター] アイコンをクリックします。

  • MATLAB コマンド プロンプト: cameraCalibrator と入力します。

イメージの追加およびカメラ モデルの選択

キャリブレーションを開始するには、イメージを追加しなければなりません。フォルダーから保存済みのイメージを追加したり、カメラから直接イメージを追加したりできます。キャリブレーターはイメージを解析し、イメージがキャリブレーターの要件を満たしていることを確認します。次に、キャリブレーターは選択されたパターンの点を検出します。カメラの設定およびイメージのキャプチャの詳細については、カメラの準備とカメラ キャリブレーション用イメージの撮影を参照してください。

[キャリブレーション] タブの [ファイル] セクションで、[イメージの追加] をクリックして [ファイルから] を選択します。フォルダーごとにこのプロセスを繰り返すことで、複数のフォルダーからイメージを追加できます。

カメラ キャリブレーター アプリは、UVC 準拠の Web カメラで動作します。MATLAB の Web カメラのサポートを使用して、Web カメラからライブ イメージを取得できます。この機能を使用するには、MATLAB Support Package for USB Webcams をインストールしなければなりません。Webcam Acquisition Overviewを参照してください。ライブ イメージを追加するには、次の手順に従います。

  1. [キャリブレーション] タブの [ファイル] セクションで、[イメージの追加] をクリックして [カメラから] を選択します。

    これにより、[カメラ] タブが開きます。システムに接続されている Web カメラが 1 つだけの場合、既定でその Web カメラがアプリによって選択され、ライブ プレビュー ペインが開きます。複数カメラが接続されており、既定以外のカメラを使用したい場合は、[カメラ] リストでそのカメラを選択します。

  2. (オプション) イメージを制御するカメラのプロパティを設定します。[カメラ プロパティ] を選択して、選択したカメラの [カメラ プロパティ] ダイアログ ボックスを開きます。利用可能なプロパティは、デバイスによって異なります。

    スライダーとリストを使用して、利用可能なプロパティの設定を変更します。設定を変更するたびに、プレビュー ペインが動的に更新されます。プロパティの設定が完了したら、ダイアログ ボックスの外側をクリックしてそれを閉じます。

  3. [保存場所] ボックスに、取得したイメージ ファイルを保存する場所を入力します。フォルダーへのパスを入力するか、[参照] ボタンを使用します。指定するフォルダーに対する書き込み権限を持っている必要があります。

  4. キャプチャ パラメーターを設定します。

    • イメージ キャプチャ間隔の秒数を設定するには、[キャプチャ間隔 (秒)] のボックスまたはスライダーを使用します。既定は 5 秒、最小が 1 秒、最大が 60 秒です。

    • イメージ キャプチャの数を設定するには、[キャプチャするイメージの数] のボックスまたはスライダーを使用します。既定は 20 個のイメージ、最小が 2 個のイメージ、最大が 100 個のイメージです。

    既定の構成では、5 秒ごとに 1 個ずつ、合計 20 個のイメージがキャプチャされます。

  5. プレビュー ペインには、RGB データとしてストリーミングされたライブ イメージが表示されます。デバイスのプロパティとキャプチャ設定を調整したら、プレビュー ウィンドウをガイドとして使用して、キャプチャするパターン イメージを取得するためにカメラの位置を合わせます。

  6. [キャプチャ] を選択します。指定された数のイメージがアプリによってキャプチャされ、スナップショットのサムネイルが [データ ブラウザー] ペインに表示されます。自動的にインクリメンタルな名前が付けられ、.png ファイルとしてキャプチャされます。

    [Stop Capture] を選択すると、指定した数のイメージがキャプチャされる前にイメージ キャプチャを停止できます。

    パターンのイメージをキャプチャする際、指定した数のイメージがキャプチャされると、アプリによって [イメージとパターンのプロパティ] ダイアログ ボックスが表示されます。イメージ内のキャリブレーション パターンを選択し、パターンのプロパティを指定します。[OK] をクリックします。

    その後、アプリによって検出結果が計算され、表示されます。

    Detection Results dialog box

  7. [検出結果] ダイアログ ボックスを閉じるには、[OK] をクリックします。

  8. ライブ イメージの取得が終了したら、[イメージ キャプチャを閉じる] を選択して [カメラ] タブを閉じます。

イメージを追加すると、セッションに [イメージとパターンのプロパティ] ダイアログ ボックスが表示されます。キャリブレーターがキャリブレーション パターンを解析する前に、パターン構造を検出しイメージ プロパティを設定できるようにキャリブレーション パターンを選択しなければなりません。このダイアログの詳細については、キャリブレーション パターンの選択とプロパティの設定を参照してください。

キャリブレーターは、追加された各イメージのパターン検出を試み、検出の進行状況を示す進行状況バーのダイアログ ボックスを表示します。いずれかのイメージが除外されると、[検出結果] ダイアログ ボックスが表示され、診断情報が表示されます。結果は、処理されたイメージの合計数と、処理されたイメージのうち、承認、除外、またはスキップされたイメージの数を示します。キャリブレーターは重複するイメージをスキップします。

Detection Results dialog box

除外されたイメージを表示するには、[イメージの表示] をクリックします。キャリブレーターは、重複したイメージに加え、パターン全体を検出できなかったイメージも除外します。検出されない理由として考えられるのは、イメージがぼやけているか、パターンの角度が極端に大きいことです。大きなイメージや多数の要素を含むパターンの場合、検出に時間がかかります。

[データ ブラウザー] ペインには ID 付きのイメージのリストが表示されます。各イメージには、検出されたパターンが含まれています。イメージを表示するには、[データ ブラウザー] ペインからイメージを選択します。

Image selected in Data Browser pane, displayed in Image pane

[イメージ] ペインには、選択したチェッカーボード イメージが表示され、検出点を示す緑色の円が重ねて表示されます。ズーム コントロールを使用して、コーナーが正しく検出されたことを確認できます。黄色の四角は (0,0) の原点を示します。X と Y の矢印は、チェッカーボードの軸の方向を示します。

キャリブレーション

承認されたイメージが満足のいく状態であれば、[キャリブレーション] タブの [キャリブレーション] を選択します。既定のキャリブレーション設定では、カメラ パラメーターの最小セットを使用します。まず、既定の設定でキャリブレーションを実行します。結果を評価した後、設定を調整するか、イメージを追加または削除してから、再度キャリブレーションを行うことで、キャリブレーションの精度を改善できます。標準カメラ モデルと魚眼カメラ モデルを切り替える場合は、再キャリブレーションしなければなりません。

標準カメラ モデルまたは魚眼カメラ モデルを選択できます。[キャリブレーション] タブの [カメラ モデル] セクションで、[標準] または [魚眼] を選択します。

セッションの任意の時点でカメラ モデルを切り替えることができます。カメラ モデルの変更後は、再キャリブレーションしなければなりません。[オプション] を選択して、いずれかのカメラ モデルの設定および最適化にアクセスします。

レンズ歪みが大きいカメラの場合、アプリがカメラの内部パラメーター初期値の計算に失敗することがあります。カメラのメーカー仕様があり、ピクセル サイズ、焦点距離、レンズ特性などがわかっている場合は、カメラの内部パラメーターと半径方向歪みの初期推定値を手動で設定できます。初期推定を設定するには、[オプション]、[最適化オプション] を選択します。

  • [内部パラメーターの初期値を、[fx 0 0; s fy 0; cx cy 1] の形式をもつ 3 行 3 列の行列として指定] を選択してから、3 行 3 列の行列を入力し、初期内部パラメーターを指定します。初期推定値を指定しない場合、関数は線形最小二乗法を使用して内部パラメーターの初期行列を計算します。

  • [半径方向歪みの初期値を、2 要素または 3 要素のベクトルとして指定] を選択し、2 要素または 3 要素のベクトルを入力して半径方向歪みの初期値を指定します。値を指定しない場合、関数はすべての係数の初期値として 0 を使用します。

キャリブレーション パラメーターの詳細については、カメラ キャリブレーションとはを参照してください。

[カメラ モデル] セクションで [魚眼] を選択した状態で、[オプション] をクリックします。[配置の推定] を選択すると、魚眼レンズの光軸がイメージ平面に対して垂直でない場合に軸合わせの推定を有効にできます。

魚眼カメラ モデルのキャリブレーション アルゴリズムの詳細については、魚眼キャリブレーションの基礎を参照してください。

魚眼カメラ モデルのキャリブレーションについては、魚眼キャリブレーションの基礎を参照してください。

標準カメラ モデルのキャリブレーション アルゴリズムでは、次のピンホール カメラ モデルを想定しています。

w[xy1]=[XYZ1][Rt]K

  • (X,Y,Z) — 点のワールド座標。

  • (x,y) — 対応するイメージ ポイントのイメージ座標 (ピクセル単位)。

  • w — 任意の同次座標スケール係数。

  • K — カメラの内部パラメーターの行列。次のように定義されます。

    [fx00sfy0cxcy1]

    座標 (cx, cy) は、光学的中心 (主点) をピクセル単位で表します。x 軸と y 軸が厳密に直交する場合、せん断パラメーター s は 0 に等しくなります。行列要素は次のように定義されます。

    • fx = F*sx。ピクセル単位で表されます。

    • fy = F*sy。ピクセル単位で表されます。

    • F は焦点距離のワールド単位で、通常はミリメートル単位で表されます。

    • sx と sy は、それぞれ x と y のワールド単位あたりのピクセル数です。

  • R — カメラの 3 次元回転を表す行列。

  • t — ワールド座標系に対するカメラの並進。

カメラのキャリブレーション アルゴリズムでは、内部パラメーター、外部パラメーター、および歪み係数の値を推定します。カメラのキャリブレーションには、次の手順が含まれます。

  1. レンズ歪みをゼロと仮定し、閉形式で内部パラメーターと外部パラメーターを求めます。[1]

  2. 非線形最小二乗の最小化 (レーベンバーグ・マルカート アルゴリズム) を使用して、歪み係数を含むすべてのパラメーターを同時に推定します。前の手順で求めた閉形式の解を、内部パラメーターと外部パラメーターの初期推定値として使用します。歪み係数の初期推定値をゼロに設定します。[1][2]

キャリブレーション結果の評価

再投影誤差を調べたり、カメラの外部パラメーターを調べたり、歪み補正後のイメージを表示したりすることで、キャリブレーションの精度を評価できます。最良のキャリブレーション結果を得るには、3 つの評価方法すべてを使用します。

Camera calibration results, displaying undistorted image, reprojection errors chart, and camera extrinsics diagram

"再投影誤差" は、検出点と対応する再投影点の間のピクセル単位の距離です。カメラ キャリブレーター アプリは、パターンで定義されたワールド座標からイメージ座標に点を投影することにより、再投影誤差を計算します。次に、アプリは再投影点と対応する検出点を比較します。原則として、1 ピクセル未満の平均再投影誤差は許容されます。

Reprojection error diagram

カメラ キャリブレーター アプリは、再投影誤差を棒グラフとしてピクセル単位で表示します。グラフは、どのイメージがキャリブレーションに悪影響を与えるかを特定するのに役立ちます。棒グラフのエントリを選択してイメージを選択し、[データ ブラウザー] ペインのイメージ リストからイメージを削除できます。

再投影誤差棒グラフ
棒グラフには、イメージごとの平均再投影誤差と、全体の平均誤差が表示されます。バーのラベルはイメージ ID に対応しています。強調表示されたバーは、選択されたイメージに対応しています。

Reprojection Errors bar graph

次のいずれかの方法でイメージを選択します。

  • グラフ内の対応するバーをクリックする。

  • [データ ブラウザー] ペインのイメージ一覧からイメージを選択する。

  • 全体の平均誤差を調整する。赤い線を上下にスライドすると、平均誤差が指定値よりも大きいすべてのイメージが自動的に選択されます。

3 次元外部パラメーター プロットは、カメラ中心のパターンのビューとパターン中心のカメラのビューを提供します。カメラ中心のビューは、イメージ キャプチャ時にカメラが静止している場合に役立ちます。パターン中心のビューは、パターンが静止している場合に役立ちます。Figure をクリック アンド ドラッグして回転させることができます。チェッカーボード (またはカメラ) をクリックして選択します。可視化で強調表示されているデータは、リストで選択されたイメージに対応しています。パターンとカメラの相対的な位置を調べて、それらが期待どおりかどうかを判断します。たとえば、カメラの後ろに表示されるパターンは、キャリブレーション エラーを示します。

Camera-centric and pattern-centric extrinsic visualizations

レンズ歪みを取り除く効果を確認するには、[キャリブレーション] タブの [ビュー] セクションで、[歪み補正の表示] を選択します。キャリブレーションが正確である場合、イメージ プレビューの歪んだ線がまっすぐになります。

Original image and undistorted image.

メモ

再投影誤差が少ない場合でも、歪み補正されたイメージを確認することは重要です。たとえば、パターンがイメージに占める割合が少ない場合、キャリブレーションによって再投影誤差がほとんど発生しなくても、歪みの推定が正しくない可能性があります。以下のイメージは、単一カメラのキャリブレーションにおけるこの種の誤った推定の例を示しています。

Original image and incorrectly undistorted image.

魚眼カメラ モデルの場合、歪み補正されたイメージを表示しながら、[キャリブレーション] タブの [ビュー] セクションで [魚眼スケール] を指定することで、魚眼イメージをより詳しく検証できます。[魚眼スケール] ボックスに値を入力するか、矢印を使用してスケールの増減を調整します。

Fisheye scale setting.

キャリブレーションの改善

キャリブレーションを改善するために、誤差の大きいイメージを削除したり、イメージを追加したり、キャリブレーター設定を変更したりできます。

次の場合は、さらにイメージを追加することを検討します。

  • イメージが 10 個未満。

  • キャリブレーション パターンが、イメージ フレームを十分にカバーしていない。

  • カメラに対するキャリブレーション パターンの向きの変化が十分でない。

次のようなイメージの場合は、イメージを削除することを検討します。

  • 平均再投影誤差が大きい。

  • ぼやけている。

  • カメラ面に対して 45 度を超える角度のキャリブレーション パターンが含まれている。

    Calibration pattern at angle greater than 45 degrees to the camera plane.

  • キャリブレーション パターンの点が誤って検出されている。

2 つまたは 3 つの半径方向歪み係数を指定できます。[キャリブレーション] タブの [カメラ モデル] セクションで、[標準] を選択した状態で [オプション] をクリックします。[2 つの係数] または [3 つの係数] をそれぞれ選択して、[半径方向歪み] を 2 つまたは 3 つの係数として指定します。

半径方向歪みとは、主点から伸びる放射状の線に沿ったイメージ ポイントの変位です。

  • イメージ ポイントが主点から離れると (半径方向の正の変位)、イメージの倍率が下がり、イメージに糸巻き型歪みが出現する。

  • イメージ ポイントが主点に向かって移動すると (半径方向の負の変位)、イメージの倍率が上がり、イメージに樽状の歪みが出現する。

Three grids that each represent a type of distortion. One with pincushion distortion (positive radial displacement), one with no distortion, and one with barrel distortion (negative radial displacement)

半径方向の歪み係数は、このタイプの歪みをモデル化します。歪んだ点は (xdistorted, ydistorted) として次のように表されます。

xdistorted = x(1 + k1*r2 + k2*r4 + k3*r6)

ydistorted= y(1 + k1*r2 + k2*r4 + k3*r6)

  • x、y — 歪み補正後のピクセル位置。x と y は正規化されたイメージ座標内にあります。正規化されたイメージ座標は、光学的中心への変換後にピクセル単位の焦点距離で除算したピクセル座標から求められます。したがって、x と y は次元がありません。

  • k1、k2 および k3 — レンズの半径方向の歪み係数。

  • r2 = x2 + y2

一般に、キャリブレーションを行うには 2 つの係数で十分です。広角レンズなどの歪みが大きい場合には、3 つの係数を選択して k3 を含めることができます。

歪み補正後のピクセル位置は、光学的中心を原点とする正規化されたイメージ座標にあります。この座標はワールド単位で表されます。

イメージ軸のせん断を推定するには、[キャリブレーション] タブの [カメラ モデル] セクションで、[オプション]、[計算]、[せん断] を選択します。一部のカメラ センサーには、イメージの x 軸と y 軸が垂直にならない原因となる欠陥が含まれています。せん断パラメーターを使用して、この欠陥をモデル化できます。このオプションを選択しない場合、イメージ軸は垂直になります。これは、ほとんどの最新のカメラに当てはまります。

円周方向の歪みは、レンズとイメージ平面が平行にならない場合に生じます。円周方向の歪み係数は、このタイプの歪みをモデル化します。

Comparison of zero tangential distortion and tangential distortion

歪んだ点は (xdistorted, ydistorted) として次のように表されます。

xdistorted = x + [2 * p1 * x * y + p2 * (r2 + 2 * x2)]

ydistorted = y + [p1 * (r2 + 2 *y2) + 2 * p2 * x * y]

  • x、y — 歪み補正後のピクセル位置。x と y は正規化されたイメージ座標内にあります。正規化されたイメージ座標は、光学的中心への変換後にピクセル単位の焦点距離で除算したピクセル座標から求められます。したがって、x と y は次元がありません。

  • p1 および p2 — レンズの円周方向の歪み係数。

  • r2 = x2 + y2

円周方向の歪み係数を推定するには、[キャリブレーション] タブの [カメラ モデル] セクションで、[オプション]、[計算]、[円周方向歪み] を選択します。それ以外の場合、キャリブレーターは円周方向歪み係数をゼロに設定します。

[キャリブレーション] タブの [カメラ モデル] セクションで、[魚眼] を選択した状態で [オプション] をクリックします。[配置の推定] を選択すると、魚眼レンズの光軸がイメージ平面に対して垂直でない場合に軸合わせの推定を有効にできます。

カメラ パラメーターのエクスポート

キャリブレーションの精度に問題がなければ、標準カメラ モデルの場合は [カメラ パラメーターのエクスポート]、魚眼カメラ モデルの場合は [カメラ パラメーターのエクスポート] を選択します。カメラ パラメーターを MATLAB ワークスペース内のオブジェクトにエクスポートするか、カメラ パラメーターを MATLAB スクリプトとして生成することができます。既定値が適切に機能する場合、パラメーターをエクスポートする前に調整する必要はありません。

標準のカメラ モデルの場合は [カメラ パラメーターのエクスポート]、魚眼カメラ モデルの場合は [魚眼パラメーターのエクスポート] で、[パラメーターをワークスペースにエクスポート] を選択してワークスペースに cameraParameters オブジェクトを作成します。オブジェクトには、カメラの内部パラメーターと外部パラメーター、およびその歪み係数が格納されます。このオブジェクトは、イメージの歪みの補正、平面オブジェクトの測定、3 次元再構成など、コンピューター ビジョンのさまざまなタスクに使用できます。平面オブジェクトの測定の詳細については、キャリブレートされたカメラによる平面オブジェクトの測定を参照してください。オプションで、[推定誤差のエクスポート] を選択することにより、推定カメラ パラメーターの標準誤差を含む cameraCalibrationErrors オブジェクトをエクスポートできます。

標準カメラ モデルの場合は [カメラ パラメーターのエクスポート]、魚眼カメラ モデルの場合は [魚眼パラメーターのエクスポート] で、[MATLAB スクリプトの生成] を選択してカメラ パラメーターを MATLAB スクリプトに保存し、キャリブレーション セッションの手順を再現できるようにします。

メモ

vision.calibration.PatternDetector クラスを使用して定義されたカスタム パターンのカメラ パラメーターについて MATLAB スクリプトを生成することはできません。

参照

[1] Zhang, Z. “A Flexible New Technique for Camera Calibration.” IEEE Transactions on Pattern Analysis and Machine Intelligence. 22, no. 11 (November 2000): 1330–34. https://doi.org/10.1109/34.888718.

[2] Heikkila, J., and O. Silven. “A Four-step Camera Calibration Procedure with Implicit Image Correction.” In Proceedings of IEEE Computer Society Conference on Computer Vision and Pattern Recognition. 1106–12. San Juan, Puerto Rico: IEEE Comput. Soc, 1997. https://doi.org/10.1109/CVPR.1997.609468.

[3] Scaramuzza, Davide, Agostino Martinelli, and Roland Siegwart. "A Toolbox for Easily Calibrating Omnidirectional Cameras." In Proceedings of IEEE International Workshop on Intelligent Robots and Systems 2006 (IROS 2006), 5695–701. Beijing, China: IEEE, 2006. https://doi.org/10.1109/IROS.2006.282372

[4] Urban, Steffen, Jens Leitloff, and Stefan Hinz. “Improved Wide-Angle, Fisheye and Omnidirectional Camera Calibration.” ISPRS Journal of Photogrammetry and Remote Sensing 108 (October 2015): 72–79. https://doi.org/10.1016/j.isprsjprs.2015.06.005.

参考

アプリ

関数

オブジェクト

トピック