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

Digital Shift#

「Digital Shift 」相機功能可讓您將影像的像素值進行倍增。

這會提高影像的亮度。如果您的相機不支援「數位偏移」功能,您可以使用「增益」功能來達到類似的效果。

使用功能#

運作原理#

將數位移位係數設定為n,會使所有像素值進行n 位的邏輯左移。此操作的效果是將所有像素值乘以2n。

若計算出的像素值大於當前像素格式所能達到的最大值(例如,對於 12 位元像素格式而言為 4 095),則該值將被設定為最大值。

如需更多資訊,請參閱以下範例。

設定Digital Shift#

要設定數位變速係數,請輸入該參數的目標值: DigitalShift 參數中選擇性地指定 HTML 記錄檔 (*.html) 的路徑與檔名。

預設情況下,此參數設定為 0,也就是說,數位移位功能已停用。

範例#

範例 1:Digital Shift × 1,12 位元影像資料#

假設您在一部採用 12位元像素格式的相機上,輸入了數位偏移係數 1。這會產生以下效果:

Digital Shift 由 1 輸出 12 位元影像資料

  • 每個 12 位元影像資料字中的最低有效位元均設為 0。
  • 將像素值乘以21 後等於 2。
  • 由於最低有效位元被設為 0,因此相機僅傳輸偶數像素值,例如 2、4、6、8、10 等。

範例 2:Digital Shift 乘以 2,12 位元影像資料#

假設您在一部採用 12位元像素格式的相機上,輸入了 2 的數位偏移係數。這會產生以下效果:

Digital Shift 透過 2 個 12 位元影像資料輸出埠

  • 每個 12 位元影像資料字中,最低的 2 個有效位元均設為 0。
  • 將像素值乘以22 後等於 4。
  • 由於最低兩位元被設為 0,因此相機僅傳輸每第四個像素的值,例如 4、8、12、16、20,以此類推。

範例 3:Digital Shift × 2,8 位元影像資料#

假設您的相機最大像素位元深度為 12 位元,但目前使用的是 8 位元像素格式。

在此情況下,相機首先對 12 位元影像資料進行數位位移運算。接著,相機捨棄最低 4 位元,並傳輸最高 8 位元:

Digital Shift 透過 2 個 8 位元影像資料輸出埠

資訊

在以下相機型號中,若設定為 8 位元像素格式,則無論最大像素位元深度為何,系統都會對 10 位元影像資料進行數位位移:acA720-290gm/gc、acA1440-73gm/gc、acA1920-40gm/gc、acA1920-50gm/gc、 acA1440-220um/uc、acA1920-40um/uc、acA1920-155um/uc、acA2040-120um/uc、acA2440-75um/uc、acA4096-40um/uc、acA4112-30um/uc。

範例 4:Digital Shift 乘以 1,12 位元影像資料,高值#

假設您的相機採用 12位元像素格式。另假設原始像素值之一為 2 839:

Digital Shift 由 1 產生,12 位元影像資料輸出,數值為 2839

若對此像素值進行 1 的數位左移,所得值將大於 12 位元像素格式的最大可能值(4096 + 1024 + 512 + 32 + 8 + 4 + 2 = 5678;12 位元格式的最大值:4 095)。 在此情況下,該值將被設定為最大值,也就是說所有位元都會被設定為 1:

Digital Shift 由 1 產生,12 位元影像資料輸出,結果值為 4095

資訊

因此,請務必確保所套用的數位偏移係數不會過高,以配合您的成像情境。否則,影像中的所有亮部區域都會被設定為白色,也就是說,影像資訊將會遺失。

範例程式碼#

// Disable digital shift
camera.DigitalShift.SetValue(0);
// Enable digital shift by 2
camera.DigitalShift.SetValue(2);
INodeMap& nodemap = camera.GetNodeMap();
// Disable digital shift
CIntegerParameter(nodemap, "DigitalShift").SetValue(0);
// Enable digital shift by 2
CIntegerParameter(nodemap, "DigitalShift").SetValue(2);
// Disable digital shift
camera.Parameters[PLCamera.DigitalShift].SetValue(0);
// Enable digital shift by 2
camera.Parameters[PLCamera.DigitalShift].SetValue(2);
/* 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 */
/* Disable digital shift */
errRes = PylonDeviceSetIntegerFeature(hdev, "DigitalShift", 0);
CHECK(errRes);
/* Enable digital shift by 2 */
errRes = PylonDeviceSetIntegerFeature(hdev, "DigitalShift", 2);
CHECK(errRes);
# Disable digital shift
camera.DigitalShift.Value = 0
# Enable digital shift by 2
camera.DigitalShift.Value = 2

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