運算子 KneeLUT

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。採用與 起點基準點相同的縮放技術, 終點必須縮放至 .

讓我們透過兩個範例來說明這個運算子的運作方式。

  1. 身分

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

    • BasePointPows = 2
    • 輸入Bit Width = 4
    • 輸出Bit Width = 5

    因此,我們必須定義四個起始基點和四個終點基點。 對於單位元,我們定義如下:

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

    其中 x 為基點索引。

    下圖顯示了這些基點。 起始基點以紅色方塊標示,終點基點則以洋紅色圓圈標示。 此外,圖中還繪製了一條直線,用以說明各區間的線性函數。

    該圖亦顯示了輸出值的近似值(藍色星號)。 基準點已進行歸一化處理,也就是說,0 對應輸出值 0,1 對應輸出值 . 下列圖表顯示了採用指定基點的實際查表。 如圖所示,數值均已四捨五入至最接近的整數。

    查閱表將計算以下數值:

  2. 不連續函數

    在接下來的範例中,我們將探討一個不連續函數。 假設使用與第一個範例相同的 KneeLUT 參數。 這次,基點並非由函數定義:

    同樣地,下圖顯示了這些基點。 起始基點以紅色方塊標示,終點基點則以洋紅色圓圈標示。 此外,圖中還繪製了一條直線,用以說明各區間的線性函數。

    該圖表亦顯示了輸出的近似值(藍色星號)。 同樣地,該圖表已歸一化為 1。

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

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

    這些數值可透過各區間的斜率 m(x) 和偏移量 b(x) 來計算

    因此,結果 LUT(x) 為

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

若近似值超出可用的輸出範圍,操作員不會將其裁剪至最大或最小 可能值。 這些值為未定義值。

Operator Restrictions

  • 給定以下約束條件:

I/O Properties

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

Supported Link Format

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

Parameters

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 的範圍,以便讓最後一個區間點分別達到 可表示的最大值或最小值。

Examples of Use

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

  • 「16 位元膝點查找表」

    範例 — 展示如何針對 16 位元輸入與輸出資料使用查表。 由於區塊 RAM 資源有限,16 位元的情況下必須使用 Knee LUT。