コンテンツにスキップ

Defect Pixel Correction#

Defect Pixel Correctionカメラ機能を使用すると、センサーの個々の画素の感度差の影響を最小限に抑えることができます。

取得した画像では、均一な光が使用されていても、一部の画素が他の画素よりも大幅に明るくまたは暗く見える場合があります。この問題は、個々の画素の感度の違いが原因で発生します。これは、製造上の許容誤差が原因です。

機能を使用する#

The implementation of this feature varies depending on the camera:

ace 2 R/X, boost R, and dart M Cameras#

Basler ace 2 R, ace 2 X, boost R, and dart M cameras support static defect pixel correction. This correction is based on files that are stored on the camera and contain a list of defect pixel coordinates.

「静的」とは、常に同じ指定画素欠陥座標が補正プロセスに使用されることを意味します。画像取得中、これらの画素の輝度値は、隣接する画素の輝度値に基づいて置き換えられます。

次の画素欠陥補正ファイルをカメラに保存できます。

  • Factory file: Contains the coordinates of defect pixels that were detected during camera production.
  • User file: Contains user-defined coordinates. You can upload this file to the camera. This allows you to define new defect pixels that might have occurred over time.

情報

Basler ace 2 X cameras also support dynamic pixel defect correction. For more information, see Pixel Correction Beyond.

pylon Viewerを使用した画素欠陥補正#

Static Defect Pixel Correction(pylon Viewer)を参照してください。

pylon APIを使用した画素欠陥補正#

情報

Baslerは、pylon Viewerを使用して画素欠陥補正を実行することを推奨します。

pylon APIは、独自のアプリケーションで画素欠陥補正を実装する場合にのみ使用してください。

Static Defect Pixel Correction Modeの設定#

静的画素欠陥補正モードを設定するには、BslStaticDefectPixelCorrectionModeパラメーターを次のいずれかの値に設定します。

  • Factory(デフォルト):静的画素欠陥補正は、工場補正ファイルに保存されている画素欠陥に基づいて行われます。
  • User: Static defect pixel correction is based on the defect pixels stored in the user correction file.
    Note that when setting this mode via the pylon API, only the user-defined pixels will be used. When setting the User incl. Factory correction mode via the pylon Viewer, user-defined pixels will be used in addition to the pixels stored in the factory file.
  • Off:カメラは静的画素欠陥補正を実行しません
ユーザーDefect Pixel Correctionファイルのアップロード#

ユーザー画素欠陥補正ファイルをアップロードする前に、ファイルが次のファイル形式に準拠していることを確認してください。

ファイルは、値が0の4バイトを含む4バイトのヘッダーで始まる必要があります。ヘッダーに続いて、ファイルには画素欠陥エントリーが含まれている必要があります(最大4096の画素欠陥を指定できます)。各エントリーは、14ビットのy座標、14ビットのx座標、4ビットのタイプの順に、32ビットで構成されています。

例:座標x = 1およびy = 2の画素欠陥エントリー

Bit   |31          18| |17           4| |3  0|
Value |00000000000010| |00000000000001| |0000|
      | y = 2        | | X = 1        | |type|

pylon Viewerを使用してユーザー画素欠陥補正ファイルをアップロードするには、次の手順を実行します。

  1. pylon Viewerの[カメラ]メニューで、[ファイルアクセス]をクリックします。
  2. [Camera File]ドロップダウンボックスで、[User Defect Pixel Correction]を選択します。
    User Defect Pixel Correctionエントリーがない場合、カメラは補正ファイルのアップロードをサポートしていません。
  3. [Upload]をクリックして、アップロードするファイルに移動します。
  4. [開く]をクリックします。

アップロード後にユーザー画素欠陥補正ファイルを適用するには、BslStaticDefectPixelCorrectionModeパラメーターがUserに設定されていることを確認し、BslStaticDefectPixelCorrectionReloadコマンドを実行します。

Defect Pixel Correctionファイルのダウンロード#

画素欠陥補正ファイル(工場補正ファイルなど)をダウンロードすると、ダウンロードしたファイルに独自の測定済み画素欠陥を追加する場合に便利です。画素欠陥エントリーの完全なリストを新しいユーザー補正ファイルに保存できます。

pylon Viewerを使用して画素欠陥補正ファイルをダウンロードするには、次の手順を実行します。

  1. pylon Viewerの[カメラ]メニューで、[ファイルアクセス]をクリックします。
  2. [Camera File]ドロップダウンボックスで、ダウンロードするファイルに応じて、[Static Factory Defect Pixel Correction]または[Static User Defect Pixel Correction]を選択します。
    適切なエントリーがない場合、カメラはファイルのダウンロードをサポートしていません。
  3. [ダウンロード]をクリックし、ファイルを保存するディレクトリーに移動して、任意のファイル名を入力します。
  4. [開く]をクリックします。
Static Defect Pixel Correctionファイルステータス#

StaticDefectPixelCorrectionFileStatusパラメーターには、次の値があります。

  • FileStatusUnknown:画素欠陥補正ファイルのステータスが不明です。画像を取得して、ファイルステータスを変更します。
  • FileOk:画素欠陥補正ファイルが有効です。
  • FileNotFound:画素欠陥補正ファイルが見つかりません。アップロードされたことも削除されたこともありません。
  • FileEmpty:画素欠陥補正ファイルにエントリーがありません。ファイルヘッダーは有効ですが、ファイルに画素欠陥が含まれていません。画素欠陥補正プロセスが中止されています。
  • InvalidHeader:画素欠陥補正ファイルヘッダーが無効です。ファイルには4バイトのファイルヘッダーが必要です。
  • InvalidSize:画素欠陥補正ファイルサイズが無効です。画素欠陥の最大数は4096を超えないようにしてください。
  • InvalidSorting:画素欠陥補正ファイルのエントリーのソートが無効です。画素欠陥補正プロセスが中止されています。
  • InvalidFileEntry:画素欠陥補正ファイルの1つ以上のエントリーが無効なサイズです。画素欠陥補正プロセスが中止されています。
  • InvalidClustering:無効なクラスターが見つかりました。1行で3つ以上の隣接する画素は、無効なクラスターと見なされます。他の画素欠陥間の画素欠陥は補正できません。

画素欠陥補正ファイルには、画素欠陥の最大数を含めることができます。この数を取得するには、BslStaticDefectPixelCorrectionMaxDefectsパラメーターの値を取得します。

boost Vカメラ#

Basler boost V カメラは、静的画素欠陥補正をサポートしています。この補正は、画素欠陥座標のリストを含むカメラに保存されたファイルに基づいて行われます。

「静的」とは、常に同じ指定画素欠陥座標が補正プロセスに使用されることを意味します。画像取得中、これらの画素の輝度値は、隣接する画素の輝度値に基づいて置き換えられます。

Defect Pixel Correctionの実行#

情報

pylon Viewer の内蔵静的 Defect Pixel Correction 機能は boost V カメラをサポートしていません。

boost V カメラで画素欠陥補正を行うには、pylon Viewer または pylon API の機能ツリーを使用します。

boost V カメラで画素欠陥補正を行うには、次のようにします。

  1. Set the BslStaticDefectPixelCorrectionMode parameter to the desired correction mode:

    • Factory:工場ファイルに座標が保存されている画素欠陥のみが補正されます。工場ファイルはカメラの製造時に生成され、変更できません。
    • User:カスタムの画素欠陥座標を指定できます。
    • Off:カメラは静的画素欠陥補正を実行しません
  2. If you selected User:

    1. 画像内の画素エラーを見つけて、画素欠陥の x 座標と y 座標を書き留めます。
    2. BslStaticDefectPixelCorrectionYCoordinate パラメーターを最初の画素欠陥の y 座標に設定します。
    3. BslStaticDefectPixelCorrectionXSelector パラメーターを X0 に設定します。
    4. BslStaticDefectPixelCorrectionXCoordinate パラメーターを最初の画素欠陥の x 座標に設定します。
    5. 同じ y 座標で異なる x 座標を持つ別の画素欠陥がある場合は、BslStaticDefectPixelCorrectionXSelector パラメーターを次のエントリ(X1 など)に設定し、次の x 座標を入力します。
    6. 他のすべての画素エラーについて、手順 b を繰り返します。
    7. BslStaticDefectPixelCorrectionSave コマンドを実行して、変更をフラッシュメモリに保存します。

情報

  • BslStaticDefectPixelCorrectionCount パラメーターを使用して、現在補正されている画像ピクセル数を確認できます。
  • BslStaticDefectPixelCorrectionTestMode パラメーターを On に設定することで、補正されたすべてのピクセルを完全に白に設定できます。これは、画像内で補正されているピクセルを見つけるのに役立ちます。

画素欠陥座標の除去#

工場ファイル内のピクセル座標は除去できません。

ただし、カスタム画素欠陥座標、つまり「User」補正モードで入力された座標は除去できます(上記参照)。そうするためには、次のようにします。

  • If you want to remove a single custom defect pixel coordinate:

    1. BslStaticDefectPixelCorrectionYCoordinate パラメーターを画素欠陥の y 座標に設定します。
    2. BslStaticDefectPixelCorrectionXSelector パラメーターを、画素欠陥の x 座標を保持するエントリ(X0 など)に設定します。
    3. BslStaticDefectPixelCorrectionXCoordinate パラメーターを 0xFFFF に設定します。
    4. BslStaticDefectPixelCorrectionSave コマンドを実行して、変更をフラッシュメモリに保存します。
  • If you want to remove all custom defect pixel coordinates:

    1. BslStaticDefectPixelCorrectionClearAll コマンドを実行します。これにより、すべての BslStaticDefectPixelCorrectionXCoordinate パラメーター値が 0xFFFF に設定されます。
    2. BslStaticDefectPixelCorrectionSave コマンドを実行して、変更をフラッシュメモリに保存します。

dartおよびpulseカメラ#

Basler dartとpulseカメラでは、次の2種類の画素補正を実行できます。

  • The static pixel correction corrects pixels that have significantly lesser intensity values than their neighboring pixels, including completely black pixels.
  • The dynamic pixel correction corrects pixels that have significantly higher intensity values than their neighboring pixels, including completely white pixels. An internal threshold value defines when a pixel is detected as a "hot pixel". "Dynamic" means that the defect pixel correction is calculated individually for each acquired image.

Defect Pixel Correction Modeの設定#

画素欠陥補正モードを設定するには、BslDefectPixelCorrectionModeパラメーターを次のいずれかの値に設定します。

  • On(デフォルト):カメラは静的および動的画素補正を実行します。
  • StaticOnly:カメラは静的画素補正のみを実行します。
  • Off:カメラは画素補正を実行しません

サンプルコード#

ace 2 R/X, boost R, and dart M Cameras#
// Set static user defect pixel correction
camera.BslStaticDefectPixelCorrectionMode.SetValue(BslStaticDefectPixelCorrectionMode_User);
// Reload static defect pixel correction file
camera.BslStaticDefectPixelCorrectionReload.Execute();
INodeMap& nodemap = camera.GetNodeMap();
// Set static user defect pixel correction
CEnumParameter(nodemap, "BslStaticDefectPixelCorrectionMode").SetValue("User");
// Reload static defect pixel correction file
CCommandParameter(nodemap, "BslStaticDefectPixelCorrectionReload").Execute();
// Set static user defect pixel correction
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionMode].SetValue(PLCamera.BslStaticDefectPixelCorrectionMode.User);
// Reload static defect pixel correction file
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionReload].Execute();
/* Macro to check for errors */
#define CHECK(errc) if (GENAPI_E_OK != errc) printErrorAndExit(errc)
GENAPIC_RESULT errRes = GENAPI_E_OK;  /* Return value of pylon methods */
/* Set static user defect pixel correction */
errRes = PylonDeviceFeatureFromString(hdev, "BslStaticDefectPixelCorrectionMode", "User");
CHECK(errRes);
/* Reload static defect pixel correction file */
errRes = PylonDeviceExecuteCommandFeature(hdev, "BslStaticDefectPixelCorrectionReload");
CHECK(errRes);
# Set static user defect pixel correction
camera.BslStaticDefectPixelCorrectionMode.Value = "User"
# Reload static defect pixel correction file
camera.BslStaticDefectPixelCorrectionReload.Execute()
boost Vカメラ#
// Set the defect pixel correction mode to User
camera.BslStaticDefectPixelCorrectionMode.SetValue(BslStaticDefectPixelCorrectionMode_User);
// Assume there are two defect pixels at coordinates (120,430) and (182,430)
// Set the y coordinate to 430
camera.BslStaticDefectPixelCorrectionYCoordinate.SetValue(430);
// Select entry X0 and assign the first x coordinate
camera.BslStaticDefectPixelCorrectionXSelector.SetValue(BslStaticDefectPixelCorrectionXSelector_X0);
camera.BslStaticDefectPixelCorrectionXCoordinate.SetValue(120);
// Select entry X1 and assign the second x coordinate, which is in the same line
camera.BslStaticDefectPixelCorrectionXSelector.SetValue(BslStaticDefectPixelCorrectionXSelector_X1);
camera.BslStaticDefectPixelCorrectionXCoordinate.SetValue(182);
// Save changes to flash memory
camera.BslStaticDefectPixelCorrectionSave.Execute();
INodeMap& nodemap = camera.GetNodeMap();
// Set the defect pixel correction mode to User
CEnumParameter(nodemap, "BslStaticDefectPixelCorrectionMode").SetValue("User");
// Assume there are two defect pixels at coordinates (120,430) and (182,430)
// Set the y coordinate to 430
CIntegerParameter(nodemap, "BslStaticDefectPixelCorrectionYCoordinate").SetValue(430);
// Select entry X0 and assign the first x coordinate
CEnumParameter(nodemap, "BslStaticDefectPixelCorrectionXSelector").SetValue("X0");
CIntegerParameter(nodemap, "BslStaticDefectPixelCorrectionXCoordinate").SetValue(120);
// Select entry X1 and assign the second x coordinate, which is in the same line
CEnumParameter(nodemap, "BslStaticDefectPixelCorrectionXSelector").SetValue("X1");
CIntegerParameter(nodemap, "BslStaticDefectPixelCorrectionXCoordinate").SetValue(182);
// Save changes to flash memory
CCommandParameter(nodemap, "BslStaticDefectPixelCorrectionSave").Execute();
// Set the defect pixel correction mode to User
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionMode].SetValue(PLCamera.BslStaticDefectPixelCorrectionMode.User);
// Assume there are two defect pixels at coordinates (120,430) and (182,430)
// Set the y coordinate to 430
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionYCoordinate].SetValue(430);
// Select entry X0 and assign the first x coordinate
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionXSelector].SetValue(PLCamera.BslStaticDefectPixelCorrectionXSelector.X0);
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionXCoordinate].SetValue(120);
// Select entry X1 and assign the second x coordinate, which is in the same line
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionXSelector].SetValue(PLCamera.BslStaticDefectPixelCorrectionXSelector.X1);
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionXCoordinate].SetValue(182);
// Save changes to flash memory
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionSave].Execute();
/* Macro to check for errors */
#define CHECK(errc) if (GENAPI_E_OK != errc) printErrorAndExit(errc)
GENAPIC_RESULT errRes = GENAPI_E_OK;  /* Return value of pylon methods */
/* Set the defect pixel correction mode to User */
errRes = PylonDeviceFeatureFromString(hdev, "BslStaticDefectPixelCorrectionMode", "User");
CHECK(errRes);
/* Assume there are two defect pixels at coordinates (120,430) and (182,430) */
/* Set the y coordinate to 430 */
errRes = PylonDeviceSetIntegerFeature(hdev, "BslStaticDefectPixelCorrectionYCoordinate", 430);
CHECK(errRes);
/* Select entry X0 and assign the first x coordinate */
errRes = PylonDeviceFeatureFromString(hdev, "BslStaticDefectPixelCorrectionXSelector", "X0");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "BslStaticDefectPixelCorrectionXCoordinate", 120);
CHECK(errRes);
/* Select entry X1 and assign the second x coordinate, which is in the same line */
errRes = PylonDeviceFeatureFromString(hdev, "BslStaticDefectPixelCorrectionXSelector", "X1");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "BslStaticDefectPixelCorrectionXCoordinate", 182);
CHECK(errRes);
/* Save changes to flash memory */
errRes = PylonDeviceExecuteCommandFeature(hdev, "BslStaticDefectPixelCorrectionSave");
CHECK(errRes);
# Set the defect pixel correction mode to User
camera.BslStaticDefectPixelCorrectionMode.Value = "User"
# Assume there are two defect pixels at coordinates (120,430) and (182,430)
# Set the y coordinate to 430
camera.BslStaticDefectPixelCorrectionYCoordinate.Value = 430
# Select entry X0 and assign the first x coordinate
camera.BslStaticDefectPixelCorrectionXSelector.Value = "X0"
camera.BslStaticDefectPixelCorrectionXCoordinate.Value = 120
# Select entry X1 and assign the second x coordinate, which is in the same line
camera.BslStaticDefectPixelCorrectionXSelector.Value = "X1"
camera.BslStaticDefectPixelCorrectionXCoordinate.Value = 182
# Save changes to flash memory
camera.BslStaticDefectPixelCorrectionSave.Execute()
dartおよびpulseカメラ#
// Disable defect pixel correction
camera.BslDefectPixelCorrectionMode.SetValue(BslDefectPixelCorrectionMode_Off);
INodeMap& nodemap = camera.GetNodeMap();
// Disable defect pixel correction
CEnumParameter(nodemap, "BslDefectPixelCorrectionMode").SetValue("Off");
// Disable defect pixel correction
camera.Parameters[PLCamera.BslDefectPixelCorrectionMode].SetValue(PLCamera.BslDefectPixelCorrectionMode.Off);
/* Macro to check for errors */
#define CHECK(errc) if (GENAPI_E_OK != errc) printErrorAndExit(errc)
GENAPIC_RESULT errRes = GENAPI_E_OK;  /* Return value of pylon methods */
/* Disable defect pixel correction */
errRes = PylonDeviceFeatureFromString(hdev, "BslDefectPixelCorrectionMode", "Off");
CHECK(errRes);
# Disable defect pixel correction
camera.BslDefectPixelCorrectionMode.Value = "Off"

pylon Viewerを使用して、パラメーターを簡単に設定することもできます。