

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 數(shù)字圖像處理實(shí)習(xí)報(bào)告</p><p> 實(shí)習(xí)項(xiàng)目名稱: OCR-車牌號碼識(shí)別 </p><p> 所屬課程名稱: 數(shù)字圖像處理 </p><p> 班 級: </p><p> 學(xué)
2、 號: </p><p> 姓 名: </p><p> 指導(dǎo)教師: </p><p><b> 目 錄</b></p><
3、p><b> 一、實(shí)習(xí)目的3</b></p><p><b> 二、實(shí)習(xí)原理3</b></p><p><b> 三、實(shí)習(xí)步驟4</b></p><p> 3.1完成車牌定位的整個(gè)過程4</p><p> 3.2水平差分提取圖象邊緣4</p>
4、;<p> 3.3 完成圖象車牌區(qū)域的初步定位。4</p><p> 3.4利用先驗(yàn)知識(shí)標(biāo)識(shí)車牌區(qū)域,進(jìn)行車牌區(qū)域的選擇4</p><p> 3.5水平查找后,縱向查找。完成圖象車牌區(qū)域的初步定位。5</p><p> 3.6利用先驗(yàn)知識(shí)標(biāo)識(shí)車牌區(qū)域,進(jìn)行車牌區(qū)域的選擇,(橫縱向)5</p><p> 3.7計(jì)
5、算偽車牌區(qū)的跳變平均數(shù)5</p><p> 3.8找出所有偽車牌區(qū)域中具有最大跳變平均數(shù)的區(qū)域號,精確定位車牌5</p><p> 3.91找出車牌的左右邊緣6</p><p> 3.92二值化圖象6</p><p> 3.93車牌字符分割6</p><p> 3.94水平方向投影,分割出字符6&
6、lt;/p><p><b> 四、實(shí)驗(yàn)程序6</b></p><p><b> 五、實(shí)習(xí)結(jié)果24</b></p><p><b> 六、實(shí)習(xí)心得28</b></p><p><b> 一、實(shí)習(xí)目的</b></p><p>
7、 (1) 掌握數(shù)字圖像處理的相關(guān)知識(shí)及算法。</p><p> (2) 學(xué)習(xí)在VC 6.0環(huán)境下編寫車牌定位與識(shí)別程序。</p><p> (3) 了解車牌定位方法,如邊緣檢測法,基于矢量量化的車牌定位法等。</p><p> ?。?) 了解車牌字符分割方法,如,投影法,基于車牌字符先驗(yàn)知識(shí)的字符分割方法等。</p><p> ?。?)
8、 了解車牌字符識(shí)別方法,如字符歸一化,投影法,基于數(shù)字和字母特征的模板匹配法。</p><p> ?。?) 運(yùn)用編寫的車牌定位與識(shí)別程序?qū)崿F(xiàn)在各種環(huán)境下車牌的識(shí)別。</p><p><b> 二、實(shí)習(xí)原理</b></p><p> 基于VC++圖像處理的汽車牌照識(shí)別系統(tǒng)主要包括車牌定位,字符車牌分割和車牌字符識(shí)別三個(gè)關(guān)鍵環(huán)節(jié)其識(shí)別流程圖如圖
9、 1所示。</p><p><b> 圖1 識(shí)別流程圖</b></p><p><b> 其中,</b></p><p> 原始圖像:原始的汽車圖像;</p><p> 圖像預(yù)處理:對采集到的圖像進(jìn)行濾波等處理以克服圖像干擾;</p><p> 車牌定位:計(jì)算邊緣
10、圖像的投影面積,尋找峰谷點(diǎn),大致確定車牌位置,再計(jì)算此連通域內(nèi)的寬高比,剔除不在域值范圍內(nèi)的連通域,最后得到的便為車牌區(qū)域;</p><p> 字符分割:利用投影檢測的字符定位分割方法得到車牌的字符;</p><p> 字符數(shù)據(jù)庫:為第6步的字符識(shí)別建立字符模板數(shù)據(jù)庫;</p><p> 字符識(shí)別:通過基于模板匹配的人工神經(jīng)網(wǎng)絡(luò)算法,通過特征對比或訓(xùn)練識(shí)別出相
11、關(guān)的字符,得到最后的汽車牌照,包括英文字母和數(shù)字。</p><p><b> 三、實(shí)習(xí)步驟</b></p><p> 請打開一個(gè)BMP格式的位圖文件:標(biāo)示圖象的坐標(biāo)標(biāo)示算子的坐標(biāo)標(biāo)識(shí)區(qū)域的地點(diǎn)</p><p> 3.1完成車牌定位的整個(gè)過程</p><p> 程序流程:1.產(chǎn)生副本</p><
12、p> 2.水平差分提取邊緣,尋找橫向的車牌帶狀區(qū)域</p><p> 3.垂直差分提取邊緣,尋找縱向的車牌帶狀區(qū)域</p><p> 4.利用先驗(yàn)知識(shí)標(biāo)識(shí)車牌區(qū)域,進(jìn)行車牌帶狀區(qū)域的選擇,(橫縱向)</p><p> 5 .構(gòu)造出車牌矩形域;</p><p> 6.再次利用利用跳變數(shù)選擇車牌矩形區(qū)域,進(jìn)行車牌區(qū)域的最終選擇;&
13、lt;/p><p> 7.精確定位車牌,即削弱車牌橫向?qū)挾龋?lt;/p><p><b> 8.更新圖象;</b></p><p> 3.2水平差分提取圖象邊緣</p><p> 程序流程:1.逐行掃描,sub=|f(x,y)-f(x,y+1)|;</p><p> 2.若差值小于20,則g(x
14、,y)=0;</p><p> 若差值大于30,則增強(qiáng)原圖象,令g(x,y)=g(x,y)+30;</p><p> 3.另最后一列全部為0,即黑色;</p><p> 3.3 完成圖象車牌區(qū)域的初步定位。</p><p> 程序流程: 1.利用間行掃描的方式找出跳變數(shù)最大的前10行;</p><p> 2
15、.對 Top 10 行進(jìn)行區(qū)域細(xì)粒度增長選擇;</p><p> 其相似度的選取為:0.7~1.3 倍的該行跳變總數(shù);</p><p> 3.二值化,threshold=255;</p><p> 4.任意選擇一列,最好不要邊緣列,可能有干擾(本程序選擇為第十列),搜 索出各個(gè)帶狀候選域,存入標(biāo)志;</p><p> 3.4利用先
16、驗(yàn)知識(shí)標(biāo)識(shí)車牌區(qū)域,進(jìn)行車牌區(qū)域的選擇</p><p> 函數(shù)說明:特定應(yīng)用條件,拍攝所得車牌的區(qū)域高度、寬度均有一定的范圍,其大小可以分析圖象后可得</p><p> 根據(jù)統(tǒng)計(jì)得到:車牌的頂部極少出現(xiàn)在高度小于100個(gè)像素的區(qū)域;</p><p> 車牌高度也一般大于20個(gè)像素。</p><p> 程序的最終結(jié)果為滿足條件的經(jīng)過擴(kuò)展
17、了的帶狀區(qū)域</p><p> 程序流程:1.舍棄區(qū)域頂部小于100的待選域</p><p> 2.選擇區(qū)域高度大于20的待選域</p><p> 3.區(qū)域擴(kuò)展,上下各增大5個(gè)像素。若頂部小于5,則頂部坐標(biāo)不變,高度加5;</p><p> 若底部大于圖象的底部,則底部坐標(biāo)不變,高度加5;</p><p>
18、3.5水平查找后,縱向查找。完成圖象車牌區(qū)域的初步定位。</p><p> 程序流程: 1.利用間行掃描的方式找出跳變數(shù)最大的前30行;</p><p> 2.對 Top 30 行進(jìn)行區(qū)域增長;</p><p> 其相似度的選取為:0.8~1.2 倍的該行跳變總數(shù);</p><p> 3.二值化,threshold=255;</
19、p><p> 4.任意選擇一列,(本程序選擇為第十行),搜索出各個(gè)帶狀候選域,存入標(biāo)志;</p><p> 3.6利用先驗(yàn)知識(shí)標(biāo)識(shí)車牌區(qū)域,進(jìn)行車牌區(qū)域的選擇,(橫縱向)</p><p> 函數(shù)說明:國家標(biāo)準(zhǔn):車牌的寬高比近似為3:1;</p><p> 程序流程:1.初始化存儲(chǔ)數(shù)組</p><p> 2.選擇區(qū)
20、域高寬比大于3的待選域</p><p> 函數(shù)功能:再次利用利用跳變數(shù)選擇車牌區(qū)域,進(jìn)行車牌區(qū)域的最終選擇,(橫縱向)</p><p> 程序流程:1.初始化存儲(chǔ)數(shù)組</p><p> 2.計(jì)算每個(gè)偽車牌區(qū)域的跳變數(shù)</p><p> 3.選擇具有最大跳變數(shù)的區(qū)域?yàn)檐嚺茀^(qū)</p><p> 3.7計(jì)算偽車牌區(qū)
21、的跳變平均數(shù)</p><p> 程序流程:1.初始化;</p><p> 2.水平差分,邊緣提??;</p><p> 3.選擇車牌的中間1/3行來計(jì)算每個(gè)偽車牌區(qū)域的跳變平均數(shù);</p><p> 3.8找出所有偽車牌區(qū)域中具有最大跳變平均數(shù)的區(qū)域號,精確定位車牌</p><p> 程序說明:選擇排序,由于水
22、平分割出的偽車牌區(qū)域已經(jīng)比較準(zhǔn)確,故僅作垂直方向的進(jìn)一步定位(縮小寬度)</p><p> 3.91找出車牌的左右邊緣</p><p> 程序流程:1.水平差分,二值化;</p><p> 2.垂直方向投影,統(tǒng)計(jì)各列的投影值;</p><p><b> 3.去除噪聲點(diǎn);</b></p><p&
23、gt;<b> 4.找出左右邊緣</b></p><p><b> 5.計(jì)算車牌寬度</b></p><p> 6.車牌精確定位賦值</p><p><b> 3.92二值化圖象</b></p><p> 程序說明:threshold=average+delt;<
24、;/p><p> 程序流程:1.計(jì)算圖象均值;</p><p><b> 2.計(jì)算圖象方差;</b></p><p><b> 3.二值化</b></p><p> 3.93車牌字符分割</p><p> 程序流程:1.區(qū)域擴(kuò)展;</p><p>
25、;<b> 2.投影分割;</b></p><p> 3.字符區(qū)域的獲??;</p><p> 3.94水平方向投影,分割出字符</p><p> 程序流程; 1.統(tǒng)計(jì)各列白象素個(gè)數(shù);</p><p><b> 2.平滑投影曲線;</b></p><p> 3.尋
26、找波谷(trough)進(jìn)行分割;</p><p><b> 四、實(shí)驗(yàn)程序</b></p><p><b> 3.1車牌識(shí)別</b></p><p> /// <summary></p><p> /// 函數(shù)功能:水平方向投影,分割出字符</p><p>
27、 /// 程序流程:1.統(tǒng)計(jì)各列白象素個(gè)數(shù);</p><p> /// 2.平滑投影曲線;</p><p> /// 3.尋找波谷(trough)進(jìn)行分割;</p><p> // 二值化算法,二值化為0和1兩種值</p><p> void CDipView::BinaryImg(BYTE*
28、 DisposeImg, int width , int height)</p><p><b> {</b></p><p> BYTE *temp=new BYTE[height*width];</p><p><b> int x,y;</b></p><p> CopyImg(Di
29、sposeImg,temp,width,height);</p><p> long double total=0;</p><p> float aver=0;</p><p> for(x=0;x<height;x++)</p><p><b> {</b></p><p>
30、for(y=0;y<width;y++)</p><p><b> {</b></p><p> total+=DisposeImg[x*width+y];</p><p><b> }</b></p><p><b> }</b></p>
31、<p> aver=(BYTE)(total/(float)(height*width));</p><p> float delt; </p><p> float sub=0; </p><p> for(x=0;x<height;x++)</p><p><b> {</b></p&
32、gt;<p> for(y=0;y<width;y++)</p><p><b> {</b></p><p> sub+=(DisposeImg[x*width+y]-aver)*(DisposeImg[x*width+y]-aver); </p><p><b> }</b>&l
33、t;/p><p><b> }</b></p><p> delt=(float)(sqrt(sub/(float)(height*width)));</p><p> BYTE judge;</p><p> judge=(BYTE)(delt+aver);</p><p> for(x=
34、0;x<height;x++)</p><p><b> {</b></p><p> for(y=0;y<width;y++)</p><p><b> {</b></p><p> if(DisposeImg[(x*width)+y]>=judge)</p>
35、<p><b> {</b></p><p> DisposeImg[(x*width)+y]=(BYTE)1;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b>
36、</p><p> DisposeImg[(x*width)+y]=(BYTE)0;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> free(temp);&
37、lt;/p><p><b> }</b></p><p> // Hilditch細(xì)化算法</p><p> void CDipView::ThinnerHilditch(void* image, unsigned long lx, unsigned long ly)</p><p><b> {</
38、b></p><p> char *f, *g;</p><p> char n[10];</p><p> unsigned int counter;</p><p> short k, shori, xx, nrn;</p><p> unsigned long i, j;</p>&
39、lt;p> long kk, kk11, kk12, kk13, kk21, kk22, kk23, kk31, kk32, kk33, size;</p><p> size = (long)lx * (long)ly;</p><p> g = (char *)malloc(size);</p><p> if(g == NULL)</p&g
40、t;<p><b> {</b></p><p> printf("error in allocating memory!\n");</p><p><b> return;</b></p><p><b> }</b></p><p>
41、; f = (char *)image;</p><p> for(i=0; i<lx; i++)</p><p><b> {</b></p><p> for(j=0; j<ly; j++)</p><p><b> {</b></p><p>
42、kk=i*ly+j;</p><p> if(f[kk]!=0)</p><p><b> {</b></p><p><b> f[kk]=1;</b></p><p> g[kk]=f[kk];</p><p><b> }</b><
43、/p><p><b> }</b></p><p><b> }</b></p><p> counter = 1;</p><p><b> do</b></p><p><b> {</b></p><
44、p> printf("%4d*",counter);</p><p> counter++;</p><p> shori = 0;</p><p> for(i=0; i<lx; i++)</p><p><b> {</b></p><p> for
45、(j=0; j<ly; j++)</p><p><b> {</b></p><p> kk = i*ly+j;</p><p> if(f[kk]<0)</p><p> f[kk] = 0;</p><p> g[kk]= f[kk];</p><p
46、><b> }</b></p><p><b> }</b></p><p> for(i=1; i<lx-1; i++)</p><p><b> {</b></p><p> for(j=1; j<ly-1; j++)</p>&l
47、t;p><b> {</b></p><p> kk=i*ly+j;</p><p> if(f[kk]!=1)</p><p><b> continue;</b></p><p> kk11 = (i-1)*ly+j-1;</p><p> kk12 =
48、 kk11 + 1;</p><p> kk13 = kk12 + 1;</p><p> kk21 = i*ly+j-1;</p><p> kk22 = kk21 + 1;</p><p> kk23 = kk22 + 1;</p><p> kk31 = (i+1)*ly+j-1;</p>
49、<p> kk32 = kk31 + 1;</p><p> kk33 = kk32 + 1;</p><p> if((g[kk12]&&g[kk21]&&g[kk23]&&g[kk32])!=0)</p><p><b> continue;</b></p>
50、<p> nrn = g[kk11] + g[kk12] + g[kk13] + g[kk21] + g[kk23] + </p><p> g[kk31] + g[kk32] + g[kk33];</p><p> if(nrn <= 1)</p><p><b> {</b></p><p>
51、 f[kk22] = 2;</p><p><b> continue;</b></p><p><b> }</b></p><p> n[4] = f[kk11];</p><p> n[3] = f[kk12];</p><p> n[2] = f[kk13
52、];</p><p> n[5] = f[kk21];</p><p> n[1] = f[kk23];</p><p> n[6] = f[kk31];</p><p> n[7] = f[kk32];</p><p> n[8] = f[kk33];</p><p> n[9]
53、= n[1];</p><p><b> xx = 0;</b></p><p> for(k=1; k<8; k=k+2)</p><p><b> {</b></p><p> if((!n[k])&&(n[k+1]||n[k+2]))</p><
54、;p><b> xx++;</b></p><p><b> }</b></p><p><b> if(xx!=1)</b></p><p><b> {</b></p><p> f[kk22] = 2;</p><
55、p><b> continue;</b></p><p><b> }</b></p><p> if(f[kk12] == -1)</p><p><b> {</b></p><p> f[kk12] = 0;</p><p><
56、;b> n[3] = 0;</b></p><p><b> xx = 0;</b></p><p> for(k=1; k<8; k=k+2)</p><p><b> {</b></p><p> if((!n[k])&&(n[k+1]||n[k
57、+2]))</p><p><b> xx++;</b></p><p><b> }</b></p><p> if(xx != 1)</p><p><b> {</b></p><p> f[kk12] = -1;</p>
58、<p><b> continue;</b></p><p><b> }</b></p><p> f[kk12] = -1;</p><p> n[3] = -1;</p><p><b> }</b></p><p> if(
59、f[kk21]!=-1)</p><p><b> {</b></p><p> f[kk22] = -1;</p><p> shori = 1;</p><p><b> continue;</b></p><p><b> }</b>&l
60、t;/p><p> f[kk21] = 0;</p><p><b> n[5] = 0;</b></p><p><b> xx = 0;</b></p><p> for(k=1; k<8; k=k+2)</p><p><b> {</b&g
61、t;</p><p> if((!n[k])&&(n[k+1]||n[k+2]))</p><p><b> {</b></p><p><b> xx++;</b></p><p><b> }</b></p><p><
62、b> }</b></p><p> if(xx == 1)</p><p><b> {</b></p><p> f[kk21] = -1;</p><p> f[kk22] = -1;</p><p><b> shori =1;</b>&l
63、t;/p><p><b> }</b></p><p><b> else</b></p><p> f[kk21] = -1;</p><p><b> }</b></p><p><b> }</b></p>
64、<p> }while(shori);</p><p><b> free(g);</b></p><p><b> }</b></p><p><b> // 細(xì)化算法</b></p><p> void CDipView::ThinImage(BYTE
65、* image, int width, int height)</p><p><b> {</b></p><p> LONG x,y,k;</p><p> BYTE image1[10000];</p><p><b> k=0;</b></p><p> L
66、ONG digitWidth = width;</p><p> LONG digitHeight = height;</p><p> for(x=0; x<digitWidth; x++)</p><p><b> {</b></p><p> image[x*width+0] = (BYTE)0;&l
67、t;/p><p> image[x*width+digitHeight-1] = (BYTE)0;</p><p><b> }</b></p><p> for(y=0; y<digitHeight; y++)</p><p><b> {</b></p><p>
68、; image[0*width+y] = (BYTE)0;</p><p> image[(digitWidth-1)*width+y] = (BYTE)0;</p><p><b> }</b></p><p> for(x=0; x<digitWidth; x++)</p><p><b>
69、 {</b></p><p> for(y=0; y<digitHeight; y++)</p><p><b> {</b></p><p> image1[k] = image[x*width+y];</p><p> if(image1[k] != 0)</p><p&
70、gt; image1[k] = (BYTE)1;</p><p><b> k++;</b></p><p><b> }</b></p><p><b> }</b></p><p> ThinnerHilditch((void *)image1, digitWid
71、th, digitHeight);</p><p><b> k=0;</b></p><p> for(x=0; x<digitWidth; x++)</p><p><b> {</b></p><p> for(y=0; y<digitHeight; y++)</p&
72、gt;<p><b> {</b></p><p> image[x*width+y] = image1[k];</p><p> if(image[x*width+y]!=0)</p><p> image[x*width+y] = (BYTE)1;</p><p><b> k++;
73、</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> // 獲取特征值的函數(shù)</p><p> void CDipView::GetFeatur
74、e(BYTE* image, long width, long height, double* feature, int size)</p><p><b> {</b></p><p><b> int i,j;</b></p><p> for(i=0; i<13; i++)</p><
75、p> feature[i] = 0;</p><p> //圖象是20×36大小的,分成9塊</p><p><b> //第一塊</b></p><p> for(i=0; i<7; i++)</p><p><b> {</b></p><p&
76、gt; for(j=0; j<12; j++)</p><p><b> {</b></p><p> if(image[i*width+j]==1)</p><p> feature[0]+=1.0;</p><p><b> }</b></p><p>&
77、lt;b> }</b></p><p><b> //第二塊</b></p><p> for(i=0; i<7; i++)</p><p><b> {</b></p><p> for(j=12; j<24; j++)</p><p&g
78、t;<b> {</b></p><p> if(image[i*width+j]==1)</p><p> feature[1]+=1.0;</p><p><b> }</b></p><p><b> }</b></p><p><
79、b> //第三塊</b></p><p> for(i=0; i<7; i++)</p><p><b> {</b></p><p> for(j=24; j<36; j++)</p><p><b> {</b></p><p>
80、 if(image[i*width+j]==1)</p><p> feature[2]+=1.0;</p><p><b> }</b></p><p><b> }</b></p><p><b> //第四塊</b></p><p> f
81、or(i=7; i<13; i++)</p><p><b> {</b></p><p> for(j=0; j<12; j++)</p><p><b> {</b></p><p> if(image[i*width+j]==1)</p><p>
82、 feature[3]+=1.0;</p><p><b> }</b></p><p><b> }</b></p><p><b> //第五塊</b></p><p> for(i=7; i<13; i++)</p><p><
83、b> {</b></p><p> for(j=12; j<24; j++)</p><p><b> {</b></p><p> if(image[i*width+j]==1)</p><p> feature[4]+=1.0;</p><p><b&g
84、t; }</b></p><p><b> }</b></p><p><b> //第六塊</b></p><p> for(i=7; i<13; i++)</p><p><b> {</b></p><p> for(
85、j=24; j<36; j++)</p><p><b> {</b></p><p> if(image[i*width+j]==1)</p><p> feature[5]+=1.0;</p><p><b> }</b></p><p><b>
86、 }</b></p><p><b> //第七塊</b></p><p> for(i=13; i<20; i++)</p><p><b> {</b></p><p> for(j=0; j<12; j++)</p><p><b
87、> {</b></p><p> if(image[i*width+j]==1)</p><p> feature[6]+=1.0;</p><p><b> }</b></p><p><b> }</b></p><p><b>
88、//第八塊</b></p><p> for(i=13; i<20; i++)</p><p><b> {</b></p><p> for(j=12; j<24; j++)</p><p><b> {</b></p><p> if(i
89、mage[i*width+j]==1)</p><p> feature[7]+=1.0;</p><p><b> }</b></p><p><b> }</b></p><p><b> //第九塊</b></p><p> for(i=
90、13; i<20; i++)</p><p><b> {</b></p><p> for(j=24; j<36; j++)</p><p><b> {</b></p><p> if(image[i*width+j]==1)</p><p> fe
91、ature[8]+=1.0;</p><p><b> }</b></p><p><b> }</b></p><p> //下面統(tǒng)計(jì)方向交點(diǎn)特征</p><p> for(j=0; j<36; j++)</p><p><b> {</b&
92、gt;</p><p> if(image[7*width+j]==1)</p><p> feature[9]+=1.0;</p><p><b> }</b></p><p> for(j=0; j<36; j++)</p><p><b> {</b>&
93、lt;/p><p> if(image[13*width+j]==1)</p><p> feature[10]+=1.0;</p><p><b> }</b></p><p> for(i=0; i<20; i++)</p><p><b> {</b><
94、;/p><p> if(image[i*width+12]==1)</p><p> feature[11]+=1.0;</p><p><b> }</b></p><p> for(i=0; i<20; i++)</p><p><b> {</b></
95、p><p> if(image[i*width+24]==1)</p><p> feature[12]+=1.0;</p><p><b> }</b></p><p><b> }</b></p><p> // 識(shí)別函數(shù),第一個(gè)參數(shù)為LoadCharLib讀出的數(shù)
96、組,</p><p> //第二個(gè)參數(shù)為LoadCharLib的返回值(即樣本個(gè)數(shù)),</p><p> //將上面獲得的特征值傳入第三個(gè)參數(shù),返回為識(shí)別結(jié)果</p><p> CString CDipView::Recognize(sample* sa, int num, double* feature)</p><p><b&
97、gt; {</b></p><p><b> int j;</b></p><p> double min=100000.0;</p><p> CString Result;</p><p> for(int i=0;i<num;i++)</p><p><b&
98、gt; {</b></p><p> double diff = 0.0;</p><p> for(j=0; j<9; j++)</p><p><b> {</b></p><p> diff += fabs(feature[j] - sa[num].feature[j]);</p&
99、gt;<p><b> }</b></p><p> for(j=9; j<13; j++)</p><p><b> {</b></p><p> diff += fabs(feature[j] - sa[num].feature[j])*9;</p><p><
100、b> }</b></p><p> if(diff < min)</p><p><b> {</b></p><p> min = diff;</p><p> Result.Format("%s",sa[num].trueClass);</p>&l
101、t;p><b> }</b></p><p><b> }</b></p><p> return Result;</p><p><b> }*/</b></p><p><b> // 字符識(shí)別</b></p><
102、p> /*void CDipView::GetCharacter()</p><p><b> {</b></p><p> //CDipDoc *pDoc=GetDocument();</p><p> //int width,height;</p><p> //width=pDoc->ImgW
103、idth;</p><p> //height=pDoc->ImgHeight;</p><p> //sample mysa[500];</p><p> // double myfeature[13];</p><p> // int num;</p><p> // CString r
104、esult[10];</p><p> //BYTE*Img;</p><p> //int row=0;</p><p> //int col=0;</p><p> //int x=-1;</p><p> //int y=-1;</p><p> //int w=0;</
105、p><p> //int h=0;</p><p> //int area=0;</p><p> //for(area=0;area<10;area++);</p><p><b> //{</b></p><p> //if(cRects[area].w>0)</p
106、><p><b> //{</b></p><p> //x=cRects[area].x;</p><p> //y=cRects[area].y;</p><p> //w=cRects[area].w;</p><p> //h=cRects[area].h;<
107、/p><p> // Img=new BYTE[w*h];</p><p> //for(row=0;row<h;row++)</p><p><b> //{</b></p><p> //for(col=0;col<w;col++)</p><p&
108、gt;<b> //{</b></p><p> // // Img[row*w+col]=pDoc->ImgData[y*width+x];</p><p><b> //}</b></p><p><b> //}</b>&l
109、t;/p><p> //////num=LoadCharLib(mysa); //獲取樣本庫保存到mysa[500]中</p><p> //////Zoom(Img,w,h); //對切割出的圖象進(jìn)行大小歸一化</p><p> /////
110、/ThinImage(Img,w,h); //對大小歸一化后的圖象進(jìn)行細(xì)化</p><p> //////GetFeature(Img,w,h,myfeature,13); //圖象細(xì)化以后就可以提取特征了</p><p> //////result[area]=Recognize(mysa,num,myfea
111、ture);</p><p><b> //}</b></p><p><b> //}</b></p><p> //delete []mysa;</p><p> //delete []myfeature;</p><p> //delete []resul
112、t;</p><p><b> }*/</b></p><p> void CDipView::OnCharacterRecg()</p><p><b> {</b></p><p> CMainFrame* MainFrame=(CMainFrame*)this->GetParen
113、t()->GetParent(); </p><p> CCharView* pchview=(CCharView*)MainFrame->m_wndSplitter.GetPane(0,1); </p><p> CDigitClass digitTest;</p><p> CString classResult;</p><
114、;p> CString tempstr;</p><p> CString strInfo, strTemp;</p><p> int recgpos=1;</p><p> double temp[13];</p><p> for(int k=0;k<CharacterNum;k++)</p><
115、;p><b> {</b></p><p> if ((float) cDatas[k].h/cDatas[k].w>4)</p><p><b> {</b></p><p> if (recgpos!=1&&recgpos<8)</p><p><
116、b> {</b></p><p> classResult=classResult+"1";</p><p> recgpos++;</p><p><b> }</b></p><p><b> continue;</b></p>&
117、lt;p><b> }</b></p><p> for(int x=0;x<cDatas[k].h;x++)</p><p><b> {</b></p><p> for(int y=0;y<cDatas[k].w;y++)</p><p><b> {&l
118、t;/b></p><p> digitTest.digitarray[y][x]=cDatas[k].Img[x*cDatas[k].w+y];</p><p><b> }</b></p><p><b> }</b></p><p> digitTest.digitHeight=
119、cDatas[k].h;</p><p> digitTest.digitWidth=cDatas[k].w;</p><p> digitTest.FixSize();</p><p> digitTest.BinaryDigit();</p><p> //digitTest.MarrBinary();</p>&l
120、t;p> digitTest.ThinDigit_1();</p><p> pchview->m_result.SetSel(0,-1);</p><p> pchview->m_result.ReplaceSel("");</p><p> CString strInfo, strTemp;</p>&
121、lt;p> strInfo.Format("");</p><p><b> int i,j;</b></p><p> for(i=0; i<digitTest.digitHeight; i++)</p><p><b> {</b></p><p> f
122、or(j=0; j<digitTest.digitWidth; j++)</p><p><b> {</b></p><p> if(digitTest.digitarray[j][i] == 1)</p><p> strInfo += "■";</p><p><b>
123、else</b></p><p> strInfo += " ";</p><p><b> }</b></p><p> strInfo += "\r\n";</p><p><b> }</b></p><p>
124、; pchview->m_result.SetSel(0,-1);</p><p> pchview->m_result.ReplaceSel(strInfo);</p><p> //AfxMessageBox("hello");</p><p> digitTest.GetFeature();</p>&l
125、t;p> if (recgpos==1)</p><p><b> {</b></p><p> double min=100000.0;</p><p> POSITION pos=hanList.GetHeadPosition();</p><p> while(pos!=NULL)</p>
126、;<p><b> {</b></p><p> Sample sa;</p><p> sa=hanList.GetNext(pos);</p><p> double diff = 0.0;</p><p> for(j=0; j<9; j++)</p><p>
127、<b> {</b></p><p> diff += fabs(digitTest.feature[j] - sa.feature[j]);</p><p><b> }</b></p><p> for(j=9; j<13; j++)</p><p><b> {<
128、;/b></p><p> diff += fabs(digitTest.feature[j] - sa.feature[j])*9;</p><p><b> }</b></p><p> if(diff < min)</p><p><b> {</b></p>
129、<p> min = diff;</p><p> tempstr.Format("%s",sa.trueClass);</p><p><b> }</b></p><p><b> }</b></p><p> classResult=classResu
130、lt+tempstr;</p><p><b> }</b></p><p> if (recgpos==2)</p><p><b> {</b></p><p> double temp[13];</p><p> double result1[26];<
131、/p><p><b> bool t=0;</b></p><p> for (i=0;i<13;i++)</p><p><b> {</b></p><p> temp[i]=digitTest.feature[i]/15;</p><p><b>
132、 }</b></p><p> char_bp.Identify(temp,13,result1,26);</p><p> for(i=0;i<26;i++)</p><p><b> {</b></p><p> if (ABS(result1[i]-1)<0.1)</p>
133、<p><b> {</b></p><p> tempstr.Format("%c",i+'A');</p><p> classResult=classResult+tempstr;</p><p><b> t=1;</b></p><p&
134、gt;<b> }</b></p><p><b> }</b></p><p><b> if(t!=1)</b></p><p> classResult=classResult+'?';</p><p><b> }</b>
135、</p><p> //strTemp.Format("%d", classResult);</p><p> if (recgpos==3)</p><p><b> {</b></p><p> double temp[13];</p><p> double
136、result1[36];</p><p><b> bool t=0;</b></p><p> for (i=0;i<13;i++)</p><p><b> {</b></p><p> temp[i]=digitTest.feature[i]/15;</p><
137、;p><b> }</b></p><p> char_num_bp.Identify(temp,13,result1,36);</p><p> for(i=0;i<36;i++)</p><p><b> {</b></p><p> if (ABS(result1[i]-
138、1)<0.2)</p><p><b> {</b></p><p><b> if(i<=9)</b></p><p><b> {</b></p><p> tempstr.Format("%c",i+'0');<
139、;/p><p> classResult=classResult+tempstr;</p><p><b> t=1;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {
140、</b></p><p> tempstr.Format("%c",i+'A'-10);</p><p> classResult=classResult+tempstr;</p><p><b> t=1;</b></p><p><b> }</
141、b></p><p> //tempstr.Format("%c",i);</p><p><b> }</b></p><p><b> }</b></p><p><b> if(t!=1)</b></p><p>
142、; classResult=classResult+'?';</p><p><b> }</b></p><p> if (recgpos>3&&recgpos<8)</p><p><b> {</b></p><p> double tem
143、p[13];</p><p> double result1[10];</p><p><b> bool t=0;</b></p><p> for (i=0;i<13;i++)</p><p><b> {</b></p><p> temp[i]=dig
144、itTest.feature[i]/15;</p><p><b> }</b></p><p> char_num_bp.Identify(temp,13,result1,10);</p><p> for(i=0;i<10;i++)</p><p><b> {</b></p
145、><p> if (ABS(result1[i]-1)<0.1)</p><p><b> {</b></p><p> tempstr.Format("%c",i+'0');</p><p> classResult=classResult+tempstr;</p&g
146、t;<p><b> t=1;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> if(t!=1)</b></p><p> classResult=classResult
147、+'?';</p><p><b> }</b></p><p> //strInfo += "\n\r識(shí)別結(jié)果為: ";</p><p> //strInfo += classResult;</p><p> recgpos++;</p><p>
148、; //pchview->m_result.SetSel(0,-1);</p><p> // pchview->m_result.ReplaceSel(strInfo);</p><p><b> }</b></p><p> //Sample temp;</p><p><b>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 車牌號碼什么數(shù)字好 吉利車牌號碼大全
- 車牌號碼吉兇大全
- 山東車牌號碼大全
- 畢業(yè)設(shè)計(jì)(論文)車牌號碼識(shí)別仿真
- 車牌號碼識(shí)別系統(tǒng)設(shè)計(jì)與算法研究
- 廣東省車牌號碼全集
- 車牌號碼提取與識(shí)別系統(tǒng)的研究.pdf
- 車牌號碼識(shí)別系統(tǒng)設(shè)計(jì)與算法研究.pdf
- 3位數(shù)吉祥車牌號碼大全
- 洗車行環(huán)境中車牌號碼識(shí)別方法研究.pdf
- 全國各地車牌號碼一覽表
- 中國車牌號的識(shí)別
- 車牌號簡稱
- 中國車牌號大全
- 如何選擇車牌號
- 車牌號歸屬地
- 基于數(shù)字圖像處理的車牌識(shí)別研究.pdf
- 中國車牌號排序大全
- 車牌號順口溜
- 全國車牌號知識(shí)大全
評論
0/150
提交評論