コンテンツにスキップ

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カメラ#

// 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.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);

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