SVM簡介
面部識別是一個經(jīng)常討論的計算機科學話題,并且由于計算機處理能力的指數(shù)級增長而成為人們高度關(guān)注的話題。面部識別在機器人、生物安全和汽車工業(yè)等許多領(lǐng)域都有廣泛的應(yīng)用,涉及對輸入圖像應(yīng)用數(shù)學算法,提取不同的特征,表明所提供的圖片中是否存在人臉。方向梯度直方圖(HOG)是一種傳統(tǒng)算法,用于提取圖像特征,例如像素方向,并且可以與線性支持向量機(SVM)一起使用來將輸入圖像識別為人臉或不是人臉。
我們將使用下面圖像作為參考和測試:
圖像處理
卷積
兩個函數(shù)的卷積是一種重要的數(shù)學運算,在信號處理中廣泛應(yīng)用。在計算機圖形和圖像處理領(lǐng)域,我們通常使用離散函數(shù)(例如圖像)并應(yīng)用離散形式的卷積來消除高頻噪聲、銳化細節(jié)或檢測邊緣。
卷積是對兩個信號 f 和 g 的數(shù)學運算,定義為:
在圖像領(lǐng)域,我們可以將卷積想象為單個像素與其相鄰像素之間的關(guān)系。這種關(guān)系主要應(yīng)用搜索顏色變化、亮度差異和像素周期性等獨特特征檢測。
下圖說明了使用小型 3 x 3 內(nèi)核的卷積濾波器。濾波器被定義為一個矩陣,其中中心項對中心像素進行加權(quán),其他項定義相鄰像素的權(quán)重。我們也可以說 3×3 核的半徑為 1,因為在卷積過程中只考慮“一環(huán)”鄰域。在圖像邊界要定義卷積的行為,其中內(nèi)核映射到圖像外部未定義的值。
使用 3 x 3 窗口和 3 x 3 內(nèi)核的卷積運算可以定義如下:
staticintconvolve(unsignedintwindow[3][3],intkernel[3][3]) { intresult=0; for(inti=0;i
為了對整個圖像進行卷積運算,可以應(yīng)用滑動窗口技術(shù)。從第一個像素開始,每 8 個臨近像素被分組為一個方形窗口,窗口內(nèi)的輸入像素與內(nèi)核進行卷積,產(chǎn)生一個像素值放置在輸出圖像中。重復此步驟直到圖像結(jié)束。
Sobel-索貝爾
邊緣檢測是檢測灰度圖像中不連續(xù)性的最常見方法。邊緣被定義為位于兩個區(qū)域之間的特定邊界上的一組連接的像素。
如果輸入圖像是彩色圖像,則在應(yīng)用卷積運算之前,將其轉(zhuǎn)換為灰度圖像。
假設(shè)每個像素都使用 32 位無符號整數(shù)表示,則 RGB 轉(zhuǎn)換為灰度的代碼如下所示:
#defineR(pixel)(((pixel)>>16)&0xFF) #defineG(pixel)(((pixel)>>8)&0xFF) #defineB(pixel)(((pixel))&0xFF) floatrgb2gray(unsignedintpixel) { return(R(pixel)*0.2989+G(pixel)*0.5870+B(pixel)*0.1440); }
運行后,測試圖像將如下所示:
Sobel 算子是邊緣檢測中最常用的算子之一。Sobel 算子使用兩個 3×3 內(nèi)核與原始圖像進行卷積來計算導數(shù)的近似值 - 一個用于水平變化,另一個用于垂直變化。如果我們將 A 定義為源圖像,G x和 G y是兩個圖像,每個點分別包含水平和垂直導數(shù)近似值,則計算如下:
通過前面的卷積函數(shù),我們可以使用以下代碼計算輸出圖像:
intdx=convolve(window,kernel_x); intdy=convolve(window,kernel_y);
其中窗口定義為 3 x 3 滑動窗口,內(nèi)核是 Sobel 算子使用的內(nèi)核:
staticintkernel_x[3][3]={ {1,2,1}, {0,0,0}, {-1,-2,-1} }; staticintkernel_y[3][3]={ {1,0,-1}, {2,0,-2}, {1,0,-1} };
卷積計算后得到的圖像如下:
正如所看到的,垂直和水平細節(jié)得到增強并且更易于觀察。盡管它有幫助,但我們需要一個更獨特的特征圖像,僅代表邊緣。
下一步將組合這兩個圖像并獲得雙向變化圖。我們可以通過計算每個像素值的大小或強度以及當前像素與邊緣線中的另一個像素鏈接的方向或角度來做到這一點。
在圖像中的每個點,可以使用以下方法組合所得的近似值來給出幅度:
以及使用的角度:
squareroot 和 atan2 函數(shù)都已在 HLS 命名空間中實現(xiàn):
unsignedintmagnitude=hls::sqrt(dx*dx+dy*dy); intangle=hls::atan2(dx,dy);
結(jié)果是:
幅度
角度
我們已經(jīng)得到邊緣更加集中的圖像。盡管如此,在多種形式的領(lǐng)域,邊緣會變得更寬。我們需要使用一種稱為非極大值抑制的技術(shù)來抑制這些錯誤邊緣:
unsignedintnms(unsignedintmag[3][3],intang){ unsignedintq,r; q=r=255; if((0<=?ang?=q&&mag[1][1]>=r) returnmag[1][1]; return0; }
現(xiàn)在邊緣更薄、更簡潔。
實施
如前所述,輸入圖像以數(shù)據(jù)流的形式逐像素輸入。為了應(yīng)用卷積運算,我們需要將數(shù)據(jù)打包在 3 x 3 窗口下。可以使用具有兩個緩沖區(qū)的架構(gòu)來實現(xiàn)這一點,其中元素數(shù)量等于寬度,如果我們的輸入圖像:
這里將有兩個輔助函數(shù)用于移動行緩沖區(qū)和滑動窗口:
staticvoidshift_w(unsignedintwindow[3][3],unsignedintv1,unsignedintv2, unsignedintv3) { window[0][0]=window[0][1]; window[0][1]=window[0][2]; window[0][2]=v1; window[1][0]=window[1][1]; window[1][1]=window[1][2]; window[1][2]=v2; window[2][0]=window[2][1]; window[2][1]=window[2][2]; window[2][2]=v3; } staticvoidshift_b(unsignedintline_buffer[2][1280],intpos, unsignedintval) { line_buffer[0][pos]=line_buffer[1][pos]; line_buffer[1][pos]=val; }
最后,我們可以將整個過程打包成一個 HLS 函數(shù)(代碼見附件)。
得到了代碼后,還應(yīng)該對其進行測試。GIMP (https://www.oschina.net/p/gimp?hmsr=aladdin1e1)有一個非常酷的功能,可以直接將圖像導出為頭文件。假設(shè)我們將測試圖像導出到文件 image.h 下,就可以利用如下代碼實現(xiàn)我們要測試的功能(代碼見文末)。
驗證 HLS IP 的另一種方法是直接在 FPGA 上進行驗證。
第一步是創(chuàng)建block design并將合成的 Sobel IP 添加到存儲庫:
添加已實現(xiàn)的 IP,其中一個 DMA 向其提供數(shù)據(jù),另一個讀取輸出:
生成比特流后就可以驗證功能。
生成的圖像應(yīng)與模擬圖像相似。
現(xiàn)在我們需要實現(xiàn)一個直接從相機輸入的架構(gòu)。
第一個組件是 Znyq 處理系統(tǒng)和用于配置相機接口的 i2c 控制器:
在圖像流方面,需要一個 MIPI 控制器和一個 Demosaic IP 將流轉(zhuǎn)換為 RGB24:
最后添加我們的圖像處理IP和VDMA:
審核編輯:劉清
-
FPGA
+關(guān)注
關(guān)注
1643文章
21983瀏覽量
614621 -
圖像處理
+關(guān)注
關(guān)注
27文章
1325瀏覽量
57767 -
計算機
+關(guān)注
關(guān)注
19文章
7636瀏覽量
90272 -
SVM
+關(guān)注
關(guān)注
0文章
154瀏覽量
32966 -
面部識別
+關(guān)注
關(guān)注
1文章
375瀏覽量
27099
原文標題:FPGA 上使用 SVM 進行圖像處理
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
FPGA設(shè)計經(jīng)驗之圖像處理
利用FPGA進行圖像處理,實現(xiàn)特效顯示,事先我怎么設(shè)定模塊?
薦讀:FPGA設(shè)計經(jīng)驗之圖像處理
基于DSP和FPGA的通用圖像處理平臺設(shè)計
基于DSP和FPGA的通用圖像處理平臺設(shè)計

在FPGA上進行圖像處理及其示例
關(guān)于利用FPGA做圖像處理的相關(guān)知識盤點
FPGA進行圖像處理的前景廣闊 應(yīng)用將會越來越大
FPGA做圖像處理關(guān)鍵優(yōu)勢是:能進行實時流水線運算
教你們?nèi)绾问褂肰erilog HDL在FPGA上進行圖像處理
FPGA學習-基于FPGA的圖像處理
FPGA圖像處理方法
FPGA圖像處理基礎(chǔ)----實現(xiàn)緩存卷積窗口

評論