Library: Memory 運算子
該運算子透過一組基點來實現查找表的近似。 因此得名 KneeLUT。 運算子輸出端所有可表示值的範圍,會由 Knee LUT 劃分為 N 個由基點 所定義的區間。 區間數 N 可表示為 2 的冪次,即 N = 2^n,其中 n 為整數。 參數BasePointPows定義 n 的值。 各區間的間距為常數,且所有區間的間距均相等。
有關運算子延遲的資訊,請參閱 表 46「Library Memory 中各運算子的個別延遲」。
每個區間皆由一個起始基準點與一個終點基準點來描述。 起始基準點定義了第 1 個區間步長的輸出值。 終點基準點定義了該區間終點的理論值,該點無法被實際達到,且等同於 下一個區間的起點基準點。 區間內的所有值均以線性方式近似。 該區間的終點基準點與相鄰區間的起點基準點具有相同的 X 座標,亦即兩者之間 沒有區間步長。
KneeLUT 中每個區間的基點值均可個別定義。 可在整個輸出範圍內定義不連續函數。 然而,各區間內的子函數均為線性函數,其梯度/斜率由起始與終點 基準點定義。 所有起始基準點均屬於該區間。 所有終點基準點均不包含在區間內,且線性近似絕無法達到這些點。
所有基點均被歸一化為該運算子輸出端的最大可表示值,亦即歸一化為
.
所有起始基點的取值範圍均在 0 至 1 之間。
0 對應於輸出端可表示的最小值。
在此版本的 KneeLut 中,該值等於 0,因為該運算子僅支援無符號數值。
1 代表運算子輸出端可表示的最大值,亦即
.
所有終端基點均可超出 0 至 1 的範圍,以便將區間內最後一個值映射至
最高與最低數值,
亦即 0 與 1。
這意味著終點基準點可能大於 1 或小於 0。採用與
起點基準點相同的縮放技術,
終點必須縮放至
.
讓我們透過兩個範例來說明這個運算子的運作方式。
-
身分
KneeLUT 的第一個函數是單位函數。假設我們的 KneeLUT 具有以下參數:
- BasePointPows = 2
- 輸入Bit Width = 4
- 輸出Bit Width = 5
因此,我們必須定義四個起始基點和四個終點基點。 對於單位元,我們定義如下:


這些數值是由以下因素決定的:

其中 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 | 無號數 | 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 | |
|---|---|
| Type | 靜態參數 |
| Default | 6 |
| Range | [1, 60 - 輸入位元寬度 + 輸出位元寬度] |
|
此參數根據以下公式定義 KneeLUT 的基點數量: 基點數量 = 2 ^ BasePointsPows。 步階大小即為 Parallelism。 |
|
| 起始基點 | |
|---|---|
| Type | 動態/靜態讀寫參數 |
| Default | 恆等函數 |
| Range | any |
|
此欄位參數定義了一組經歸一化的 2^BasePointPows 區間起始基準點。 這些點已歸一化為運算子輸出端可表示的最大值。 了解如何在 'Parameter Editing' 中設定欄位參數。 |
|
| 終點座標 | |
|---|---|
| Type | 動態/靜態讀寫參數 |
| Default | 恆等函數 |
| Range | any |
|
此參數定義了一組經歸一化的 2^BasePointPows 個區間端點。 這些點已歸一化為運算子輸出端可表示的最大值。 歸一化後的數值可能超出 0 到 1 的範圍,以便讓最後一個區間點分別達到 可表示的最大值或最小值。 |
|
以下範例展示了運算子 KneeLUT 的使用方式:
-
範例 — 展示如何針對 16 位元輸入與輸出資料使用查表。 由於區塊 RAM 資源有限,16 位元的情況下必須使用 Knee LUT。

![[警告]](../common/images/admon/warning.png)
上一頁

