得益于 Raspberry Pi 等低成本硬件平臺(tái),現(xiàn)在比以往更容易在硬件上對(duì)圖像處理算法進(jìn)行原型驗(yàn)證。大多數(shù)圖像處理算法需要進(jìn)行大量計(jì)算,在嵌入式平臺(tái)上以可接受的幀頻運(yùn)行它們非常困難。盡管 Raspberry Pi 在運(yùn)行簡(jiǎn)單的圖像處理算法時(shí)游刃有余,但大圖像和復(fù)雜算法應(yīng)在 NVIDIAJetson 等功能強(qiáng)大的硬件上運(yùn)行。
本文將以色度鍵控效果為例,介紹在嵌入式硬件上部署 MATLAB 圖像處理算法的簡(jiǎn)單工作流。我們將使用 MATLAB Coder 通過(guò)算法生成C代碼,然后使用在硬件上運(yùn)行的實(shí)用程序在 Raspberry Pi 板卡上進(jìn)行算法原型驗(yàn)證。最后,我們將算法移植至 NVIDIA Jetson Tx1 平臺(tái)以保證實(shí)時(shí)性能。
色度鍵控算法
色度鍵控廣泛用于電視天氣預(yù)報(bào)、電影制作和圖片編輯應(yīng)用程序,它是一種視頻處理技術(shù),首先針對(duì)單色背景(如綠色屏幕)拍攝前景對(duì)象,然后用不同場(chǎng)景(圖1)替換該背景。
圖1:應(yīng)用色度鍵控之前和之后的示例
色度鍵控算法將圖像中的每個(gè)像素與代表單背景色的基準(zhǔn)色進(jìn)行對(duì)比。如果像素顏色與基準(zhǔn)色足夠接近,像素將由之前所選場(chǎng)景圖像的對(duì)應(yīng)像素替換。從數(shù)學(xué)上講,色度鍵控算法采用以下公式:
其中代表進(jìn)行色度鍵控后位置?(j,k)?處的最終像素值,
是與原始圖像對(duì)應(yīng)的像素值,
是代表替換單一背景色的場(chǎng)景的像素值,m(j,k)∈[0,1]?是掩碼值。掩碼數(shù)值?m(j,k)?對(duì)于前景像素應(yīng)該為?1,對(duì)于背景像素應(yīng)該為?0。0?與?1?之間的掩碼值可提供從背景到前景的平滑過(guò)渡。
每個(gè)像素的掩碼值通常在 YcbCr 顏色空間而不是普通的 RGB 顏色空間中進(jìn)行計(jì)算。YcbCr 圖像的 Y 分量代表亮度分量,用于確定圖像的明暗度。Cb 和 Cr 分量代表色度分量,用于衡量與基準(zhǔn)色的相似度。由于僅使用圖像的 Cb 和 Cr 分量衡量顏色相似度,該算法在應(yīng)對(duì)單一背景色明暗區(qū)域的亮度值差異時(shí)十分穩(wěn)健。
為衡量像素色與基準(zhǔn)色的相似性,我們?cè)谏瓤臻g中使用歐氏距離平方:
最后,使用以下公式計(jì)算圖像中位置(j,k) 的掩碼值:
其中 t1 和 t2 ( t2 > t1)代表要確定的閾值。
MATLAB實(shí)現(xiàn)
以下是色度控鍵算法的 MATLAB 實(shí)現(xiàn):
在 MATLAB 中,圖像由類型 uint8 的 [N,M, 3] 數(shù)組表示。這表示,在執(zhí)行數(shù)學(xué)操作前,我們需要將圖像數(shù)據(jù)類型轉(zhuǎn)換為 “double”。為避免背景到前景的快速突變,我們對(duì)算出的掩模采用高斯過(guò)濾器進(jìn)行濾波。
確定基準(zhǔn)色和閾值
色度鍵控算法需要基準(zhǔn)色和閾值。使用 MATLAB Raspberry Pi 支持包中的相機(jī)接口,我們拍攝了實(shí)際場(chǎng)景的圖像。隨后,我們可以憑借經(jīng)驗(yàn)確定背景的適用基準(zhǔn)色和相應(yīng)的閾值。
img = snapshot(cam); 命令繪制 MATLAB 中 Raspberry Pi 相機(jī)拍攝的圖像。我們使用 MATLAB 繪制中的 Data Cursor 工具指定背景顏色(圖2)。
圖2:MATLAB 中用于確定背景色值的 Data Cursor 工具
要確定閾值,我們將循環(huán)運(yùn)行算法并調(diào)整閾值:
當(dāng)運(yùn)行代碼時(shí),我們會(huì)獲得帶有所選背景的圖像(圖3)。
圖3:左:原始圖像;右:運(yùn)行色度控鍵算法后獲得的圖像
將色度鍵控算法部署到 Raspberry Pi
在部署代碼前,我們需要編寫一段包含有色度鍵控算法的循環(huán)體,循環(huán)體中還包括從相機(jī)拍攝圖像,并在 Raspberry Pi 連接的顯示器上顯示:
matlab.raspi.webcam 和 matlab.raspi.SDLVideo Display 是在硬件上運(yùn)行實(shí)用程序的 System objects,它們可簡(jiǎn)化部署工作流程中相機(jī)的使用和 Raspberry Pi 顯示。要編譯并運(yùn)行代碼,我們可執(zhí)行以下命令:
runOnHardware 功能會(huì)為 Raspberry Pi 硬件創(chuàng)建 MATLAB Coder 配置,為 chromaKeyApp.m 生成代碼并對(duì)其部署。為了以合理的幀頻運(yùn)行算法,圖像大小可縮小到 640x480 或 320x240。
生成GPU代碼
算法在 Raspberry Pi 上運(yùn)行,但是它不會(huì)實(shí)現(xiàn)我們需要的實(shí)時(shí)性能。為了加快算法的速度,我們要使用 GPU Coder 將其部署到 NVIDIA Jetson 平臺(tái)。我們需要生成 GPU 代碼以利用算法中的內(nèi)在并行性。首先,我們會(huì)編寫 main 函數(shù)進(jìn)行封裝,以利用 OpenCV 訪問(wèn)連接到 NVIDIA Jetson 的 USB 相機(jī)。此功能將視頻幀從相機(jī)送到我們的 chromaKey 算法,隨后在屏幕上顯示輸出內(nèi)容。
生成 GPU 代碼后,我們首先創(chuàng)建 GPU Coder 配置對(duì)象、設(shè)置 GPU 參數(shù)以指向 NVIDIA Jetson 硬件平臺(tái),然后加入自定義的 main 函數(shù)。我們不會(huì)在 MATLAB 主機(jī)上編譯代碼,因?yàn)槲覀儗iT為 NVIDIA Jetson 平臺(tái)生成代碼。我們將創(chuàng)建腳本來(lái)設(shè)置 GPU Coder 配置、輸入示例數(shù)據(jù),并為我們的應(yīng)用生成源代碼。
我們隨后在 MATLAB 中運(yùn)行腳本為 chromaKey 算法生成 CUDA 代碼。
向 NVIDIA Jetson 部署綠屏算法
要向 NVIDIA Jetson 部署生成的代碼,我們需要使用以下 MATLAB 命令將全部所需文件打包到 codegen 目錄。
接下來(lái),將生成的所有 codegen 文件夾從主機(jī)復(fù)制到 NVIDIA Jetson 控制板。在傳輸文件后,我們直接登錄到 NVIDIA Jetson 以構(gòu)建并運(yùn)行應(yīng)用程序。
登錄到 NVIDIA Jetson 后,我們運(yùn)行 NVIDIA 提供的 jetson_clocks.sh 腳本以將平臺(tái)性能最大化、切換到包含生成的源代碼(之前傳輸)的 codegen 目錄,然后執(zhí)行以下顯示的編譯命令。
在可執(zhí)行程序(chromaKey)Build 后,使用 NVIDIA Jetson 控制臺(tái)上的 USB 網(wǎng)絡(luò)攝像頭通過(guò)以下命令運(yùn)行應(yīng)用程序。每秒顯示幀數(shù)將顯示在輸出窗口中。
圖 4 顯示出現(xiàn)綠屏效果前后 NVIDIA Jetson 板卡的 USB 相機(jī)的輸出內(nèi)容。
圖4:應(yīng)用綠屏效果前后的示例
Raspberry Pi 和 NVIDIA Jetson 性能對(duì)比
NVIDIA Jetson 上 GPU 更加強(qiáng)大的并行處理能力極大地提高了算法的性能。Raspberry Pi 實(shí)現(xiàn)了約 1 幀/秒的幀頻,而 NVIDIA Jetson 對(duì)于 1280x720 大小的圖像實(shí)現(xiàn)了 20 幀/秒以上的幀頻。也就是說(shuō),無(wú)需對(duì)算法進(jìn)行任何修改或優(yōu)化,我們便獲得了 20 倍以上的加速。通過(guò)優(yōu)化 MATLAB 算法提高 GPU 代碼的生成效率,我們可以實(shí)現(xiàn)更高的性能。
-
圖像處理
+關(guān)注
關(guān)注
27文章
1329瀏覽量
58036 -
攝像頭
+關(guān)注
關(guān)注
61文章
4976瀏覽量
98334 -
網(wǎng)絡(luò)
+關(guān)注
關(guān)注
14文章
7814瀏覽量
90914
發(fā)布評(píng)論請(qǐng)先 登錄
普源示波器如何連接MATLAB實(shí)現(xiàn)數(shù)據(jù)采集與分析
進(jìn)群免費(fèi)領(lǐng)FPGA學(xué)習(xí)資料!數(shù)字信號(hào)處理、傅里葉變換與FPGA開(kāi)發(fā)等
FPGA上的圖像處理算法集成與優(yōu)化

DFT在圖像處理中的作用 DFT在音頻信號(hào)處理中的應(yīng)用
Simulink與 MATLAB 的結(jié)合使用 Simulink中的信號(hào)處理方法
圖像高斯濾波的原理及FPGA實(shí)現(xiàn)思路

傅立葉變換在圖像處理中的作用
?ISP算法及架構(gòu)分析介紹

評(píng)論