コンテンツにスキップ

Digital Shift#

Digital Shiftカメラ機能を使用すると、画像のピクセル値を乗算できます。

これにより、画像の明るさが上がります。カメラがデジタルシフト機能をサポートしていない場合は、Gain機能を使用して同様の効果を得ることができます。

機能を使用する#

仕組み#

デジタルシフト係数をnに設定すると、すべてのピクセル値で論理左シフトがnになります。これは、すべてのピクセル値に2nを乗算する効果があります。

結果のピクセル値が現在のピクセルフォーマットで可能な最大値(例えば、12ビットピクセルフォーマットでは4 095)を超える場合、値は最大値に設定されます。

詳細については、以下のを参照してください。

Digital Shiftの設定#

デジタルシフト係数を設定するには、DigitalShiftパラメーターに必要な値を入力します。

デフォルトでは、パラメーターは0に設定されています。つまり、デジタルシフトは無効になっています。

#

例1:Digital Shift by 1, 12-Bit Image Data#

12ビットピクセルフォーマットを使用するカメラでデジタルシフト係数1を入力したとします。これには次のような効果があります。

Digital Shift by 1, 12-Bit Image Data Output

  • 各12ビット画像データワードの最下位ビットは0に設定されます。
  • ピクセル値は、21 = 2で乗算されます。
  • 最下位ビットが0に設定されているため、カメラは、2、4、6、8、10などの偶数のピクセル値だけを送信します。

例2:Digital Shift by 2, 12-Bit Image Data#

12ビットピクセルフォーマットを使用するカメラでデジタルシフト係数2を入力したとします。これには次のような効果があります。

Digital Shift by 2, 12-Bit Image Data Output

  • 各12ビット画像データワードの最下位2ビットは0に設定されます。
  • ピクセル値は、22 = 4で乗算されます。
  • 最下位2ビットが0に設定されているため、カメラは4つおきのピクセル値(4、8、12、16、20など)のみ送信します。

例3:Digital Shift by 2, 8-Bit Image Data#

カメラの最大画素ビット深度は12ビットであるものの、現在は8ビットのピクセルフォーマットを使用しているとします。

この場合、カメラは、最初に12ビット画像データのデジタルシフト計算を実行します。次に、カメラは最下位4ビットをドロップし、最上位8ビットを送信します。

Digital Shift by 2, 8-Bit Image Data Output

情報

次のカメラモデルでは、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 by 1, 12-bit Image Data, High Value#

カメラが12ビットピクセルフォーマットを使用しているとします。また、元のピクセル値の1つが2 839であるとします。

Digital Shift by 1, 12-bit Image Data Output, Value of 2839

このピクセル値にデジタルシフト1を適用した場合、結果の値は12ビットピクセルフォーマットの最大値を超えます(4096 + 1024 + 512 + 32 + 8 + 4 + 2 = 5678:12ビットフォーマットの最大値:4095)。この場合、値は最大値に設定されます。つまり、すべてのビットが1に設定されます。

Digital Shift by 1, 12-bit Image Data Output, Resulting Value 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);

pylon Viewerを使用して、パラメーターを簡単に設定することもできます。