【圖像識別】基于支持向量機SVM實現(xiàn)漢字識別matlab源碼
?前言
漢字歷史悠久,流傳四海,是我們書面交流的絕對主體。自蔡
倫改進紙張以來,兩千年的時間里,漢字最重要的載體是纖維紙。
毫無疑問,較之前的龜甲竹簡而言,紙張更便宜,更輕便,更適合
傳播。纖維紙結(jié)合印刷術,構(gòu)成了知識文化傳播的主要方式。
然而步入新世紀后,我們有了電腦,有了電子書,有了電子
筆,最重要的,我們有了發(fā)達的互聯(lián)網(wǎng)。技術革命正在快速蠶食紙
張原有的優(yōu)勢地位,纖維紙竟有了淘汰的可能。
但是,至少到目前為止,傳統(tǒng)方式下的書籍仍然承載著巨大的
信息流量,紙張對于我們依舊不可或缺,這便需要有能夠把信息在
兩者間流轉(zhuǎn)的方法。
我們組本次設計的內(nèi)容便是在探討一種傳統(tǒng)書籍內(nèi)容轉(zhuǎn)移到電
子文檔的方法——漢字識別
1 實驗目標和實驗方法
1.實驗目標:通過設計,能夠有效地識別出圖片中的漢字。
2.實驗平臺:MATLAB
2 實驗原理(具體原理略)
2.1 圖像二值化
2.2 開操作
2.3 圖像分割
2.4 貝葉斯公式法分類器
3 實驗方案(總體流程圖、具體步驟等)
1.1 算法一流程圖
1.1.1 創(chuàng)建字庫

1.1.2 識別漢字

1.1.3 提取字庫特征向量

1.2 算法一步驟
①選擇一段寫在紙張上的文字,拍照截圖
②把帶有漢字的圖像處理成標準格式。最好的結(jié)果是只留有漢字部分而切除其余空白,并清 理斑點修補線條。
③為了每次單獨識別一個漢字,將每個漢字都分離切割出來,成為一個待處理的方塊圖像組
④對比漢字庫與一個個分離出的漢字方塊圖像,找到最相似的結(jié)果(漢字庫同樣是分離出的 漢字方塊圖像。在實驗前預先輸入標準漢字圖像,并輸入每一個漢字圖像代表漢字,的程序 會自動分割出一個個漢字方塊圖像,并按順序存放于庫文件夾中。 )
⑤輸出對比出的最相似結(jié)果,并附上原圖像
1.3 算法二流程圖
1.3.1 提取字庫特征向量

1.3.2 識別漢字

1.4 算法二步驟
(1) 將一個手寫的字(假設這個字為“數(shù)”)的大方塊切割為 10*10 個小方塊。每一個 小方塊都包含了一個字的一部分信息。
開始
輸入帶漢字的 圖像
預處理階段 (修補線段、 去除噪點)
切割字塊
特征提取
貝葉斯分類器 進行比較
輸出結(jié)果
結(jié)束
12 / 34
(2) 每一部分的小方塊里的黑像素與白像素的數(shù)量之比為小方塊所蘊含的信息; (3) 設立一個閾值 K。如果一個小方塊內(nèi),黑像素的數(shù)量大于 K,則令小方塊狀態(tài)為 1, 表示有筆畫經(jīng)過;否則為 0,表示沒有筆畫經(jīng)過; (4) 現(xiàn)在,我們得到了一個字的 100 個小方塊的狀態(tài)值,將狀態(tài)值存入一個數(shù)組 shu[i],0<=i<=100; (5) 設立數(shù)據(jù)庫。將足夠多的訓練用字(全是“數(shù)”)的圖片進行(1)~(4)的處理步 驟,于是,我們改造之前的數(shù)組,得到一個新二維數(shù)組 shu[j][i]作為數(shù)據(jù)庫,j 為訓練 圖片序號; (6) 利用數(shù)據(jù)庫,我們可以統(tǒng)計出“數(shù)”字的筆畫經(jīng)過某一個小方塊的概率,并記錄下 來; (7) 我們又通過重復(1)~(6)的步驟,將其他的漢字(非“數(shù)”)也求出概率來; (8) 到此,我們建立了一個的數(shù)據(jù)庫,這個數(shù)據(jù)庫里包含了不同漢字的筆畫經(jīng)過不同位 置的概率,將其作為特征向量,如果想給漢字增加特征向量,重復以上步驟即可。 (9) 輸入漢字 X 試圖識別。重復(1)~(4),得到一個數(shù)組。這個數(shù)組內(nèi)包含有 X 的 筆畫信息供以比對,作為特征向量; (10) 接下來,進行筆畫信息比對。利用貝葉斯分析,計算出在這種筆畫信息下是某一種 字的可能性; (11) 利用貝葉斯分類器將數(shù)據(jù)庫中特征向量比對一遍,找出最有可能的字即為結(jié)果。
clc,clear,close
for i=1:5
? ?imp=imread(['.\字庫',num2str(i),'.jpg']);
? ?create_database(imp,i);
end
load templet pattern;
aa=imread('example_1.png');
[word cnum]=get_picture(aa);
%cc=imresize(aa,[120 90]);
for i=1:cnum
? ?class=bayesBinaryTest(word{i});
? ?Code(i)=pattern(class).name;
end
figure(3);
imshow(aa);
tt=title(['識別文字: ', Code(1:cnum)],'Color','b');

?

?