大俠好,歡迎來到FPGA技術江湖,江湖偌大,相見即是緣分。大俠可以關注FPGA技術江湖,在“闖蕩江湖”、"行俠仗義"欄裡擷取其他感興趣的資源,或者一起煮酒言歡。
今天給大俠帶來FPGA Xilinx Zynq 系列第十四篇,本篇内容目錄簡介如下:
5. 應用和機會 (“ 拿它能做什麼?”)
5.5 圖像和視訊處理,及計算機視覺
5.5.1 圖像與視訊處理
5.5.2 計算機視覺
5.5.3 抽象的層級
5.5.4 圖像處理系統的實作
5.5.5 Zynq 上的計算機視覺的例子:道路辨別識别
本系列分享來源于《The Zynq Book》,Louise H. Crockett, Ross A. Elliot,Martin A. Enderwitz, Robert W. Stewart. L. H. Crockett, R. A. Elliot, M. A. Enderwitz and R. W. Stewart, The Zynq Book: Embedded Processing with the ARM Cortex-A9 on the Xilinx Zynq-7000 All Programmable SoC, First Edition, Strathclyde Academic Media, 2016。
應用和機會(拿它能做什麼?)
5.5 圖像和視訊處理,及計算機視覺
圖像和視訊處理的領域是豐富多樣的,經常出現在消費和商業産品中,也能在醫藥、工業、防務和安全及許多其他領域找到它的應用。
圖像處理被認為是處理單個的,或者說 “ 靜止 ” 的圖像,而視訊處理指的是一系列時序的圖像 (“ 幀 ”),通常以特定的幀速率構成。計算機視覺 (或 “ 機器視覺 ” 或 “ 嵌入式視覺 ”)系統則加上了諸如能從圖像或視訊資料中析取出有意義的資料的智能性。然後就可能基于這樣的資料來做出相應的決策。
5.5.1. 圖像與視訊處理
有很多圖像和視訊處理專用的技術,總體上可以分類為:(一)增強或調整圖像;(二)從中析取資料;或(三)壓縮圖像和視訊資料。已經出過很多關于這些主題的書了,本書沒有足夠的篇幅來較長的描述它們,隻能提幾個具有代表性的例子。讀者可以參考 [13] 中關于理論性的背景知識和例子,以及參考 [3] 中關于實作的前景。
圖像處理的特征是它具有巨大的并行性:每個圖像,或等價的視訊的每個幀, 是由二維的像素點的矩陣組成的,而且在 X 和 Y 軸上可能有超過 1000 個像素點。比如,全高清 (HD)視訊通常定義為 1920 x 1080 個像素點,也就是總共有 2,073, 600 個像素點。還得考慮到每個像素點是由三個通道組成的才能表達顔色。如果用8 位的通道來分别表達紅色、綠色和藍色的資料,這樣每個像素點就需要 24 位,而每幅 HD 圖像就需要 49,766,400 位。數位相機産生的圖檔可能還會更大。考慮到這麼大的尺寸,是以任何對單個像素點的計算就需要大量的計算并行展開,這就是很适合在 FPGA 或是 Zynq 晶片的 PL 部分上做的事情了。當然,最好能降低要計算的資料的量,而且有些圖像處理是可以在更高的抽象層級上做的,在較少的資料上執行更進階的算法,也就是可能由軟體來做。在 5.5.3 節和後面的 5.5.4 節會繼續讨論這個話題。
對于視訊處理,更多的關注在壓縮方面。單幅圖檔通常在空間域上壓縮來縮減 檔案大小,但是在視訊應用中,當幀速率達到每秒 100 幀 (在某些特殊應用中更高)的時候,由于涉及到更為大量的資料,對壓縮的需求尤為突出,還可能需要實時計算的限制。但是時間域給壓縮提供了進一步的機會,因為連續的視訊幀往往存在高度的重合。可以用算法來發送一小段時間片段内完整的、最新的幀,然後在這些幀之間,對幀與幀之間的不同進行編碼。已經存在很好的視訊壓縮标準了,而且還在不斷地發展和進步 [21][30]。
5.5.2. 計算機視覺
計算機視覺系統能夠用于靜止圖像或視訊,并且能夠從圖像的内容中析取出有意義的資料來。其中的一個執行個體就是能夠在圖像中識别出物體的形狀、顔色或大小來。這有很多實際應用,範圍從制造業到監控、交通管理、食物處理、醫藥、生物計量甚至空間探索。
作為一個說明性的例子,可以考慮如何在閉路電視 (Closed Circuit Television,CCTV)畫面中識别出每個人,這樣被拍攝的區域中出現的人數就可以确定了。不僅于此,一個計算機視覺系統可能可以識别出諸如打鬥或騷亂這樣的事件。基于 Zynq 的計算機視覺的商業案例已經出現,比如視覺場景了解 [46]。當然,正如前面所提到過的,還有很多正常的計算機視覺應用,比如根據水果和蔬菜的大小、形狀和表皮對其品質進行分類 [47]!
5.5.3. 抽象的層級
圖像處理(作為整體,也就是包括了視訊處理和計算機視覺)可以按照所處理 的圖像資料的數量和與圖像内容有關的了解程度,被分成三個抽象層級。正如在5.5.4 節中所談到的,這樣的抽象層級的選擇,以及每個層級上所施加的計算的類型,使得Zynq成為圖像和視訊處理——尤其是計算機視覺——的非常合适的平台。圖 5.7 中所示的抽象層級詳述如下 (按照從下到上的順序):
圖 5.7: 圖像進行中的抽象
- 像素點 — 像素級别的處理代表着最低層級的抽象,要處理最大數量的資料, 并對内容有很少的了解,以及很少的圖像意義。像素級别的處理可以包括對圖像的色彩平衡或對比度的調整,或者是鄰域濾波(比如平滑操作來降低噪聲,或 Sobel 濾波來高亮邊緣 [3][13])。通常這些像素級别的任務本身可能具有幾個階段,而且都是在其他操作之前完成的,是以被叫做 “ 預處理 ”。
- 特征與目标 — 作為從圖像中析取資料的過程的一部分,特征與目标要被檢測到。這包括線條、曲線、形狀和區域的識别。有多種技術可以用來幫助實作從像素到特征和目标的轉化,包括 Hough 變換、色彩識别、門檻值和單一化[3][13]。
- 描述 — 識别出圖像中相關的特征或目标之後,最後的一關是獲得這幅圖像所表達的知識,也就是對它的内容的描述。在這個階段,資料不再是圖像了,而是文字或數字的描述。要實作描述可能會涉及到提取出已經識别出來的特征的參數并加以解釋,或是根據預先确定的名額或訓練集對圖像做分類[3][13]。
如前所述,計算機視覺需要識别出特征和目标來,這樣就能從圖像中析取出含義來。這就牽涉到複雜的運算和軟體算法。比如,為了判斷是否有車輛,就可能必須在圖像中分析識别出來的線條,然後甚至可以把車輛的類型分類為機車、小汽車、大巴等。這個階段表達了向圖 5.7 中所示的最高抽象層級的轉化,進而能得到圖像内容的描述。比如,在圖 5.8 中,圖像顯示的是交叉路口的小車。汽車的數量可以用計算機視覺算法被檢測并記錄下來,然後甚至還可以根據行駛的方向做出分類來。
視訊處理應用還可能進一步調用目标追蹤,比如如果在 CCTV 畫面中識别出感興趣的人了,那個人在畫面中的進一步的運動就可以被追蹤。類似的,如果路口的畫面形成了視訊,那麼車輛就可以被追蹤。
從圖像處理和計算機視覺算法中獲得的資料可以用作更高層級應用的資料。比如,在車輛識别的執行個體中,計算機視覺系統可以提供關于車輛通過一個路口的統計資料,可以用來做交通管理和城市規劃。
5.5.4. 圖像處理系統的實作
考慮圖像處理系統的一般實作的話,顯然對于不同的類型和不同的資料量,需要不同的處理類型。回顧圖 5.7,起點可能是非常大量的像素資料,對它要做簡單的、重複性的操作,而在更高的抽象層級上,計算機視覺技術是對較小資料集 (可能就隻表達了線條或形狀)進行計算的,但是算法複雜得多。
圖 5.8: 可以用計算機視覺來檢測路口車輛
是以,Zynq 是适合圖像處理的高度優化的平台。PL 很适合諸如像素點級别的圖像處理所需的快速、并行的操作。計算機視覺功能則可以由運作在 Zynq 的 PS 上的軟體來實作,然後還需要與更高層級上的軟體應用做內建。這兩者之間通過對圖像内的特征與目标的檢測而進行的轉換,可以由帶着與 PS之間恰當接口的 PL來實作,也可以利用 NEON 處理器的 SIMD 功能。對 NEON 的豐富的支援在第三方圖像和視訊處理産品中可以找到 [28]。
除了晶片的架構,我們還應該考慮在促進為 Zynq 開發圖像處理系統的設計中, Xilinx 和第三方開發工具的作用。以下羅列了一些值得一提的相關說明:
- Xilinx IP 包 — 在 IP Integrator 裡有很多 IP 包是用于圖像和視訊處理應 用的,包括視訊存儲、圖像增強和色彩調整功能。
- OpenCV — 開放計算機視覺 (Open Computer Vision)是一個開源項目,實 現了一組用于圖像和視訊處理的 C/C++ 庫 [34]。OpenCV 的工具可以用來開發運作在 PS 上的軟體算法。
- Vivado HLS 視訊庫 — Vivado HLS 包含一個能綜合到 HDL 裡去的函數庫,實 現了對圖像和視訊處理的特殊支援。這些函數可以替代部分 OpenCV 函數,是以如有需要,對應的功能就能友善地被劃分到硬體中去 [31]。
- MATLAB / Simulink — MATLAB 和 Simulink 提供了豐富的用于圖像和視訊處 理以及計算機視覺的工具 [27]。不僅提供相關的函數和開發環境,還可以把開發好的算法轉換成能實作在 Zynq 上的 C/C++ 代碼。
5.5.5. Zynq 上的計算機視覺的例子:道路辨別識别
計算機視覺在汽車和交通管理領域有一些應用,包括駕駛員安全和輔助系統、 智能運輸系統、交通執法、交通流量分析、自動牌照識别等等 [7][14]。
文獻 [37] 提出了一個有趣的應用,是基于 Zynq 平台的。要解決的問題是要基于捕獲的圖像來識别道路辨別,目的是告知駕駛員輔助系統(甚至可以直接告知自動化的車輛)車輛周邊的環境,以及任何強行管制。系統由三個部分組成:在 ZynqPL中的預處理 (色彩調整等),在 PS 中的進一步的處理 (形态、邊緣和形狀檢測),以及最後經過與資料庫的比對而對辨別的分類(也是在 PS 中做的)。作者指出,由于 AXI 的易用性、Xilinx 工具提供的支援以及 OpenCV 庫提供的功能,這個系統隻用了六個星期就設計出來了。
第十四篇到此結束,下一篇将帶來第十五篇,ZYNQ應用和機會 之 動态片上系統、更多的機會:Zynq 的 “ 生态系統 ”、本章回顧以及參考文獻等相關内容。歡迎各位大俠一起交流學習,共同進步。
END
後續會持續更新,帶來Vivado、 ISE、Quartus II 、candence等安裝相關設計教程,學習資源、項目資源、好文推薦等,希望大俠持續關注。
大俠們,江湖偌大,繼續闖蕩,願一切安好,有緣再見!