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

Digital Shift#

利用 Digital Shift 相機功能,您可以將影像的像素值相乘。

這會增加影像的亮度。如果您的相機不支援 digital shift 功能,您可以使用 Gain 功能來達到類似的效果。

使用此功能#

運作原理#

將 digital shift 因數設定為 n 會對所有像素值進行 向左邏輯位移 n 位。這會產生將所有像素值乘以 2n 的效果。

如果產生的像素值大於目前 Pixel Format 的最大可能值(例如,12 位元 pixel format 的最大值為 4 095),則該值會被設為最大值。

如需詳細資訊,請參閱下方的 範例。

設定 Digital Shift#

若要設定 digital shift 因數,請輸入所需的數值 DigitalShift 參數的值。

依預設,此參數設為 0,即停用 digital shift。

範例#

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

假設您在使用 12 位元 Pixel Format 的相機上輸入了 1 的 digital shift 因數。這會產生以下效果:

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

  • 每個 12 位元影像資料字組中的最低有效位元都會設為 0。
  • 像素值會乘以 21= 2。
  • 由於最低有效位元設為 0,相機只會傳輸偶數像素值,例如 2、4、6、8、10 等。

範例 2:Digital Shift 設為 2,12 位元影像資料#

假設您在使用 12 位元 Pixel Format 的相機上輸入了 2 的 digital shift 因數。這會產生以下效果:

Digital Shift by 2, 12 位元影像資料輸出

  • 每個 12 位元影像資料字組中的最低 2 個有效位元都會設為 0。
  • 像素值會乘以 22= 4。
  • 由於最低兩個有效位元設為 0,相機只會傳輸每第四個像素值,例如 4、8、12、16、20 等。

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

假設您的相機具有 12 位元的 最大像素位元深度,但目前使用的是 8 位元 pixel format。

在這種情況下,相機會先對 12 位元影像資料執行 digital shift 計算。然後,相機會捨棄 4 個最低有效位元,並傳輸 8 個最高有效位元:

Digital Shift by 2, 8 位元影像資料輸出

資訊

在以下相機型號上,如果設定了 8 位元 pixel format,則無論最大像素位元深度為何,都會對 10 位元影像資料執行 digital shift: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 位元 Pixel Format。同時假設您其中一個原始像素值為 2 839:

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

如果您對此像素值套用 1 的 digital shift,產生的數值將大於 12 位元 pixel format 的最大可能值(4096 + 1024 + 512 + 32 + 8 + 4 + 2 = 5678;12 位元格式的最大值為 4 095)。在這種情況下,數值會被設為最大值,即所有位元皆設為 1:

Digital Shift by 1, 12 位元影像資料輸出,產生的數值為 4095

資訊

因此,請確保針對您的成像情境套用不會過高的 Digital Shift 係數。否則,影像中的所有亮部區域都會變成白色,亦即會遺失影像資訊。

範例程式碼#

// 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

您也可以使用 pylon Viewer 來輕鬆設定參數。