Spatial Correction#
資訊
- 此功能基本上是Basler Racer 2 彩色相機的一項功能。
- 在 Baslerracer 2 L 的 r2L8192-240cm和r2L16384-120cm單色相機上,空間校正步長用於 TDI 功能。
使用功能#
運作原理#
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#
要設定空間校正:
- 將相機中的
BslSpatialCorrectionStride參數,例如設定為 2。 - 如有需要,請設定
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);
您也可以 use the pylon Viewer 來輕鬆設定參數。