跳至內容
測試伺服器
開發伺服器

Vignetting Correction#

「Vignetting Correction 」相機功能可讓您從照片中移除暗角現象。

此功能會與 Vignetting Correction 功能在 pylon Viewer中的功能。

使用功能#

暗角是指相較於畫面中心,影像邊角處顯得較暗的現象。這是數位影像中常見的現象,當感光元件邊緣的像素無法接收足夠的光線時,便會產生此現象。

這可能發生於以下情況:例如,影像圈相對於感光元件的尺寸過小,或是光線並未像在感光元件中心那樣以直角照射到感光元件上。這意味著邊緣處的像素灰階值較低。

要移除這些偽影,您必須使用pylon Viewer。下圖說明此過程:

Vignetting Correction 流程圖

在步驟 1 中,會計算所有像素的校正值 (CV),並將其儲存於相機的記憶體中。在步驟 2 中,若 VignettingCorrectionMode 已啟用此參數。為消除雜訊,會將校正值乘以原始像素值(OV),從而獲得改善後的影像(結果值,RV)。

使用 VignettingCorrectionMode 透過此參數,您可以開啟或關閉校正功能。此參數僅在您使用「pylon Viewer 」建立暗角校正資料後才會顯示。

如果您的相機規格與您建立暗角校正資料時所使用的相機相似,您也可以使用來自另一台相機的暗角校正資料。要這麼做,請依照以下步驟: 步驟. 接著,執行該 VignettingCorrectionLoad 指令。

資訊

  • 為獲得最佳效果,請在建立校正資料之前停用所有非線性功能,例如 Light Source Preset 或 Gamma。之後,您就可以重新啟用它們。
  • 在彩色相機上,請在建立校正資料之前選擇 Bayer Pixel Format。建立校正資料後,您就可以選擇任何 Pixel Format。
  • 執行 Vignetting Correction 時,重要的是產生的參考影像顯示出邊角相對於中心的 darkening 程度應為適中。
  • 暗角會受到所使用的鏡頭、光圈和焦距的影響。如果您更換了鏡頭、光圈或焦距,則必須建立一套新的 Vignetting Correction 資料。
  • 在……期間變更分組因子 BinningSelector 參數設為 Sensor 將會停用 Vignetting Correction。該 VignettingCorrectionMode 參數將會設為 Off變更 binning factor,並且在發生以下情況之一之前,您將無法再次開啟它:

    • 您將 binning factor 重設為執行 Vignetting Correction 時所使用的係數。
    • 您使用新的係數再次執行 Vignetting Correction。

範例程式碼#

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()

您也可以 use the pylon Viewer 來輕鬆設定參數。