0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

請(qǐng)問(wèn)如何FPGA上使用SVM進(jìn)行圖像處理呢?

OpenFPGA ? 來(lái)源:OpenFPGA ? 2024-03-18 11:28 ? 次閱讀

SVM簡(jiǎn)介

面部識(shí)別是一個(gè)經(jīng)常討論的計(jì)算機(jī)科學(xué)話題,并且由于計(jì)算機(jī)處理能力的指數(shù)級(jí)增長(zhǎng)而成為人們高度關(guān)注的話題。面部識(shí)別在機(jī)器人、生物安全和汽車工業(yè)等許多領(lǐng)域都有廣泛的應(yīng)用,涉及對(duì)輸入圖像應(yīng)用數(shù)學(xué)算法,提取不同的特征,表明所提供的圖片中是否存在人臉。方向梯度直方圖(HOG)是一種傳統(tǒng)算法,用于提取圖像特征,例如像素方向,并且可以與線性支持向量機(jī)(SVM)一起使用來(lái)將輸入圖像識(shí)別為人臉或不是人臉。

894d4d2c-e4c6-11ee-a297-92fbcf53809c.jpg

我們將使用下面圖像作為參考和測(cè)試:

895c16ea-e4c6-11ee-a297-92fbcf53809c.png

圖像處理

卷積

兩個(gè)函數(shù)的卷積是一種重要的數(shù)學(xué)運(yùn)算,在信號(hào)處理中廣泛應(yīng)用。在計(jì)算機(jī)圖形和圖像處理領(lǐng)域,我們通常使用離散函數(shù)(例如圖像)并應(yīng)用離散形式的卷積來(lái)消除高頻噪聲、銳化細(xì)節(jié)或檢測(cè)邊緣。

卷積是對(duì)兩個(gè)信號(hào) f 和 g 的數(shù)學(xué)運(yùn)算,定義為:

898fa5d2-e4c6-11ee-a297-92fbcf53809c.png

在圖像領(lǐng)域,我們可以將卷積想象為單個(gè)像素與其相鄰像素之間的關(guān)系。這種關(guān)系主要應(yīng)用搜索顏色變化、亮度差異和像素周期性等獨(dú)特特征檢測(cè)。

下圖說(shuō)明了使用小型 3 x 3 內(nèi)核的卷積濾波器。濾波器被定義為一個(gè)矩陣,其中中心項(xiàng)對(duì)中心像素進(jìn)行加權(quán),其他項(xiàng)定義相鄰像素的權(quán)重。我們也可以說(shuō) 3×3 核的半徑為 1,因?yàn)樵诰矸e過(guò)程中只考慮“一環(huán)”鄰域。在圖像邊界要定義卷積的行為,其中內(nèi)核映射到圖像外部未定義的值。

899a19b8-e4c6-11ee-a297-92fbcf53809c.png

使用 3 x 3 窗口和 3 x 3 內(nèi)核的卷積運(yùn)算可以定義如下:

staticintconvolve(unsignedintwindow[3][3],intkernel[3][3])
{
intresult=0;

for(inti=0;i

為了對(duì)整個(gè)圖像進(jìn)行卷積運(yùn)算,可以應(yīng)用滑動(dòng)窗口技術(shù)。從第一個(gè)像素開(kāi)始,每 8 個(gè)臨近像素被分組為一個(gè)方形窗口,窗口內(nèi)的輸入像素與內(nèi)核進(jìn)行卷積,產(chǎn)生一個(gè)像素值放置在輸出圖像中。重復(fù)此步驟直到圖像結(jié)束。

899e7562-e4c6-11ee-a297-92fbcf53809c.png

Sobel-索貝爾

邊緣檢測(cè)是檢測(cè)灰度圖像中不連續(xù)性的最常見(jiàn)方法。邊緣被定義為位于兩個(gè)區(qū)域之間的特定邊界上的一組連接的像素。

如果輸入圖像是彩色圖像,則在應(yīng)用卷積運(yùn)算之前,將其轉(zhuǎn)換為灰度圖像。

假設(shè)每個(gè)像素都使用 32 位無(wú)符號(hào)整數(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);
}

運(yùn)行后,測(cè)試圖像將如下所示:

89a995a0-e4c6-11ee-a297-92fbcf53809c.png

Sobel 算子是邊緣檢測(cè)中最常用的算子之一。Sobel 算子使用兩個(gè) 3×3 內(nèi)核與原始圖像進(jìn)行卷積來(lái)計(jì)算導(dǎo)數(shù)的近似值 - 一個(gè)用于水平變化,另一個(gè)用于垂直變化。如果我們將 A 定義為源圖像,G x和 G y是兩個(gè)圖像,每個(gè)點(diǎn)分別包含水平和垂直導(dǎo)數(shù)近似值,則計(jì)算如下:

89c1dfc0-e4c6-11ee-a297-92fbcf53809c.png

通過(guò)前面的卷積函數(shù),我們可以使用以下代碼計(jì)算輸出圖像:

intdx=convolve(window,kernel_x);
intdy=convolve(window,kernel_y);

其中窗口定義為 3 x 3 滑動(dòng)窗口,內(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}
};

卷積計(jì)算后得到的圖像如下:

89c5be60-e4c6-11ee-a297-92fbcf53809c.png

正如所看到的,垂直和水平細(xì)節(jié)得到增強(qiáng)并且更易于觀察。盡管它有幫助,但我們需要一個(gè)更獨(dú)特的特征圖像,僅代表邊緣。

下一步將組合這兩個(gè)圖像并獲得雙向變化圖。我們可以通過(guò)計(jì)算每個(gè)像素值的大小或強(qiáng)度以及當(dāng)前像素與邊緣線中的另一個(gè)像素鏈接的方向或角度來(lái)做到這一點(diǎn)。

在圖像中的每個(gè)點(diǎn),可以使用以下方法組合所得的近似值來(lái)給出幅度:

89e80ef2-e4c6-11ee-a297-92fbcf53809c.png

以及使用的角度:

89f7af06-e4c6-11ee-a297-92fbcf53809c.png

squareroot 和 atan2 函數(shù)都已在 HLS 命名空間中實(shí)現(xiàn):

unsignedintmagnitude=hls::sqrt(dx*dx+dy*dy);
intangle=hls::atan2(dx,dy);

結(jié)果是:

8a006ff6-e4c6-11ee-a297-92fbcf53809c.png 幅度 8a15781a-e4c6-11ee-a297-92fbcf53809c.png 角度

我們已經(jīng)得到邊緣更加集中的圖像。盡管如此,在多種形式的領(lǐng)域,邊緣會(huì)變得更寬。我們需要使用一種稱為非極大值抑制的技術(shù)來(lái)抑制這些錯(cuò)誤邊緣:

unsignedintnms(unsignedintmag[3][3],intang){
unsignedintq,r;

q=r=255;

if((0<=?ang?=q&&mag[1][1]>=r)
returnmag[1][1];

return0;
}

現(xiàn)在邊緣更薄、更簡(jiǎn)潔。

8a322686-e4c6-11ee-a297-92fbcf53809c.png

實(shí)施

如前所述,輸入圖像以數(shù)據(jù)流的形式逐像素輸入。為了應(yīng)用卷積運(yùn)算,我們需要將數(shù)據(jù)打包在 3 x 3 窗口下??梢允褂镁哂袃蓚€(gè)緩沖區(qū)的架構(gòu)來(lái)實(shí)現(xiàn)這一點(diǎn),其中元素?cái)?shù)量等于寬度,如果我們的輸入圖像:

8a36272c-e4c6-11ee-a297-92fbcf53809c.png

這里將有兩個(gè)輔助函數(shù)用于移動(dòng)行緩沖區(qū)和滑動(dòng)窗口:

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;
}

最后,我們可以將整個(gè)過(guò)程打包成一個(gè) HLS 函數(shù)(代碼見(jiàn)附件)。

得到了代碼后,還應(yīng)該對(duì)其進(jìn)行測(cè)試。GIMP (https://www.oschina.net/p/gimp?hmsr=aladdin1e1)有一個(gè)非??岬墓δ?,可以直接將圖像導(dǎo)出為頭文件。假設(shè)我們將測(cè)試圖像導(dǎo)出到文件 image.h 下,就可以利用如下代碼實(shí)現(xiàn)我們要測(cè)試的功能(代碼見(jiàn)文末)。

驗(yàn)證 HLS IP 的另一種方法是直接在 FPGA 上進(jìn)行驗(yàn)證。

第一步是創(chuàng)建block design并將合成的 Sobel IP 添加到存儲(chǔ)庫(kù):

8a3e1c8e-e4c6-11ee-a297-92fbcf53809c.png

添加已實(shí)現(xiàn)的 IP,其中一個(gè) DMA 向其提供數(shù)據(jù),另一個(gè)讀取輸出:

8a56565a-e4c6-11ee-a297-92fbcf53809c.png8a618cbe-e4c6-11ee-a297-92fbcf53809c.png8a7abb6c-e4c6-11ee-a297-92fbcf53809c.png

生成比特流后就可以驗(yàn)證功能。

生成的圖像應(yīng)與模擬圖像相似。

現(xiàn)在我們需要實(shí)現(xiàn)一個(gè)直接從相機(jī)輸入的架構(gòu)。

第一個(gè)組件是 Znyq 處理系統(tǒng)和用于配置相機(jī)接口的 i2c 控制器

8a92dc2e-e4c6-11ee-a297-92fbcf53809c.png8aac5c62-e4c6-11ee-a297-92fbcf53809c.png8abfef5c-e4c6-11ee-a297-92fbcf53809c.png

在圖像流方面,需要一個(gè) MIPI 控制器和一個(gè) Demosaic IP 將流轉(zhuǎn)換為 RGB24:

8ad6161a-e4c6-11ee-a297-92fbcf53809c.png8ae1552a-e4c6-11ee-a297-92fbcf53809c.png8aecac36-e4c6-11ee-a297-92fbcf53809c.png

最后添加我們的圖像處理IP和VDMA:

8b007590-e4c6-11ee-a297-92fbcf53809c.png8b04c14a-e4c6-11ee-a297-92fbcf53809c.png



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1625

    文章

    21624

    瀏覽量

    601245
  • 圖像處理
    +關(guān)注

    關(guān)注

    27

    文章

    1275

    瀏覽量

    56577
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7371

    瀏覽量

    87633
  • SVM
    SVM
    +關(guān)注

    關(guān)注

    0

    文章

    154

    瀏覽量

    32377
  • 面部識(shí)別
    +關(guān)注

    關(guān)注

    1

    文章

    375

    瀏覽量

    26609

原文標(biāo)題:FPGA 上使用 SVM 進(jìn)行圖像處理

文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FPGA設(shè)計(jì)經(jīng)驗(yàn)之圖像處理

    優(yōu)勢(shì)最關(guān)鍵的就是:FPGA進(jìn)行實(shí)時(shí)流水線運(yùn)算,能達(dá)到最高的實(shí)時(shí)性。因此在一些對(duì)實(shí)時(shí)性要求非常高的應(yīng)用領(lǐng)域,做圖像處理基本就只能用FPGA。
    發(fā)表于 06-12 16:26

    關(guān)于fpga圖像處理

    各位大蝦好,我現(xiàn)在正在做關(guān)于fpga的課題。想問(wèn)問(wèn)大家用fpga圖像,圖片以怎么的方式輸入fpga進(jìn)行
    發(fā)表于 04-12 11:00

    利用FPGA進(jìn)行圖像處理,實(shí)現(xiàn)特效顯示,事先我怎么設(shè)定模塊?

    利用FPGA進(jìn)行圖像處理,實(shí)現(xiàn)特效顯示。請(qǐng)問(wèn)事先我怎么設(shè)定模塊?求幫忙說(shuō)說(shuō)采集
    發(fā)表于 10-10 00:21

    薦讀:FPGA設(shè)計(jì)經(jīng)驗(yàn)之圖像處理

    基本就只能用FPGA。例如在一些分選設(shè)備中圖像處理基本用的都是FPGA,因?yàn)樵谄渲邢鄼C(jī)從看到物料圖像
    發(fā)表于 06-08 15:55

    基于DSP和FPGA的通用圖像處理平臺(tái)設(shè)計(jì)

    設(shè)計(jì)一種基于DSP和FPGA架構(gòu)的通用圖像處理平臺(tái),運(yùn)用FPGA實(shí)現(xiàn)微處理器接口設(shè)計(jì),并對(duì)圖像數(shù)
    發(fā)表于 12-25 17:06 ?61次下載

    基于DSP和FPGA的通用圖像處理平臺(tái)設(shè)計(jì)

    基于DSP和FPGA的通用圖像處理平臺(tái)設(shè)計(jì) 摘要:設(shè)計(jì)一種基于DSP和FPGA架構(gòu)的通用圖像處理
    發(fā)表于 02-01 11:10 ?1485次閱讀
    基于DSP和<b class='flag-5'>FPGA</b>的通用<b class='flag-5'>圖像</b><b class='flag-5'>處理</b>平臺(tái)設(shè)計(jì)

    FPGA圖像處理

    FPGA圖像處理
    發(fā)表于 12-14 22:29 ?19次下載

    FPGA進(jìn)行圖像處理及其示例

    借助FPGA技術(shù)和NI視覺(jué)開(kāi)發(fā)模塊,您可以對(duì)從相機(jī)采集的圖像進(jìn)行高速現(xiàn)場(chǎng)可編程門陣列(FPGA)處理。
    發(fā)表于 11-17 06:00 ?1.9w次閱讀

    關(guān)于利用FPGA圖像處理的相關(guān)知識(shí)盤點(diǎn)

    FPGA圖像處理最關(guān)鍵的一點(diǎn)優(yōu)勢(shì)就是:FPGA進(jìn)行實(shí)時(shí)流水線運(yùn)算,能達(dá)到最高的實(shí)時(shí)性。因此在一些對(duì)實(shí)時(shí)性要求非常高的應(yīng)用領(lǐng)域,做
    發(fā)表于 02-14 14:33 ?1301次閱讀

    FPGA進(jìn)行圖像處理的前景廣闊 應(yīng)用將會(huì)越來(lái)越大

    FPGA圖像處理最關(guān)鍵的一點(diǎn)優(yōu)勢(shì)就是:FPGA進(jìn)行實(shí)時(shí)流水線運(yùn)算,能達(dá)到最高的實(shí)時(shí)性。因此在一些對(duì)實(shí)時(shí)性要求非常高的應(yīng)用領(lǐng)域,做
    發(fā)表于 03-20 16:28 ?2319次閱讀

    FPGA圖像處理關(guān)鍵優(yōu)勢(shì)是:能進(jìn)行實(shí)時(shí)流水線運(yùn)算

    圖像處理基本就只能用FPGA。例如在一些分選設(shè)備中圖像處理基本用的都是
    的頭像 發(fā)表于 07-19 09:47 ?8576次閱讀

    FPGA圖像處理方法

    圖像在采集和傳輸?shù)倪^(guò)程中,通常會(huì)產(chǎn)生噪聲,使圖像質(zhì)量降低,影響后續(xù)處理。因此須對(duì)圖像進(jìn)行一些圖像
    的頭像 發(fā)表于 12-25 14:15 ?3385次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>圖像</b><b class='flag-5'>處理</b>方法

    教你們?nèi)绾问褂肰erilog HDL在FPGA進(jìn)行圖像處理

    FPGA項(xiàng)目旨在詳細(xì)展示如何使用Verilog處理圖像,從Verilog中讀取輸入位圖圖像(.bmp),處理并將
    的頭像 發(fā)表于 09-23 16:17 ?4289次閱讀

    FPGA學(xué)習(xí)-基于FPGA圖像處理

    圖像處理系統(tǒng)設(shè)計(jì)注意點(diǎn): 1.將算法開(kāi)發(fā)和 FPGA 實(shí)現(xiàn)分離 用軟件的圖像處理環(huán)境可以使用大批量的圖像
    的頭像 發(fā)表于 02-15 16:35 ?1206次閱讀

    FPGA圖像處理方法

    圖像在采集和傳輸?shù)倪^(guò)程中,通常會(huì)產(chǎn)生噪聲,使圖像質(zhì)量降低,影響后續(xù)處理。因此須對(duì)圖像進(jìn)行一些圖像
    的頭像 發(fā)表于 12-02 13:15 ?1027次閱讀