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

Tonal Range#

透過 Tonal Range camera feature,您可以手動調整對比度或校正色偏。

若要使用此功能,您必須熟悉 tonal range 和 image histograms 的概念。

如果您想要自動調整 Tonal Range,請使用 Tonal Range Auto 功能。

如果您想要使用線性或 S 形曲線函數調整對比度,請使用 Brightness and Contrast 功能(如果可用)。

使用功能#

調整對比度#

資訊

Basler 建議優先使用 Tonal Range Auto 功能。之後,您可以按照以下說明微調對比度。

若要手動調整對比度:

  1. 請確保相機已經能拍攝出良好的影像,僅剩 low contrast 或 shifted colors 等問題需要處理。Tonal range 操作只能對已經具備良好 Quality 的影像執行。
    在最佳化影像 Quality 時,請遵循 sequence given below。
  2. 將相機中的 TonalRangeEnable 參數設為 On.
  3. 將相機中的 TonalRangeSelector 參數設為 Sum.
  4. 將相機中的 TonalRangeSourceDark 進行明確的生命週期管理即呼叫 TonalRangeTargetDark 將參數設為 dark source 和 target values.
    如果 dark target value 低於 dark source value,對比度就會增加。
  5. 將相機中的 TonalRangeSourceBright 進行明確的生命週期管理即呼叫 TonalRangeTargetBright 將參數設為 bright source 和 target values.
    如果 bright target value 大於 bright source value,對比度就會增加。

校正色彩偏移#

資訊

Basler 建議優先使用 Tonal Range Auto 功能。之後,您可以按照以下說明微調色彩校正。

若要手動校正色偏:

  1. 請確保相機已經能拍攝出良好的影像,僅剩 low contrast 或 shifted colors 等問題需要處理。Tonal range 操作只能對已經具備良好 Quality 的影像執行。
    在最佳化影像 Quality 時,請遵循 sequence given below。
  2. 將相機中的 TonalRangeEnable 參數設為 On.
  3. 將相機中的 TonalRangeSelector 參數設為 Red, Green,或 Blue,具體取決於您想要校正的色偏。
    範例: 如果您的影像帶有綠色色偏,請將參數設為 Green.
  4. 將相機中的 TonalRangeSourceDark, TonalRangeTargetDark, TonalRangeSourceBright以及 TonalRangeTargetBright 參數為 source 和 target values 將目前的色階分佈圖與其他色階分佈圖對齊。

影像優化順序#

如果您想要最佳化影像 Quality,請遵循以下順序以避免副作用:

  1. 使用 Exposure Time、Black Level 和 Gain 功能進行基本的影像最佳化。請確保影像未過度飽和。
  2. 如果您使用的是彩色相機,請使用 Light Source Preset、Balance White Auto 或 Balance White 功能來調整白平衡。
  3. 使用 Tonal Range Auto 和 Tonal Range 功能來最佳化對比度、顏色或兩者。

運作原理#

透過查看圖像中色調分佈的圖形表示(即 image histogram),可以更好地理解色調範圍操作。

Basler pylon Viewer 提供了 Histogram 窗格,這在執行色調範圍操作時非常有用。

資訊

根據相機上啟用的其他功能而定,pylon Viewer 中的 Histogram 窗格可能 不會顯示 Tonal Range 功能實際使用的資料。
例如,Gamma 功能是在色調範圍操作之後處理的。因此,pylon Viewer 中顯示的直方圖包含伽瑪校正,但 Tonal Range 功能所使用的資料則不包含。

來源與目標值#

對比度和色彩調整都基於將 source 值對應到 target 值的相同概念。

為了說明這一點,可以將來源值視為直方圖中的「錨點」,而將目標值視為錨點移動到的位置。

Source 和 Target Values 示意圖

當來源值對應到目標值時,整個直方圖會相應地擴展或拉伸:

直方圖拉伸動畫

Dark/Bright Source 和 Target Values#

如上圖所示,執行色調範圍操作必須定義兩組來源和目標值:

  • Dark 來源和目標值,位於 低於 直方圖末端。
    您可以使用以下方式指定這些值 TonalRangeSourceDark 進行明確的生命週期管理即呼叫 TonalRangeTargetDark 參數。
  • Bright 來源和目標值,位於 上方 直方圖末端。
    您可以使用以下方式指定這些值 TonalRangeSourceBright 進行明確的生命週期管理即呼叫 TonalRangeTargetBright 參數。

所有來源和目標值範圍可從 0 到最大像素值(例如,如果設定了 12-bit pixel format,則為 4095)。由於直方圖拉伸和擴展的程度有限,參數範圍也可能受到限制。

對比度調整(單色與彩色相機)#

在所有支援 Tonal Range 功能的相機上,您都可以使用此功能來調整對比度。

低對比度圖像具有較窄的色調範圍:

狹窄色調範圍範例

Tonal Range 功能允許您手動拓寬色調範圍,從而增加對比度。

寬廣色調範圍範例

拓寬色調範圍是透過將 dark source value 對應到較低的目標值,並將 bright source value 對應到較高的目標值來完成的。

兩個來源值之間的區域定義了您的中間調,即您認為對圖像至關重要的像素值。

若要自動執行此程序,請使用 Tonal Range Auto 功能。

色彩校正(僅限彩色相機)#

在支援 Tonal Range 功能的彩色相機上,您也可以使用此功能來校正偏色。

如果您影像中的顏色偏色,這三個 RGB(紅、綠、藍)色階分佈圖將無法對齊。例如,如果您的影像帶有紅色色偏,紅色色階分佈圖顯示的位置會比綠色和藍色色階分佈圖更偏右(請參閱下方範例)。

透過 Tonal Range 功能,您可以手動對齊 RGB 色階分佈圖,進而減少偏色。

RGB 色階分佈圖對齊動畫

您可以透過設定來源與目標值來對齊 RGB 色階分佈圖,使所有色階分佈圖都拉伸並移動到相似的起點與終點。

若要自動執行此程序,請使用 Tonal Range Auto 功能。

範例程式碼#

// Enable tonal range adjustments
camera.TonalRangeEnable.SetValue(TonalRangeEnable_On);
// Specify that the summed RGB pixel values are used for tonal range adjustments
camera.TonalRangeSelector.SetValue(TonalRangeSelector_Sum);
// Set the dark source and target values
camera.TonalRangeSourceDark.SetValue(30);
camera.TonalRangeTargetDark.SetValue(0);
// Set the bright source and target values
camera.TonalRangeSourceBright.SetValue(240);
camera.TonalRangeTargetBright.SetValue(255);
INodeMap& nodemap = camera.GetNodeMap();
// Enable tonal range adjustments
CEnumParameter(nodemap, "TonalRangeEnable").SetValue("On");
// Specify that the summed RGB pixel values are used for tonal range adjustments
CEnumParameter(nodemap, "TonalRangeSelector").SetValue("Sum");
// Set the dark source and target values
CIntegerParameter(nodemap, "TonalRangeSourceDark").SetValue(30);
CIntegerParameter(nodemap, "TonalRangeTargetDark").SetValue(0);
// Set the bright source and target values
CIntegerParameter(nodemap, "TonalRangeSourceBright").SetValue(240);
CIntegerParameter(nodemap, "TonalRangeTargetBright").SetValue(255);
// Enable tonal range adjustments
camera.Parameters[PLCamera.TonalRangeEnable].SetValue(PLCamera.TonalRangeEnable.On);
// Specify that the summed RGB pixel values are used for tonal range adjustments
camera.Parameters[PLCamera.TonalRangeSelector].SetValue(PLCamera.TonalRangeSelector.Sum);
// Set the dark source and target values
camera.Parameters[PLCamera.TonalRangeSourceDark].SetValue(30);
camera.Parameters[PLCamera.TonalRangeTargetDark].SetValue(0);
// Set the bright source and target values
camera.Parameters[PLCamera.TonalRangeSourceBright].SetValue(240);
camera.Parameters[PLCamera.TonalRangeTargetBright].SetValue(255);
/* 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 */
/* Enable tonal range adjustments */
errRes = PylonDeviceFeatureFromString(hdev, "TonalRangeEnable", "On");
CHECK(errRes);
/* Specify that the summed RGB pixel values are used for tonal range adjustments */
errRes = PylonDeviceFeatureFromString(hdev, "TonalRangeSelector", "Sum");
CHECK(errRes);
/* Set the dark source and target values */
errRes = PylonDeviceSetIntegerFeature(hdev, "TonalRangeSourceDark", 30);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "TonalRangeTargetDark", 0);
CHECK(errRes);
/* Set the bright source and target values */
errRes = PylonDeviceSetIntegerFeature(hdev, "TonalRangeSourceBright", 240);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "TonalRangeTargetBright", 255);
CHECK(errRes);
# Enable tonal range adjustments
camera.TonalRangeEnable.Value = "On"
# Specify that the summed RGB pixel values are used for tonal range adjustments
camera.TonalRangeSelector.Value = "Sum"
# Set the dark source and target values
camera.TonalRangeSourceDark.Value = 30
camera.TonalRangeTargetDark.Value = 0
# Set the bright source and target values
camera.TonalRangeSourceBright.Value = 240
camera.TonalRangeTargetBright.Value = 255

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