コンテンツにスキップ

Flat-Field Correction (imaWorx CXP-12 Quad)#

Flat-Field Correction(FFC)機能を使用すると、センサーピクセルの光感度の違いや不均一な照明によって画像に生じる不均一性を、ブロックベースのFlat-Field Correctionとして除去できます。

不均一な照明やレンズによって画像に生じる不均一性に対する補正方法(「Shading Correction」や「Vignetting Correction」など)は、Flat-Field Correctionで補正できます。

センサーピクセルの光感度の違いによって画像に生じる不均一性は、センサーのアンプやADCの差異に起因します。古いCMOSセンサーでは、これが顕著なカラムノイズとして現れることがあります。

Flat-Field Correctionは、センサー画像における主に3種類の不均一性に対処します:

  1. Dark Signal Non-Uniformity (DSNU) は、各ピクセルが固有のオフセットを持つことが原因で発生します。この現象は照明とは無関係で、センサーの温度に依存し、Exposure Time が長くなるほど顕著になります。
  2. Photo Response Non-Uniformity (PRNU) は、各ピクセルのゲインのばらつきによって発生し、光に対する応答の違いを引き起こします。
  3. センサー領域ごとの異なる応答は、センサーの特定の領域が他の領域とは異なる反応を示す場合に発生します。これらのばらつきは、通常、センサーの設計や特定領域全体の温度差に起因します。カラーカメラの場合、これにより画像の特定部分で顕著な色の違いが生じる可能性があります。

すべての影響はFlat-Field Correctionで補正できます。Enhanced AppletsはブロックベースのFlat-Field Correctionを計算します。Enhanced Appletsでは、ピクセル単位または列単位のFlat-Field Correctionは使用できません。

情報

Flat-Field Correction は、一部の Basler カメラではカメラ機能としても使用できます。お使いの Basler カメラが Flat-Field Correction をサポートしている場合は、カメラ機能を使用することをお勧めします。詳細については、Flat-Field Correction camera feature documentationを参照してください。

補正自体によって、これらの不均一性が相殺されます。これを行うには、オフセット値を減算した後にゲインを適用して照明応答を補正します。

Flat-Field Correction の概略図

Enhanced AppletsのブロックベースのFlat-Field Correctionでは、次のプロセスが使用されます:

Flat-Field Correction のプロセス

値を手動で計算してアプレットに入力しないことをお勧めします。代わりに、次の3つのオプションのいずれかを選択してください:

pylon Viewerでのフレームグラバー用Flat-Field Correctionプラグインの使用#

Baslerは、pylon Viewerでフラットフィールド補正(FFC)を撮像結果に適用できるようにするプラグインを提供しています。

Flat-Field Correction プラグインは、Basler Websiteから ZIP ファイルとしてダウンロードできます。

システム要件#

Flat-Field Correctionプラグインを使用するには、次のセットアップを確認してください。

  • Baslerカメラが取り付けられている。
  • コンピューターにpylon 25.10がインストールされている。

    情報

    • Flat-Field Correction プラグインは pylon 25.10 でのみ機能します。
    • pylon 8から25.10にアップグレードする場合:
      • 古いバージョンをアンインストールします。
      • 新しいバージョン(pylon 25.10)のみをインストールします。
  • フレームグラバーまたはインターフェイスカードがコンピューターに接続されている。

  • 拡張アプレットがフレームグラバーまたはインターフェイスカードにロードされている。

FFC プラグインのインストール#

  1. ダウンロードしたZIPファイルを解凍します。
  2. EnhAppletFFC.dll ファイルを見つけます。これが FFC プラグインです。
  3. VisualAppletsでビルドした EnhAppletFFC.dll ファイルを pylon インストールフォルダに配置します Applications\x64\lib\pylonviewer\plugins.

    pylon 用 FFC プラグインのインストール

プラグインを使用する前の準備#

FFCプラグインを使用する前に、次の事項を確認する必要があります。

補正値を計算する前に、次のことを確認してください。

  • 照明ができるだけ均一であること。
  • レンズの絞りとフォーカスが正しく設定されていること。
  • Exposure Timeが設定されていること。
  • アナログゲインなど、すべてのカメラの前処理機能が設定されていること。
  • 正しいEnhanced Appletがロードされていること。
  • カメラとアプレットの両方で、正しいPixel Formatが設定されていること。
  • カメラが通常動作温度に達していること。
  • アプレットで前処理が設定されていないこと。画像が完全なROIを使用していること。

    pylon Viewer:画像の取得

スクリーンショットは、pylon Viewerでの画像の取り込みを示しています。Line Profileからわかるように、画像の四隅に向かって強いシェーディングが発生しています。さらに、一部のピクセルが飽和状態になっています。これは、オブジェクトの暗い部分が関心の対象であるため、意図的なものです。これはマシンビジョンアプリケーションにおける現実的な例でもあります。

Flat-Field Correction 値の計算と画像への適用#

  1. Flat-Field Correctionプラグインを起動します。

    1. pylon Viewerでカメラを選択します。
    2. 選択したカメラの画像取り込みを停止します。
    3. pylon Viewerで、Tools > Flat-Field Correction (Frame Grabber)を選択します。

    pylon Viewer:Flat-Field Correctionプラグインの起動

  2. Flat-Field Correctionプラグインが開きます。

    pylon Viewer:FFC設定

  3. ステップ3. カメラの設定。において:

    1. フラットフィールド補正を適用するROIを設定します。デフォルト値のままにした場合、画像全体が再計算されます。
  4. クリック Next.
    イメージ ピクセルオフセット(DSNU)の計算 ページが開きます:

    pylon Viewer:オフセットの計算

  5. ダーク画像のシーケンスを取り込んで、オフセット補正値を計算します。ダーク画像を取り込むには:

    1. レンズにカバーをして画像を取り込みます。
    2. Calculate pixel offsetを選択します。
    3. Calculate Pixel Offsetボタンをクリックします。
      プラグインに拡大縮小された画像とピクセルオフセット値が表示されます。
  6. クリック Next.
    イメージ ゲイン(PRNU)の計算 ページが開きます:

    pylon Viewer:ゲイン

  7. ゲイン値を計算します。

    1. ゲイン補正値を取得するために、明るい基準画像のシーケンスを取り込みます。白い紙などの均一な明るいオブジェクトをレンズの下に置いて画像を取り込みます。
    2. 必要に応じて、基準ピクセル値と Exposure Timeを設定できます。

      情報

      カラー画像の色歪みを軽減するには、平均ゲイン値を基準ピクセル値として使用します。

    3. Calculate Gain Correctionボタンをクリックします。
      その結果、ゲイン補正値が表示され、View OptionsドロップダウンリストボックスでLive - Gain Correctedを選択すると、ゲイン補正された画像を確認できます。

    4. クリック Next.
      イメージ ブロックベースのFFC値の計算 ページが開きます:

      pylon Viewer:ブロックサイズの計算

  8. フラットフィールド補正値を計算し、画像に適用します。

  9. 必要に応じて、ブロックサイズを設定するか、自動計算を実行できます。この例では5120 x 5120ピクセルの画像サイズが使用されているため、たとえば48 x 34ピクセルのブロックサイズを設定すると、合計16157ブロックになり、利用可能な最大値である16384ブロックを下回ります。
  10. オプションとして、Linear extensionを指定し、Edge handlingをPixel、Half Block、またはBlockに設定できます。
  11. Calculate Correction Data - Store And Applyボタンを有効にするには、計算値の保存場所を指定します。
  12. Calculate Correction Data - Store And Applyボタンをクリックします。
  13. 計算が処理され、指定されたフォルダーにファイルが生成されて、計算されたゲインおよびオフセット値が画像に適用されます。
  14. 画像の上部にあるView Optionsドロップダウンリストボックスで、プレビュー内の画像に適用するFFC値(ゲイン値、オフセット値、両方、またはなし)を選択します。
  15. FinishをクリックしてFFCプラグインを終了します。
  16. イメージ Line Profile これで均一な画像が表示され、高品質な画像を取得できるようになります。以下を使用してください: FFC mode parameter FFCのオン/オフを切り替えます。

    pylon Viewer:FFCの結果

Framegrabber SDKでのFlat-Field Correctionの計算#

Baslerは、Framegrabber SDKでの Flat-Field Correction 値の計算と適用に役立つPythonスクリプトを提供しています。

これらのスクリプトは、ZIPファイルとしてBaslerウェブサイトからダウンロードできます。パッケージの内容:

  • モノクロ画像用スクリプト1個
  • カラー(Bayer)画像用スクリプト1個

情報

コンピューターを再起動するたび、またはフレームグラバーアプリケーションを開くたびに、FFC設定をフレームグラバーに再ロードする必要があります。フレームグラバーには揮発性 Memory があるため、カメラ上の User Sets とは異なり、データを保存することはできません。

Flat-Field Correction値を計算するには、画像パスとパラメータに合わせてPythonスクリプトを調整します。

  1. ダーク画像の取得:
    1. レンズを覆い、ダーク画像を撮影します。
    2. 画像をコンピューターに保存します。
  2. 明るい基準画像の取得(ゲイン補正用):
    1. 均一な明るいオブジェクト(白い紙など)をレンズの下に置き、画像を撮影します。
    2. 画像をコンピューターに保存します。
  3. Pythonスクリプトの編集:

    1. テキストエディターでスクリプトを開きます。
    2. 指定されたセクションで、ダーク画像と明るい画像へのパスを更新します。

      ################# Calculation of pixelwise FFC coefficients for offset and gain##########################
      
      # Read dark image
                             # Set the image path
      darkImage = cv2.imread("C:/.../examples/Processing/Shading/Shading2D/ImagesBlockFFC/darkImage_5120x5120_bayerBG8.bmp",-1)
      
      # Read bright image
                            # Set the image path
      brightImage = cv2.imread("C:/.../examples/Processing/Shading/Shading2D/ImagesBlockFFC/brightImage_5120x5120_bayerBG8.bmp",-1)
      
    3. カラー画像の場合は、画像パスの直下にあるBayerパターンも調整します。

      # Set bayerpattern
      
      bayerpattern = 'BayerBG8'
      
    4. 次のセクションのパラメータを調整します。 # set parameters: セクション:

      # set parameters:
      
      MaxNumberOfBlocksInY = 16384
      MaxNumberOfBlocksInX = 3072
      blocksize_x = 64
      blocksize_y = 64
      offsetBits = 8 # "Offset Bits must be more than the fractional bits in it!"
      offsetFractionalBits = 2
      gainBits = 12 #"Gain Bits must be more than the fractional bits in it!"
      gainFractionalBits = 10
      parallelism=16
      w = 5120
      
      これらのパラメータ値は、拡張アプレットまたは VisualApplets デザインから取得できます。アプレットにアクセスするには、次のいずれかのツールでアプレットを開きます。

      • microDisplay X
      • pylon Viewer
      • VisualApplets
  4. 変更を保存し、Pythonスクリプトを実行します。

  5. スクリプトは、フラットフィールド補正に必要なゲイン値とオフセット値を含む*.txtファイルを作成します。これらのファイルはPythonスクリプトと同じディレクトリに保存されます。

ゲインとオフセットの値を適用するには:

  1. microDisplay X を開き、Enhanced Appletsをロードします。
  2. ペインの FFC パラメータブロックで、生成したファイルからオフセットとゲインの値をロードします。

    microDisplay XにおけるFlat-Field Correction用のオフセット値およびゲイン値のロード

  3. ゲインおよびオフセットファイルが保存されているディレクトリに移動し、該当するファイルを選択します。

  4. ゲインファイルとオフセットの両方、および画像の各カラーチャネルに対してこの手順を繰り返します。
  5. 画像取得を開始します。
  6. ペインの FFC Mode パラメータで、次を選択します。 Offset and Gain 値を適用するには:

    microDisplay XにおけるFlat-Field Correction用のオフセット値およびゲイン値の適用

    これで、取り込んだ画像に Flat-Field Correction が適用されます。

VisualAppletsによるFlat-Field Correction機能のカスタマイズ#

VisualAppletsには、ブロックベースのFlat-Field Correctionを計算するためのデザイン例が含まれています。Enhanced Appletsの標準実装を使用するのではなく、ご自身のアプリケーションに合わせて機能を調整する必要がある場合は、これらの例をご使用ください。詳細および保存場所については、VisualAppletsチュートリアルを参照してください。

VisualAppletsでの例の使用は、Enhanced Appletsの使用と似ています。以下の手順に従います。

  1. Framegrabber SDKでのFlat-Field Correctionの計算で説明されているように、Enhanced Appletsと提供されているPythonスクリプトを使用して係数を計算します。
  2. VisualAppletsで Flat-Field Correction のデザイン例を開きます。
  3. VisualAppletsでFFC階層ボックスの静的パラメータを設定します。

    階層ボックスは、ピクセルの Bit Width、Parallelism、画像フォーマットに自動的に適応します。まず、入力リンクのパラメータを設定する必要があります。静的パラメータを設定する前にこれを行うことが重要です。

    許可されているフォーマット:

    • Bit width: 8 ~ 16
    • Artithmetic: 符号なし
    • Parallelism: 1 ~ 64
    • Kernel Columns, Kernel Rows: 1
    • Color Format: VAF_GRAY
    • Color Flavor: FL_NONE
    • Max. Image Width: すべて
    • Max. Image Height: すべて

    静的パラメータは、ブロックベースのFFCの精度とFPGAリソースの使用量を定義します。

    • OffsetBits: オフセット補正に使用されるビット数を定義します。これは、整数ビットと小数ビットの合計です。
    • OffsetFractionalBits: 小数部のビット数を定義します。固定小数点演算の説明については、次のセクションを参照してください。 補正係数(オフセットおよびゲイン)のロード.
    • GainBits: ゲイン補正に使用されるビット数を定義します。これは、整数ビットと小数ビットの合計です。
    • GainFractionalBits: 小数部のビット数を定義します。固定小数点演算の説明については、セクションを参照してください。 補正係数(オフセットおよびゲイン)のロード.
    • MemoryType: UltraRAM、Block RAM、またはLUT RAMのいずれかを選択します。UltraRAMが推奨されます。
    • MaxNumbrOfBlocks: ブロックベースのFFCに使用される最大ブロック数を選択します。URAMを選択している場合、 MemoryType、16384ブロックのみを使用できます。
    • MaxNumberOfBlocksInX: X方向の最大ブロック数を定義します。通常、これは Max. Image Width / Parallelism.
    • MaxNumberOfBlocksInY: Y方向の最大ブロック数を定義します。
    • MaxBlockSizeInX: X方向の最大ブロックサイズを定義します。アプリケーションに適した値を選択してください。一般的な用途では、フルイメージの幅を設定できます。
    • MaxBlockSizeInY: Y方向の最大ブロックサイズを定義します。アプリケーションに適した値を選択してください。一般的な用途では、フルイメージの高さを設定できます。

    動的パラメータは、アプリケーションの要件に合わせて実行時に変更できます。

    • CoefficientsXLength: この値は、pylon ViewerおよびFFCプラグインで使用したEnhanced AppletのROIサイズなど、計算およびアップロードされた係数ファイルと一致している必要があります。
    • CoefficientsYLength: この値は、pylon ViewerおよびFFCプラグインで使用したEnhanced AppletのROIサイズなど、計算およびアップロードされた係数ファイルと一致している必要があります。
    • BlockSizeMode: 選択してください Manual または Auto。自動モードでは、利用可能なブロックが画像全体に分散されます。手動モードでは、次のパラメータを使用してブロックサイズを設定できます。pylon ViewerでFFCプラグインを使用した場合は、対応する値をコピーしてください。
      • BlockSizeInX: ブロックサイズを定義します。 BlockSizeMode が次のように設定されている場合、自動的に無効になります: Manual。pylon ViewerでFFCプラグインを使用した場合は、対応する値をこのパラメータにコピーしてください。
      • BlockSizeInY: ブロックサイズを定義します。 BlockSizeMode が次のように設定されている場合、自動的に無効になります: Manual。pylon ViewerでFFCプラグインを使用した場合は、対応する値をこのパラメータにコピーしてください。
      • EnoughBlocksForImageSize: この読み取り専用パラメータは、定義された最大ブロック数が、指定されたブロックサイズとROI設定に対して十分であるかどうかを示します。
      • OffsetCoefficients: オフセット係数のフィールドパラメータです。FFC pylonプラグインからテキストファイルをアップロードします。フォーマットの説明はセクションに記載されています。 補正係数(オフセットおよびゲイン)のロード.
      • GainCoefficients: オフセット係数のフィールドパラメータです。FFC pylonプラグインからテキストファイルをアップロードします。フォーマットの説明はセクションに記載されています。 補正係数(オフセットおよびゲイン)のロード.
      • FlatFieldCorrectionMode: FFCオフセットおよびゲインを有効にするか無効にするかを選択します。これは画像取得中に行うことができます。
  4. VisualAppletsでの設計時、またはSDKアプリケーション(pylon API、GenApi、GenTL consumer、またはFramegrabber SDK)を使用した実行時に、FFC階層ボックスの動的パラメータを設定します。

次のスクリーンショットは、VisualAppletsでのFFC階層ボックスの使用方法とパラメータを示しています。

VisualApplets:階層型ボックスとしてのFFC

背景情報:計算式#

次のセクションでは、FFC値の計算に使用される数式について説明します。この情報は参考用として提供されています。

情報

エラーの原因となる可能性があるため、Baslerではこれらの値を手動で計算したり、pylonまたはmicroDisplay Xに手動で入力したりしないことを強くお勧めします。代わりに、提供されているスクリプトとプラグインを使用してください。

オフセット係数とゲイン係数の決定#

補正値の計算の前に、いくつかの準備が必要です。

  • 照明はできる限り均一である必要があります。
  • レンズの絞りとフォーカスが正しく設定されている必要があります。
  • Exposure Time も設定する必要があります。
  • アナログゲインなど、カメラ内のすべての前処理機能を設定する必要があります。
  • カメラは通常の動作温度で稼働させる必要があります。

Offset#

補正用のオフセット係数の計算は、このセクションで説明する個別の例外を除き、標準的な方法に従います。

DSNUまたはセンサー関連のオフセットを補正するためのオフセット係数を決定するには、レンズキャップを閉じるなどして、センサーに光が入らない状態でカメラ画像を撮影する必要があります。理論上、センサーはすべての値をゼロとして出力するはずですが、DSNUの影響により、ピクセル値に個別のオフセットが生じる場合があります。したがって、取得されたダーク画像はオフセットフィールド、つまりオフセット係数を表します。

DSNUはカメラの設定や温度によって変動するため、特に露出やアナログゲインの設定に関しては、実際の条件下で画像を撮影する必要があります。さらに、ノイズを排除するため、オフセット値は複数の画像の平均値から導出する必要があります。

  • D(x, y): 位置 x, y における複数画像の平均ダークピクセル値
  • Offset(x, y) = D(x, y)

Gain#

アプリケーションで取得されるオブジェクトの輝度値は異なります。白や反射部分など、画像内で最も明るい部分を特定する必要があります。(暗い部分のみに関心がある場合など、意図的に行う場合を除きます)。

たとえば、暗い背景上の明るいオブジェクトを調査する場合を考えてみます。この場合、実際の展示条件の下でレンズの前にオブジェクトを配置します。調査対象の最も明るいスポットは、飽和状態にならないものの、それに近い状態である必要があります。たとえば、8ビット画像の場合、ピクセル値が240前後になるようにします。次に、同じ輝度値に近いオブジェクトを使用して、センサーを均一に照明する必要があります。たとえば、これは構造のない白い紙などです。この場合も、どのピクセルも飽和状態になってはなりません。これらの参照画像をいくつか記録し、平均画像を計算します。 P(x,y).

次に、ゲイン補正のリファレンスとなるピクセル値を導出するためのいくつかの方法が存在します。

  1. 参照画像の平均値:最も明るい部分が P(x,y) が、取得したオブジェクトの最も明るい部分と等しい場合。したがって、平均ピクセル値を使用できます。 P(x,y) リファレンスとして。 PMean = Mean(P(x,y)).

    その場合、ゲイン係数は次のようになります。

    $$ Gain(x,y) = \frac{PMean}{(P(x,y)-Offset(x,y))} $$

  2. ユーザー定義の参照値または最も明るいスポット:参照画像の平均輝度が希望する最大ピクセル値と等しくない場合は、自分で参照値を定義できます。これには、画像内の最も明るいスポットの値や、参照オブジェクトと参照明るい画像の差を使用できます。その後、均一な画像のピクセルがこの参照値に補正されるようにゲイン値が計算されます。 PRef.

    \[ Gain(x,y) = \frac{PRef}{(P(x,y)-Offset(x,y))} \]

どちらの数式でも、除算の前に、事前に決定されたオフセットが減算されます。この処理を行ってはならないのは、 P(x,y) が、2段階の手順ですでにオフセットによって補正されている場合です。

Bayer Pixel Format の FFC#

Pixel Format がバイヤー配列の場合、RGBやその他の色空間に変換する前に、RAWバイヤー画像に対してFlat-Field Correctionが処理されます。これにより、最大限の精度が得られます。補正係数の計算は、各カラーコンポーネントに対して個別に実行されます。副次的な効果として、リファレンス画像が完璧な白画像に補正されるため、Flat-Field Correctionによってカラーキャリブレーションも実行されます。

ブロックベースの Flat-Field Correction の定義#

ブロックベースのFlat-Field Correctionは、個々のピクセルごとに補正値を保存するのに十分なメモリがない場合に使用されます。その場合、画像は定義したサイズを持つブロックに分割されます。各ブロックには、コーナーに独自の開始オフセットとゲイン係数があります。

ブロックFlat-Field Correction

間のすべてのピクセルについて、係数はフレームグラバー内の線形補間を使用して決定されます。

線形補間

これにより非常に精密な補正が可能になりますが、個々のピクセルの変動に起因するDSNUやPRNUに対して、個々のピクセルを補正することはできません。

補間プロファイル

ブロックサイズとアプレットパラメータ値の手動計算#

アプレットでブロックベースのFlat-Field Correctionを使用するには、補正値が計算された後、次の2つの手順を実行する必要があります。

  1. ブロックサイズを設定します。
  2. 補正係数をフレームグラバーにロードします。

ブロックサイズの構成#

解像度の異なる任意のカメラをフレームグラバーに接続できるため、アプレットの実装はさまざまな解像度に適応するように作られています。

すべてのブロックのサイズは同じですが、必ずしも正方形である必要はありません(つまり、高さと幅が異なる場合があります)。フレームグラバーは、オフセットおよびゲイン補正値用に合計16384個のブロックを提供します。したがって、画像サイズにブロックを分散できるようにブロックを調整する必要があります。

例:boost V boA5120-230cmの解像度は5120 x 4096ピクセルです。フル解像度を使用するには、利用可能な16384個のブロックをこれらすべてのブロックに分散させる必要があります。

ブロックは必ずしも正方形である必要はありません。Y方向よりもX方向でシェーディングが強い場合は、X方向のブロックサイズを小さくし、Y方向のブロックサイズを大きくするとよいでしょう。

次の画像は、X方向の解像度がY方向よりも高い非正方形のブロックを示しています。

ブロックFlat-Field Correction

16384個のブロックを正方形のブロックとして画像全体に均等に分散させるには、次の式を使用します。

  • 画像幅: W
  • 画像高さ: H
  • 総ブロック数: N

画像の総面積は次のとおりです:画像面積 = W x H

各ブロックは一辺の長さが sの正方形です。1つのブロックの面積は次のとおりです:ブロック面積 = s2

ブロック数は次のとおりです:

\[ N = \frac{Image\space Area}{Block\space Area} = \frac{W\times H}{s^2} \]

を求めるには s:

\[ s = \sqrt{\frac{W\times H}{N}} \]

上記の例の場合: W = 5120, H = 4096, N = 16384:

\[ s = \sqrt{\frac{5120\times 4096}{16384}} = \sqrt{1280} = 35.78\space pixels \]

アプレットでは、すべてのブロックの一辺の長さを設定できるわけではありません。たとえば、X方向のブロックサイズは16の倍数である必要があります。

指定された例では、ブロックサイズは切り捨てられて Bx= 32 になります。

ブロックの高さを計算するには、利用可能なブロックをフル活用するために非正方形のブロックを考慮する必要があります:

s2 = X方向のブロックサイズ x Y方向のブロックサイズ = Bx x By

その後、ブロックの高さは次のように決定できます:

\[ B_y=\left \lceil\frac{W\times H}{N\times B_x}\right \rceil \]

上記の例の場合、これは次のようになります:

\[ B_y=\left \lceil\frac{5120 \times 4096}{16384 \times 32}\right \rceil = 40 \space pixels \]

実際に使用されるブロック数は次のようになります:

\[ N_{actual}= \left \lceil\frac{W}{B_x}\right \rceil \times \left \lceil\frac{H}{B_y}\right \rceil = 16384\space blocks \]

これでアプレットパラメータを設定できるようになります:

  • FlatFieldCorrectionBlockWidth = 32
  • FlatFieldCorrectionBlockHeight = 40

    pylon Viewer:FFCブロック幅の設定

補正係数のオフセットとゲインのロード#

各ブロックには、オフセットおよびゲインの係数値 Q11、Q12、Q21、Q22 のセットが必要です。これらの値は、ブロックのエッジにおけるサポートポジションです。

線形補間

ブロックの終了位置は、次のブロックの開始位置になります。したがって、現在のブロックの Q11、Q12 は、水平方向の次のブロックの Q21、Q22 と等しくなります。

次の例は、8x6 の画像サイズに対して 4x3 のブロックサイズを示しています。終了位置が次のブロックの開始位置と重複していることがわかります。さらに、画像の端にあるブロックの終了サポートポジションは、画像の外側に位置します。ブロックサイズが画像サイズの整数倍でない場合、画像の端にあるブロックはさらに外側に位置することになります。

Overlapping Blocks

  • ブロック 0
    • x = 0、y = 0 における Q11
    • x = 4、y = 0 における Q12
    • x = 0、y = 3 における Q21
    • x = 4、y = 3 における Q22
  • ブロック1
    • x = 4、y = 0 における Q11
    • x = 8、y = 0 における Q12
    • x = 4、y = 3 における Q21
    • x = 6、y = 3 における Q22
  • ブロック2
    • x = 0、y = 3 における Q11
    • x = 4、y = 3 における Q12
    • x = 0、y = 6 における Q21
    • x = 4、y = 6 における Q22
  • ブロック1
    • x = 4、y = 3 における Q11
    • x = 8、y = 3 における Q12
    • x = 4、y = 6 における Q21
    • x = 6、y = 6 における Q22

OffsetおよびGainの値は、特定の範囲と解像度を持つ固定小数点値として表現されます。アプレットには、範囲を確認するためのいくつかの情報パラメータが用意されています。

pylon Viewer: FFCゲインとオフセット範囲の設定

示された例の場合、Gainの値の範囲は次のようになります。

\[ \left [0,2^{GainInteger} - \frac{1}{2^{GainFractional}}\right ] = \left [0,2^{2} - \frac{1}{2^{10}} \right ] = \left [0, \space 3.999\right ] \]

言い換えれば、このアプレットでは最大3.999までのゲイン補正が可能です。たとえば、50のピクセル値は、最大で 50 x 3.999 = 199 に補正されます。

浮動小数点値を固定小数点値に変換するには、小数点以下のビット数を乗算し、[0,2GainBits - 1] の範囲に制限します。ここで、GainBits = GainInteger + GainFractional です。

\[ Gain_{FixedPoint} = Gain_{Float} \times 2^{GainFractional} \]

固定小数点値 Q11、Q12、Q21、Q22 は、各ブロックの大きな整数値に追加されます。

\[ Block(i) = Qfix_{11}\times 2^0 + Qfix_{12} \times 2^{GainBits} + Qfix_{21} \times 2^{2\times GainBits} + Qfix_{22} \times 2^{3\times GainBits} \]

または、ビットシフト演算として表します。

\[ Block(i) = Qfix_{11} + Qfix_{12} \ll GainBits + Qfix_{21} \ll 2\times GainBits + Qfix_{22} \ll 3\times GainBits \]

たとえば、浮動小数点値が次の場合:

\[ Q_{11} = 1.1, Q_{12} = 1.3, Q_{21} = 0.9, Q_{22} = 1.4 \]

上記の解像度を使用して固定小数点に変換され、次のように示されます。

\[ Q_{11} = 1126, Q_{12} = 1331, Q_{21} = 922, Q_{22} = 1433 \]

アプレットの値は次のようになります。

\[ Q_{11} = 1126, Q_{12} = 1331, Q_{21} = 922, Q_{22} = 1433 \]

したがって、アプレットのパラメータ値は次のようになります。

\[ Block(i) = 1126 + 1331 \ll 12 + 922 \ll 2\times 12 + 1433 \ll 3\times 12 = 98490484208742 \]

16進数表現では以下のようになります。

\[ Block(i) = 0\times 466 + 0\times 533 \ll 12 +0\times 39A \ll 2\times 12 + 0\times 599 \ll 3\times 12 = 0\times 599\space 39A\space 533\space 466 \]