花了兩個星期的時間,終於把乙個簡單的模式識別程式移植到開發板上了。程式是現成的,以前用
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鏈碼 影象像元之間邊緣的走向用方向...