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

Spatial Correction#

Spatial Correction 相機功能可讓您結合線掃描感測器的色彩資訊,其中有多條像素線會同時曝光。

資訊

使用功能#

運作原理#

Basler Racer 2彩色攝影機配備兩種不同的感測器類型:彩色雙線感測器或彩色三線感測器。

資訊

若要查閱您所使用相機型號的感測器類型,請參閱該相機型號的相關主題。您可在「區域式與線掃式相機」章節中找到該相機的相關主題。

彩色雙線感測器具有兩條像素線,而彩色三線感測器則具有三條緊鄰排列的像素線。雙線感測器的像素線彼此直接相鄰,而三線感測器的像素線之間則有一道間隙分隔。

彩色相機感測器的表面

每條線對經過相機的任何物體所具有的視野皆不相同。每當觸發影像擷取時,感測器上的所有線都會同時曝光。這意味著在單次曝光中,感測器上的每條線都會擷取物體上不同的區域。

下圖顯示了一款彩色三線式感測器的視野範圍。

三線式感測器的視野範圍

在以下範例中,物體上的一個小區域「A」經過相機。當物體經過相機時,區域 A 分別在三個不同時間點進入藍線、綠線及紅線的視線範圍內。這表示區域 A 的藍色資訊、綠色資訊及紅色資訊,是在三次不同的影像擷取過程中所收集到的。

物體通過式線掃描彩色攝影機

要取得區域 A 的完整 RGB 資訊,必須將來自三次不同曝光的資料進行整合。這種為了獲得完整色彩資訊而需整合不同曝光資料的過程,稱為空間校正。換言之,空間校正的作用是對齊影像中的色彩資訊。當前曝光的紅色通道資料,會與先前曝光所取得的綠色及藍色通道資料進行整合。

Spatial Correction Stride#

當 BslSpatialCorrectionStride 此參數用於啟用與停用空間校正,並設定空間校正的兩項參數:起始線與步長。

起跑線#

空間校正的起點與物體經過相機的方向有關。

設定 BslSpatialCorrectionStride 將參數設為正值或負值,將決定起始線,進而決定空間校正的方向。

線掃描彩色攝影機#

下圖顯示了彩色三線式感測器上,根據運動方向而定的起始線。

物體通過線掃描彩色攝影機 移動方向

彩色三線式感測器:

  • 正參數值:起始線為藍色線。
  • 負數參數值:起始線為紅色線。

彩色雙線感測器:

  • 正參數值:起始線為藍紅相間的線。
  • 負數參數值:起始線為綠色線。
線掃描單色相機#

下圖顯示了單四線式感測器上,根據運動方向而定的起始線。

物體通過線掃描單色相機 運動方向

單通道四線式感測器:

  • 正參數值:起始行是第 4 行。
  • 負數參數值:起始行是第 1 行。

單通道雙線式感測器:

  • 正參數值:起始行是第 2 行。
  • 負數參數值:起始行是第 1 行。

Stride#

空間校正步長決定了必須緩衝多少次採集,才能將正確的行資料進行組合,並為影像上的某個區域取得完整的 RGB 或完整的 HDR 資料。

當 BslSpatialCorrectionStride 此參數的設定範圍為 -4 至 4,具體取決於您的相機型號。若將步長值設定為 0,則等同於停用空間校正功能。

以下表格顯示了步長值與獲取完整 RGB/HDR 資訊所需採樣次數之間的關係。

線掃描彩色攝影機#
彩色雙線感測器
步長 = 1 全 RGB = 藍/紅[n-1] + 綠[n]
步幅 = -1 全 RGB = 藍色/紅色[n] + 綠色[n-1]
彩色三線式感測器
步長 = 1 完整 RGB = 藍色[n-2] + 綠色[n-1] + 紅色[n]
步幅 = 2 完整 RGB = 藍色[n-4] + 綠色[n-2] + 紅色[n]
步幅 = -1 完整 RGB = 藍[n] + 綠[n-1] + 紅[n-2]
步幅 = -2 完整 RGB = 藍色[n] + 綠色[n-2] + 紅色[n-4]
線掃描單色相機#
單線雙通道感測器
步長 = 1 完整 HDR = 第 2 行[n-1] + 第 1 行[n]
步幅 = 2 完整 HDR = 第 2 行[n-2] + 第 1 行[n]
步幅 = -1 完整 HDR = 第 2 行[n] + 第 1 行[n-1]
步幅 = -2 Fuss HDR = 第 2 行[n] + 第 1 行[n-2]
單通道四線式感測器
步長 = 1 完整 HDR = 第 4 行[n-3] + 第 3 行[n-2] + 第 2 行[n-1] + 第 1 行[n]
步幅 = 2 完整 HDR = 第 4 行[n-6] + 第 3 行[n-4] + 第 2 行[n-2] + 第 1 行[n]
步幅 = 3 完整 HDR = 第 4 行[n-9] + 第 3 行[n-6] + 第 2 行[n-3] + 第 1 行[n]
步幅 = 4 完整 HDR = 第 4 行[n-12] + 第 3 行[n-8] + 第 2 行[n-4] + 第 1 行[n]
步幅 = -1 完整 HDR = 第 4 行[n] + 第 3 行[n-1] + 第 2 行[n-2] + 第 1 行[n-3]
步幅 = -2 完整 HDR = 第 4 行[n] + 第 3 行[n-2] + 第 2 行[n-4] + 第 1 行[n-6]
步幅 = -3 完整 HDR = 第 4 行[n] + 第 3 行[n-3] + 第 2 行[n-6] + 第 1 行[n-9]
步幅 = -4 完整 HDR = 第 4 行[n] + 第 3 行[n-4] + 第 2 行[n-8] + 第 1 行[n-12]

資訊

線條的擷取通常由增量式編碼器的訊號觸發。物體從一條線移動到另一條線的位移,與觸發的擷取動作之間的關係,必須設定得與線條的像素寬度相符。

避免光環效應#

如果色彩資訊的對齊作業正確無誤,所取得的影像將會如下方圖片右側所示般銳利清晰。若不同行在擷取影像時,其定位存在偏差,則會出現如下方圖片左側所示的色彩「光暈」。

為了正確擷取物體上的特定區域,其影像必須精確地落在感測器的彩色像素線上。

光環效應

資訊

為避免出現色彩光暈,請確保系統設計要求已正確滿足。

Spatial Correction 方向的逆轉#

在您的應用環境中,物體經過相機的方向可能會交替變化。或者,相機可能會在物體上方來回移動。這兩種情況下,運動方向都會發生變化。關於運動方向變化的資訊,對於實現正確的空間校正至關重要。

此資訊可透過 I/O 線路取得,亦可使用攝影機編碼器控制模組輸出的「編碼器反向 1」訊號。

當 BslSpatialCorrectionDirectionReversal 此參數可讓您決定應使用哪個訊號來源來觸發空間校正方向的逆轉。

您可以設定 BslSpatialCorrectionDirectionReversal 參數設定為以下值之一:

  • Off: 方向反轉功能已停用。空間校正的方向取決於為 BslSpatialCorrectionStride 參數中選擇性地指定 HTML 記錄檔 (*.html) 的路徑與檔名。
  • Line1, Line2, Line3: 若 I/O 線 1、2 或 3 的訊號電平為高電平,則空間校正方向會反轉。
  • EncoderReverse1: 若「編碼器反轉 1」訊號為高電平,則空間校正方向將反轉。

設定Spatial Correction#

要設定空間校正:

  1. 將相機中的 BslSpatialCorrectionStride 參數,例如設定為 2。
  2. 如有需要,請設定 BslSpatialCorrectionDirectionReversal 參數,例如,至 EncoderReverse1.

範例程式碼#

// Set the stride for spatial correction to 2
camera.BslSpatialCorrectionStride.SetValue(BslSpatialCorrectionStride_2);
// Set the spatial correction direction reversal to Encoder Reverse 1
camera.BslSpatialCorrectionDirectionReversal.SetValue(BslSpatialCorrectionDirectionReversal_EncoderReverse1);
INodeMap& nodemap = camera.GetNodeMap();
// Set the stride for spatial correction to 2
CEnumParameter(nodemap, "BslSpatialCorrectionStride").SetValue("");
// Set the spatial correction direction reversal to Encoder Reverse 1
CEnumParameter(nodemap, "BslSpatialCorrectionDirectionReversal").SetValue("EncoderReverse1");
// Set the stride for spatial correction to 2
camera.Parameters[PLCamera.BslSpatialCorrectionStride].SetValue(PLCamera.BslSpatialCorrectionStride.);
// Set the spatial correction direction reversal to Encoder Reverse 1
camera.Parameters[PLCamera.BslSpatialCorrectionDirectionReversal].SetValue(PLCamera.BslSpatialCorrectionDirectionReversal.EncoderReverse1);
/* 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 */
/* Set the stride for spatial correction to 2 */
errRes = PylonDeviceFeatureFromString(hdev, "BslSpatialCorrectionStride", "");
CHECK(errRes);
/* Set the spatial correction direction reversal to Encoder Reverse 1 */
errRes = PylonDeviceFeatureFromString(hdev, "BslSpatialCorrectionDirectionReversal", "EncoderReverse1");
CHECK(errRes);
# Set the stride for spatial correction to 2
camera.BslSpatialCorrectionStride.Value = ""
# Set the spatial correction direction reversal to Encoder Reverse 1
camera.BslSpatialCorrectionDirectionReversal.Value = "EncoderReverse1"

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