背景
本文,主要介紹我之前在學(xué)校時(shí)候,研究的一些跟手寫數(shù)字識(shí)別相關(guān)的技術(shù)心得,主要涉及:數(shù)字圖像處理、特征提取、神經(jīng)網(wǎng)絡(luò)等等相關(guān)的一些技術(shù)。。
雖然很多用到的還是網(wǎng)上現(xiàn)有的比較成熟的算法,但是在這些基礎(chǔ)上,我還是有做了不少算法上的改進(jìn)的。。
并且為了寫這個(gè)項(xiàng)目,我當(dāng)時(shí)還特地寫了一整套神經(jīng)網(wǎng)絡(luò)庫(kù),從圖像處理開始到最后的識(shí)別過程,沒有使用任何第三方庫(kù),都是從0還是寫起
也沒有用到opencv啊什么的。
上層ui當(dāng)時(shí)用的qt,雖然當(dāng)時(shí)也算是為了跨平臺(tái),但那個(gè)時(shí)候畢竟還是學(xué)生,代碼經(jīng)驗(yàn)欠缺,因此我的基礎(chǔ)庫(kù)對(duì)跨平臺(tái)處理的并不是很好。。
那個(gè)基礎(chǔ)庫(kù),我稍微簡(jiǎn)單說下,那是我的第一個(gè)開發(fā)庫(kù),是一個(gè)類似boost的c++模板庫(kù),里面用到了很多c++的模板元編程的特性,但是現(xiàn)在已經(jīng)對(duì)c++無愛了,所以早已廢棄不用了。
不過也就是這個(gè)庫(kù)的開發(fā),很大程度上影響了我之后的編碼風(fēng)格,也是至此之后,我重點(diǎn)轉(zhuǎn)向了對(duì)c的開發(fā)上。。
這套識(shí)別系統(tǒng),僅僅是我當(dāng)時(shí)為了學(xué)習(xí)神經(jīng)網(wǎng)絡(luò),拿來練手用的,沒法跟那些成熟的相比,識(shí)別率不是很高哈,只能給大家用來參考學(xué)習(xí)了。
簡(jiǎn)介
本文在基本BP算法和數(shù)字圖像與處理的基礎(chǔ)上,通過改進(jìn)網(wǎng)絡(luò)、圖像處理算法,并結(jié)合實(shí)踐來探索如何實(shí)現(xiàn)具有高魯棒的、高精度的、高效率的脫機(jī)數(shù)字識(shí)別。
在這我主要研究脫機(jī)單體數(shù)字識(shí)別,其主要步驟為:

overview_1
數(shù)字樣本的采集
主要采用5行10列的數(shù)字樣本規(guī)格。采集方式是通過掃描樣本卡片來獲取圖像,也盡量避免樣本了的失真,如圖:

overview_2
圖像二值化
主要采用全局閾值分割法和自適應(yīng)的局部閾值分割法,來實(shí)現(xiàn)在不同亮度背景下的自適應(yīng)分割,并對(duì)結(jié)果進(jìn)行比對(duì)。
數(shù)字提取
目前主要考慮聚類法、矩陣式分割法、連通區(qū)域標(biāo)記法,并比較其優(yōu)劣,選取效果最好的一種算法。
圖像歸一化
主要采用雙線性內(nèi)插和最鄰近內(nèi)插來實(shí)現(xiàn)放大,為了減少圖像在收縮時(shí)帶來的失真,目前打算采用求平均法來實(shí)現(xiàn)。
特征提取
主要采用逐像素提取法,PCA主成分提取兩種方法來實(shí)現(xiàn)。
樣本學(xué)習(xí)
主要采用基于BP算法(反向傳播學(xué)習(xí)算法)的神經(jīng)網(wǎng)絡(luò)進(jìn)行識(shí)別,并對(duì)BP進(jìn)行一定的改進(jìn)和優(yōu)化,來改進(jìn)訓(xùn)練效果并且適當(dāng)?shù)奶岣哂?xùn)練速率。
目前,針對(duì)BP的改進(jìn)算法,主要采添加動(dòng)量項(xiàng)和自適應(yīng)步長(zhǎng)法。
而對(duì)于BP算法,其主要步驟為:
前向計(jì)算=〉反向計(jì)算=〉權(quán)值修正=〉循環(huán)迭代
為了進(jìn)一步改進(jìn)網(wǎng)絡(luò),實(shí)現(xiàn)高精度、高效率的識(shí)別,打算考慮采用多網(wǎng)絡(luò)集成法,來進(jìn)行優(yōu)化。
主要針對(duì)不同權(quán)值、隱層數(shù)的基本BP網(wǎng)絡(luò)進(jìn)行集成。通過每個(gè)網(wǎng)絡(luò)分類的結(jié)果進(jìn)行加權(quán)輸出,來達(dá)到有效的分類。
閾值分割
閾值分割法是一種基于區(qū)域的圖像分割技術(shù),其基本原理是:通過設(shè)定不同的特征閾值,把圖像像素點(diǎn)分為若干類。
在本文中,我們主要處理針對(duì)兩類的分割,令閾值為T,圖像像素對(duì)應(yīng)的灰度級(jí)為f(x, y) ,那么經(jīng)閾值分割后的圖像 g(x, y) 定義為:

split_1
因此,標(biāo)記為1的像素對(duì)應(yīng)于對(duì)象,也就是前景,而標(biāo)記為0的對(duì)象對(duì)應(yīng)于背景,也就是我們通常所說的圖像二值化。
利用閾值分割進(jìn)行圖像二值化的主要難題就是閾值的選取,事實(shí)證明,閾值的選擇的恰當(dāng)與否對(duì)分割的效果起著決定性的作用。
常用的閾值分割方法有以下三種:
整體閾值法
利用整幅圖像的信息對(duì)圖像求出最優(yōu)閾值, 在二值化分割過程中只使用這一個(gè)固定閾值,因此計(jì)算量小,但對(duì)于亮度條件不好的圖像的分割效果較差。