Defect Pixel Correction#
取得した画像では、均一な光が使用されていても、一部の画素が他の画素よりも大幅に明るくまたは暗く見える場合があります。この問題は、個々の画素の感度の違いが原因で発生します。これは、製造上の許容誤差が原因です。
機能を使用する#
この機能の実装はカメラによって異なります。
ace 2 R/X、boost R、dart M カメラ#
Basler ace 2 R、ace 2 X、boost R、dart Mカメラは、静的欠陥ピクセル補正をサポートしています。この補正は、カメラに保存されている、欠陥ピクセルの座標リストを含むファイルに基づいています。
「静的」とは、常に同じ指定画素欠陥座標が補正プロセスに使用されることを意味します。画像取得中、これらの画素の輝度値は、隣接する画素の輝度値に基づいて置き換えられます。
次の画素欠陥補正ファイルをカメラに保存できます。
- ファクトリーファイル:カメラの製造時に検出された欠陥ピクセルの座標が含まれています。
- ユーザーファイル:ユーザー定義の座標が含まれています。このファイルをカメラにアップロードできます。これにより、経年変化によって発生した可能性のある新しい欠陥ピクセルを定義できます。
情報
Basler ace 2 Xカメラは、動的画素欠陥補正もサポートしています。詳細については、Pixel Correction Beyondを参照してください。
pylon Viewerを使用した画素欠陥補正#
→Static Defect Pixel Correction(pylon Viewer)を参照してください。
pylon APIを使用した画素欠陥補正#
Static Defect Pixel Correction Modeの設定#
静的欠陥ピクセル補正モードを設定するには、 BslStaticDefectPixelCorrectionMode パラメーターを次のいずれかの値に設定します。
Factory(デフォルト):静的欠陥ピクセル補正は、 factory 補正ファイルに保存されている欠陥ピクセルに基づきます。User:静的欠陥ピクセル補正は、 user 補正ファイルに保存されている欠陥ピクセルに基づきます。
pylon APIを介してこのモードを設定する場合、 ユーザー定義のピクセルのみが使用されます。 設定する場合、ファクトリーファイルに保存されているピクセルに加えてユーザー定義のピクセルが使用されます。 User incl. Factory を介した補正モードの pylon Viewer、ファクトリーファイルに保存されているピクセルに加えてユーザー定義のピクセルが使用されます。Off:カメラはShading Correctionを 行いません 静的欠陥ピクセル補正を実行します。
ユーザーDefect Pixel Correctionファイルのアップロード#
ユーザー画素欠陥補正ファイルをアップロードする前に、ファイルが次のファイル形式に準拠していることを確認してください。
ファイルは、値が0の4バイトを含む4バイトのヘッダーで始まる必要があります。ヘッダーに続いて、ファイルには画素欠陥エントリーが含まれている必要があります(最大4096の画素欠陥を指定できます)。各エントリーは、14ビットのy座標、14ビットのx座標、4ビットのタイプの順に、32ビットで構成されています。
例:座標x = 1およびy = 2の画素欠陥エントリー
pylon Viewerを使用してユーザー画素欠陥補正ファイルをアップロードするには、次の手順を実行します。
- pylon Viewerの[カメラ]メニューで、[ファイルアクセス]をクリックします。
- [Camera File]ドロップダウンボックスで、[User Defect Pixel Correction]を選択します。
User Defect Pixel Correctionエントリーがない場合、カメラは補正ファイルのアップロードをサポートしていません。 - [Upload]をクリックして、アップロードするファイルに移動します。
- [開く]をクリックします。
アップロード後にUser Defect Pixel Correctionファイルを適用するには、 BslStaticDefectPixelCorrectionMode パラメータが次のように設定されていること: User を確認し、実行します。 BslStaticDefectPixelCorrectionReload コマンド。
Defect Pixel Correctionファイルのダウンロード#
画素欠陥補正ファイル(工場補正ファイルなど)をダウンロードすると、ダウンロードしたファイルに独自の測定済み画素欠陥を追加する場合に便利です。画素欠陥エントリーの完全なリストを新しいユーザー補正ファイルに保存できます。
pylon Viewerを使用して画素欠陥補正ファイルをダウンロードするには、次の手順を実行します。
- pylon Viewerの[カメラ]メニューで、[ファイルアクセス]をクリックします。
- [Camera File]ドロップダウンボックスで、ダウンロードするファイルに応じて、[Static Factory Defect Pixel Correction]または[Static User Defect Pixel Correction]を選択します。
適切なエントリーがない場合、カメラはファイルのダウンロードをサポートしていません。 - [ダウンロード]をクリックし、ファイルを保存するディレクトリーに移動して、任意のファイル名を入力します。
- [開く]をクリックします。
Static Defect Pixel Correctionファイルステータス#
イメージ StaticDefectPixelCorrectionFileStatus パラメータには以下の値を設定できます:
FileStatusUnknown:欠陥ピクセル補正ファイルのステータスが不明です。画像を取得してファイルのステータスを変更してください。FileOk:欠陥ピクセル補正ファイルは有効です。FileNotFound:欠陥ピクセル補正ファイルが見つかりません。アップロードされたことがないか、削除されています。FileEmpty:欠陥ピクセル補正ファイルのエントリがありません。ファイルヘッダーは有効ですが、ファイルに欠陥ピクセルが含まれていません。欠陥ピクセル補正プロセスが中止されます。InvalidHeader:欠陥ピクセル補正ファイルのヘッダーが無効です。ファイルには4バイトのファイルヘッダーが必要です。InvalidSize:欠陥ピクセル補正ファイルのサイズが無効です。欠陥ピクセルの最大数は4096を超えてはなりません。InvalidSorting:欠陥ピクセル補正ファイルのエントリの並び替えが無効です。欠陥ピクセル補正プロセスが中止されます。InvalidFileEntry:欠陥ピクセル補正ファイルの少なくとも1つのエントリのサイズが無効です。欠陥ピクセル補正プロセスが中止されます。InvalidClustering:無効なクラスターが見つかりました。行内で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 カメラで画素欠陥補正を行うには、次のようにします。
-
パラメーターを
BslStaticDefectPixelCorrectionModeパラメータを目的の補正モードに設定します。Factory:工場出荷時のファイルに保存されている座標を持つ欠陥ピクセルのみが補正されます。工場出荷時のファイルはカメラの製造時に生成され、変更することはできません。User:カスタム欠陥ピクセル座標を指定できます。Off:カメラはShading Correctionを 行いません 静的欠陥ピクセル補正を実行します。
-
次を選択した場合:
User:- 画像内の画素エラーを見つけて、画素欠陥の x 座標と y 座標を書き留めます。
- パラメーターを
BslStaticDefectPixelCorrectionYCoordinateパラメータを 1番目の欠陥ピクセルのy 座標。 - パラメーターを
BslStaticDefectPixelCorrectionXSelectorパラメータをX0. - パラメーターを
BslStaticDefectPixelCorrectionXCoordinateパラメータを x 座標。 - 同じy座標を持ちながらx座標が異なる別の欠陥ピクセルが存在する場合は、
BslStaticDefectPixelCorrectionXSelectorパラメータを次のエントリに設定します(例:X1)、および次のx座標を入力します。 - 他のすべての画素の不具合についても、ステップb〜eを繰り返します。
- 実行します:
BslStaticDefectPixelCorrectionSaveコマンドを実行して、変更をフラッシュ Memory に保存します。
情報
- ネットワーク接続が不安定になった状況に対処するために、
BslStaticDefectPixelCorrectionCountパラメータを使用して、現在補正されている画像ピクセルの数を確認します。 - 利用可能な場合、
BslStaticDefectPixelCorrectionTestModeパラメータをOn補正されたすべてのピクセルを完全に白に設定します。これにより、画像内で補正されているピクセルを特定しやすくなります。
画素欠陥座標の除去#
工場ファイル内のピクセル座標は除去できません。
ただし、カスタム画素欠陥座標、つまり「User」補正モードで入力された座標は除去できます(上記参照)。そうするためには、次のようにします。
-
1つだけカスタム欠陥ピクセル座標を削除する場合:
- パラメーターを
BslStaticDefectPixelCorrectionYCoordinateパラメータを 1番目の欠陥ピクセルのy 欠陥ピクセルの座標。 - パラメーターを
BslStaticDefectPixelCorrectionXSelector欠陥ピクセルのx座標を保持するエントリへのパラメータ(例:X0. - パラメーターを
BslStaticDefectPixelCorrectionXCoordinateパラメータを0xFFFFに設定します。 - 実行します:
BslStaticDefectPixelCorrectionSaveコマンドを実行して、変更をフラッシュ Memory に保存します。
- パラメーターを
-
すべてのカスタム欠陥ピクセル座標を削除する場合:
- 実行します:
BslStaticDefectPixelCorrectionClearAllコマンド。これにより、すべてのBslStaticDefectPixelCorrectionXCoordinateパラメータ値が0xFFFFに設定されます。 - 実行します:
BslStaticDefectPixelCorrectionSaveコマンドを実行して、変更をフラッシュ Memory に保存します。
- 実行します:
dartおよびpulseカメラ#
Basler dartとpulseカメラでは、次の2種類の画素補正を実行できます。
- staticピクセル補正は、完全に黒いピクセルを含め、隣接するピクセルよりも輝度値が著しく低いピクセルを補正します。
- dynamicピクセル補正は、完全に白いピクセルを含め、隣接するピクセルよりも輝度値が著しく高いピクセルを補正します。内部閾値によって、ピクセルが「ホットピクセル」として検出されるタイミングが定義されます。「dynamic」とは、取得した画像ごとに欠陥ピクセル補正が個別に計算されることを意味します。
Defect Pixel Correction Modeの設定#
欠陥ピクセル補正モードを設定するには、 BslDefectPixelCorrectionMode パラメーターを次のいずれかの値に設定します。
On(デフォルト):カメラは次を実行します。 静的および動的 画素補正。StaticOnly: カメラは実行します 静的 画素補正のみ。Off:カメラはShading Correctionを 行いません 画素補正を実行します。
サンプルコード#
ace 2 R/X、boost R、dart M カメラ#
/* 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);
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カメラ#
/* 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, "DefectPixelCorrectionMode", "Off");
CHECK(errRes);
pylon Viewerを使用して、パラメーターを簡単に設定することもできます。