各位工程師朋友,同學(xué)們大家好!我是本期“來實(shí)戰(zhàn)”項(xiàng)目《運(yùn)動(dòng)目標(biāo)追蹤系統(tǒng)》的執(zhí)行官。本項(xiàng)目由電路城發(fā)起,由ALINX贊助的黑金國產(chǎn)FPGA板卡Logos系列PGL22G學(xué)習(xí)板實(shí)現(xiàn)。
我是一個(gè)熱愛技術(shù)的在校學(xué)生。希望可以通過本次的項(xiàng)目來幫助更多的同學(xué),給予一個(gè)機(jī)會(huì)來了解什么是真正的實(shí)戰(zhàn)項(xiàng)目,也讓之前沒有競(jìng)賽經(jīng)驗(yàn)的朋友了解一下,競(jìng)賽對(duì)于我們學(xué)生來說并沒有那么遠(yuǎn)。幫助更多的電子專業(yè)的同學(xué)找到學(xué)習(xí)的方向,更順利的進(jìn)入這個(gè)行業(yè),為電子行業(yè)做出一份自己的貢獻(xiàn)。許多同學(xué)在學(xué)校期間不去做項(xiàng)目的原因并不是不愿意去做,而是沒有方向。其實(shí)大項(xiàng)目就可以通過競(jìng)賽來獲得,競(jìng)賽中的一些命題項(xiàng)目可以給予你很多靈感,有了方向之后,即使是個(gè)大項(xiàng)目,他也是由一個(gè)一個(gè)小部分組成的,一步一步完成一個(gè)個(gè)小項(xiàng)目,自己的大工程不久也就成功了。項(xiàng)目本身的意義可能是在做保護(hù)區(qū)的攝像頭,捕捉動(dòng)態(tài)視頻;也可以在監(jiān)控中做一些應(yīng)用。更重要的意義就是給廣大同學(xué)們一個(gè)學(xué)習(xí)視頻處理的機(jī)會(huì),讓想學(xué)而不知道怎么去學(xué)的同學(xué)一個(gè)模板。
很多在最初接觸FPGA的同學(xué)都有這個(gè)問題,甚至以為FPGA和單片機(jī)一樣下板子燒代碼。其實(shí)不是這樣的,F(xiàn)PGA不是單片機(jī),首先FPGA和單片機(jī)的區(qū)別,本質(zhì)上是軟件和硬件的區(qū)別,F(xiàn)PGA更偏向于硬件電路,而單片機(jī)更偏于軟件。單片機(jī)是一種微處理器,類似于電腦CPU的,它一般采用的是哈佛總線結(jié)構(gòu),或者馮諾依曼結(jié)構(gòu),對(duì)單片機(jī)的編程很大程度上要考慮到它的結(jié)構(gòu)和各個(gè)寄存器的作用,而FPGA 它的結(jié)構(gòu)是查找表結(jié)構(gòu),其程序不用去太考慮芯片的結(jié)構(gòu),要注意的是時(shí)序上問題,它的結(jié)構(gòu)比較復(fù)雜,功能也很強(qiáng)大,一般應(yīng)用在通信領(lǐng)域等比較高端的場(chǎng)合,單片機(jī)是一個(gè)微控制器,通過加載模塊軟件來實(shí)現(xiàn)某種功能,是成型的芯片;FPGA是用來設(shè)計(jì)芯片的芯片。FPGA由于是硬件電路,運(yùn)行速度直接取決于晶振速度,系統(tǒng)穩(wěn)定,特別適合高速接口電路。單片機(jī)由于是單線程,哪怕是常用的M3系列流水線也是單線程執(zhí)行,程序語句需要等待單片機(jī)周期才能執(zhí)行。單片機(jī)設(shè)計(jì)屬軟件范疇;它的硬件(單片機(jī)芯片)是固定的,通過軟件編程語言描述軟件指令在硬件芯片上的執(zhí)行;
FPGA開發(fā)的語言是Verilog HDL。HDL代表的就是硬件描述語言,描述就代表他并不是一個(gè)開發(fā)性的語言。相比C語言開發(fā),Verilog更像是你先設(shè)計(jì)好電路,再用Verilog描述出來你的設(shè)計(jì)。而對(duì)于一個(gè)完整的FPGA工程應(yīng)包含以下幾個(gè)步驟:算法實(shí)現(xiàn),模塊化,模塊的硬件電路設(shè)計(jì),硬件描述語言書寫,小模塊進(jìn)行仿真,總模塊的連接,總體工程的仿真,板級(jí)驗(yàn)證。下面我們就進(jìn)入正題......
項(xiàng)目設(shè)計(jì)
步驟一:FPGA硬件資源與算法設(shè)計(jì)
1.FPGA硬件資源介紹
首先感謝黑金ALINX提供的開發(fā)板對(duì)本項(xiàng)目的大力支持,期望以后能有更多的機(jī)會(huì)合作。對(duì)于黑金國產(chǎn)FPGA板卡Logos系列PGL22G學(xué)習(xí)板,它配備了以下資源:
系統(tǒng)邏輯部分由ov5640驅(qū)動(dòng)模塊、RGB轉(zhuǎn)Ycbcr模塊、存儲(chǔ)控制模塊、HDMI驅(qū)動(dòng)模塊、圖像處理模塊、追蹤控制模塊、sim900a驅(qū)動(dòng)模塊共同組成。由OV5640攝像頭采集圖像,經(jīng)過RGB轉(zhuǎn)YCbCr模塊完成顏色空間轉(zhuǎn)換,為了配合幀差法的數(shù)據(jù),將數(shù)據(jù)進(jìn)行掩碼然后經(jīng)由DDR3控制器模塊控制存入DDR3中,通過HDMI時(shí)序從DDR3中取出數(shù)據(jù),此時(shí)取出的每個(gè)16bit數(shù)據(jù)同時(shí)包含了相鄰兩幅圖像的灰度信息,高8位為第n幀圖像的某個(gè)像素點(diǎn)灰度值,低8位為第n+1幀圖像對(duì)應(yīng)像素點(diǎn)的灰度值。圖像處理模塊將取出的數(shù)據(jù)進(jìn)行預(yù)處理和幀差法計(jì)算得到運(yùn)動(dòng)目標(biāo)的位置信息,追蹤控制模塊根據(jù)運(yùn)動(dòng)目標(biāo)的位置相對(duì)于圖像中心的偏移通過控制舵機(jī)轉(zhuǎn)動(dòng)來調(diào)整OV5640攝像頭的方向完成追蹤。攝像頭使用黑金ALINX視頻套餐中的OV5640攝像頭;同套餐的還贈(zèng)送一個(gè)屏幕,也非常適合學(xué)習(xí)視頻處理的工程。舵機(jī)模塊是使用的SC90,來完成攝像頭的轉(zhuǎn)動(dòng)的,該模塊看上去很簡單,但是他和攝像頭一起組合使用就非常炫酷!
2.算法設(shè)計(jì)
(一)項(xiàng)目簡介與項(xiàng)目難點(diǎn)
首先FPGA的基礎(chǔ)操作,以及Verilog基礎(chǔ)語法就不再贅述。
項(xiàng)目簡介在前面也已經(jīng)講說,這里只放一個(gè)整體框圖來表現(xiàn)。這個(gè)框圖為了便于大家理解已經(jīng)進(jìn)行了簡化,大抵說白了就是將攝像頭采集到的數(shù)據(jù)存起來,再把圖像處理清晰,去除噪聲。最后識(shí)別出在動(dòng)的東西,把采集到的圖像放在顯示屏上,并標(biāo)明哪個(gè)部分是正在運(yùn)動(dòng)的。
項(xiàng)目的難點(diǎn):項(xiàng)目本身的難點(diǎn)在于驅(qū)動(dòng)起來攝像頭,一個(gè)類IIC協(xié)議接口的書寫,以及對(duì)攝像頭寄存器的配置。驅(qū)動(dòng)SDRAM/DDR,將采集到的數(shù)據(jù)寫進(jìn)存儲(chǔ)單元中。實(shí)現(xiàn)簡單的圖像處理算法來優(yōu)化采集到的圖像,識(shí)別物體的邊緣。最后抓捕再顯示出來,驅(qū)動(dòng)VGA或HDMI接口將數(shù)據(jù)傳輸至顯示屏上顯示出來。
(二)整體流程
首先上電之后對(duì)各個(gè)模塊的寄存器堆進(jìn)行配置,計(jì)數(shù)器進(jìn)行初始化。之后由OV5640攝像頭采集圖像,經(jīng)過RGB轉(zhuǎn)YCbCr模塊完成顏色空間轉(zhuǎn)換,為了配合幀差法的數(shù)據(jù),將數(shù)據(jù)進(jìn)行掩碼然后經(jīng)由DDR3控制器模塊控制存入DDR3中,通過HDMI時(shí)序從DDR3中取出數(shù)據(jù),此時(shí)取出的每個(gè)16bit數(shù)據(jù)同時(shí)包含了相鄰兩幅圖像的灰度信息,高8位為第n幀圖像的某個(gè)像素點(diǎn)灰度值,低8位為第n+1幀圖像對(duì)應(yīng)像素點(diǎn)的灰度值。圖像處理模塊將取出的數(shù)據(jù)進(jìn)行預(yù)處理和幀差法計(jì)算得到運(yùn)動(dòng)目標(biāo)的位置信息,追蹤控制模塊根據(jù)運(yùn)動(dòng)目標(biāo)的位置相對(duì)于圖像中心的偏移通過控制舵機(jī)轉(zhuǎn)動(dòng)來調(diào)整OV5640攝像頭的方向完成追蹤。
(三)算法基礎(chǔ)
由于我們做的是一個(gè)圖像,所以要對(duì)基礎(chǔ)的圖像算法進(jìn)行簡單學(xué)習(xí)。我們使用的算法主要有均值濾波,中值濾波,Sobel邊緣檢測(cè)及RGB轉(zhuǎn)YCbCr。
1.均值濾波與中值濾波
首先何謂濾波?圖像濾波,即在盡量保留圖像細(xì)節(jié)特征的條件下對(duì)目標(biāo)圖像的噪聲進(jìn)行抑制,是圖像預(yù)處理中不可缺少的操作,其處理效果的好壞將直接影響到后續(xù)圖像處理和分析的有效性和可靠性。消除圖像中的噪聲成分叫作圖像的平滑化或?yàn)V波操作。信號(hào)或圖像的能量大部分集中在幅度譜的低頻和中頻段是很常見的,而在較高頻段,感興趣的信息經(jīng)常被噪聲淹沒。因此一個(gè)能降低高頻成分幅度的濾波器就能夠減弱噪聲的影響。
圖像濾波的目的有兩個(gè):一是抽出對(duì)象的特征作為圖像識(shí)別的特征模式;另一個(gè)是為適應(yīng)圖像處理的要求,消除圖像數(shù)字化時(shí)所混入的噪聲。
而對(duì)濾波處理的要求也有兩條:一是不能損壞圖像的輪廓及邊緣等重要信息;二是使圖像清晰視覺效果好。
而我們今天面對(duì)的主要為椒鹽噪聲,椒鹽噪聲是數(shù)字圖像的一個(gè)常見噪聲,就是在圖像上隨機(jī)出現(xiàn)黑色白色的像素。椒鹽噪聲是一種因?yàn)樾盘?hào)脈沖強(qiáng)度引起的噪聲。RGB圖像上,每一個(gè)像素點(diǎn)都是三段數(shù)字,分別對(duì)應(yīng)R,G,B三種顏色在灰白圖像中,椒鹽噪聲若果是黑點(diǎn)的話,就是指這一點(diǎn)的像素值明顯低于周圍像素點(diǎn)的值,而白點(diǎn)就是明顯高于周圍的像素值。而對(duì)于這種噪聲,只要讓他與周圍的值相持平皆可以消除。中值濾波和均值濾波就是根據(jù)這種方法來消除,每個(gè)像素點(diǎn)周圍都有8個(gè)像素,如果使用周圍8個(gè)像素的平均值來代替這個(gè)像素點(diǎn)的像素值,就是均值濾波的基本方法;如果使用8個(gè)像素點(diǎn)的中值來代替這個(gè)像素點(diǎn)的像素值,就是中值濾波的基本方法。
要做這個(gè)處理,核心就是要搭建3x3矩陣。如何搭建3x3矩陣呢?我們有三種方法:
1.通過2個(gè)或者3個(gè)RAM的存儲(chǔ)來實(shí)現(xiàn)3X3像素窗口;
2.通過2個(gè)或者3個(gè)FIFO的存儲(chǔ)來實(shí)現(xiàn)3X3像素窗口;
3.通過2行或者3行Shift_RAM的存儲(chǔ)來實(shí)現(xiàn)3X3像素窗口;
以shift_ram為例,shift_ram就是移位寄存器,如圖:
左方數(shù)據(jù)輸入,N是每行的像素點(diǎn)數(shù),每行輸出的就是要的矩陣。
2.Sobel邊緣檢測(cè)
在圖像處理中,邊緣是一幅圖像中最基本的特征,每幅圖像的邊緣包含了用于識(shí)別的有用信息,是圖像分析和模式識(shí)別的主要特征提取手段。在模式識(shí)別或進(jìn)行其他的中,在很多方法來識(shí)別,其中一種方法就是識(shí)別出來圖像邊緣。在圖像中,一幅圖像的“臨界”表示為圖像上亮度顯著變化的地方,邊緣指的是一個(gè)區(qū)域的結(jié)束,也是另一個(gè)區(qū)域的開始?!斑吘夵c(diǎn)”指的是圖像中具有坐標(biāo)[x,y],且處在強(qiáng)度顯著變化的位置上的點(diǎn)。常用的邊緣檢測(cè)算法大多是以原始圖像灰度值為基礎(chǔ),通過考察圖像的每個(gè)像素的某個(gè)鄰域內(nèi) 灰度的變化,利用邊緣一階或二階導(dǎo)數(shù)的規(guī)律來檢測(cè)邊緣。下圖左邊為原始的黑白灰度的圖像,通過邊緣檢測(cè)算法后變成了右邊的圖像。
sobel 是一個(gè)梯度的計(jì)算,如下圖所示,是 x 和 y 方向的 3x3 窗口的卷積。
使用算式
來計(jì)算目標(biāo)點(diǎn)的卷積值:
這里注意一定是絕對(duì)值,要大于0。
計(jì)算完成以后,要進(jìn)行簡單的二值化處理,將 sobel 值和閾值對(duì)比,產(chǎn)生黑白的二值化圖像。將大于閾值設(shè)置為與背景色相反的圖像。
利用此即可確定圖像中各物體的邊緣。
3. RGB轉(zhuǎn)YCbCr
攝像頭采集的RGB565格式數(shù)據(jù)為16比特,SDRAM不能同時(shí)將兩幀RGB圖像存儲(chǔ)。因此在存入SDRAM前先將RGB格式轉(zhuǎn)換為YCbCr格式并提取亮度分量作為灰度圖像。YCbCr是通過有序的三元組來表示的,三元由Y(Luminance)、Cb(Chrominance-Blue)和Cr(Chrominance-Red)組成,其中Y表示顏色的明亮度和濃度,而Cb和Cr則分別表示顏色的藍(lán)色濃度偏移量和紅色濃度偏移量。人的肉眼對(duì)由YCbCr色彩空間編碼的視頻中的Y分量更敏感,而Cb和Cr的微小變化不會(huì)引起視覺上的不同,根據(jù)該原理,通過對(duì)Cb和Cr進(jìn)行子采樣來減小圖像的數(shù)據(jù)量,使得圖像對(duì)存儲(chǔ)需求和傳輸帶寬的要求大大降低,從而達(dá)到在完成圖像壓縮的同時(shí)也保證了視覺上幾乎沒有損失的效果,進(jìn)而使得圖像的傳輸速度更快,存儲(chǔ)更加方便。我們要的到灰度圖像,首先要將采集到的彩色圖像轉(zhuǎn)化為YCbCr。其轉(zhuǎn)換公式如下:
……
-
FPGA
+關(guān)注
關(guān)注
1645文章
22050瀏覽量
618511 -
控制器
+關(guān)注
關(guān)注
114文章
17113瀏覽量
184313 -
控制模塊
+關(guān)注
關(guān)注
2文章
138瀏覽量
19301
原文標(biāo)題:《來實(shí)戰(zhàn)》第4期:國內(nèi)牛人用FPGA打造運(yùn)動(dòng)目標(biāo)追蹤系統(tǒng)(持續(xù)更新中......)
文章出處:【微信號(hào):cirmall,微信公眾號(hào):電路設(shè)計(jì)技能】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
基于FPGA的壓縮算法加速實(shí)現(xiàn)

FPGA應(yīng)用于人工智能的趨勢(shì)
TMS320C6413硬件設(shè)計(jì)人員資源指南

TMS320C6713硬件設(shè)計(jì)人員資源指南

TMS320DM643硬件設(shè)計(jì)人員資源指南

TMS320VC5503硬件設(shè)計(jì)人員資源指南

TMS320C6415硬件設(shè)計(jì)人員資源指南

TMS320C6418硬件設(shè)計(jì)人員資源指南

TMS320VC5501硬件設(shè)計(jì)人員資源指南

TMS320C6410硬件設(shè)計(jì)人員資源指南

TMS320C6414硬件設(shè)計(jì)人員資源指南

評(píng)論