背景
本文队萤,主要介紹我之前在學(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í)別過(guò)程,沒(méi)有使用任何第三方庫(kù)踱葛,都是從0還是寫起
也沒(méi)有用到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)單說(shuō)下商蕴,那是我的第一個(gè)開發(fā)庫(kù)叠萍,是一個(gè)類似boost的c++模板庫(kù),里面用到了很多c++的模板元編程的特性绪商,但是現(xiàn)在已經(jīng)對(duì)c++無(wú)愛(ài)了苛谷,所以早已廢棄不用了。
不過(guò)也就是這個(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ò)雾叭,拿來(lái)練手用的悟耘,沒(méi)法跟那些成熟的相比,識(shí)別率不是很高哈织狐,只能給大家用來(lái)參考學(xué)習(xí)了暂幼。
簡(jiǎn)介
本文在基本BP算法和數(shù)字圖像與處理的基礎(chǔ)上,通過(guò)改進(jìn)網(wǎng)絡(luò)移迫、圖像處理算法旺嬉,并結(jié)合實(shí)踐來(lái)探索如何實(shí)現(xiàn)具有高魯棒的、高精度的厨埋、高效率的脫機(jī)數(shù)字識(shí)別邪媳。
在這我主要研究脫機(jī)單體數(shù)字識(shí)別,其主要步驟為:
數(shù)字樣本的采集
主要采用5行10列的數(shù)字樣本規(guī)格。采集方式是通過(guò)掃描樣本卡片來(lái)獲取圖像雨效,也盡量避免樣本了的失真迅涮,如圖:
圖像二值化
主要采用全局閾值分割法和自適應(yīng)的局部閾值分割法,來(lái)實(shí)現(xiàn)在不同亮度背景下的自適應(yīng)分割徽龟,并對(duì)結(jié)果進(jìn)行比對(duì)叮姑。
數(shù)字提取
目前主要考慮聚類法、矩陣式分割法据悔、連通區(qū)域標(biāo)記法传透,并比較其優(yōu)劣,選取效果最好的一種算法极颓。
圖像歸一化
主要采用雙線性內(nèi)插和最鄰近內(nèi)插來(lái)實(shí)現(xiàn)放大朱盐,為了減少圖像在收縮時(shí)帶來(lái)的失真,目前打算采用求平均法來(lái)實(shí)現(xiàn)菠隆。
特征提取
主要采用逐像素提取法兵琳,PCA主成分提取兩種方法來(lái)實(shí)現(xiàn)。
樣本學(xué)習(xí)
主要采用基于BP算法(反向傳播學(xué)習(xí)算法)的神經(jīng)網(wǎng)絡(luò)進(jìn)行識(shí)別浸赫,并對(duì)BP進(jìn)行一定的改進(jìn)和優(yōu)化闰围,來(lái)改進(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ò)集成法,來(lái)進(jìn)行優(yōu)化稻扬。
主要針對(duì)不同權(quán)值卦方、隱層數(shù)的基本BP網(wǎng)絡(luò)進(jìn)行集成。通過(guò)每個(gè)網(wǎng)絡(luò)分類的結(jié)果進(jìn)行加權(quán)輸出泰佳,來(lái)達(dá)到有效的分類盼砍。
閾值分割
閾值分割法是一種基于區(qū)域的圖像分割技術(shù),其基本原理是:通過(guò)設(shè)定不同的特征閾值逝她,把圖像像素點(diǎn)分為若干類浇坐。
在本文中,我們主要處理針對(duì)兩類的分割黔宛,令閾值為T近刘,圖像像素對(duì)應(yīng)的灰度級(jí)為f(x, y)
,那么經(jīng)閾值分割后的圖像g(x, y)
定義為:
因此,標(biāo)記為1的像素對(duì)應(yīng)于對(duì)象觉渴,也就是前景介劫,而標(biāo)記為0的對(duì)象對(duì)應(yīng)于背景,也就是我們通常所說(shuō)的圖像二值化案淋。
利用閾值分割進(jìn)行圖像二值化的主要難題就是閾值的選取蜕猫,事實(shí)證明,閾值的選擇的恰當(dāng)與否對(duì)分割的效果起著決定性的作用哎迄。
常用的閾值分割方法有以下三種:
整體閾值法
利用整幅圖像的信息對(duì)圖像求出最優(yōu)閾值, 在二值化分割過(guò)程中只使用這一個(gè)固定閾值回右,因此計(jì)算量小,但對(duì)于亮度條件不好的圖像的分割效果較差漱挚。
局部閾值法
它是把原始圖像分為幾個(gè)小的子圖像翔烁,再對(duì)每個(gè)子圖像求出最佳閾值。因此效果較好旨涝,但開銷較大蹬屹,且局部大小不太好確定,太小容易失真白华,太大效果不顯著慨默。
動(dòng)態(tài)閾值法
它的閾值求取方法不僅取決于該像素的灰度值及其領(lǐng)域內(nèi)像素灰度值, 而且還與像素的坐標(biāo)位置有關(guān), 這種方法靈活性大, 但是復(fù)雜度高, 計(jì)算量和時(shí)間開銷都比較大。
而岡薩雷斯寫的那本書數(shù)字圖像處理里面弧腥,給出了一種最小誤差閾值厦取,通過(guò)利用共軛梯度法對(duì)灰度直方圖進(jìn)行雙峰的高斯密度曲線進(jìn)行擬合,求取最佳閾值管搪,效果相當(dāng)好虾攻,但是計(jì)算太大,而且對(duì)于雙峰不顯著的圖像比較難處理更鲁,還需進(jìn)行附加的單峰檢測(cè)霎箍,并進(jìn)行插值處理,由于過(guò)于復(fù)雜且實(shí)現(xiàn)也相當(dāng)困難澡为。
而本文采用具有自適應(yīng)性的OTSU局部閾值法來(lái)分割圖像漂坏,并對(duì)OTSU和局部閾值法進(jìn)行了改進(jìn),不僅提高了性能而且改善了分割效果媒至,對(duì)于亮度不均勻的圖像也能實(shí)現(xiàn)較好的分割顶别。
最大類間方差法(OTSU)
由Otsu于1978年提出的最大類間方差法以其計(jì)算簡(jiǎn)單、穩(wěn)定有效塘慕,一直廣為使用筋夏。其主要思想就是選取閾值使其類內(nèi)方差最小化或類間方差最大化。Otsu算法不僅計(jì)算簡(jiǎn)單图呢,而且能夠應(yīng)用于多閾值確定条篷,因此可以說(shuō)是一種相當(dāng)好的閾值選取方法骗随。
我們通常采用最大化類間方差,來(lái)實(shí)現(xiàn)閾值分割赴叹,其類間方差定義為:
其中
|| u || 圖像中總的灰度均值 ||
|| u1 || 圖像中小于閾值T的像素灰度均值 ||
|| u2 || 圖像中大于閾值T的像素灰度均值 ||
|| n1 || 圖像中小于閾值T的像素?cái)?shù) ||
|| n2 || 圖像中大于閾值T的像素?cái)?shù) ||
因此鸿染,只需通過(guò)遍歷256個(gè)灰度級(jí),尋找使其類間方差最大的那個(gè)灰度值就是最佳閾值T乞巧。
OTSU的實(shí)現(xiàn)與改進(jìn)
然而如果每次遍歷都需要重新計(jì)算閾值兩邊的均值與像素?cái)?shù)的話計(jì)算量是相當(dāng)大的涨椒,如果能夠在下次遍歷時(shí)利用上次計(jì)算的結(jié)果,那么計(jì)算量可以大大減少绽媒。
假設(shè)灰度直方圖為蚕冬,圖像總均值為,圖像總像素?cái)?shù)為是辕,那么其遞推方式如下:
來(lái)替換,得到
由于n在遞歸中不變可以省略获三,因此可以改為
由于本文是針對(duì)字符圖像的分割旁蔼,由于字符的筆畫通常較細(xì),通常只占圖像的1/4都不到疙教,因此可以適當(dāng)?shù)恼{(diào)整閾值棺聊,以實(shí)現(xiàn)較好的分割效果,改進(jìn)后的閾值為
局部閾值的實(shí)現(xiàn)與改進(jìn)
然而在實(shí)際圖像中, 由于噪聲或其他干擾等因素的影響贞谓,OTSU閾值分割并不能使圖像分割得到滿意的結(jié)果, 往往會(huì)產(chǎn)生嚴(yán)重的分割錯(cuò)誤限佩。這是因?yàn)閳D像的灰度直方圖分布不一定
出現(xiàn)明顯的峰和谷, 像素灰度值僅僅反映了像素灰度級(jí)的幅值大小, 并沒(méi)有反映出像素與鄰域的空間相關(guān)信息。
通過(guò)具體的實(shí)驗(yàn)發(fā)現(xiàn):
當(dāng)圖像亮度分布不均勻時(shí)经宏,往往無(wú)法得到好的分割效果犀暑,通常會(huì)出現(xiàn)大塊的黑塊,或者過(guò)渡分割而丟失信息的情況烁兰。
因此,可以通過(guò)對(duì)圖像進(jìn)行分塊徊都,針對(duì)每一小塊進(jìn)行OTSU分割沪斟,可以減少這些情況的發(fā)生,但是這又會(huì)出現(xiàn)不希望的“棋盤”效果暇矫,為了避免這種情況的發(fā)生主之,可以采用如下改進(jìn)的局部閾值算法:
遍歷圖像中每一像素,在該像素的鄰域內(nèi)進(jìn)行灰度統(tǒng)計(jì)李根,計(jì)算OTSU閾值槽奕,并僅對(duì)該點(diǎn)進(jìn)行閾值分割。
這樣就能在較好的分割效果下實(shí)現(xiàn)像素平滑過(guò)渡房轿,避免了“棋盤”效應(yīng)粤攒,由于在當(dāng)像素移動(dòng)時(shí)所森,只有一行或一列改變,所以可以在每步移動(dòng)中夯接,以新數(shù)據(jù)更新前一個(gè)位置得到的直方圖焕济,從而避免了每次重新計(jì)算整個(gè)直方圖,大大減少了計(jì)算量盔几,使其在一個(gè)可接受的范圍內(nèi)晴弃。
為了防止部分區(qū)域受到噪聲干擾而產(chǎn)生的黑塊現(xiàn)象,可以在進(jìn)行局部閾值處理前逊拍,進(jìn)行三階的平滑處理上鞠,效果相當(dāng)顯著。
結(jié)果
原圖
經(jīng)全局閾值處理后的圖象
經(jīng)改進(jìn)的局部閾值處理后的圖像
總結(jié)
由上圖可見(jiàn)芯丧,經(jīng)改進(jìn)的局部閾值處理后的圖像的效果還是相當(dāng)明顯的芍阎,可是還是有些不足之處。注整。
就是處理后的圖像筆畫較粗能曾,容易填掉數(shù)字中的空洞,尤其是4肿轨,6寿冕,8,9這些含有小孔的數(shù)字椒袍,這些都有待進(jìn)一步改進(jìn)驼唱。
后續(xù),我還會(huì)總結(jié)下:傾斜矯正驹暑、數(shù)字提取玫恳、特征提取、神經(jīng)網(wǎng)絡(luò)相關(guān)的一些心得和改進(jìn)算法优俘。京办。
最后,再貼兩張hnr項(xiàng)目帆焕,界面截圖哈惭婿。。
個(gè)人主頁(yè):TBOOX開源工程
原文出處:http://www.tboox.org/cn/2016/07/28/hnr-split-image/