運算子 FrameBufferMultiRoiDyn

Library: Memory 運算子

此運算子會在 frame grabber RAM (DRAM) 中緩衝輸入影像資料,並針對每個緩衝的影像讀出多個動態興趣區 (ROI)。要讀出的 ROI 座標是透過使用額外的輸入連結來定義。下圖顯示一個輸入訊框與四個 ROI 的運算子行為總覽。

需要一個類型為 RAM 的 VisualApplets 資源(請參閱 'Allocation of Device Resources')。多個類型為 RAM 的資源會透過 ' Shared Memory Concept ' 使用相同的實體 RAM。有關如何使用共用記憶體的說明,請參閱 Application Note: Shared Memory。

所有 ROI 皆會作為個別影像依序讀出:ROI 0、ROI 1、ROI 2... 直到 ROI N-1。N 是針對一個輸入訊框要讀出的 ROI 數量,也就是座標輸入上的影像大小。只要不超過最大輸入訊框尺寸,即支援所有可能的矩形區域,亦即單一像素、單一行、單一列、矩形區域或完整訊框皆可定義為 ROI。

不同的 ROI 不需要具有相同的尺寸。

每個 ROI 都可以個別定義。

ROI 可以互相重疊。

如果 ROI 影像為空(即不包含任何像素),運算子將在其輸出端提供空白影像。空白影像不包含任何像素。

負的 ROI 寬度 (XTopLeft > XBottomRight) 或 ROI 高度(YTopLeft > YBottomRight)也會導致輸出端產生空的 ROI。 支援的最大 ROI 數量取決於 XTopLeft 輸入連結上的每張影像最大像素數:XTopLeft.MaxImageWidth * XTopLeft.MaxImageHeight。

ROI 座標會在四個獨立的座標輸入連結上提供,作為包含 ROI 座標的影像: XTopLeft、YTopLeft、 XBottomRight、 YBottomRight。運算子會將這些影像中的每個像素視為有效的 ROI 座標集。因此,ROI 輸入影像的大小決定了輸出 ROI 的數量。EoL(行結束)與變動的行長度可以使用,但會被忽略,因為針對運算子的 ROI 輸入,只會評估有效像素與 EoF (訊框結束)。輸入連結 I 上的每個輸入影像都需要一個新的 ROI 座標影像集。ROI 是由左上角的 X、Y 座標以及右下角的 X、Y 座標所定義。

請注意,ROI X 座標會進行轉換,以符合輸入連結 I 由其 Parallelism 所定義的 X 粒度,亦即運算子 FrameBufferMultiRoiDyn 只能以 Parallelism 的粒度來切割行。當定址的像素不是 XTopLeft 之平行元件的第一個像素,或是不是 XBottomRight 之平行元件的最後一個像素時,座標會向上或向下捨入,且產生的 ROI 仍會包含平行元件的所有像素。

以下章節將透過範例說明運算子的行為:

在此範例中,輸入連結 I 處的 Parallelism = 4。

因此,XTopLeft 會向下捨入至平行元件的第一個像素:0、4、8、12、...,而 XBottomRight 會向上捨入至平行元件的最後一個像素 3、7、11、15、...

例如,若 ROI X 座標為 3 和 7,則 ROI 的第一欄為輸入影像的第 3 欄,最後一欄為第 7 欄。運算子會將 XTopLeft 向下捨入為 0; XBottomRight 維持 7。因此,寬度變為 8。ROI 高度不相依於 Parallelism,因此可以是任何合法的值。

[注意] 公式:

XTopLeft* = floor(XTopLeft / Parallelism) * Parallelism

XBottomRight* = ceil((XBottomRight + 1) / Parallelism) * Parallelism - 1

[注意] 範例:

若輸入連結 I 處的 Parallelism 為 4:

  • 112 到 551 變為 112 到 551。因此,寬度變為 = 551 - 112 + 1 = 440
  • 101 到 540 變為 100 到 543。因此,寬度變為 = 543 - 100 + 1 = 444

所有 4 個 ROI 輸入彼此同步,亦即這些連結上的影像必須大小相同,且須同時同步提供。透過任意的 O 型模組網路從相同的 M 型模組取得來源時,一律如此。如需詳細資訊,請參閱'M-type Operators with Multiple Inputs'章節。

ROI 座標與輸入連結 I 非同步。您可以使用 CreateBlankImage 運算子來產生 ROI 座標。

一旦對應的輸入訊框完全緩衝完成(即接收到輸入訊框的 EoF [訊框結束] 訊號),且接收到每個 ROI 影像定義輸入連結 XTopLeft, YTopLeft, XBottomRight, YBottomRight 上的第一個像素,運算子便會在輸出端提供 ROI 影像。如果 DRAM 中有足夠的空間,則在讀取 ROI 時,可以將下一個輸入訊框寫入 DRAM。RAM 頻寬會在寫入與讀取之間共用,但讀取只能在對應的輸入訊框寫入完成後才能開始。讀取輸入訊框的最後一個 ROI(由每個 ROI 影像定義輸入連結上的最後一個像素定義,即接收到 ROI 影像的 EoF [訊框結束])後,會捨棄目前的訊框,且下一個 ROI 影像會定址下一個輸入訊框。有關運算子延遲的資訊,請參閱Table 46, 'Individual Latencies of the Operators in Library Memory'。

運算子支援兩種將影像資料緩衝至 DRAM 的模式,您可以透過參數 MaxFrameSizeMode進行設定:

  • 對於 MaxFrameSizeMode = AUTO,DRAM 會緩衝具有最大影像尺寸大小的影像,該尺寸為 I.MaxImgWidth * I.MaxImgHeight。

    小於最大影像尺寸的影像會直接緩衝而不進行修改。不過,讀出 ROI 的動作一律是在具有最大可能影像尺寸的緩衝訊框上進行。在此情況下,遺失的訊框像素會以隨機資料填入,在後續處理中應視為未定義。

  • 對於 MaxFrameSizeMode = CUSTOM,緩衝輸入訊框的最大尺寸是由參數 MaxFrameWidth 與 MaxFrameHeight 所定義。即使實際輸入訊框較大,超過指定參數尺寸的資料也會被捨棄(類似於沒有位移的 ROI)。在此情況下,DRAM 會為訊框大小 MaxFrameWidth * MaxFrameHeight 保留記憶體。

在這兩種情況下,都不會檢查輸入連結 ROI 座標是否位於輸入影像內。由於座標可以設定為最大輸入訊框的任何像素,如果它們位於實際輸入影像資料之外,運算子將會讀取隨機的虛擬值,但 ROI 大小不會改變。

此運算子在所有輸入鏈路上均支援空白影格、空白行與不同的行長度。

使用 InfiniteSource 的溢位管理

在 InfiniteSource 模式下,影像可能會遺失或損毀。發生這種情況的原因可能是 RAM 已滿且無法接受任何更多資料,或是輸入頻寬對於共用記憶體介面而言過高。一旦運算子達到溢位狀態,所有傳入的資料都會被丟棄,這會導致影格遺失或損毀。只有在輸入頻寬過高時才會發生影像損毀,因為 Fill 級別是以完整的實體來計算的。當影像的一部分已經寫入 RAM,但另一部分因輸入頻寬過高而被丟棄且 RAM 無法以足夠快的速度接受寫入資料時,就會發生影像損毀。因此,讀取損毀的影像會導致未定義的輸出資料。一旦 RAM 中有足夠的空間且共用記憶體介面允許再次將資料寫入 RAM,運算子就會從溢位中復原並停止丟棄輸入資料。Overflow 參數表示何時發生了溢位。透過 OverflowClearMode 參數,您可以定義是在溢位復原後立即重設 Overflow,還是手動重設溢位。 只有在 InfiniteSource 參數設為 ENABLED 時,才能使用 Overflow 和 OverflowClearMode 參數。

Operator Restrictions

  • 輸入鏈路的 Parallelism 必須是 2 的冪次方。

  • 此運算子支援輸入鏈路 I 上的空白影格,但該影格的輸出 ROI 會填入隨機虛擬值。

  • 如果輸入影像小於寫入 DRAM 的影格,則不會檢查 ROI 座標是否在輸入影像內部。在這種情況下,運算子會從記憶體中讀取隨機虛擬值。

  • 最大連線屬性會因運算子的使用方式而異。如需詳細資訊,請參閱下方的 Supported Link Format 一節。

頻寬最佳化

為了達到最佳效能,所使用的資料 Bit Width 應盡可能接近模組參數 RamDataWidth 中提供的數值。如果 Bit Width、核心大小與 Parallelism 的乘積等於內部 RAM 連接埠寬度 RamDataWidth,則會達到通過運算子的最大頻寬。請注意,內部 Bit Width 可以透過使用核心來增加,但完整的核心仍會被尋址為單一像素。

為了讓運算子能夠處理超過 RAM 可用最大頻寬的長寫入叢發資料,請啟用 WritePriority 參數。建議搭配無限資料來源(例如相機,InfiniteSource = ENABLED)使用此功能。如果啟用了 WritePriority 參數,當寫入叢發導致超出 RAM 的可用頻寬時,將會禁止讀取。這允許對 RAM 進行暫時更頻繁的寫入存取。如果相機傳送寫入叢發,預期該叢發後面會跟著寫入資料的間隙(否則會超出可用的 RAM 頻寬),然後可用於暫時提高讀取頻寬。

I/O Properties

Property Value
Operator Type M
Input Links I,影像資料輸入
XTopLeft,座標資料輸入
YTopLeft,座標資料輸入
XBottomRight,座標資料輸入
YBottomRight,座標資料輸入
Output Link O,資料輸出

同步與非同步輸入

  • 4 個 ROI 座標輸入 XTopLeft、YTopLeft、XBottomRight 與 YBottomRight 彼此同步。
  • ROI 座標輸入 XTopLeft、YTopLeft、XBottomRight 與 YBottomRight 對於輸入鏈路 I 而言是非同步的。

Supported Link Format

Link Parameter Input Link I 輸入連結 XTopLeft 輸入連結 YTopLeft 輸入連結 XBottomRight 輸入連結 YBottomRight Output Link O
Bit Width [1, 64]12 auto3 auto4 auto3 auto4 as I
Arithmetic {unsigned, signed} 無號數 無號數 無號數 無號數 as I
Parallelism 2^N,其中 N = {0,1,2...}2 1 1 1 1 as I
Kernel Columns [1, RamDataWidth / BitWidth / Parallelism / KernelRows]2 1 1 1 1 as I
Kernel Rows [1, RamDataWidth / BitWidth / Parallelism / KernelColumns]2 1 1 1 1 as I
Img Protocol VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D as I
Color Format any VAF_GRAY VAF_GRAY VAF_GRAY VAF_GRAY as I
Color Flavor any FL_NONE FL_NONE FL_NONE FL_NONE as I
Max. Img Width 2^31 - 15 2^31 - 1 與 XTopLeft 相同 與 XTopLeft 相同 與 XTopLeft 相同 as I
Max. Img Height 2^RamAddressWidth5 2^31 - 1 與 XTopLeft 相同 與 XTopLeft 相同 與 XTopLeft 相同 as I

1

輸入 Bit Width 的範圍為:

  • 針對無號輸入:[1, 64]

  • 對於有號數值:[2, 64]

  • 對於無號彩色輸入:[3, 63]

  • 針對有號色彩輸入:[6, 63]。

輸入 bit width 不得超過原生 RAM 資料寬度 RamDataWidth。

2

Bit Width、Parallelism 與核心大小的乘積不得超過原生 RAM 資料寬度。

3

X 座標輸入的 Bit Width 為:

4

Y 座標輸入的 Bit Width 為:

5

輸入連線 I 的最大影像寬度和影像高度會根據運算子的使用方式而有所不同:

  • 對於 MaxFrameSizeMode = AUTO,I.MaxImageWidth 與 I.MaxImageHeight 的乘積必須適合可用的 RAM 大小。

  • 對於 MaxFrameSizeMode = CUSTOM,I.MaxImageWidth 與 I.MaxImageHeight 兩者均受限於最大 RAM 大小。該乘積可以超過總 RAM 大小,因為只有由參數 MaxFrameWidth 與 MaxFrameHeight 選取的子影像才會被寫入 RAM 中。

    由於每個 RAM 向量會寫入 I.Parallelism 個像素,因此 I.MaxImageWidth 可以超過 2^RamAddressWidth,但絕不能大於 2^31 - 1。

    I.MaxImageWidth 與 I.MaxImageHeight 的 Bit Width 總和必須小於 48 bit。

Parameters

RamDataWidth
Type 靜態寫入參數
Default 不適用
Range 整數

此參數提供可用於 RAM 中的最大資料寬度。

RamAddressWidth
Type 靜態寫入參數
Default 不適用
Range 整數

此參數提供可使用的位址位元數。可用 RAM 槽的數量由 2^RamAddressWidth 定義。目前的 RamAddressWidth 取決於硬體平台以及設計中記憶體運算子(即使用 RAM 類型資源的運算子)的目前數量。

MaxFrameSizeMode
Type dynamic write parameter
Default Auto
Range {Auto, Custom}

此參數定義參數 MaxFrameWidth 與 MaxFrameHeight 應自動遵循輸入 I 處的最大影像尺寸 (mode=Auto),還是可以調整這些參數 (mode=Custom)。Custom 模式允許設定針對應用程式自訂的最大影格尺寸,該尺寸可能遠小於輸入鏈路所定義的限制。透過這種方式,可以在 RAM 中儲存更多影格。在 Auto 模式下,I 的鏈路屬性(Max.Img Width 與 Max.Img Height)所定義的最大影像不得大於記憶體中的可用插槽數(2^RamAddressWidth)。如果 I 的鏈路屬性 Max.Img Width 與 Max.Img Height 所定義的最大影像大於可用記憶體空間,且您處於 Custom 模式,則在將輸入鏈路上的最大影像定義得更小之前,將無法編輯 MaxFrameSizeMode 參數。當擷取正在執行時,無法寫入此參數。

MaxFrameWidth
Type dynamic write parameter
Default 1024
Range [1, I 處的最大影像寬度]

此參數設定目前影像處理組態的最大影像寬度。超過此限制的輸入影格行將被裁切至 MaxFrameWidth。將此數字減少至小於最大影像寬度可節省記憶體空間並允許儲存更多影格。只有當 MaxFrameSizeMode 設為 Custom 時,才可以編輯此參數。MaxFrameHeight 與 MaxFrameWidth 的乘積不得大於可用記憶體插槽數 2^RamAddressWidth 乘以輸入 Parallelism。當擷取正在執行時,無法編輯此參數。

MaxFrameHeight
Type dynamic write parameter
Default 1024
Range [1, I 處的最大影像高度]

此參數設定目前影像處理組態的最大影像高度。超過此高度限制的輸入影格將被裁切至 MaxFrameHeight。將此數字減少至小於最大影像高度可節省記憶體空間並允許儲存更多影格。只有當 MaxFrameSizeMode 設為 Custom 時,才可以編輯此參數。MaxFrameHeight 與 MaxFrameWidth 的乘積不得大於可用記憶體插槽數 2^RamAddressWidth 乘以輸入 Parallelism。當擷取正在執行時,無法編輯此參數。

FillLevel
Type 動態讀取參數
Default 0
Range [0%, 100%]

此參數提供 DRAM 的 Fill 百分比水準。

MaxFrameCount
Type 動態讀取參數
Default 2^RamAddressWidth / (MaxFrameHeight * (MaxFrameWidth / I.Parallelism))
Range [1, 2^RamAddressWidth]

此參數提供目前適合記憶體中的最大影格數。適合記憶體中的最大影格數取決於參數 RamAddressWidth、MaxFrameHeight、I.Parallelism 和 MaxFrameWidth。

MaxFrameCount = 2^RamAddressWidth / (MaxFrameHeight * (MaxFrameWidth / I.Parallelism))

FrameCount
Type 動態讀取參數
Default 0
Range [0, MaxFrameCount]

此參數提供記憶體中的目前影格數。

InfiniteSource
Type 靜態寫入參數
Default DISABLED
Range {ENABLED, DISABLED}

此運算子可以放置在設計中相機運算子的正後方。在這種情況下,InfiniteSource 參數必須設為 ENABLED。運算子隨後將執行主動式溢位管理,並確保運算子能夠從溢位中正常復原。當運算子後方的資料接收端停止或暫停傳輸且緩衝區 Fill 級別達到最大值,或者輸入頻寬過高以致無法將寫入資料傳輸到外部 RAM 時,皆可能發生溢位。當 InfiniteSource 設為 DISABLED 時,如果緩衝區 Fill 級別或輸入頻寬變得過高,將會產生禁止訊號以停止後續運算子傳輸資料。

建議搭配任何與 InfiniteSource 一起使用的運算子啟用寫入優先順序。因此,當 InfiniteSource 參數設為 ENABLED 時,建議將 WritePriority 參數設為 ENABLED。

如需詳細資訊,請參閱 'Infinite Sources / Connecting Cameras'。

WritePriority
Type 靜態寫入參數
Default DISABLED
Range {ENABLED, DISABLED}

' Shared Memory Concept ' 概念通常會在所有連接的記憶體運算子(即所有使用 RAM 類型資源的運算子)之間平均分配頻寬。如果 WritePriority 參數為 DISABLED,則 FrameBufferMultiRoiDyn 運算子會為讀取和寫入指派相同的優先順序。透過將 WritePriority 設為 ENABLED,FrameBufferMultiRoiDyn 運算子會將寫入優先於讀取,但僅限於暫存記憶體資料速率高於可用頻寬時。寫入資料的暫時優先化會導致讀取過程暫時變慢。因此,對於 FrameBufferMultiRoiDyn 運算子而言,平均頻寬不得超過可用頻寬。建議對於任何將 InfiniteSource 參數設為 ENABLED 的運算子使用寫入優先順序。當將寫入優先順序用於可停止的來源時,請確保寫入頻寬不會持續過高,否則從 FrameBufferMultiRoiDyn 運算子的讀取將會停止,直到緩衝區滿為止。由於寫入優先順序是針對個別運算子的組態,因此寫入優先順序的影響會隨著設計中增加每個額外的記憶體運算子而減少。

Overflow
Type 動態讀取參數
Default 0
Range [0, 3]

此參數表示緩衝區溢位。這是一個 2 位元的位元圖,其中每個位元表示不同類型的溢位。位元 0 表示填滿程度溢位,位元 1 表示寫入頻寬溢位。Overflow 的顯示時間取決於所選的 OverflowClearMode。

只有當 InfiniteSource 參數設定為 ENABLED 時,Overflow 參數才會作用。

OverflowClearMode
Type dynamic write parameter
Default AutoClear
Range {AutoClear, ManualClear, ClearAfterRead, ClearWithProcessReset}

OverflowClearMode 用於決定當運算子從溢位中恢復時,如何清除 Overflow 參數。唯有當運算子不再處於溢位狀態時,您才能使用此參數重設溢位狀態。

清除模式:

  • AutoClear:當運算子從溢位中恢復時,Overflow 參數會自動重設。

  • ManualClear:當運算子從溢位中恢復時,Overflow 參數仍會顯示溢位,直到透過將 ManualClear 寫入 OverflowClearMode 參數來手動重設為止。在此模式下,程序重設(例如 Acquisition Stop)不會清除 Overflow 參數,這表示停止擷取後溢位仍然可見。

  • ClearAfterRead:當運算子從溢位中恢復時,Overflow 參數仍會顯示溢位,直到讀取 Overflow 參數或發生程序重設(例如停止擷取時)為止。

  • ClearWithProcessReset:當運算子從溢位中恢復時,Overflow 參數仍會顯示溢位,直到發生重設(例如停止擷取時)為止。

只有當 InfiniteSource 參數設定為 ENABLED 時,OverflowClearMode 參數才會作用。