Lsplit= 160,步進(jìn)距離Dstep= 10。圖3中水平虛線HL Split表示高低閾值,垂直點(diǎn)線表示按步進(jìn)距離自上而下的掃描線。兩條相鄰的掃描線之間構(gòu)成一次步進(jìn)。兩條相鄰的掃描線之間的距離為步進(jìn)距離Dstep= 10。掃描線與輪廓線的交點(diǎn)即為輪廓點(diǎn),如圓A和圓B中的輪廓點(diǎn)SA、Ea、S#P E b?其中SjP S 步進(jìn)的起始點(diǎn)P s,Ea^P E B步進(jìn)的結(jié)束點(diǎn)PE。根據(jù)起始點(diǎn)Ps的縱向坐標(biāo)Y 5和結(jié)束點(diǎn)P E的縱向坐標(biāo)Ye的比較,可以得到中間狀態(tài)
S。假如Ys> Ye+ SThresh()ld,則步進(jìn)范圍內(nèi)輪廓走向向上,中間狀態(tài)S為“上行”;假如YE>L S ThMsh()ld,則步進(jìn)范圍內(nèi)輪廓走向向下,中間狀態(tài)S為“下行”,否則步進(jìn)范圍內(nèi)輪廓走向水平,中間狀態(tài)S為“水平”。S—ld為前述抖動(dòng)閾值。步驟S23的每一次掃描只用一根掃描線掃描,只產(chǎn)生一個(gè)輪廓點(diǎn),由此在第一次掃描時(shí)只能得到一個(gè)輪廓點(diǎn)進(jìn)行處理,如圖
3、4、5的第一個(gè)輪廓點(diǎn)SA。為此引入一個(gè)假想存在的初始點(diǎn),也即前述的步驟S22中的初始點(diǎn)Po。當(dāng)?shù)谝淮螔呙钑r(shí),以初始點(diǎn)Ptl作為起始點(diǎn)P s,掃描線掃描到的輪廓點(diǎn)為結(jié)束點(diǎn)PE。當(dāng)掃描和分析結(jié)束時(shí),結(jié)束點(diǎn)PJ武值給起始點(diǎn)P s作為下一次掃描的起始點(diǎn)。當(dāng)掃描線越出音符草圖邊界時(shí),以終止點(diǎn)P1作為結(jié)束點(diǎn)P E。這也是前述圖2中的輪廓狀態(tài)序列“UHDL”中第一個(gè)“U”的來源。
[0022]步驟24合并的步驟,并不是將中間狀態(tài)S簡單的轉(zhuǎn)換成輪廓狀態(tài)加入至輪廓狀態(tài)序列。顯而意見地,輪廓狀態(tài)序列不可能是輪廓狀態(tài)的任意組合,因?yàn)檫@不符合輪廓邏輯。因此合并時(shí),需要分析當(dāng)前輪廓狀態(tài)序列和初始點(diǎn)坐標(biāo)以及中間狀態(tài)S之間的輪廓關(guān)聯(lián)關(guān)系。分析合并過程如下:
1.輪廓字符串為空時(shí)。則有:
if (中間狀態(tài)S為“上行”),則表示當(dāng)前輪廓狀態(tài)為“U”加入輪廓字符串; elseif (中間狀態(tài)S為“下行”),則表示當(dāng)前輪廓狀態(tài)為“D”加入輪廓字符串; elseif (中間狀態(tài)S為“水平”),則表示當(dāng)前輪廓狀態(tài)為“L”加入輪廓字符串。
[0023]2.輪廓走向完全相同。有:
if ((輪廓字符串的最后一個(gè)字符為“U”)and (當(dāng)前中間狀態(tài)S為“上行”)),則表示當(dāng)前輪廓狀態(tài)為“U”,輪廓字符串保持不變;
elseif ((輪廓字符串的最后一個(gè)字符為“H”或“L”)and (當(dāng)前中間狀態(tài)S為“水平”),則表示當(dāng)前輪廓狀態(tài)相應(yīng)的“H”或“L”,輪廓字符串保持不變;
elseif ((輪廓字符串的最后一個(gè)字符為“D”)and (當(dāng)前中間狀態(tài)S為“下行”)),則表示當(dāng)前輪廓狀態(tài)相應(yīng)的“D”,輪廓字符串保持不變。
[0024]3.輪廓走向趨向相同。有:
if ((輪廓字符串的最后一個(gè)字符為“H”)and (當(dāng)前中間狀態(tài)S為“上行”),則表示當(dāng)前輪廓狀態(tài)為“H”,輪廓字符串保持不變;
elseif (輪廓字符串的最后一個(gè)字符為“L”)and (當(dāng)前中間狀態(tài)S為“下行”),則表示當(dāng)前輪廓狀態(tài)為“L”,輪廓字符串保持不變。
[0025]4.輪廓走向趨向交叉。有:
if ((輪廓字符串的最后一個(gè)字符為“U”)and (當(dāng)前中間狀態(tài)S為“水平”)),則: 將當(dāng)前起始點(diǎn)坐標(biāo)與高低閾值比較得到當(dāng)前輪廓狀態(tài)為“H”或“L”, if (當(dāng)前輪廓狀態(tài)為“L”),則輪廓字符串保持不變,
elseif (輪廓字符串的倒數(shù)第二個(gè)字符為“H”),則刪除輪廓字符串的最后一個(gè)字符“U”,否則將“H”加入至輪廓字符串。
[0026]elseif ((輪廓字符串的最后一個(gè)字符為“D”)and (當(dāng)前中間狀態(tài)S為“水平”)),則:
將當(dāng)前起始點(diǎn)坐標(biāo)與高低閾值比較得到當(dāng)前輪廓狀態(tài)為“H”或“L”, if (當(dāng)前輪廓狀態(tài)為“H”),則輪廓字符串保持不變,
elseif (輪廓字符串的倒數(shù)第二個(gè)字符為“L”),則刪除輪廓字符串的最后一個(gè)字符“D”,否則將“L”加入至輪廓字符串。
[0027]elseif ((輪廓字符串的最后一個(gè)字符為“H”)and (當(dāng)前中間狀態(tài)S為“下行”),則將“D”加入至輪廓字符串。
[0028]elseif ((輪廓字符串的最后一個(gè)字符為“L”)and (當(dāng)前中間狀態(tài)S為“上行”)),則將“U”加入至輪廓字符串。
[0029]5.輪廓走向趨向相背。有:
if ((輪廓字符串的最后一個(gè)字符為“U”)and (當(dāng)前中間狀態(tài)S為“下行”)),則: 將當(dāng)前結(jié)束點(diǎn)坐標(biāo)與高低閾值比較得到當(dāng)前輪廓狀態(tài)為“H”或“L”, if (當(dāng)前輪廓狀態(tài)為“H”),則輪廓字符串保持不變;
elseif (輪廓字符串的倒數(shù)第二個(gè)字符為“L”),則刪除輪廓字符串的最后一個(gè)字符“U”,否則將刪除輪廓字符串的最后一個(gè)字符“U”,“DL”加入至輪廓字符串。
[0030]if ((輪廓字符串的最后一個(gè)字符為“D”)and (當(dāng)前中間狀態(tài)S為“上行”)),則:
將當(dāng)前結(jié)束點(diǎn)坐標(biāo)與高低閾值比較得到當(dāng)前輪廓狀態(tài)為“H”或“L”, if (當(dāng)前輪廓狀態(tài)為“L”),則輪廓字符串保持不變;
elseif (輪廓字符串的倒數(shù)第二個(gè)字符為“H”),則刪除輪廓字符串的最后一個(gè)字符“D”,否則將刪除輪廓字符串的最后一個(gè)字符“D”,“UH”加入至輪廓字符串。
[0031]根據(jù)上述輪廓字符串的分析合并,輪廓字符串具有以下特性:
1、輪廓字符串總是以“UH”、“L”作為開始。
[0032]2、輪廓字符串總是以“ HD ”、“ L ”作為結(jié)束。
[0033]3、輪廓字符串的兩個(gè)相鄰字符不可能相同。
[0034]4、輪廓字符串中“U”的后一字符不可能是“L”和“D”。
[0035]5、輪廓字符串中“D”的后一字符不可能是“H”和“U”。
[0036]6、輪廓字符串中“H”的后一字符不可能是“L”和“U”。
[0037]7、輪廓字符串中“L”的后一字符不可能是“H”和“D”。
[0038]四、匹配器比較
匹配器比較的步驟,也即為前述步驟S3,將輪廓狀態(tài)序列與預(yù)先構(gòu)建的音符模型輪廓匹配得到對(duì)應(yīng)的音符。最為簡單地,判斷上述步驟S2過程得到的輪廓狀態(tài)序列和預(yù)先構(gòu)建的音符模型輪廓匹配得到對(duì)應(yīng)的音符是否相同即可,假如存在一個(gè)簡單音符的兩邊的模型輪廓的輪廓狀態(tài)序列和得到的手寫音符的兩邊的輪廓狀態(tài)序列相同,則認(rèn)為該手寫音符即為該簡單音符。假如存在一個(gè)復(fù)雜音符的四邊的模型輪廓的輪廓狀態(tài)序列和得到的手寫音符的四邊的輪廓狀態(tài)序列相同,則認(rèn)為該手寫音符即為該復(fù)雜音符。
[0039]五、異常斷點(diǎn)的處理
如圖6所示,存在C和D兩個(gè)異常斷點(diǎn),這兩個(gè)斷點(diǎn)是由用戶手寫音符時(shí)出現(xiàn)抖動(dòng)時(shí)產(chǎn)生的軌跡不連續(xù)的斷點(diǎn)。
[0040]對(duì)于斷點(diǎn)C,根據(jù)前述的軌跡分析,可以得到兩個(gè)相鄰輪廓狀態(tài),表示為“DU”,根據(jù)前述步驟S24中分析合并過程中的第5種情形:
if ((輪廓字符串的最后一個(gè)字符為“D”)and (當(dāng)前中間狀態(tài)S為“上行”)),則:將當(dāng)前結(jié)束點(diǎn)坐標(biāo)與高低閾值比較得到當(dāng)前輪廓狀態(tài)為“H”或“L”,if (當(dāng)前輪廓狀態(tài)為“H”)and (輪廓字符串的倒數(shù)第二個(gè)字符為“H”),則刪除輪廓字符串的最后一個(gè)字符“D”。
[0041]兩個(gè)相鄰輪廓狀態(tài),加上之前的輪廓狀態(tài)為“HDU”,最終合并成“H”。
[0042]對(duì)于斷點(diǎn)D,由于軌跡和掃描線不存在交點(diǎn),此時(shí)可以將相鄰的兩個(gè)步進(jìn)合并成一個(gè),最終得到的輪廓狀態(tài)為“L”。
[0043]本領(lǐng)域技術(shù)人員理解,上述實(shí)施僅是本發(fā)明的【具體實(shí)施方式】之一。但凡采用通過本發(fā)明等同替換或類似變換的方法均符合本發(fā)明的精神,在本發(fā)明的保護(hù)范圍內(nèi)。
【主權(quán)項(xiàng)】
1.一種基于掃描線的音符識(shí)別方法,其特征在于,包括如下步驟: S1:獲取用戶輸入的音符草圖; 52:對(duì)音符草圖的左右兩邊輪廓用輪廓分析器掃描分析輪廓的形狀,將輪廓的形狀用輪廓狀態(tài)簡化表示成輪廓狀態(tài)序列;所述輪廓狀態(tài)分為“上跳”、“下跳”、“高平”和“低平”; 53:將輪廓狀態(tài)序列與預(yù)先構(gòu)建的音符模型輪廓匹配得到對(duì)應(yīng)的音符。
2.如權(quán)利要求1所述的基于掃描線的音符識(shí)別方法,其特征在于,所述步驟S2中所述“輪廓分析器掃描分析輪廓的形狀”包括以下步驟: 521:根據(jù)音符草圖的大小設(shè)定抖動(dòng)閾值和步進(jìn)距離; 522:初始化輪廓狀態(tài)序列,并將中間狀態(tài)S初始化為“未知”; 523:根據(jù)步進(jìn)距離對(duì)音符草圖輪廓進(jìn)行步進(jìn)掃描,根據(jù)抖動(dòng)閾值判斷步進(jìn)范圍內(nèi)輪廓走向?yàn)椤吧闲小?、“水平”還是“下行”;假如步進(jìn)范圍內(nèi)輪廓走向向上超過抖動(dòng)閾值,則標(biāo)記中間狀態(tài)S為“上行”;假如步進(jìn)范圍內(nèi)輪廓走向向下超過抖動(dòng)閾值,則標(biāo)記中間狀態(tài)S為“下行”;假如步進(jìn)范圍內(nèi)輪廓走向向上和向下均不超過抖動(dòng)閾值,則標(biāo)記中間狀態(tài)S為“水平”; 524:根據(jù)當(dāng)前輪廓狀態(tài)序列和步進(jìn)的起始點(diǎn)以及中間狀態(tài)S的輪廓關(guān)聯(lián)分析,將中間狀態(tài)S轉(zhuǎn)換成輪廓狀態(tài)合并至輪廓狀態(tài)序列; 525:重復(fù)步驟S23至S24直到分析完成。
3.如權(quán)利要求1所述的基于掃描線的音符識(shí)別方法,其特征在于,該方法還包括對(duì)音符草圖的上下兩邊輪廓用輪廓分析器掃描分析輪廓的形狀的步驟。
【專利摘要】本發(fā)明公開了一種基于掃描線的音符識(shí)別方法。該方法通過對(duì)輸入的音符草圖采用掃描線分析的方法分析音符草圖四邊輪廓的形狀,將四邊輪廓分析成用“上跳”、“下跳”、“高平”和“低平”表示的輪廓狀態(tài)組成簡化的輪廓狀態(tài)序列;然后將輪廓狀態(tài)序列與預(yù)先構(gòu)建的音符模型輪廓匹配得到對(duì)應(yīng)的音符。本發(fā)明采用基于特征抽取的掃描線算法,在原有的理論基礎(chǔ)上創(chuàng)新地結(jié)合碰撞掃描與貫穿掃描,計(jì)算編輯距離,采用閾值判斷,跳出原有的特征抽取可能存在的幾何形狀類似,拐點(diǎn)重復(fù)等現(xiàn)狀,提高識(shí)別效率。
【IPC分類】G06K9-00
【公開號(hào)】CN104766067
【申請(qǐng)?zhí)枴緾N201510182832
【發(fā)明人】馮桂煥, 陳若輕, 梁曉雯
【申請(qǐng)人】南京大學(xué)
【公開日】2015年7月8日
【申請(qǐng)日】2015年4月17日