Operator KneeLUT

Operator Library: Memory

此運算子透過一組基準點來實作查找表的近似值。 因此稱為 KneeLUT。 運算子輸出上所有可表示的值的範圍被 Knee LUT 分割為 N 個區間,這些區間由基準點定義。 區間數量 N 可以表示為 2 的冪次方,即 N = 2^n,其中 n 為整數。 參數 BasePointPows 定義了 n。 區間距離是常數,且對所有區間都相等。

有關 operator 延遲的資訊,請參閱 表 46「Library Memory 中各 operator 的個別延遲」。

每個區間都由一個起始基準點和一個結束基準點來描述。 起始基準點定義了第一個區間步階的輸出值。 結束基準點定義了區間終點無法到達之理論值,該值等於下一個區間的起始基準點。 區間內的所有值均以線性方式近似。 連續區間的結束基準點和起始基準點具有相同的 X 座標,亦即兩者之間沒有區間步階。

KneeLUT 中每個區間的基準點值可以個別定義。 可以在整個輸出範圍內定義不連續的函數。 不過,每個區間內的子函數皆為線性,其漸層/斜率由起始和結束基準點定義。 所有起始基準點皆屬於該區間。 所有結束基準點均不屬於該區間,且線性近似永遠無法達到這些點。

所有基準點皆會正規化至運算子輸出的最大可表示值,即 。 所有起始基準點的範圍將介於 0 到 1 之間。 零對應於輸出上最小的可表示值。 在此版本的 KneeLut 中,它等於 0,因為該運算子僅支援無號值。 一表示運算子輸出的最大可表示值,即 。 所有結束基準點都可以超出 0 到 1 的範圍,以允許包含在區間內的最後一個值對應至最高和最低數字, 即 0 和 1。 這意味著結束基準點可能大於 1 或小於 0。使用與起始基準點相同的 Scaling 技術, 端點必須縮放至 .

讓我們來看兩個範例,以說明該運算子的行為。

  1. Identity

    KneeLUT 的第一個函數是 Identity。假設我們的 KneeLUT 具有以下參數:

    • BasePointPows = 2
    • Input Bit Width = 4
    • Output Bit Width = 5

    因此,我們必須定義四個起始基準點和四個結束基準點。 對於 Identity,我們定義:

    這些值由以下公式決定:

    其中 x 是基準點索引。

    下圖顯示了這些基準點。 起始基準點以紅色方框標示,結束基準點以洋紅圓圈標示。 此外,繪製了一條線來圖解說明區間的線性函數。

    此圖也顯示了輸出的近似值(藍色星號)。 基準點已正規化,亦即 0 代表輸出值 0,1 代表輸出值 。 下圖顯示了給定基準點實際使用的查找表。 如圖所示,這些值已被四捨五入至最接近的整數。

    查找表將計算出以下數值:

  2. 不連續函數

    在下一個範例中,我們來看看不連續函數。 假設採用與第一個範例相同的 KneeLUT 參數。 這次,基準點不是由函數定義:

    同樣地,下圖顯示了這些基準點。 起始基準點以紅色方框標示,結束基準點以洋紅圓圈標示。 此外,繪製了一條線來圖解說明區間的線性函數。

    此圖也顯示了輸出的近似值(藍色星號)。 同樣地,該圖已正規化至 1。

    下圖顯示了給定基準點實際使用的查找表。 如圖所示,這些值已被四捨五入至最接近的整數。

    查找表將根據給定的基準點計算出以下數值:

    這些值可以使用每個區間的斜率 m(x) 與偏移量 b(x) 來計算

    隨後,結果 LUT(x) 為

[警告] 超出範圍的近似值

如果近似值超出可用的輸出範圍,運算子將不會把牠們裁切至最大或最小可能的數值。 數值將未定義。

算子限制

  • 給定以下限制條件:

I/O Properties

Property Value
Operator Type O
Input Link I,影像資料輸入
Output Link O,資料輸入

支援的 Link 格式

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
Type static parameter
Default 6
Range [1, 60 - InputBitWidth + OutputBitWidth]

此參數根據以下公式定義 KneeLUT 的基準點數量: NumberOfBasePoints = 2 ^ BasePointsPows。

步進大小即為 Parallelism。

StartBasePoints
Type dynamic/static read/write parameter
Default 識別函數
Range any

此欄位參數定義了一組正規化的 2^BasePointPows 區間起始基準點。 這些點已針對運算子輸出上可表示的最大值進行正規化。

請參閱 「Parameter Editing」 了解如何設定欄位參數。

EndBasePoints
Type dynamic/static read/write parameter
Default 識別函數
Range any

此參數定義了一組正規化的 2^BasePointPows 區間結束基準點。 這些點已針對運算子輸出上可表示的最大值進行正規化。 正規化的數值可以超出 0 到 1 的範圍,以允許最後一個區間點分別達到最大或最小的可表示值。

使用範例

以下範例顯示了 KneeLUT 運算子的使用方式:

  • 'Knee-Lookup Table 16 Bit'

    範例 - 顯示針對 16 位元輸入與輸出資料使用對照表的情況。 對於 16 位元,由於區塊 RAM 資源有限,必須使用 Knee LUT。