基于ARM和CPLD的嵌入式視覺系統(tǒng)設(shè)計(jì)
② 計(jì)算質(zhì)心橫坐標(biāo)。
③ 計(jì)算質(zhì)心縱坐標(biāo)。
④ 識(shí)別物體的形狀。根據(jù)得到的每行跟蹤點(diǎn)的長度,以及同一行中有幾段符合要求的連續(xù)跟蹤點(diǎn),可以得知物體從攝像頭角度看到的形狀。特別是在檢測平面上線條時(shí),可以識(shí)別是否有分支,這一點(diǎn)是幀處理模式無法做到的。
需要指出的是,行處理模式雖然會(huì)得到關(guān)于跟蹤目標(biāo)的更多信息,但是每行處理的方式增大了處理器的負(fù)擔(dān),處理速度也沒有幀處理快。
4 提高系統(tǒng)的工作速率
目前,系統(tǒng)工作在幀處理模式下的工作速率是25幀/s,作為系統(tǒng)功能的驗(yàn)證,這里采用的算法是顏色跟蹤。如果僅做純粹的圖像采集,而不做圖像處理,那么系統(tǒng)可以達(dá)到OV6620的最高工作速率,即60幀/s。而在圖像處理方面,不同的圖像處理程序效率對系統(tǒng)的工作頻率有較大的影響。下面給出在通用ARM處理器下提高程序效率的幾個(gè)建議:
① 內(nèi)嵌(inline)可通過刪除子函數(shù)調(diào)用的開銷來提高性能。如果函數(shù)在別的模塊中不被調(diào)用,一個(gè)好的建議是用static標(biāo)識(shí)函數(shù);否則,編譯器將在內(nèi)嵌譯碼里把該函數(shù)編譯成非內(nèi)嵌的。
② 在ARM系統(tǒng)中,函數(shù)調(diào)用過程中參數(shù)個(gè)數(shù)≤4時(shí),通過R0~R3傳遞;參數(shù)個(gè)數(shù)>4時(shí),通過壓棧方式傳遞(需要額外的指令和慢速的存儲(chǔ)器操作)。通常限制參數(shù)的個(gè)數(shù),使它為4或更少。如果不可避免,則把常用的前4個(gè)參數(shù)放在R0~R3中。
③ 在for(), while() do…while()的循環(huán)中,用“減到0”代替“加到某個(gè)值”。比如:
for (loop = 1; loop = total; loop++) //ADD和CMP
替換為:for (loop = total; loop != 0; loop--) //SUBS
第1種方式比較需要2條指令A(yù)DD和CMP,而第2種方式只需一條指令SUBS。
④ ARM核不含除法硬件,除法通常用一個(gè)運(yùn)行庫函數(shù)來實(shí)現(xiàn),運(yùn)行需要很多個(gè)周期。一些除法操作在編譯時(shí)作為特例來處理,例如除以2的操作用左移代替余數(shù)的操作符“%”,通常使用模算法。如果這個(gè)值的模不是2的n次冪,則將花費(fèi)大量的時(shí)間和代碼空間避免這種情況的發(fā)生。具體辦法是使用if()作狀態(tài)檢查。
比如,count的范圍是0~59:
count = (count+1) % 60;
用下面語句代替:
if (++count >= 60)
count = 0;
⑤ 避免使用大的局部結(jié)構(gòu)體或數(shù)組,可以考慮用malloc/free代替。
⑥ 避免使用遞歸。
結(jié)語
本文介紹了一種基于ARM和CPLD的嵌入式視覺系統(tǒng),可以實(shí)現(xiàn)顏色跟蹤。在硬件設(shè)計(jì)上,圖像采集和圖像處理分離,更利于系統(tǒng)功能的升級。而視覺處理算法更注重處理的效率和實(shí)時(shí)性,同時(shí)根據(jù)不同的需要有兩種模式可供選擇。最后給出了提高程序效率的一些建議和方法。與基于PC機(jī)的視覺系統(tǒng)相比,該系統(tǒng)功耗低、體積小,適合應(yīng)用于移動(dòng)機(jī)器人等領(lǐng)域。
評論