LUT#
これは、ユーザー定義のルックアップテーブル(LUT)を作成することによって実施されます。
機能を使用する#
仕組み#
LUTは、「ルックアップテーブル」の略であり、基本的には数字のインデックス付きリストです。Baslerカメラの場合は、ユーザー定義の「明るさルックアップテーブル」を作成して、画像内のピクセル値(明るさまたはグレー値)を置き換えることができます。
ルックアップテーブルでは、個々のピクセル値の置換値を定義できます。例えば、グレー値4095(= 12ビットピクセルフォーマットの最大グレー値)をグレー値0(= 最小グレー値)に置き換えることができます。これにより、画像内のすべての完全に白い画素が、完全に黒い画素に変わります。
ユーザー定義LUTの設定は、画像の明るさを最適化する場合などに便利です。交換値を事前に定義してカメラに保存することで、アプリケーションによる時間のかかる計算を回避できます。その代わりに、カメラはピクセルの初期値に基づいてLUT内の必要な新しい値を検索するだけです。
情報
ユーザーが定義したLUTの値の範囲(0~1 024または0~4 096)は、現在選択されているピクセル形式には依存しません。これは、カメラの最大ピクセルビット深度に依存します。
お使いのカメラが12ビットピクセルフォーマットをサポートしており、現在8ビットピクセルフォーマットを使用している場合でも、0~4096のピクセル値を入力できます。カメラはこれらの値を変換に使用します。次に、変換された値の最下位4ビットをドロップし、最上位8ビットを送信します。
Replacing Individual LUT Entries#
ルックアップテーブル内の個々のエントリを置き換えるには、次の手順に従います。
LUTIndex
パラメーターに、新しい値に置き換えるピクセル値を設定します。LUTValue
パラメーターを新しいピクセル値に設定します。- 置き換えるすべてのピクセル値について、手順1と2を繰り返します。
LUTEnable
パラメーターをtrue
に設定します。
Baslerは、プログラミングループ(for-loopなど)を使用して値を反復処理することを推奨しています。以下のサンプルコードを参照してください。
Number of LUT Entries#
LUTで使用可能なエントリ数は、カメラモデルによって異なります。
LUTエントリの数によっては、可能なすべてのピクセル値の置換値を格納できるとは限りません。
512入力のLUT
ほとんどのBaslerカメラでは、ユーザー定義LUTに最大512個のエントリを格納できます。このサイズは、1024個または4096個の置換値を保存するのに十分ではありません。
したがって、次の制限が適用されます。
- 最大画素ビット深度が10ビット
のカメラでは、LUTIndex
パラメーターは2の倍数(0、2、4、6、…、1022)にのみ設定できます。つまり、0、2、4、6などのピクセル値のみを置き換えることができます。 - 最大画素ビット深度が12ビットのカメラでは、
LUTIndex
パラメーターは8の倍数(0、8、16、24、…、4088)にのみ設定できます。つまり、0、8、16、24などのピクセル値のみを置き換えることができます。
残りのピクセル値を決定するために、カメラは直線補間を実行します。
例:カメラの最大画素ビット深度が12ビットであるとします。また、グレー値24をグレー値20に、グレー値32を値30に変換するLUTを作成したとします。この場合、カメラは次のように24~32のピクセル値を決定します。
元のピクセル値 | LUTに格納された値 | 補間された値 | 新しいピクセル値(四捨五入) |
---|---|---|---|
24 | 20 | 20 | 20 |
25 | - | 21.25 | 21 |
26 | - | 22.5 | 22 |
27 | - | 23.75 | 23 |
28 | - | 25 | 25 |
29 | - | 26.25 | 26 |
30 | - | 27.5 | 27 |
31 | - | 28.75 | 28 |
32 | 30 | 30 | 30 |
情報
4088より大きいピクセル値は補間されません。代わりに、4088~4095のすべてのピクセル値は、LUTインデックス位置4088で入力されたピクセル値に置き換えられます。
1 024または4 096入力のLUT
一部のBaslerカメラでは、ユーザー定義LUTにすべての置換値のエントリを格納できます。カメラの最大画素ビット深度に応じて、1024または4096エントリを使用できます。
これは、上記のセクションで説明した制限が適用されないことを意味します。LUTIndex
パラメーターは1単位で設定でき、補間は実行されません。
Replacing All LUT Entries#
ルックアップテーブル内のすべてのエントリを1つの操作で置き換えることができます。多くの場合、これはLUT内の個々のエントリを繰り返し変更するよりも高速です。
ルックアップテーブルのすべてのエントリを置き換えるには、次の手順に従います。
LUTValueAll
パラメーターを目的の値に設定します。
4バイトワード(LUT値)の正しいエンディアンネスを適用するようにしてください。LUTEnable
パラメーターをtrue
に設定します。
情報
LUTValueAll
パラメーターは、pylon API経由でのみ使用できます。pylon Viewerの機能ツリーからは使用できません。
パラメーターの構造は、カメラの最大画素ビット深度によって異なります。
12-bit Camera Models#
最大画素ビット深度が12ビットのカメラでは、LUTValueAll
パラメーターは4096 x 4バイトで構成される配列です。4バイトの各ワードは、LUTValue
パラメーター値を表します。
LUTValue
パラメーター値は、LUTIndex
番号で昇順(0~4095)にソートされます。
情報
- 4バイトのワード(LUT値)のエンディアンネスは、カメラのモデルによって異なります。
-
LUTが512エントリに制限されている場合、カメラが実際に使用するのは8 番目ごとの4バイトワード(0、8、16、24、…、4088)のみです。他の4バイトワードは無視されます。例:
10-bit Camera Models#
最大画素ビット深度が10ビットのカメラでは、LUTValueAll
パラメーターは1024 x 4バイトで構成される配列です。4バイトの各ワードは、LUTValue
パラメーター値を表します。
LUTValue
パラメーター値は、LUTIndex
番号で昇順(0~1023)にソートされます。
情報
- 4バイトのワード(LUT値)のエンディアンネスは、カメラのモデルによって異なります。
-
LUTが512エントリに制限されている場合、カメラが実際に使用するのは2番目ごとの4バイトワード(0、8、4、6、…、1022)のみです。他の4バイトワードは無視されます。例:
追加パラメーター#
LUTSelector
パラメーターを使用すると、ルックアップテーブルを選択できます。
Baslerカメラで使用できるユーザー定義のルックアップテーブルは1つしかないため、現在、このパラメーターは機能しません。
特性#
カメラモデル | Number of LUT Entries | 4バイトワード(LUT値)のエンディアンネス |
---|---|---|
a2A1920-51gcBAS | 4096 | Big-endian |
a2A1920-51gcPRO | 4096 | Big-endian |
a2A1920-51gmBAS | 4096 | Big-endian |
a2A1920-51gmPRO | 4096 | Big-endian |
a2A1920-160ucBAS | 4096 | Little-endian |
a2A1920-160ucPRO | 4096 | Little-endian |
a2A1920-160umBAS | 4096 | Little-endian |
a2A1920-160umPRO | 4096 | Little-endian |
a2A2590-22gcBAS | 4096 | Big-endian |
a2A2590-22gcPRO | 4096 | Big-endian |
a2A2590-22gmBAS | 4096 | Big-endian |
a2A2590-22gmPRO | 4096 | Big-endian |
a2A2590-60ucBAS | 4096 | Little-endian |
a2A2590-60ucPRO | 4096 | Little-endian |
a2A2590-60umBAS | 4096 | Little-endian |
a2A2590-60umPRO | 4096 | Little-endian |
a2A3840-13gcBAS | 4096 | Big-endian |
a2A3840-13gcPRO | 4096 | Big-endian |
a2A3840-13gmBAS | 4096 | Big-endian |
a2A3840-13gmPRO | 4096 | Big-endian |
a2A3840-45ucBAS | 4096 | Little-endian |
a2A3840-45ucPRO | 4096 | Little-endian |
a2A3840-45umBAS | 4096 | Little-endian |
a2A3840-45umPRO | 4096 | Little-endian |
a2A4504-5gcBAS | 4096 | Big-endian |
a2A4504-5gcPRO | 4096 | Big-endian |
a2A4504-5gmBAS | 4096 | Big-endian |
a2A4504-5gmPRO | 4096 | Big-endian |
a2A4504-18ucBAS | 4096 | Little-endian |
a2A4504-18ucPRO | 4096 | Little-endian |
a2A4504-18umBAS | 4096 | Little-endian |
a2A4504-18umPRO | 4096 | Little-endian |
a2A5320-7gcBAS | 4096 | Big-endian |
a2A5320-7gcPRO | 4096 | Big-endian |
a2A5320-7gmBAS | 4096 | Big-endian |
a2A5320-7gmPRO | 4096 | Big-endian |
a2A5320-23ucBAS | 4096 | Little-endian |
a2A5320-23ucPRO | 4096 | Little-endian |
a2A5320-23umBAS | 4096 | Little-endian |
a2A5320-23umPRO | 4096 | Little-endian |
a2A5328-4gcBAS | 4096 | Big-endian |
a2A5328-4gcPRO | 4096 | Big-endian |
a2A5328-4gmBAS | 4096 | Big-endian |
a2A5328-4gmPRO | 4096 | Big-endian |
a2A5328-15ucBAS | 4096 | Little-endian |
a2A5328-15ucPRO | 4096 | Little-endian |
a2A5328-15umBAS | 4096 | Little-endian |
a2A5328-15umPRO | 4096 | Little-endian |
acA640-90gc | 512 | Big-endian |
acA640-90gm | 512 | Big-endian |
acA640-90uc | 512 | Little-endian |
acA640-90um | 512 | Little-endian |
acA640-120gc | 512 | Big-endian |
acA640-120gm | 512 | Big-endian |
acA640-120uc | 512 | Little-endian |
acA640-120um | 512 | Little-endian |
acA640-121gm | 512 | Big-endian |
acA640-300gc | 512 | Big-endian |
acA640-300gm | 512 | Big-endian |
acA640-750uc | 512 | Little-endian |
acA640-750um | 512 | Little-endian |
acA720-290gc | 512 | Big-endian |
acA720-290gm | 512 | Big-endian |
acA720-520uc | 512 | Little-endian |
acA720-520um | 512 | Little-endian |
acA780-75gc | 512 | Big-endian |
acA780-75gm | 512 | Big-endian |
acA800-200gc | 512 | Big-endian |
acA800-200gm | 512 | Big-endian |
acA800-510uc | 512 | Little-endian |
acA800-510um | 512 | Little-endian |
acA1280-60gc | 512 | Big-endian |
acA1280-60gm | 512 | Big-endian |
acA1300-22gc | 512 | Big-endian |
acA1300-22gm | 512 | Big-endian |
acA1300-30gc | 512 | Big-endian |
acA1300-30gm | 512 | Big-endian |
acA1300-30uc | 512 | Little-endian |
acA1300-30um | 512 | Little-endian |
acA1300-60gc | 512 | Big-endian |
acA1300-60gm | 512 | Big-endian |
acA1300-60gmNIR | 512 | Big-endian |
acA1300-75gc | 512 | Big-endian |
acA1300-75gm | 512 | Big-endian |
acA1300-200uc | 512 | Little-endian |
acA1300-200um | 512 | Little-endian |
acA1440-73gc | 512 | Big-endian |
acA1440-73gm | 512 | Big-endian |
acA1440-220uc | 512 | Little-endian |
acA1440-220um | 512 | Little-endian |
acA1600-20gc | 512 | Big-endian |
acA1600-20gm | 512 | Big-endian |
acA1600-20uc | 512 | Little-endian |
acA1600-20um | 512 | Little-endian |
acA1600-60gc | 512 | Big-endian |
acA1600-60gm | 512 | Big-endian |
acA1920-25gc | 512 | Big-endian |
acA1920-25gm | 512 | Big-endian |
acA1920-25uc | 512 | Little-endian |
acA1920-25um | 512 | Little-endian |
acA1920-40gc | 512 | Big-endian |
acA1920-40gm | 512 | Big-endian |
acA1920-40uc | 512 | Little-endian |
acA1920-40ucMED | 4096 | Little-endian |
acA1920-40um | 512 | Little-endian |
acA1920-40umMED | 4096 | Little-endian |
acA1920-48gc | 512 | Big-endian |
acA1920-48gm | 512 | Big-endian |
acA1920-50gc | 512 | Big-endian |
acA1920-50gm | 512 | Big-endian |
acA1920-150uc | 512 | Little-endian |
acA1920-150um | 512 | Little-endian |
acA1920-155uc | 512 | Little-endian |
acA1920-155ucMED | 4096 | Little-endian |
acA1920-155um | 512 | Little-endian |
acA1920-155umMED | 4096 | Little-endian |
acA2000-50gc | 512 | Big-endian |
acA2000-50gm | 512 | Big-endian |
acA2000-50gmNIR | 512 | Big-endian |
acA2000-165uc | 512 | Little-endian |
acA2000-165um | 512 | Little-endian |
acA2000-165umNIR | 512 | Little-endian |
acA2040-25gc | 512 | Big-endian |
acA2040-25gm | 512 | Big-endian |
acA2040-25gmNIR | 512 | Big-endian |
acA2040-35gc | 512 | Big-endian |
acA2040-35gm | 512 | Big-endian |
acA2040-55uc | 512 | Little-endian |
acA2040-55um | 512 | Little-endian |
acA2040-90uc | 512 | Little-endian |
acA2040-90um | 512 | Little-endian |
acA2040-90umNIR | 512 | Little-endian |
acA2040-120uc | 512 | Little-endian |
acA2040-120um | 512 | Little-endian |
acA2440-20gc | 512 | Big-endian |
acA2440-20gm | 512 | Big-endian |
acA2440-35uc | 512 | Little-endian |
acA2440-35ucMED | 4096 | Little-endian |
acA2440-35um | 512 | Little-endian |
acA2440-35umMED | 4096 | Little-endian |
acA2440-75uc | 512 | Little-endian |
acA2440-75ucMED | 4096 | Little-endian |
acA2440-75um | 512 | Little-endian |
acA2440-75umMED | 4096 | Little-endian |
acA2500-14gc | 512 | Big-endian |
acA2500-14gm | 512 | Big-endian |
acA2500-14uc | 512 | Little-endian |
acA2500-14um | 512 | Little-endian |
acA2500-20gc | 512 | Big-endian |
acA2500-20gcMED | 512 | Big-endian |
acA2500-20gm | 512 | Big-endian |
acA2500-20gmMED | 512 | Big-endian |
acA2500-60uc | 512 | Little-endian |
acA2500-60um | 512 | Little-endian |
acA3088-16gc | 512 | Big-endian |
acA3088-16gm | 512 | Big-endian |
acA3088-57uc | 512 | Little-endian |
acA3088-57ucMED | 4096 | Little-endian |
acA3088-57um | 512 | Little-endian |
acA3088-57umMED | 4096 | Little-endian |
acA3800-10gc | 512 | Big-endian |
acA3800-10gm | 512 | Big-endian |
acA3800-14uc | 512 | Little-endian |
acA3800-14um | 512 | Little-endian |
acA4024-8gc | 512 | Big-endian |
acA4024-8gm | 512 | Big-endian |
acA4024-29uc | 512 | Little-endian |
acA4024-29um | 512 | Little-endian |
acA4096-11gc | 512 | Big-endian |
acA4096-11gm | 512 | Big-endian |
acA4096-30uc | 512 | Little-endian |
acA4096-30ucMED | 4096 | Little-endian |
acA4096-30um | 512 | Little-endian |
acA4096-30umMED | 4096 | Little-endian |
acA4096-40uc | 512 | Little-endian |
acA4096-40ucMED | 4096 | Little-endian |
acA4096-40um | 512 | Little-endian |
acA4096-40umMED | 4096 | Little-endian |
acA4112-8gc | 512 | Big-endian |
acA4112-8gm | 512 | Big-endian |
acA4112-20uc | 512 | Little-endian |
acA4112-20ucMED | 4096 | Little-endian |
acA4112-20um | 512 | Little-endian |
acA4112-20umMED | 4096 | Little-endian |
acA4112-30uc | 512 | Little-endian |
acA4112-30ucMED | 4096 | Little-endian |
acA4112-30um | 512 | Little-endian |
acA4112-30umMED | 4096 | Little-endian |
acA4600-7gc | 512 | Big-endian |
acA4600-10uc | 512 | Little-endian |
acA5472-5gc | 512 | Big-endian |
acA5472-5gm | 512 | Big-endian |
acA5472-17uc | 512 | Little-endian |
acA5472-17ucMED | 4096 | Little-endian |
acA5472-17um | 512 | Little-endian |
acA5472-17umMED | 4096 | Little-endian |
boA4096-93cc | 4096 | Little-endian |
boA4096-93cm | 4096 | Little-endian |
boA4112-68cc | 4096 | Little-endian |
boA4112-68cm | 4096 | Little-endian |
boA6500-36cm | 4096 | Little-endian |
boA8100-16cm | 4096 | Little-endian |
daA1280-54lc | LUT機能はサポートされていません | LUT機能はサポートされていません |
daA1280-54lm | LUT機能はサポートされていません | LUT機能はサポートされていません |
daA1280-54uc | LUT機能はサポートされていません | LUT機能はサポートされていません |
daA1280-54um | LUT機能はサポートされていません | LUT機能はサポートされていません |
daA1600-60lc | LUT機能はサポートされていません | LUT機能はサポートされていません |
daA1600-60lm | LUT機能はサポートされていません | LUT機能はサポートされていません |
daA1600-60uc | LUT機能はサポートされていません | LUT機能はサポートされていません |
daA1600-60um | LUT機能はサポートされていません | LUT機能はサポートされていません |
daA1920-15um | LUT機能はサポートされていません | LUT機能はサポートされていません |
daA1920-30uc | LUT機能はサポートされていません | LUT機能はサポートされていません |
daA1920-30um | LUT機能はサポートされていません | LUT機能はサポートされていません |
daA1920-160uc | LUT機能はサポートされていません | LUT機能はサポートされていません |
daA1920-160um | LUT機能はサポートされていません | LUT機能はサポートされていません |
daA2500-14lc | LUT機能はサポートされていません | LUT機能はサポートされていません |
daA2500-14lm | LUT機能はサポートされていません | LUT機能はサポートされていません |
daA2500-14uc | LUT機能はサポートされていません | LUT機能はサポートされていません |
daA2500-14um | LUT機能はサポートされていません | LUT機能はサポートされていません |
puA1280-54uc | LUT機能はサポートされていません | LUT機能はサポートされていません |
puA1280-54um | LUT機能はサポートされていません | LUT機能はサポートされていません |
puA1600-60uc | LUT機能はサポートされていません | LUT機能はサポートされていません |
puA1600-60um | LUT機能はサポートされていません | LUT機能はサポートされていません |
puA1920-30uc | LUT機能はサポートされていません | LUT機能はサポートされていません |
puA1920-30um | LUT機能はサポートされていません | LUT機能はサポートされていません |
puA2500-14uc | LUT機能はサポートされていません | LUT機能はサポートされていません |
puA2500-14um | LUT機能はサポートされていません | LUT機能はサポートされていません |
サンプルコード#
// ** Replacing individual LUT entries **
// The following lookup table causes an inversion of the pixel values
// (bright -> dark, dark -> bright)
// Only applies to cameras with a maximum pixel bit depth of 12 bit
for (int i=0; i<4096; i+=8)
{
camera.LUTIndex.SetValue(i);
camera.LUTValue.SetValue(4095-i);
}
// Enable the LUT
camera.LUTEnable.SetValue(true);
// ** Replacing all LUT entries in a single operation **
// The following lookup table inverts the pixel values
// (bright -> dark, dark -> bright)
// Only applies to cameras with a maximum pixel bit depth of 12 bit
// Note: This is a simplified code sample.
// You should always check the camera interface and
// the endianness of your system before using LUTValueAll.
// For more information, see the 'LUTValueAll' code sample
// in the C++ Programmer's Guide and Reference Documentation
// delivered with the Basler pylon Camera Software Suite.
uint32_t lutValues[4096];
for (int i=0; i<4096; i+=8)
{
lutValues[i] = 4095-i;
}
camera.LUTValueAll.SetValue(lutValues);
// Enable the LUT
camera.LUTEnable.SetValue(true);
このサンプルコードは、C++言語でのみ使用できます。
pylon Viewerを使用して、パラメーターを簡単に設定することもできます。