當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]此項(xiàng)目旨在對(duì)一個(gè)目標(biāo)捕獲系統(tǒng)的圖像處理算法進(jìn)行嚴(yán)格的硬件驗(yàn)證.我們將用分別用硬件設(shè)計(jì)和多核軟件設(shè)計(jì)來(lái)分別實(shí)現(xiàn)這個(gè)算法,并比較這兩種實(shí)現(xiàn)方式.在創(chuàng)建多核軟件設(shè)計(jì)的過(guò)程中我們還將對(duì)OpenFire軟核進(jìn)行改進(jìn)以搭建起這個(gè)多核網(wǎng)絡(luò)。

摘要

此項(xiàng)目旨在對(duì)一個(gè)目標(biāo)捕獲系統(tǒng)的圖像處理算法進(jìn)行嚴(yán)格的硬件驗(yàn)證.我們將用分別用硬件設(shè)計(jì)和多核軟件設(shè)計(jì)來(lái)分別實(shí)現(xiàn)這個(gè)算法,并比較這兩種實(shí)現(xiàn)方式.在創(chuàng)建多核軟件設(shè)計(jì)的過(guò)程中我們還將對(duì)OpenFire軟核進(jìn)行改進(jìn)以搭建起這個(gè)多核網(wǎng)絡(luò).

這個(gè)目標(biāo)捕獲系統(tǒng)的圖像處理算法的硬件實(shí)現(xiàn)方式和多核軟件實(shí)現(xiàn)方式將在一個(gè)基于FPGA試驗(yàn)板上進(jìn)行比較.以此證明通過(guò)合理配置和編程多核軟件實(shí)現(xiàn)同樣很容易達(dá)到和硬件實(shí)現(xiàn)一樣的低功耗性能,并只有非常低的面積消耗.

引言

隨著現(xiàn)代高速處理器的迅猛發(fā)展,圖像處理技術(shù)也日益成熟。其中,移動(dòng)目標(biāo)的視頻檢測(cè)與跟蹤是圖像處理、分析應(yīng)用的一個(gè)重要領(lǐng)域,是當(dāng)前相關(guān)領(lǐng)域的研究前沿。移動(dòng)目標(biāo)視頻檢測(cè)與跟蹤技術(shù),在機(jī)器人視覺(jué)、交通監(jiān)測(cè)、可視預(yù)警、機(jī)器導(dǎo)航等民用領(lǐng)域有著廣泛的應(yīng)用.基于FPGA為核心器件構(gòu)成的視頻識(shí)別和跟蹤裝置,實(shí)現(xiàn)圖像跟蹤各項(xiàng)功能。此項(xiàng)目提出的跟蹤算法與設(shè)計(jì)的跟蹤裝置可在一定程度上解決視頻跟蹤精度低、處理速度慢的問(wèn)題,同時(shí)本視頻跟蹤裝置也可作為進(jìn)一步研究圖像處理與跟蹤控制的平臺(tái)。該系統(tǒng)體積小,靈活性高,易于升級(jí),可應(yīng)用于無(wú)人值守的智能監(jiān)控系統(tǒng),如銀行,金庫(kù),倉(cāng)庫(kù)等重地。當(dāng)發(fā)現(xiàn)異常情況出現(xiàn)時(shí),該系統(tǒng)能夠自動(dòng)報(bào)警或采取其它相應(yīng)的措施,從而更有效、可靠地實(shí)現(xiàn)了安全防范,同時(shí)也在很大程度上減少了監(jiān)視人員的工作量和疲勞度,大大提高了工作效率。

此項(xiàng)目旨在對(duì)一個(gè)目標(biāo)捕獲系統(tǒng)的圖像處理算法進(jìn)行嚴(yán)格的硬件驗(yàn)證.我們將用分別用硬件設(shè)計(jì)和多核軟件設(shè)計(jì)來(lái)分別實(shí)現(xiàn)這個(gè)算法,并比較這兩種實(shí)現(xiàn)方式.在創(chuàng)建多核軟件設(shè)計(jì)的過(guò)程中我們還將對(duì)OpenFire軟核進(jìn)行改進(jìn)以搭建起這個(gè)多核網(wǎng)絡(luò).

這個(gè)目標(biāo)捕獲系統(tǒng)的圖像處理算法的硬件實(shí)現(xiàn)方式和多核軟件實(shí)現(xiàn)方式將在一個(gè)基于FPGA試驗(yàn)板上進(jìn)行比較.以此證明通過(guò)合理配置和編程多核軟件實(shí)現(xiàn)同樣很容易達(dá)到和硬件實(shí)現(xiàn)一樣的低功耗性能,并只有非常低的面積消耗.


目標(biāo)捕獲系統(tǒng)流程及系統(tǒng)架構(gòu)

圖一 目標(biāo)捕獲系統(tǒng)流程圖

圖二 本項(xiàng)目系統(tǒng)架構(gòu)圖

FPGA的實(shí)現(xiàn)

1 算法簡(jiǎn)介

(1)背景差分法算法背景差分[6]是利用當(dāng)前圖像與背景圖像差分來(lái)檢測(cè)出運(yùn)動(dòng)區(qū)域的一種技術(shù),一般能提供最完全的特征數(shù)據(jù),但對(duì)于動(dòng)態(tài)場(chǎng)景的變化,如光照等事件的干擾特別敏感??紤]到攝像機(jī)移動(dòng)緩慢,背景圖像變化比較遲緩,而運(yùn)動(dòng)對(duì)象相對(duì)于背景變化較快,這樣相對(duì)于變化較慢的背景圖像來(lái)說(shuō),可把運(yùn)動(dòng)對(duì)象看作是一個(gè)對(duì)背景圖像的隨機(jī)擾動(dòng)。針對(duì)本裝置的設(shè)計(jì)要求,我們應(yīng)用Kalman濾波器[4]在零均值白噪聲的退化公式即漸消記憶遞歸最小二乘法,來(lái)更新和重建背景圖像,得到時(shí)域漸消遞歸最小二乘法的遞歸式

(2) 顏色濾波去陰影算法

如果圖像中具有運(yùn)動(dòng)陰影和分割碎塊,分割所得的圖像往往與實(shí)際目標(biāo)不符,產(chǎn)生欠分割或過(guò)分割的現(xiàn)象。由于陰影象素的灰度值在一個(gè)局部領(lǐng)域中變化不是很大,所以顏色濾波主要是構(gòu)造一個(gè)包含陰影的模板,再用這個(gè)模板與差分結(jié)果做邏輯與的操作,從而檢出陰影。本算法比較簡(jiǎn)單,執(zhí)行速度快,處理中不需要區(qū)分陰影和半陰影,而且可以將移動(dòng)陰影和背景中的陰影都檢出來(lái),只是模板中的參數(shù)要根據(jù)現(xiàn)實(shí)情況和經(jīng)驗(yàn)來(lái)定。由于靜止物體的陰影也是不動(dòng)的,所以靜止目標(biāo)可以歸入背景中

(3)形心跟蹤算法

形心跟蹤是將整個(gè)跟蹤波門內(nèi)的圖像二值化,用求目標(biāo)形心的辦法獲得目標(biāo)位置參量。由于形心值是相對(duì)于目標(biāo)面積歸一化的值,因此形心值不受目標(biāo)面積、形狀以及灰度分布細(xì)節(jié)的限制。同時(shí),形心跟蹤的計(jì)算頗為簡(jiǎn)便。但是,形心跟蹤器受目標(biāo)的劇烈運(yùn)動(dòng)或目標(biāo)被遮擋的影響較為嚴(yán)重,瞄準(zhǔn)點(diǎn)漂移是遠(yuǎn)距離跟蹤系統(tǒng)的主要誤差之一。這也是我們采用目標(biāo)軌跡擬合算法來(lái)外推運(yùn)動(dòng)目標(biāo)位置,并與相關(guān)跟蹤法并行工作的原因。由于形心算法比較普及,本跟蹤裝置直接采用了改進(jìn)的形心跟蹤算法,用目標(biāo)峰值自適應(yīng)檢測(cè)算法使系統(tǒng)的計(jì)算可靠性和實(shí)時(shí)性達(dá)到最佳結(jié)合值。

2 算法的實(shí)現(xiàn)

1 差分機(jī)模型

圖三 差分機(jī)模型

從圖中可以看出 差分機(jī)分4步對(duì)比計(jì)算每個(gè)像素和顏色的差別,輸入這個(gè)模型的是紅綠藍(lán)的像素值 和 紅綠藍(lán)的顏色值以及閾值.當(dāng)閾值為16bits 寬的時(shí)候 那么每個(gè)輸入像素的值就是8bits寬.

二進(jìn)制的數(shù)據(jù)流作為此差分機(jī)的輸出用于構(gòu)建差分圖形.

四openfire 軟核架構(gòu)

系統(tǒng)采用四個(gè)OpenFire core 作為自己的軟核 .Openfire是一個(gè)開源的軟核, 這種開放源碼的處理器和Xilinx的Microblaze 兼容,甚至可以使用大多數(shù)Xilinx EDK提供的工具 。Openfire在cache和FSL總線等方面和Microblaze有著相同的配置 , 但是openfire允許改變數(shù)據(jù)通過(guò)的字節(jié)寬度,這正是我們目標(biāo)捕捉圖像處理算法所需要的.

圖四 四 OpenFire 軟核 架構(gòu)

圖五 改進(jìn)后的openfire處理器頂層圖

圖六 Openfire OPB 狀態(tài)機(jī)

圖七 Open fire OPB memory 系統(tǒng)圖

圖八 Open fire IOPB memory 系統(tǒng)圖

圖九 改進(jìn)OenFire FSL 數(shù)據(jù) I/O

部分代碼

1 FSL loopback test code

// This code is used by an OpenFire with all eight of its FSL ports connected

// in loopback to ensure that all ports are functional.

#include "fsl.h"

bool test_fsls(void);

int main(void) {

test_fsls();

while(1);

}

bool test_fsls(void) {

int data = 0;

putfsl(data+1,0);

getfsl(data,0);

putfsl(data+1,1);

getfsl(data,1);

putfsl(data+1,2);

getfsl(data,2);

putfsl(data+1,3);

getfsl(data,3);

putfsl(data+1,4);

getfsl(data,4);

putfsl(data+1,5);

getfsl(data,5);

putfsl(data+1,6);

getfsl(data,6);

putfsl(data+1,7);

getfsl(data,7);

return(data == 8);

}

2 IOPB / DOPB test code

#include "microblaze_0/include/xparameters.h"

#include "microblaze_0/include/xuartlite_l.h"

#include "microblaze_0/include/fsl.h"

extern void xil_printf(const char*, ...);

void outbyte(char c)

{

XUartLite_SendByte(STDOUT_BASEADDRESS, c);

}

char inbyte(void)

{

return XUartLite_RecvByte(STDIN_BASEADDRESS);

}

volatile unsigned int * timer = (unsigned int *)0x40060008;

volatile unsigned int * ddr = (unsigned int *)0x30000000;

unsigned int (*moved_summer)(const unsigned int * values, const int numvals);

unsigned int summer(const unsigned int * values, const int numvals)

{

int ctr;

unsigned int sum = 0;

for(ctr=0;ctr<numvals;ctr++)

sum += values[ctr];

return sum;

}

int main(void)

{

unsigned int starttime;

unsigned int endtime;

unsigned int timetaken;

int test_ctr;

int num_tests = 16;

int num_shifts = 4; // num_shifts = log2(num_tests)

int array_sz = 16;

int array_ctr;

int num_instructions = 100;

int instr_ctr;

unsigned int retval;

for(array_ctr = 0; array_ctr < array_sz; array_ctr++)

ddr[array_ctr] = array_ctr;

xil_printf("-- Starting Test (BRAM) --rn");

retval = 0;

timetaken = 0;

for(test_ctr=0;test_ctr<num_tests;test_ctr++)

{

starttime = timer[0];

retval = summer(ddr,array_sz);

endtime = timer[0];

timetaken += endtime - starttime;

}

xil_printf("-- Test Finished --rn");

xil_printf("RtVal: %drn", retval);

xil_printf("Taken: %drn", timetaken);

xil_printf("#Runs: %drn", num_tests);

for(test_ctr=0;test_ctr<num_shifts;test_ctr++) timetaken >>= 1;

xil_printf("Avg: %drn", timetaken);

((unsigned int *)moved_summer) = ddr + 0x1000;

for(instr_ctr=0; instr_ctr<num_instructions; instr_ctr++)

((unsigned int *)moved_summer)[instr_ctr] = ((unsigned int *)summer)[instr_ctr];

xil_printf("-- Starting Test (DDR) --rn");

retval = 0;

timetaken = 0;

for(test_ctr=0;test_ctr<num_tests;test_ctr++)

{

starttime = timer[0];

retval = moved_summer(ddr,array_sz);

endtime = timer[0];

timetaken += endtime - starttime;

}

xil_printf("-- Test Finished --rn");

xil_printf("RtVal: %drn", retval);

xil_printf("Taken: %drn", timetaken);

xil_printf("#Runs: %drn", num_tests);

for(test_ctr=0;test_ctr<num_shifts;test_ctr++) timetaken >>= 1;

xil_printf("Avg: %drn", timetaken);

while(1);

return(0);

}

3 OpenFire#1 C Code

unsigned mostly_colors;

unsigned thresh_desired;

unsigned char * rdes = &(((unsigned char *)&mostly_colors)[0]);

unsigned char * r = &(((unsigned char *)&mostly_colors)[1]);

unsigned char * g = &(((unsigned char *)&mostly_colors)[2]);

unsigned char * b = &(((unsigned char *)&mostly_colors)[3]);

unsigned short * thresh = &(((unsigned short *)&thresh_desired)[0]);

unsigned char * gdes = &(((unsigned char *)&thresh_desired)[2]);

unsigned char * bdes = &(((unsigned char *)&thresh_desired)[3]);

unsigned yx_data, sum;

while(1)

{

getfsl(mostly_colors,0);

getfsl(thresh_desired,1);

getfsl(yx_data,2);

sum = ((*r) - (*rdes)) * ((*r) - (*rdes)) +

((*g) - (*gdes)) * ((*g) - (*gdes)) +

((*b) - (*bdes)) * ((*b) - (*bdes));

if(sum < (*thresh))

{

putfsl(yx_data,0);

putfsl(yx_data,1);

}

else

{

putfsl(0,0);

putfsl(0,1);

}

}

需要的開發(fā)平臺(tái)

硬件平臺(tái)

軟件平臺(tái)

PC機(jī)

Linux

QT

Virtex-II Pro開發(fā)板

Matlab

ISE

ModelSim

EDK

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉