DSP 實現模式識別小程式

2021-05-10 09:56:10 字數 1925 閱讀 5983

花了兩個星期的時間,終於把乙個簡單的模式識別程式移植到開發板上了。程式是現成的,以前用

vc實現的。在移植過程中,中間走了一些彎路,花費了不少時間。

程式很簡單,用模板匹配法實現數字5和非

5的識別,最終顯示出來。關於特徵值的選取,我一開始把影象分成了

5*5個區域,用每個區域的畫素值當做特徵值。原來

vc上,就是這麼分的,連閾值我都是直接照搬原程式。實驗的時候發現,即使同乙個數字,每次從攝像頭讀取後的畫素值差別比較大,畢竟不是讀

bmp。最後改用比值做特徵值,分成

3*4個區域,區域分的太多反而會受誤差影響較大。重新訓練選取閾值,最後的結果差強人意,可以大致區分出

5和其他數字,但有時也會失敗。

程式過程如下:

1.初始化。從攝像頭中讀圖並二值化存入對應陣列。由於攝像頭的資料直接放在

ddr2

中,所以從攝像頭讀數就是從

ddr2

對應的位址讀數。

2.把二值化的影象顯示出來。就是把二值化的影象資料放到

ddr2

中。3.

對影象進行邊界掃瞄。這是為了下一步標準化做準備。上邊界確定方法如下:

//從上往下掃瞄,找到上邊界

tmp=(uint8 *)sample;

for (i=10;i

//邊界有黑線,i不從

0開始 //

如果該點不是黑點,繼續迴圈}

if(count>10)

}很簡單,就是從上往下一行一行統計黑畫素個數,當首先超過閾值時(我取

10),記錄位置,作為上邊界。其他邊界以此類推。

4.標準化。把讀到的影象尺寸標準化。**如下:

height=rect.bottom-rect.top;

width=rect.right-rect.left;

llinebytes=150; //

分配空間存標準化後的影象

dest=malloc(150*200);

memset(dest,0xff,150*200); //

計算縮放因子

//橫座標方向的縮放因子

wscale=(double)tarwidth/width; //

縱座標方向的縮放因子

hscale=(double)tarheight/height;

for(i=0 ;i<200 ;i++)

} 就是把原來影象的畫素對映到標準大小的框框中。我這裡標準化大小為:

150*200。5.

計算標準化後影象的黑色畫素總個數。

6.計算

3*4個區域中每個區域的黑色畫素個數,算出特徵值。

7.與模板比較,顯示結果。

我的模板是事先存好的,儲存了

3*4個特徵值,比較的時候從檔案中讀取即可。這樣不用每次都從攝像頭中讀模板。

遇到問題:

1.我沒有用

dsp/bios

所以開始的時候在

cmd檔案中遇到了麻煩,編譯總是過不去,提示我檔案太大,放不到

l2 cache

中,l2 cache

有128k

大小,我這麼小的程式居然會超,我怎麼也想不明白。

.我發現

cinit

、.far

和. text

占用空間較大。

.cinit

則用來存放全域性變數的初始值

.far

好像也是存放初始值的。

.text

是**大小。最後沒辦法,全都放到了

ddr中。這才能夠編譯通過。

2.開始我從螢幕上取的視窗大小為

200*240

的,就是攝像頭存放在

ddr中資料大小,後來發現讀的影象不正確,改為

320*240

後,問題解決,應該是

vpfe

的設定有問題。

模式識別 統計模式識別(6)

上一節,我們討論了最小錯誤率分類器,接下來這一節我們將討論最小風險bayes分類器。1.問題提出 1.最小錯誤率bayes決策的最小錯誤率 概率意義上最優,在工程上是否是最優?2.錯誤分類的結果 代價或風險會是怎樣的?考慮癌細胞影象識別的例子 3.出錯的可能情況 正常細胞 1錯分為異常 2,異常細胞...

模式識別 統計模式識別(7)

上兩節我們介紹了最小錯誤率和最小風險bayes分類器,接下來談談最小最大決策。1.問題提出 假設c 2 現在我們假定一種情況,先驗概率未知或者不確定的前提,在這種前提下,絕對意義的最小風險不存在,這種情況下我們怎麼求bayes分類器。2.求解思路 雖然p 1 和p 2 未知,但我們可以假設他們確定,...

模式識別 句法模式識別(1)

圖形或影象目標的形狀或結構千變萬化,目標 模式 的差異也在於其形狀或結構的不同,這種模式稱為結構模式,基於形狀或結構的模式識別稱為結構模式識別。數字影象處理學中,鏈碼是描述目標邊緣和輪廓的常用的編碼方法。用字元或符號的來表示影象目標的區域性邊緣的走向。freeman鏈碼 影象像元之間邊緣的走向用方向...