Operator Library: Memory
このオペレーターは、一連のベースポイントを通じてルックアップテーブルの近似を実装します。そのため、KneeLUTという名前が付けられています。オペレーター出力で表現可能なすべての値の範囲は、Knee LUTによって、ベースポイントで定義されるN個のインターバルに分割されます。 インターバルの数Nは、2のべき乗(すなわち N = 2^n、nは整数)として表すことができます。 パラメーター BasePointPows はnを定義します。 インターバルの距離は定数であり、すべてのインターバルで等しくなります。
オペレーターのレイテンシについては、「表 46:Library Memory 内のオペレーターの個別のレイテンシ」を参照してください。
各インターバルは、開始ベースポイントと終了ベースポイントによって記述されます。 開始ベースポイントは、第1インターバルステップの出力値を定義します。 終了ベースポイントは、到達不可能なインターバル終了点の理論値を定義し、これは次のインターバルの開始ベースポイントに等しくなります。 インターバル内のすべての値は直線近似されます。 終了ベースポイントと連続するインターバルの開始ベースポイントは同じX座標を持ちます。つまり、その間にインターバルステップはありません。
KneeLUT内の各インターバルのベースポイント値は個別に定義できます。 出力範囲全体にわたって不連続な関数を定義することが可能です。 ただし、各インターバル内のサブ関数は、開始および終了ベースポイントによって定義される勾配/傾きを持つ直線となります。 すべての開始ベースポイントはインターバルに含まれます。 すべての終了ベースポイントはインターバルから除外され、直線近似によって到達することはできません。
すべてのベースポイントは、オペレーターの出力における最大表現可能値、すなわち次のように正規化されます:
。
すべての開始ベースポイントは0から1の範囲になります。
ゼロは出力上の最小表現可能値に対応します。
KneeLutのこのバージョンでは、オペレーターが符号なしの値のみをサポートしているため、0に等しくなります。
1はオペレーター出力における最大表現可能値を表し、すなわち次になります:
。
インターバルに含まれる最後の値を最高および最低の数値(つまり0と1)にマッピングできるようにするため、すべての終了ベースポイントは0から1の範囲を超えることができます。
これは、終了ベースポイントが1より大きい場合や0より小さい場合があることを意味します。開始ベースポイントと同じScaling手法を使用して、
終了ポイントは次のようにスケーリングする必要があります:
.
オペレーターの動作を説明するために、2つの例を見てみましょう。
-
恒等関数
KneeLUTの最初の関数は恒等関数です。KneeLUTのパラメーターが次のように与えられていると仮定します:
- BasePointPows = 2
- Input Bit Width = 4
- Output Bit Width = 5
したがって、4つの開始ベースポイントと4つの終了ベースポイントを定義する必要があります。 恒等関数の場合、次のように定義します:


これらの値は次によって決定されます:

ここで、xはベースポイントインデックスです。
次のプロットはこれらのベースポイントを示しています。 開始ベースポイントには赤い四角形、終了ベースポイントにはマゼンタの円が付けられています。 さらに、インターバルの線形関数を示す線がプロットされています。

また、プロットには出力の近似値(青い星印)も示されています。 ベースポイントは正規化されており、つまり0が出力値0であり、1が出力値です:
。
次のプロットは、指定されたベースポイントを持つ実際に使用されるルックアップテーブルを示しています。
ご覧のとおり、値は次の整数値に丸められます。

ルックアップテーブルは以下の値を計算します:

-
不連続関数
次の例では、不連続関数を見てみます。 最初の例で与えられたものと同じKneeLUTパラメーターを想定しましょう。 今回、ベースポイントは関数によって定義されていません:


ここでも、次のプロットはこれらのベースポイントを示しています。 開始ベースポイントには赤い四角形、終了ベースポイントにはマゼンタの円が付けられています。 さらに、インターバルの線形関数を示す線がプロットされています。

また、プロットには出力の近似値(青い星印)も示されています。 ここでも、プロットは1に正規化されています。
次のプロットは、指定されたベースポイントを使用して実際に適用されたルックアップテーブルを示しています。 ご覧のとおり、値は最も近い整数値に丸められます。

ルックアップテーブルは、指定されたベースポイントから次の値を計算します。

これらの値は、各区間の傾き m(x) とオフセット b(x) を使用して計算できます


結果の LUT(x) は次のようになります

![]() |
範囲外の近似値 |
|---|---|
|
近似値が利用可能な出力範囲外である場合、オペレーターはそれらを最大または最小の 可能な値にクリップしません。 値は未定義になります。 |
Operator Restrictions
-
次の制約が与えられています。

| Link Parameter | Input Link I | Output Link O |
|---|---|---|
| Bit Width | [1, 64] | [1, 60] |
| Arithmetic | unsigned | as I |
| Parallelism | any | as I |
| Kernel Columns | 1 | as I |
| Kernel Rows | 1 | as I |
| Img Protocol | {VALT_IMAGE2D, VALT_LINE1D, VALT_PIXEL0D} | as I |
| Color Format | VAF_GRAY | as I |
| Color Flavor | FL_NONE | as I |
| Max. Img Width | any | as I |
| Max. Img Height | any | as I |
| BasePointPows | |
|---|---|
| タイプ | static パラメータ |
| Default | 6 |
| 範囲 | [1, 60 - InputBitWidth + OutputBitWidth] |
|
このパラメータは、次の式に従って KneeLUT のベースポイントの数を定義します。 NumberOfBasePoints = 2 ^ BasePointsPows. ステップサイズはParallelismです。 |
|
| StartBasePoints | |
|---|---|
| タイプ | dynamic/static read/write parameter |
| Default | 恒等関数 |
| 範囲 | any |
|
このフィールドパラメータは、正規化された 2^BasePointPows 区間開始ベースポイントのセットを定義します。 ポイントは、オペレーター出力で表現可能な最大値に正規化されます。 'パラメータの編集'でのフィールドパラメータの設定方法については、こちらをご覧ください。 |
|
| EndBasePoints | |
|---|---|
| タイプ | dynamic/static read/write parameter |
| Default | 恒等関数 |
| 範囲 | any |
|
このパラメータは、正規化された 2^BasePointPows 区間終了ベースポイントのセットを定義します。 ポイントは、オペレーター出力で表現可能な最大値に正規化されます。 正規化された値は、最後の区間ポイントがそれぞれ表現可能な最大値または最小値に達するように、0 から 1 の範囲を超えることができます。 |
|
KneeLUT オペレーターの使用方法を次の例に示します。
-
例 - 16ビットの入力および出力データに対するルックアップテーブルの使用法を示します。 16ビットの場合は、ブロック RAM リソースが限られているため、Knee LUT を使用する必要があります。

![[Warning]](../common/images/admon/warning.png)
前へ

