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

Vignetting Correction#

透過 Vignetting Correction camera feature,您可以移除影像中的暗角偽影。

此功能與 pylon Viewer 中的 Vignetting Correction 功能搭配運作。

使用此功能#

暗角是指影像四角比中心暗的現象。這是數位相片中常見的效應,當感光元件邊緣的像素無法接收足夠的光線時就會發生。

發生此情況的原因可能是影像圓圈相對於感光元件大小而言太小,或者光線不像感光元件中心那樣以直角射入感光元件。這意味著邊緣的像素具有較低的灰階值。

若要移除這些偽影,您必須使用 pylon Viewer 建立一組校正資料。下列圖表說明此程序:

Vignetting Correction 程序圖

在步驟 1 中,系統會計算所有像素的校正值 (CV) 並將其儲存至相機的 Memory 中。在步驟 2 中,如果 VignettingCorrectionMode 參數已啟用,系統會立即移除暗角偽影。若要移除偽影,系統會將校正值與原始像素值 (OV) 相乘,以獲得改良的影像(結果值,RV)。

使用 VignettingCorrectionMode 參數,您可以開啟或關閉校正功能。此參數只有在您使用 pylon Viewer 建立 Vignetting Correction 資料後才會可用。

如果您相機的規格與您建立 Vignetting Correction 資料的相機相似,您也可以使用來自不同相機的 Vignetting Correction 資料。若要這樣做,請遵循下列 步驟。之後,請執行 VignettingCorrectionLoad 命令。

資訊

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

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

範例程式碼#

ace 2 與 boost R Cameras#
// 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 來輕鬆設定參數。