手寫數(shù)字識(shí)別系統(tǒng)之圖像分割

背景

本文队萤,主要介紹我之前在學(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í)別,其主要步驟為:

overview_1

數(shù)字樣本的采集

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

overview_2

圖像二值化

主要采用全局閾值分割法和自適應(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)定義為:

split_1

因此,標(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)困難澡为。

split_2

而本文采用具有自適應(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)閾值分割赴叹,其類間方差定義為:

otsu_1

其中

|| 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ù)為是辕,那么其遞推方式如下:

otsu_2

為了進(jìn)一步簡(jiǎn)化計(jì)算囤热,我們可以通過(guò)用
otsu_3

來(lái)替換,得到

otsu_4

由于n在遞歸中不變可以省略获三,因此可以改為

otsu_5

由于本文是針對(duì)字符圖像的分割旁蔼,由于字符的筆畫通常較細(xì),通常只占圖像的1/4都不到疙教,因此可以適當(dāng)?shù)恼{(diào)整閾值棺聊,以實(shí)現(xiàn)較好的分割效果,改進(jìn)后的閾值為

otsu_6

局部閾值的實(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é)果

原圖

split_3

經(jīng)全局閾值處理后的圖象

split_4

經(jīng)改進(jìn)的局部閾值處理后的圖像

split_5

總結(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)目帆焕,界面截圖哈惭婿。。

before

after

個(gè)人主頁(yè):TBOOX開源工程
原文出處:http://www.tboox.org/cn/2016/07/28/hnr-split-image/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末叶雹,一起剝皮案震驚了整個(gè)濱河市财饥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌折晦,老刑警劉巖钥星,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異满着,居然都是意外死亡谦炒,警方通過(guò)查閱死者的電腦和手機(jī)贯莺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)编饺,“玉大人乖篷,你說(shuō)我怎么就攤上這事⊥盖遥” “怎么了撕蔼?”我有些...
    開封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)秽誊。 經(jīng)常有香客問(wèn)我鲸沮,道長(zhǎng),這世上最難降的妖魔是什么锅论? 我笑而不...
    開封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任讼溺,我火速辦了婚禮,結(jié)果婚禮上最易,老公的妹妹穿的比我還像新娘怒坯。我一直安慰自己,他們只是感情好藻懒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開白布剔猿。 她就那樣靜靜地躺著,像睡著了一般嬉荆。 火紅的嫁衣襯著肌膚如雪归敬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天鄙早,我揣著相機(jī)與錄音汪茧,去河邊找鬼。 笑死限番,一個(gè)胖子當(dāng)著我的面吹牛舱污,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弥虐,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼慌闭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了躯舔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤省古,失蹤者是張志新(化名)和其女友劉穎粥庄,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體豺妓,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惜互,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年布讹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片训堆。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡描验,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坑鱼,到底是詐尸還是另有隱情膘流,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布鲁沥,位于F島的核電站呼股,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏画恰。R本人自食惡果不足惜彭谁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望允扇。 院中可真熱鬧缠局,春花似錦、人聲如沸考润。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)额划。三九已至妙啃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間俊戳,已是汗流浹背揖赴。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抑胎,地道東北人燥滑。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像阿逃,于是被迫代替她去往敵國(guó)和親铭拧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容