<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

請問如何FPGA上使用SVM進行圖像處理呢?

OpenFPGA ? 來源:OpenFPGA ? 2024-03-18 11:28 ? 次閱讀

SVM簡介

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

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

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

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

圖像處理

卷積

兩個函數的卷積是一種重要的數學運算,在信號處理中廣泛應用。在計算機圖形和圖像處理領域,我們通常使用離散函數(例如圖像)并應用離散形式的卷積來消除高頻噪聲、銳化細節或檢測邊緣。

卷積是對兩個信號 f 和 g 的數學運算,定義為:

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

在圖像領域,我們可以將卷積想象為單個像素與其相鄰像素之間的關系。這種關系主要應用搜索顏色變化、亮度差異和像素周期性等獨特特征檢測。

下圖說明了使用小型 3 x 3 內核的卷積濾波器。濾波器被定義為一個矩陣,其中中心項對中心像素進行加權,其他項定義相鄰像素的權重。我們也可以說 3×3 核的半徑為 1,因為在卷積過程中只考慮“一環”鄰域。在圖像邊界要定義卷積的行為,其中內核映射到圖像外部未定義的值。

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

使用 3 x 3 窗口和 3 x 3 內核的卷積運算可以定義如下:

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

for(inti=0;i

為了對整個圖像進行卷積運算,可以應用滑動窗口技術。從第一個像素開始,每 8 個臨近像素被分組為一個方形窗口,窗口內的輸入像素與內核進行卷積,產生一個像素值放置在輸出圖像中。重復此步驟直到圖像結束。

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

Sobel-索貝爾

邊緣檢測是檢測灰度圖像中不連續性的最常見方法。邊緣被定義為位于兩個區域之間的特定邊界上的一組連接的像素。

如果輸入圖像是彩色圖像,則在應用卷積運算之前,將其轉換為灰度圖像。

假設每個像素都使用 32 位無符號整數表示,則 RGB 轉換為灰度的代碼如下所示:

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

運行后,測試圖像將如下所示:

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

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

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

通過前面的卷積函數,我們可以使用以下代碼計算輸出圖像:

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

其中窗口定義為 3 x 3 滑動窗口,內核是 Sobel 算子使用的內核:

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

卷積計算后得到的圖像如下:

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

正如所看到的,垂直和水平細節得到增強并且更易于觀察。盡管它有幫助,但我們需要一個更獨特的特征圖像,僅代表邊緣。

下一步將組合這兩個圖像并獲得雙向變化圖。我們可以通過計算每個像素值的大小或強度以及當前像素與邊緣線中的另一個像素鏈接的方向或角度來做到這一點。

在圖像中的每個點,可以使用以下方法組合所得的近似值來給出幅度:

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

以及使用的角度:

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

squareroot 和 atan2 函數都已在 HLS 命名空間中實現:

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

結果是:

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

我們已經得到邊緣更加集中的圖像。盡管如此,在多種形式的領域,邊緣會變得更寬。我們需要使用一種稱為非極大值抑制的技術來抑制這些錯誤邊緣:

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

q=r=255;

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

return0;
}

現在邊緣更薄、更簡潔。

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

實施

如前所述,輸入圖像以數據流的形式逐像素輸入。為了應用卷積運算,我們需要將數據打包在 3 x 3 窗口下??梢允褂镁哂袃蓚€緩沖區的架構來實現這一點,其中元素數量等于寬度,如果我們的輸入圖像:

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

這里將有兩個輔助函數用于移動行緩沖區和滑動窗口:

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 函數(代碼見附件)。

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

驗證 HLS IP 的另一種方法是直接在 FPGA 上進行驗證。

第一步是創建block design并將合成的 Sobel IP 添加到存儲庫:

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

添加已實現的 IP,其中一個 DMA 向其提供數據,另一個讀取輸出:

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

生成比特流后就可以驗證功能。

生成的圖像應與模擬圖像相似。

現在我們需要實現一個直接從相機輸入的架構。

第一個組件是 Znyq 處理系統和用于配置相機接口的 i2c 控制器

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

在圖像流方面,需要一個 MIPI 控制器和一個 Demosaic IP 將流轉換為 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



審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1604

    文章

    21341

    瀏覽量

    594125
  • 圖像處理
    +關注

    關注

    26

    文章

    1234

    瀏覽量

    55961
  • 計算機
    +關注

    關注

    19

    文章

    6680

    瀏覽量

    84968
  • SVM
    SVM
    +關注

    關注

    0

    文章

    154

    瀏覽量

    32206
  • 面部識別
    +關注

    關注

    1

    文章

    373

    瀏覽量

    26509

原文標題:FPGA 上使用 SVM 進行圖像處理

文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    關于fpga圖像處理

    各位大蝦好,我現在正在做關于fpga的課題。想問問大家用fpga圖像,圖片以怎么的方式輸入fpga進行
    發表于 04-12 11:00

    利用FPGA進行圖像處理,實現特效顯示,事先我怎么設定模塊?

    利用FPGA進行圖像處理,實現特效顯示。請問事先我怎么設定模塊?求幫忙說說采集
    發表于 10-10 00:21

    利用FPGA進行圖像處理,實現“凍結”的特效是什么意思?

    利用FPGA進行圖像處理,實現“凍結”的特效是什么意思?什么是凍結?大神快來幫忙
    發表于 10-14 00:30

    CPU vs FPGA?圖像處理誰更“應景”?

    圖像發送回CPU以進行更高級的操作,例如光學字符識別(OCR)或模式匹配。在某些情況下,您可以在FPGA實現所有的處理步驟,并只將
    發表于 08-03 11:13

    圖像處理FPGA 設計基本方法和代碼

    圖像處理FPGA 設計基本方法:1.陣列結構結合流水線處理設計例如RGB圖像,包括三組數據,處理
    發表于 01-04 13:59

    基于FPGA圖像平滑處理

    數據流,FPGA通過對其同步信號,如時鐘、行頻和場頻進行檢測,從而從數據總線上實時的采集圖像數據。MT9V034攝像頭默認初始化數據就能輸出正常的視頻流,因此FPGA中實際
    發表于 07-05 13:51

    如何在ML403 FPGA開發板實現圖像處理?

    我正在嘗試在ML403 FPGA開發板實現圖像處理。我知道如何進行圖像
    發表于 11-07 09:20

    薦讀:FPGA設計經驗之圖像處理

    基本就只能用FPGA。例如在一些分選設備中圖像處理基本用的都是FPGA,因為在其中相機從看到物料圖像
    發表于 06-08 15:55

    基于DSP和FPGA的通用圖像處理平臺設計

    設計一種基于DSP和FPGA架構的通用圖像處理平臺,運用FPGA實現微處理器接口設計,并對圖像
    發表于 12-25 17:06 ?61次下載

    基于DSP和FPGA的通用圖像處理平臺設計

    基于DSP和FPGA的通用圖像處理平臺設計 摘要:設計一種基于DSP和FPGA架構的通用圖像處理
    發表于 02-01 11:10 ?1407次閱讀
    基于DSP和<b class='flag-5'>FPGA</b>的通用<b class='flag-5'>圖像</b><b class='flag-5'>處理</b>平臺設計

    FPGA圖像處理

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

    基于SVM與Adaboost的圖像檢索應用梁競敏

    基于SVM與Adaboost的圖像檢索應用_梁競敏
    發表于 03-17 08:00 ?2次下載

    FPGA進行圖像處理及其示例

    借助FPGA技術和NI視覺開發模塊,您可以對從相機采集的圖像進行高速現場可編程門陣列(FPGA)處理。
    發表于 11-17 06:00 ?1.8w次閱讀

    略談FPGA圖像處理

    FPGA圖像處理之路,從此開始,接下來,讓我們把時間交給“圖像處理”。一休哥在動筆之前,一直在猶豫,反復思考著一個問題,這個問題一直困擾著我
    發表于 05-09 17:05 ?3996次閱讀

    15個使用FPGA進行圖像處理的相關論文資料免費下載

    本文檔的主要內容詳細介紹的是15個使用FPGA進行圖像處理的相關論文資料免費下載主要內容包括了:圖像調焦算法研究及
    發表于 12-25 08:00 ?39次下載
    15個使用<b class='flag-5'>FPGA</b><b class='flag-5'>進行</b><b class='flag-5'>圖像</b><b class='flag-5'>處理</b>的相關論文資料免費下載
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>