コンテンツにスキップ

Vignetting Correction#

Vignetting Correctionカメラ機能を使用すると、画像からビネットアーチファクトを除去できます。

この機能は,pylon ViewerVignetting Correction機能と連携して動作します。

機能を使用する#

口径食とは、画像の中心に比べて画像の隅が暗くなる現象のことを言います。これはデジタル画像処理ではよく見られる影響です。センサーの端のピクセルが十分な光を受けない場合に発生します。

これは、イメージサークルがセンサーのサイズに比べて小さすぎる場合や、光線がセンサーに適切な角度(センサーの中心に当たるように)で当たらない場合に発生する可能性があります。これの場合、エッジのピクセルのグレー値が低いことを意味します。

これらのアーチファクトを除去するには、pylon Viewerを使用して一連の補正データを作成する必要があります。次の図は、このプロセスを示します。

Vignetting Correctionプロセス図

手順1では、すべての画素の補正値(CV)が計算され、カメラのメモリに保存されます。手順 2では、VignettingCorrectionModeパラメーターが有効になると、ビネットアーチファクトは直ちに削除されます。アーチファクトを除去するために、補正値を元のピクセル値(OV)に乗算して、改善された画像(Resulting Values、RV)を実現します。

VignettingCorrectionModeパラメーターを使用すると、補正のオンとオフを切り替えることができます。このパラメーターは、pylon Viewerを使用してビネット補正データを作成しないと使用できません。

また、カメラの仕様が、ビネット補正データを作成した別のカメラの仕様と類似している場合は、この別のカメラのビネット補正データを使用することもできます。これを行うには、次の手順を実行します。その後、VignettingCorrectionLoadコマンドを実行します。

情報

  • 最適な結果を得るには、補正データを作成する前に、光源の初期値やガンマなどの非線形機能をすべて無効にしてください。これらの機能は、あとで再度有効にすることができます。
  • カラーカメラでは、補正データを作成する前にベイヤーピクセルフォーマットを選択します。補正データを作成したら、任意のピクセルフォーマットを選択できます。
  • ビネット補正を実行するときは、生成された基準画像の隅の部分が中央部より適度に暗くなっていることが重要です。
  • ビネットは、使用するレンズ、口径、および焦点距離の影響を受けます。レンズ、口径、または焦点距離を変更する場合は、ビネット補正データの新しいセットを作成する必要があります。
  • BinningSelectorパラメーターがSensorに設定されているときにビニング係数を変更すると、ビネット補正が無効になります。VignettingCorrectionModeパラメーターはOffに設定され、次のいずれかが発生するまで再びOnにすることはできません。

    • ビニング係数を、ビネット補正を実行した係数にリセットする。
    • 新しい係数を使用して再度ビネット補正を実行する。

サンプルコード#

ace 2 および boost R カメラ#
// Turn vignetting correction on
camera.BslVignettingCorrectionMode.SetValue(BslVignettingCorrectionMode_On);
// Load vignetting correction data
camera.BslVignettingCorrectionLoad.Execute();
INodeMap& nodemap = camera.GetNodeMap();
// Turn vignetting correction on
CEnumParameter(nodemap, "BslVignettingCorrectionMode").SetValue("On");
// Load vignetting correction data
CCommandParameter(nodemap, "BslVignettingCorrectionLoad").Execute();
// Turn vignetting correction on
camera.Parameters[PLCamera.BslVignettingCorrectionMode].SetValue(PLCamera.BslVignettingCorrectionMode.On);
// Load vignetting correction data
camera.Parameters[PLCamera.BslVignettingCorrectionLoad].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 */
/* Turn vignetting correction on */
errRes = PylonDeviceFeatureFromString(hdev, "BslVignettingCorrectionMode", "On");
CHECK(errRes);
/* Load vignetting correction data */
errRes = PylonDeviceExecuteCommandFeature(hdev, "BslVignettingCorrectionLoad");
CHECK(errRes);
# Turn vignetting correction on
camera.BslVignettingCorrectionMode.Value = "On"
# Load vignetting correction data
camera.BslVignettingCorrectionLoad.Execute()
その他のカメラ#
// Turn vignetting correction on
camera.VignettingCorrectionMode.SetValue(VignettingCorrectionMode_On);
// Load vignetting correction data
camera.VignettingCorrectionLoad.Execute();
INodeMap& nodemap = camera.GetNodeMap();
// Turn vignetting correction on
CEnumParameter(nodemap, "VignettingCorrectionMode").SetValue("On");
// Load vignetting correction data
CCommandParameter(nodemap, "VignettingCorrectionLoad").Execute();
// Turn vignetting correction on
camera.Parameters[PLCamera.VignettingCorrectionMode].SetValue(PLCamera.VignettingCorrectionMode.On);
// Load vignetting correction data
camera.Parameters[PLCamera.VignettingCorrectionLoad].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 */
/* Turn vignetting correction on */
errRes = PylonDeviceFeatureFromString(hdev, "VignettingCorrectionMode", "On");
CHECK(errRes);
/* Load vignetting correction data */
errRes = PylonDeviceExecuteCommandFeature(hdev, "VignettingCorrectionLoad");
CHECK(errRes);
# Turn vignetting correction on
camera.VignettingCorrectionMode.Value = "On"
# Load vignetting correction data
camera.VignettingCorrectionLoad.Execute()

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