カメラキャリブレーションとワールド座標

カメラキャリブレーション

カメラキャリブレーション、またはカメラ再投影とも呼ばれるプロセスは、カメラモデルのパラメータを推定するプロセスです。このモデルは、画像キャプチャプロセスの内部ジオメトリを記述するパラメータセットです。 正確なカメラキャリブレーションは、さまざまなアプリケーションで必要とされます。例えば、画像が互いに関連するマルチカメラのセットアップ、レンズの不完全さに起因する幾何学的な歪みの除去、または実世界の幾何学的な特性(位置、距離、面積、まっすぐさなど)の精密な測定などです。

使用するモデルは、カメラの種類に応じて選択されます(例:投影カメラ、テレセントリックカメラ、ラインスキャンカメラなど)。 通常の投影カメラの場合、モデル(ピンホールカメラモデルとして知られる)は焦点距離、主点の位置、および歪みパラメータで構成されます。

いくつかの歪みモデルがサポートされています。最も単純なものである分割モデルは、ほとんどのユースケースをサポートし、キャリブレーションデータが疎であっても予測可能な動作をします。次の次数のモデルはより正確であり、しかし、高品質なキャリブレーションポイントの大規模なデータセットが必要であり、通常は画像全体で高い位置の精度を実現するために必要です - 0.1ピクセル以下。 もちろん、これはあくまで経験則であり、各レンズが異なり、例外もあります。

エリアスキャンカメラモデル(ピンホールまたはテレセントリック)には、内部カメラパラメータのみが含まれているため、カメラの再配置、回転などに影響を受けません。 そのため、製造環境ではカメラキャリブレーションは必要ありません。カメラは事前にキャリブレーションできます。 カメラがレンズと組み立てられ、レンズ調整(ズーム/フォーカス/絞りリング)がしっかりとロックされたら、キャリブレーション画像を撮影し、カメラキャリブレーションを実行できます。 もちろん、カメラ-レンズのセットアップに変更が加えられると、カメラキャリブレーションパラメータは無効になります。レンズを取り外して同じ位置に戻すなど、見かけ上は小さな変更でも無効になります。

一方、ラインスキャンモデルにはカメラと移動要素(通常はコンベヤベルト)のパラメータが含まれています。 エリアスキャンカメラキャリブレーションとは対照的に、ラインスキャンカメラシステムの移動要素は画像取得ジオメトリ内でしっかりと結びついているため、このアプローチが必要です。

カメラモデルは、歪みのない画像を取得するために直接使用できます(同じ基本パラメータを持つカメラでレンズ歪みがないと仮定した場合の画像)が、ほとんどのユースケースではカメラキャリブレーションは他の操作の前提条件に過ぎません。 たとえば、カメラが平面の表面を検査する場合(またはそのような表面にあるオブジェクト)、カメラモデルがワールドプレーンキャリブレーション(以下のワールドプレーン - 測定と補正セクションを参照)を実行するために必要です。

Aurora Vision Studioでは、カメラキャリブレーションが必要な場合、ユーザーにはGUIでプロンプトが表示されます。 または、カメラキャリブレーションを担当するフィルターを直接使用できます:CalibrateCamera_PinholeCalibrateCamera_TelecentricCalibrateCamera_LineScan

基本的なキャリブレーションのための一連のグリッド画像。高精度のアプリケーションでは、より密なグリッドとより多くの画像が必要です。また、すべてのグリッドがカメラの光軸に垂直であることに注意してください。 したがって、焦点距離はフィルターによって計算されません。

ワールドプレーン - 測定および補正

平面(平らな)表面またはそのような表面にあるオブジェクト(例:コンベヤベルト)の観察と検査に関連するビジョンシステムでは、Aurora Vision Studioのイメージからワールドプレーンへの変換メカニズムを利用できます。これにより、次のことが可能になります:

  • 元のイメージ上の場所から実際のワールド座標の計算。これは、外部デバイス(産業用ロボットなど)との相互運用性のために重要です。 検出されたオブジェクトがイメージ上で検出され、その位置をロボットに送信する必要があるとしましょう。検出されたオブジェクトの位置はイメージ座標で指定されていますが、ロボットは異なる座標系で実際の世界で操作しています。共通の座標系が必要で、それはワールドプレーンによって定義されます。
  • イメージの補正ワールドプレーンに。これは、元のイメージを使用してイメージ分析を実行することが不可能な場合に必要です(レンズや/または透視投影の歪みが非常に高いため)。補正されたイメージで実行された分析の結果は、ワールドプレーン座標系で定義された実際のワールド座標にも変換できます。 別のユースケースはマルチカメラシステムで、すべてのカメラからのイメージを共通のワールドプレーン補正することで、これらの補正されたイメージ間の単純で明確な関係が得られ、容易に重ね合わせやモザイクステッチングが可能になります。

以下の画像は、イメージ座標系を示しています。イメージ座標はピクセルで表示され、原点(0, 0)はイメージの左上隅に対応しています。 X軸はイメージの左端から右端に向かって始まります。Y軸はイメージの上端からイメージの下端に向かって始まります。 すべてのイメージピクセルは非負の座標を持ちます。

イメージ座標の方向とピクセルの位置。

ワールドプレーンは、実際の3D世界に定義された区別される平らな表面です。 カメラと任意の位置関係を持たせることができます。原点位置とXY軸を定義しています。

以下のイメージは、ワールドプレーンの概念を示しています。最初のイメージは、 興味の対象を不完全に配置されたカメラによってキャプチャしたオリジナルのイメージです。 2番目のイメージは、表面と整列したワールドプレーンを示しています。 これにより、元のイメージ上のピクセルの場所からワールド座標を計算するか、次に示すようにイメージの補正が可能になります。

不完全に配置されたカメラによってキャプチャされた対象物。

オリジナルのイメージに重ねられたワールドプレーン座標系。

イメージからワールドプレーン座標への計算。

イメージの補正。ワールド座標の点(0,0)から(5,5)までの領域にクロップ。

Aurora Vision Studioのイメージからワールドプレーンへの変換メカニズムを使用するには、適切なUIウィザードが用意されています:

UIウィザードの使用が推奨される手順ですが、最も複雑なユースケースでは、フィルターを直接使用する必要がある場合があります。その場合、以下の手順を実行します:

  1. カメラのキャリブレーション - このステップは正確な結果を得るために強くお勧めされますが(たとえば、レンズの歪みエラーが無視できる場合など)、厳密には必須ではありません。
  2. ワールドプレーンのキャリブレーション - CalibrateWorldPlaneフィルターは、RectificationTransformを計算し、イメージからワールドプレーンの関係を表します。
  3. 次に、イメージからワールドプレーンの関係を使用して次のことができます:

ワールド座標の計算およびイメージの補正には、さまざまなユースケースがあります:

  • イメージのピクセル位置から元のイメージ上の実際のワールド座標を計算する。イメージの補正なし。 このアプローチでは、たとえばCalibrateWorldPlaneによる変換出力を使用して、ImageObjectsToWorldPlaneで実際のワールド座標を計算します。
  • 2番目のシナリオは、最初のシナリオと非常に似ており、イメージの補正の使用が異なります。 この場合、RectifyImageによって再マップされた(補正された)イメージで解析を実行した後、 補正されたイメージからワールドプレーンへの関係によって、位置をワールドプレーンによって与えられる共通の座標系に変換できます。 これはRectifyImageフィルターのoutRectifiedTransformという補助的な出力によって与えられます。 補正されたイメージからワールドプレーンへの関係は、元のイメージからワールドプレーンへの関係とは異なります。
  • 最後のユースケースは、イメージの補正と補正されたイメージの解析を行い、その特徴を実際のワールド座標に再計算しないことです。

補正されたイメージでワールドプレーン上の寸法を取る例。
左:カメラでキャプチャされたとおりの元のイメージ、軽度のレンズ歪みあり。 右:アノテーションされた長さの測定がある補正されたイメージ。

Notes:

  • イメージからワールドプレーンへの変換は、テレセントリックカメラの場合でも有効なメカニズムです。この場合、イメージはアフィン変換によってワールドプレーンに関連付けられます。
  • カメラの歪みは、ワールド座標の計算とイメージの補正の両方で自動的に考慮されます。
  • CreateRectificationMapフィルターによって生成される空間マップは、イメージのアンディストーション透視除去の順に実行されるマップと考えることができます。

キャリブレーショングリッドの抽出

カメラキャリブレーションおよびイメージからワールドプレーンへの変換の計算の両方で、抽出されたキャリブレーショングリッドが使用されます。 これは、グリッドインデックスとともに画像ポイントの配列、つまり注釈付きのポイントの形で提供されます。

注意:グリッドの実際の座標は2Dであり、フラットなグリッド上の任意の点の相対的な\(z\)座標は\(0\)です。

Aurora Vision Studioでは、いくつかの標準的なグリッド形式用の抽出フィルタが提供されています(詳細は:DetectCalibrationGrid_ChessboardおよびDetectCalibrationGrid_Circles)。

カスタムグリッドを使用するには、画像ポイントの配列を抽出するためのカスタムソリューションが必要です。カスタムグリッドが長方形の場合、AnnotateGridPointsフィルタを使用して画像ポイントの注釈を計算できます。

高い精度の結果を得るための最も重要な要因は、キャリブレーションポイントの精度および正確性です。 キャリブレーショングリッドはできるだけ平らで堅牢であるべきです(ダンボールは適切なバッキング材料ではありませんが、厚いガラスは完璧です)。 キャリブレーション画像を撮影する際には、適切な条件を整えてください: 適切なカメラとグリッドのマウントによって動きのぼやけを最小限に抑え、キャリブレーション面からの反射を防ぎます(理想的には拡散照明を使用します)。 カスタムキャリブレーショングリッドを使用する場合は、ポイント抽出がサブピクセル精度を達成できることを確認してください。測定値が正確であることも確認してください。 また、チェスボードキャリブレーショングリッドを使用する場合は、キャリブレーショングリッド全体が画像に表示されていることを確認してください。 そうでない場合、静止画のアルゴリズムにはチェスボードの周りに数ピクセルの幅の静かなゾーンが必要ですので、検出されません。 列数と行数に注意してください。提供するデータが誤っていると、アルゴリズムが正しく機能しないか、まったく機能しない可能性があります。

Aurora Vision Studioで推奨されるキャリブレーショングリッドは円グリッドです。詳細な条件によって最適な円の半径は異なりますが、ルールオブサムとしては10ピクセル(20ピクセルの直径)が良いです。 より小さな円は位置のブレを導入する傾向があります。 大きな円は合計のキャリブレーションポイントの数を減らし、特にレンズの歪みや透視の影響がある場合に幾何学的な不正確さに苦しむ可能性があります。 注意:以下のイメージに示すように、対称ボードを使用することが重要です。非対称ボードは現在サポートされていません。

対称的な円グリッドがAurora Vision Studioで使用することが推奨されています。

非対称な円グリッドはサポートされていません。


検出されたチェスボードグリッド、画像ポイント配列がマークされています。

校正エディター(プラグイン)を使用してキャリブレーションを実行する手順についての詳細はそちらを参照してください。

アプリケーションガイド – 画像ステッチング

複数のカメラセットアップにおけるシームレスな画像ステッチングは、その本質的にはワールドプレーンへの画像補正です。

高品質なステッチングには、キャリブレーションプロセスへの慎重なアプローチが必要です。 各カメラはレンズ歪みと透視歪みの両方を導入します。なぜなら、それは分析対象の表面に完璧に垂直に配置されることはないからです。 考慮する必要がある他の要因には、カメラとオブジェクトの距離、光学軸を中心としたカメラの回転、およびカメラ間の画像のオーバーラップがあります。

このプロセスは、主に2つのステップで構成されています。まず、各カメラは部分的な補正画像を生成するためにキャリブレーションされます。次に、すべての 部分的な画像を単純にJoinImagesフィルタを使用して結合します。

画像ステッチング手順は以下の通りです:

  • 検査エリアを2つ以上のカメラでカバーします。各カメラの視野が少し重なるようにします。
  • 検査エリアにキャリブレーショングリッドを配置します。各カメラの一部のキャリブレーショングリッドの画像をキャプチャします。 グリッドはステッチングに使用されるワールド座標系を定義し、各カメラのワールドプレーンポイントの座標を識別できるようにする必要があります。
  • 各カメラが担当するワールド座標範囲を定義します。 例えば、カメラ1はX座標で100から200まで、Y座標で-100から100までのエリアをカバーするように定義します。カメラ2はX座標で200から300まで、Y座標で-100から100までのエリアをカバーするように定義します。
  • 各カメラに対して、RectifyImageフィルタのinRectificationMap入力に関連するウィザードを使用して、画像補正を設定します。 カメラキャリブレーションおよびワールドからイメージへの変換には、キャプチャされたカメラの画像を使用します。 ワールド座標範囲を定義して、補正マップの生成を設定します("world bounding box"モードを選択)。 すべての画像でワールドスケールが同じ固定値に設定されていることを確認してください。
  • JoinImagesを使用して、RectifyImageフィルタの出力を適切に結合します。

詳細については、Image stitchingチュートリアルを参照してください。

フラットなオブジェクトの検査のためのマルチカメラセットアップ。

カメラによってキャプチャされた入力画像。

ステッチングの結果。