054] 圖2為本發(fā)明實(shí)施字符識(shí)別采用的卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0055] 下面結(jié)合附圖對本發(fā)明實(shí)施例提供的自然場景中手寫體數(shù)學(xué)公式結(jié)構(gòu)分析與識(shí) 別的方法進(jìn)行詳細(xì)描述。
[0056] 如圖1所示,本發(fā)明實(shí)施例提供的自然場景中手寫體數(shù)學(xué)公式結(jié)構(gòu)分析與識(shí)別方 法包括以下步驟:
[0057] 步驟S1,將自然場景圖像的灰度矩陣轉(zhuǎn)換為局部對比度矩陣,使用otsu法對得到 的局部對比度矩陣進(jìn)行二值劃分,得到二值矩陣;
[0058] 本實(shí)施例中局部對比度矩陣中坐標(biāo)為(i,j)的點(diǎn)的局部對比度Con(i,j)計(jì)算公 式為:
[0059] Con (i,j) = a C (i,j) + (I- a ) (Iniax (i,j) -Iniin (i,j))
[0060] 其中,
[0061] Inax(i,j)和I_(i,j)分別為圖像的灰度矩陣中以坐標(biāo)為(i,j)的點(diǎn)為中心的鄰 域的最大灰度值和最小灰度值,此處我們設(shè)置鄰域的半徑為5 ;
Std表示灰度矩陣的標(biāo)準(zhǔn)差,γ = 1。
ε為是防止分母為0的無窮小量。
[0064] 本實(shí)施例中使用otsu法對得到的局部對比度矩陣進(jìn)行二值劃分的方法為:取局 部對比度矩陣中最大值和最小值,將最大值和最小值之間等分為1000份小區(qū)間,將每個(gè)元 素劃分到其對應(yīng)的小區(qū)間中,形成一個(gè)長度為1000的統(tǒng)計(jì)直方圖,對該直方圖采用OTSU法 進(jìn)行二值劃分,小于所選閾值的點(diǎn)為背景點(diǎn),大于所選閾值的點(diǎn)為字符點(diǎn)。
[0065] 步驟S2,對步驟Sl中二值矩陣進(jìn)行連通域分析,剔除非字符連通域,得到字符連 通域,具體方法為:
[0066] 步驟S201 :獲取連通域的最小外包矩形,記錄該最小外包矩形的四個(gè)頂點(diǎn)的坐 標(biāo),計(jì)算出最小外包矩形的長度和高度;
[0067] 步驟202 :統(tǒng)計(jì)所有連通域的平均長度和高度;
[0068] 步驟S203 :進(jìn)行非字符連通域的剔除:
[0069] 如果某個(gè)連通域的長度和高度均小于平均長度和高度的1/4,則認(rèn)為它是噪聲點(diǎn), 剔除掉該連通域;
[0070] 如果某個(gè)連通域的長度和高度均大于平均長度和高度的4倍,則認(rèn)為它是圖像中 的非字符部分,剔除掉該連通域;
[0071] 步驟S204 :保存剩余連通域作為字符連通域,依其最小外包矩形獲取字符連通域 的字符塊。
[0072] 步驟S3,采用相關(guān)系數(shù)法對步驟S2中的字符連通域進(jìn)行公式特殊結(jié)構(gòu)元素檢測, 并對所有檢測到的特殊結(jié)構(gòu)元素進(jìn)行單獨(dú)標(biāo)注;
[0073] 本實(shí)施例的公式特殊結(jié)構(gòu)元素包括大括號(hào)、根號(hào)、分式線;
[0074] 采用規(guī)則匹配法對分式線連通域進(jìn)行檢測:選擇連通域的的長度與寬度之比大于 5且連通域的上部和下部需有相鄰連通域的連通域,并將該連通域標(biāo)識(shí)為分式線連通域;
[0075] 采用模板匹配法對于大括號(hào)連通域和根號(hào)連通域進(jìn)行檢測,標(biāo)準(zhǔn)模板采用的是 32*32的矩陣,對于待檢測的字符連通域的字符塊,也需要規(guī)范化成32*32的矩陣,計(jì)算這 兩個(gè)矩陣的相關(guān)系數(shù),若其大于〇. 5,則表示匹配成功,具體步驟為:
[0076] 步驟S301 :選擇大括號(hào)連通域和根號(hào)連通域的標(biāo)準(zhǔn)二值模板;
[0077] 步驟S302 :將當(dāng)前連通域的大小進(jìn)行規(guī)范化,使它的大小和標(biāo)準(zhǔn)模板一樣;
[0078] 步驟S303 :將標(biāo)準(zhǔn)二值模板分別與當(dāng)前連通域進(jìn)行匹配,
[0079] 匹配的公式為相關(guān)系數(shù)公式,表示為:
[0081] 其中,^和y i分別表示當(dāng)前模板和標(biāo)準(zhǔn)模板中第i個(gè)元素的值,I和分別表示當(dāng) 前模板和標(biāo)準(zhǔn)模板的均值;r e (〇, 1),當(dāng)r值大于〇. 5時(shí),匹配成功。
[0082] 對所有檢測到的特殊結(jié)構(gòu)元素進(jìn)行單獨(dú)標(biāo)注,以便后續(xù)進(jìn)行結(jié)構(gòu)分析。
[0083] 步驟S4,采用水平投影法對步驟Sl中的二值矩陣進(jìn)行行劃分;
[0084] 對步驟Sl中的二值矩陣進(jìn)行水平投影后得到波形圖,波形圖橫坐標(biāo)的值為原圖 像的行數(shù),縱坐標(biāo)的值為當(dāng)前行所包含的字符點(diǎn)的個(gè)數(shù),以波峰為基礎(chǔ)獲取行信息;
[0085] 規(guī)定相鄰波峰的距離必須在10以上,對于距離小于10的兩個(gè)波峰,僅保留峰值更 高的一個(gè),且規(guī)定波峰的高度最低得大于圖像長度的二十分之一;
[0086] 對于滿足上述條件的波峰,從波峰左右兩端同時(shí)往外擴(kuò)展,直到數(shù)值小于波峰高 度的0.01倍時(shí),停止擴(kuò)展,
[0087] 從波形圖各個(gè)波峰處向其左右擴(kuò)展,直到數(shù)值小于其波峰值的0. 1倍時(shí),停止擴(kuò) 展;若相鄰兩個(gè)波峰擴(kuò)展時(shí)發(fā)生了重疊,則其對應(yīng)的兩行合并為一行;若相鄰兩個(gè)波峰擴(kuò) 展時(shí)發(fā)生了重疊,則其對應(yīng)的兩行合并為一行;
[0088] 記錄每一行的起始和結(jié)束位置,波峰左端對應(yīng)的橫坐標(biāo)即為當(dāng)前行的起始行坐 標(biāo),波峰右端對應(yīng)的橫坐標(biāo)為當(dāng)前行的結(jié)束行坐標(biāo)。
[0089] 得到每一行的起始和結(jié)束位置信息后,將每一個(gè)字符連通域與行對應(yīng),具體方法 為:計(jì)算每一字符連通域中心的水平坐標(biāo)與各個(gè)文本行中心的水平坐標(biāo)的距離,將字符連 通域劃分到距離最小的那一行中。
[0090] 因?yàn)榉匠探M有時(shí)可能會(huì)被誤劃分成多行,因此規(guī)定,大括號(hào)所在的行數(shù),不允許被 分成多行。
[0091] 步驟S5,采用卷積神經(jīng)網(wǎng)絡(luò)對每個(gè)字符連通域進(jìn)行識(shí)別;
[0092] 如圖2所示,卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)為Lenet-5結(jié)構(gòu),該卷積神經(jīng)網(wǎng)絡(luò)由一個(gè)輸入 層、兩個(gè)卷積和下采樣層、一個(gè)全連接隱層和一個(gè)輸出層組成;
[0093] 輸入層樣本大小為32*32,第一個(gè)卷積層特征圖個(gè)數(shù)為6個(gè),第二個(gè)卷積層特征圖 個(gè)數(shù)為16個(gè),下采樣層采用的是最大值輸出的方式,行列都變?yōu)樵瓉淼囊话耄[藏層結(jié)點(diǎn) 個(gè)數(shù)是120個(gè),輸出層節(jié)點(diǎn)個(gè)數(shù)是84個(gè);
[0094] 訓(xùn)練樣本為規(guī)范化后的字符連通域的樣本,由通過上述二值化方式獲得,即訓(xùn)練 樣本和預(yù)測樣本獲取的方式以及歸一化的方式是一樣的,這樣做是為了提高識(shí)別準(zhǔn)確率。
[0095] 將步驟S2中的字符連通域規(guī)范化后輸入卷積神經(jīng)網(wǎng)絡(luò),得到每一個(gè)字符連通域 對應(yīng)的字符。
[0096] 步驟S6,定義輸出順序,將識(shí)別結(jié)果按照對應(yīng)的順序,以latex排版格式進(jìn)行輸 出;
[0097] 定義的輸出順序包括三層:
[0098] 第一層順序關(guān)系是行序關(guān)系:根據(jù)字符連通域與行的對應(yīng)關(guān)系,按行輸出相應(yīng)的 字符連通域;
[0099] 第二層順序關(guān)系是列序關(guān)系:在每一行內(nèi),所有字符連通域按照其左端列坐標(biāo)進(jìn) 行升序排序;
[0100] 第三層順序關(guān)系是公式特殊結(jié)構(gòu)中的序列關(guān)系:方程組中元素是按照每一個(gè)方程 進(jìn)行輸出;分式元素是按照先分子、后分母的形式進(jìn)行輸出。
[0101] 對于公式特殊結(jié)構(gòu)中的序列關(guān)系,需要確定每一個(gè)公式特殊結(jié)構(gòu)元素包含的字符 塊;
[0102] 對于大括號(hào),代表的是方程組這個(gè)特殊結(jié)構(gòu),需要確定方程組結(jié)束的列坐標(biāo),從而 確定其包含的所有字符塊;依據(jù)字符塊所處當(dāng)前行的位置,將其分為"上部、中部、下部"三 個(gè)部分,凡是位于上部和下部的字符塊,都認(rèn)為是方程組中的元素,找出所有這樣的字符 塊,以其中最右端的字符塊的結(jié)束列作為整個(gè)方程組的結(jié)束列;凡是位于大括號(hào)和方程組 結(jié)束列的所有字符塊,都劃分到當(dāng)前方程組結(jié)構(gòu)中;對方程組結(jié)構(gòu)內(nèi)部再次進(jìn)行行劃分,確 定其內(nèi)部含有幾個(gè)方程,將方程組內(nèi)部的字符塊按照方程順序進(jìn)行輸出;
[0103] 對于分式線,需要確定當(dāng)前分式所有分子和分母元素,凡是起始縱坐標(biāo)大于分式 線起始縱坐標(biāo),且結(jié)束縱坐標(biāo)小于分式線結(jié)束縱坐標(biāo)的字符塊,都被劃分到當(dāng)前分式結(jié)構(gòu) 中;對分式結(jié)構(gòu)中的字符塊,需要進(jìn)一步確定其是分子還是分母,確定方式根據(jù)字符塊的橫 坐標(biāo)決定:若字符塊底部橫坐標(biāo)若小于分式線中心橫坐標(biāo),則其屬于分子;若字符塊頂部 橫坐標(biāo)大于分式線中心橫坐標(biāo),則其屬于分母;
[0104] 對于根號(hào),需要確定位于根號(hào)內(nèi)部的字