束美其
摘要:該文介紹了運用MATLAB軟件實現(xiàn)簡譜識別的算法。該算法主要實現(xiàn)圖像的預處理、分割以及匹配識別等功能,關鍵是對音符進行準確的分割,因為這直接影響到識別效果的好壞。
關鍵詞:簡譜識別;算法;MATLAB;分割
中圖分類號:TP37 文獻標識碼:A 文章編號:1009-3044(2014)36-8757-03
隨著數(shù)字化信息時代的到來,全球經(jīng)濟以前所未有的速度向前發(fā)展,同時,人們的生活水平和文化要求也越來越高,人們在各個領域的工作也更加的細化和深化,軟件行業(yè)異軍突起, 各種應用軟件不斷的得以開發(fā)并應用于工業(yè)、農(nóng)業(yè)、行政、文化娛樂等行業(yè),不僅為信息時代的人類提供了更加簡潔、方便的工作和生活方式,更加使我們的生活豐富多彩。在音樂方面,各種樂譜編輯軟件、音樂合成軟件和音樂制作軟件已經(jīng)廣泛地應用于音樂愛好者和專業(yè)人士的音樂工作中,在這些眾多的軟件中,絕大部分的音樂處理軟件都是對唱譜的后期制作與處理軟件,而對于樂譜的識別軟件相關的卻不多,樂譜識別,是相應于現(xiàn)代化人們對快節(jié)奏工作方式的要求而產(chǎn)生的,但現(xiàn)有的識別軟件大多都存在種種的誤差,實際應用性不高,能夠較準確地識別出樂譜地軟件更是少之又少,這就給樂譜識別的軟件開發(fā)人員帶來了動力與挑戰(zhàn),同時,樂譜識別軟件的開發(fā)也具有較好的市場發(fā)展前景。
簡譜,相對于五線譜而言,它書寫較為簡便,學習起來也比較容易,越來越多的人傾向于用簡譜來創(chuàng)作音樂,演奏音樂,目前市場上的簡譜識別軟件非常少,這與簡譜本身的特點有關,使得識別處理存在一些難點。因此,該文主要研究和設計了簡譜識別算法。
1 算法設計與實現(xiàn)
1.1 設計思路
對于一張掃描到電腦中的簡譜,進行識別前需要首先進行預處理,使之能夠轉化為易于進行數(shù)字化處理的形式。依次為中值濾波、二值化、細化處理,如前所述,中值濾波可以較好的去除圖片中的椒鹽噪聲,二值化將待處理音符提取出來,細化處理很好的保留了音符的形狀、邊界特征,這對于后續(xù)的識別是大有好處的。本識別系統(tǒng)中最重要的一步就是準確地分割出簡譜中的每個音符,分割的準確與否直接影響到識別效果的好壞,我們采用水平投影、垂直投影并以零為閾值分割出每行和每列,再次利用水平和垂直投影分割出單個音符,之后即可進行單個音符及其它符號的識別,這里需要注意的是需要用到多重循環(huán),其嵌套關系是逐步遞進的??偠灾聪确指?,每分割出一個音符就進行一次識別,然后對該字符附近幾個區(qū)域進行搜索其它符號的算法,每識別出一個音符賦一次值。其流程圖如圖1。
圖1 簡譜識別的基本流程
1.2 簡譜的分割算法
在本系統(tǒng)中,我們對簡譜用了四次分割:1) 水平投影(針對整篇簡譜)——行分割;2) 垂直投影(針對每行)——列分割;3) 水平投影(針對每列)——音符高度的分割;4) 垂直投影(針對2和3截出的區(qū)域)——音符寬度的分割。
第一次對整篇細化后的簡譜進行水平投影,可以劃分出每行的高度,這里的高度一般就是小節(jié)線的高度(記為higth(u),u為行數(shù)),當然,若該行中存在高低音點或減時線的話,水平投影后還會分割出距離較小的行高度,一般其值不超過5,這樣的行是沒有意義的,因為它不包含音符,所以在進行第二次每行的垂直分割之前,須進行一次判斷,即若該行的高度是大于5的,才對該行進行后面的垂直投影分割,小于等于5的情況不作處理;
第二次對每行進行垂直投影,可以劃分出每列的最大寬度(width(h),h為列數(shù)),這里的最大寬度可能是單個音符的寬度,也可能是帶有減時線的組合音符的寬度;
經(jīng)過兩次分割,截出的圖象區(qū)域的高度不是準確的字符高度,寬度也可能不是單個音符的寬度(不帶減時線的情況下可以分割出單個音符的寬度),因此,有必要再次確定音符的準確高度和寬度;
第三次水平投影,是對第二次分割出的每列進行的,這樣得到的高度值中可能也包含距離較小的高度(可能包含減時線),又因為音符的準確高度只能為一個值,所以我們可對分割出的高度higth1取最大值即:maxhigth1=max(higth1),即是單個字符的確切高度;
第四次分割是以第二次分割出的每個寬度width(h)為寬度,以第三次分割出的maxhigth1為高度,進行垂直投影,這樣就可以把組合音符也分割開來。
至此,每個音符都可以被依次分割出來,依次識別。具體的分割算法如下(以第一次分割為例):
y2=sum(bowa')';%每行象素值求和
T1=0; %分割閾值
i=1,j=1;
for k=1:m-1
if y2(k)<=T1&y2(k+1)>T1
h1(i)=k; %灰度上升點
i=i+1;
end
if y2(k)>T1&y2(k+1)<=T1
h2(j)=k+1+1; %灰度下降點
j=j+1;
end
end
higth=h2-h1; %分割出每行的高度
其中,bowa是做過細化后的二值圖像,y2是每行像素值之和,m是該簡譜圖像的行數(shù)。經(jīng)過該算法處理后,就可以得到準確的行高度和位置。其它三次分割算法與此類似。
1.3 音符及各種符號的識別算法
基圖的識別算法及流程:分割出單個音符后,首先要對其歸一化,即經(jīng)過放縮、線形插值算法處理,使其成為與模版相同的大小,這樣與模版進行匹配識別才能達到較準確的匹配比較結果。歸一化之后是圖像的匹配識別處理,這里模版的選取也是要值得注意的,因為平常掃描的簡譜字符屬于印刷體,印刷體雖然比手寫體規(guī)范許多,但是也會因印刷體的版本、大小不同有所區(qū)別。大小不同可以經(jīng)過歸一化處理轉化為規(guī)定大??;版本不同,但是音符的書寫的特點并未改變,所以采用模糊模版匹配的識別方法,即讓分割出的音符矩陣與模版矩陣做差并求和,認為與模版誤差最小的音符就是該模版所代表的音符。定義模版之前,需要查閱大量的簡譜,統(tǒng)計其音符的特點,之后選取與大部分音符特征最為相近的數(shù)字作為模版數(shù)字。這里模版的定義是:對模版數(shù)字1、2、3、4、5、6、7、0同樣放縮到規(guī)定大小,它們依次存放在一個矩陣中。進行模版匹配時,要讓分割出的每個音符分別與每個數(shù)字模版進行一次差值比較,對各差值取絕對值,這樣得到8個差值,再對這8個差值求最小值,那么該最小值對應的模版數(shù)字就是該音符的識別結果。
混合圖的識別算法及流程: 在簡譜中,存在著大量的組合音符,如圖2(a)圖中前四個音符就屬于一個組合音符,(b)圖中前三個是一個組合音符,后兩個也是一個組合音符。
(a) (b)
圖2 混合圖的識別舉例
由圖2可以看出,組合音符一般都包含減時線,使多個音符組成一個整體。如何識別這些復雜的組合音符呢?我們采用了先分割,再識別的方法,即在第一次水平分割,垂直分割的基礎上再次進行一次水平分割和一次垂直分割,有前所述,對于單個音符,第一次的分割可以得到準確的音符寬度和上下帶有空余的音符高度,在此基礎上進行第二次水平分割就可得到準確的音符高度。但對于組合音符,在第二次水平投影分割后得到的是準確的已去除減時線的組合音符的高度和寬度,并未分割出單個音符,因此必須再次進行垂直投影分割。這樣,整個簡譜經(jīng)過兩次水平投影分割,兩次垂直投影分割就可以準確地分割出單個音符了。
在最后一次列分割完成后,得到一個存放音符的數(shù)組,該數(shù)組中可能只有一個音符(對應于單個音符的情況),也可能包含若干個音符(對應于組合音符的情況),接下來對該數(shù)組中的每個音符要進行識別判斷,若該列的寬度是小于或等于5的,則不滿足音符條件,屬于附點,進行下一列的處理,否則滿足音符條件就進行音符的匹配識別。
各種符號的識別算法: 對簡譜中的小節(jié)線、延時線、高、低音點和附點的識別,我們都采用了閾值判別法,因為細化處理給我們帶來的很大的好處就是小節(jié)線、延時線在理想情況下都被細化成寬度或高度為1個像素值,經(jīng)過統(tǒng)計,即使不太理想的情況下其投影寬度也不會超過5,而附點的有無是通過計算特定區(qū)域內的像素不為零的點的個數(shù)(pointcnt),經(jīng)過統(tǒng)計,可定其閾值范圍為0 對小節(jié)線的判別是判斷它的寬度是否是<=5,是則不處理,否則進行延時線的判別; 對延時線是判斷它的高度是否是<=5的,是則對其前一個音符作延時線標記,否則可判定它滿足音符的條件,進行音符識別處理; 對高低音點和附點有無的判斷是在識別完該音符后,再在該音符的上方、下方、右方的某一特定區(qū)域內搜索不為零的像素個數(shù),如果個數(shù)是大于0且小于或等于4的話就說明存在,并對該音符進行高低音點、附點標記; 高音點的搜索區(qū)域(point1) 是這樣定義的:高度的行起點為從該音符的行起點值減去該音符的高度,行終點為該音符的行起點;寬度就是該音符的寬度,并與之列的起點和終點對齊。低音點的搜索區(qū)域與高音點的搜索區(qū)域(point2) 相對應,如下代碼實現(xiàn)的便是高、低音點的識別: p1=h11-maxhigth1; p2=h22+maxhigth1; if p1<=0 p1=1; end %越界處理 if p2>=m p2=m; end point1=(bowa(p1:h11,w11(t):w22(t))); point2=(bowa(h22:p2,w11(t):w22(t))); point1cnt=find(point1);[point1cnt,d]=size(point1cnt); point2cnt=find(point2);[point2cnt,d]=size(point2cnt); if point1cnt>0 & point1cnt<=4 flag=1; point(count)=3; %高低音點的識別 else flag=0; end if flag==0 if point2cnt>0 & point2cnt<=4 point(count)=1; flag=1; else flag=0; end end if flag==0 point(count)=2; end 上述代碼中用到了越界處理,這在處理點的運算時經(jīng)常要用到,在搜索區(qū)域中尋找像素值不為零的個數(shù),判斷是否在0~5之間,若是,則表示有高或低音點,否則沒有,注意這里高低音點的表示用的是數(shù)組point(count),由高音點,point(count)=3;有低音點,point(count)=1;兩者都不存在,point(count)=2;這些將作為識別結果的四位代碼的首位。同時,在代碼中,高低音點的識別采用相并行的處理方法,即若首先判斷出該音符有高音點,則不用再去執(zhí)行低音點的識別程序,這樣既可簡化識別過程,又符合邏輯。 附點的識別區(qū)域的高度定義為pointhigth=round(3/4*maxhigth1),寬度為該音符寬度的列終點加上pointhigth。識別過程與高低音點的識別相似,這里不再贅述。 對減時線的識別采用的是穿線法判別,即通過計算音符正下方一定區(qū)域內豎直方向上灰度突變的次數(shù)總和并求均值,四舍五入取整后,若統(tǒng)計結果是2,則表明該音符下方有一條減時線;若統(tǒng)計結果是4,則表明該音符下方有兩條減時線,若統(tǒng)計結果為0則表明該音符下方?jīng)]有減時線 2 運行結果 識別結果由一個四位的代碼來表示,有前所述,第一位代表音符是否含有高低音點,有高音點用3表示,有低音點用1表示,兩者都沒有用2表示;第二位代表的是具體的識別音符,用“x6”表示,其中“x”就是識別的音符(0~7) ,6這一位是與聲音庫中的代碼相對應的;最后一位代表的是音符的節(jié)拍,用阿拉伯數(shù)字0~9表示,識別結果的賦值語句如下:
result(count)=
point(count)*1000+Reconga(count)*10+resultpai(count)
在上式中,point(count)標記了高低音點的數(shù)值,Reconga(count)標記了識別出的具體音符,resultpai(count)標記了音符的節(jié)拍數(shù)值,這就是說,每個音符的識別結果包含了:音的高低、具體的音節(jié)、以及音符的節(jié)拍。并且每識出一個音符就記一個結果到數(shù)組result,并將其數(shù)組元素的個數(shù)加1。
該算法實現(xiàn)了對于一般簡譜的識別功能,經(jīng)統(tǒng)計,識別率達87%左右。易發(fā)生識別錯誤的情況,多是對于高低音點、附點的識別,由于本算法最終沒有用到中值濾波,因而對于簡譜圖像上的較小的噪聲點沒有去除,使得噪聲點易于同簡譜中的圓點混淆。這是因為用到本算法用到了細化處理,如果先對整篇簡譜進行中值濾波,由于中值濾波是對該像素點相鄰的8個像素點取中間的像素點的值,而很多時候兩條減時線之間僅相隔一個像素點的間隔,則許多情況下兩條減時線就會被合成一條粗線,再經(jīng)細化處理就成為一條細線了 ,那么經(jīng)過穿線法統(tǒng)計的話,就會判斷成一條減時線,從而導致識別節(jié)拍的錯誤,如果進行中值濾波,那么簡譜上的噪聲能夠被較好的去除,高低音點和附點的識別率也會上升。在個別情況下,某幾個數(shù)字的識別也容易發(fā)生識別錯誤,比如有時5會被識別成3,2有時會被識別成7,當然,這也和具體的掃描上的簡譜的清晰度有關,也和模版選取的合適與否有一定的關系。
3 算法改進
1) 找到合適的去噪方法
本算法在一開始確定用中值濾波去噪,是有一定的理論根據(jù)的,但是對于簡譜這種具體情況,中值濾波的處理會影響到減時線的識別。因此,找到一種合適的去噪算法,使之既可以較好的去除圖像上的椒鹽噪聲點,又不會影響減實線的個數(shù)。
2) 附點搜索的改進算法
本算法對于附點的搜索是在音符的右邊,以該音符寬度的列終點為搜索區(qū)域的列起點,寬度為該音符高度的3/4左右,搜索區(qū)域的高度也為該音符高度的3/4左右,對于一般的情況是可以正確識別出附點的。但是,有時候兩個音符間的間隔會很短,甚至不到音符高度的3/4,這樣的話附點的搜索區(qū)域中會包含許多的非零像素點,導致識別結果為沒有附點,產(chǎn)生錯誤。因此,可以改進算法為,將在音符右邊的固定大小區(qū)域內搜索附點改為在該音符與下一個音符之間的區(qū)域中搜索附點,該區(qū)域的寬度的起點不變,寬度的計算變?yōu)?/3*(兩音符的間距),這樣搜索區(qū)域的大小是可變的,是隨著音符的間距的變化而變化,這樣就避免了區(qū)域劃分可能不準確的問題。
3) 對于易混淆音符的區(qū)分識別
由于各種各樣的因素干擾,使得識別結果總存在一定的誤差,比如3與5可能會發(fā)生混淆,這樣可以考慮一種補償識別算法,即當識別結果為3或5,就對該音符以另一種方法進行識別,比如穿線法,得到穿線的統(tǒng)計值以區(qū)別是否識別正確。
4) 用小節(jié)線來驗證識別節(jié)拍的正確與否
本算法對于小節(jié)線沒有進行任何處理,然而可以考慮一種驗證節(jié)拍算法,通過小節(jié)線的出現(xiàn),來驗證上一小節(jié)的拍子是否正確,如果不正確就說明上一小節(jié)的節(jié)拍識別有錯,不過在識別一開始就要對該簡譜的節(jié)拍標記進行識別,以確定每一小節(jié)應該有幾拍。
4 結束語
本文基于MATLAB軟件給出了簡譜識別的算法,包括對圖像的預處理、圖像分割和圖像的匹配識別等算法。經(jīng)過去噪、二值化、細化等一系列預處理步驟,再利用投影法進行準確的字符分割,最后對滿足數(shù)字條件的單個音符進行模糊匹配識別。這里,對于每個數(shù)字識別完成后,要進行高低音點,附點和減時線的識別。對于高低音點和符點的識別,我們采用的是一種區(qū)域搜索算法,對于減時線我們采用的是穿線法識別算法。實驗結果表明,對于一般的簡譜,能夠達到較準確的識別結果。
參考文獻:
[1] 張宏林.Visual C++數(shù)字圖像模式識別技術及工程實踐[M].人民郵電出版社,2003:1-8.
[2] 朱虹.數(shù)字圖像處理基礎[M].科學出版社,2005:1-6.
[3] 徐飛,施曉紅. MATALB應用圖像處理[M].西安電子科技大學出版社,2002:29-45.endprint
result(count)=
point(count)*1000+Reconga(count)*10+resultpai(count)
在上式中,point(count)標記了高低音點的數(shù)值,Reconga(count)標記了識別出的具體音符,resultpai(count)標記了音符的節(jié)拍數(shù)值,這就是說,每個音符的識別結果包含了:音的高低、具體的音節(jié)、以及音符的節(jié)拍。并且每識出一個音符就記一個結果到數(shù)組result,并將其數(shù)組元素的個數(shù)加1。
該算法實現(xiàn)了對于一般簡譜的識別功能,經(jīng)統(tǒng)計,識別率達87%左右。易發(fā)生識別錯誤的情況,多是對于高低音點、附點的識別,由于本算法最終沒有用到中值濾波,因而對于簡譜圖像上的較小的噪聲點沒有去除,使得噪聲點易于同簡譜中的圓點混淆。這是因為用到本算法用到了細化處理,如果先對整篇簡譜進行中值濾波,由于中值濾波是對該像素點相鄰的8個像素點取中間的像素點的值,而很多時候兩條減時線之間僅相隔一個像素點的間隔,則許多情況下兩條減時線就會被合成一條粗線,再經(jīng)細化處理就成為一條細線了 ,那么經(jīng)過穿線法統(tǒng)計的話,就會判斷成一條減時線,從而導致識別節(jié)拍的錯誤,如果進行中值濾波,那么簡譜上的噪聲能夠被較好的去除,高低音點和附點的識別率也會上升。在個別情況下,某幾個數(shù)字的識別也容易發(fā)生識別錯誤,比如有時5會被識別成3,2有時會被識別成7,當然,這也和具體的掃描上的簡譜的清晰度有關,也和模版選取的合適與否有一定的關系。
3 算法改進
1) 找到合適的去噪方法
本算法在一開始確定用中值濾波去噪,是有一定的理論根據(jù)的,但是對于簡譜這種具體情況,中值濾波的處理會影響到減時線的識別。因此,找到一種合適的去噪算法,使之既可以較好的去除圖像上的椒鹽噪聲點,又不會影響減實線的個數(shù)。
2) 附點搜索的改進算法
本算法對于附點的搜索是在音符的右邊,以該音符寬度的列終點為搜索區(qū)域的列起點,寬度為該音符高度的3/4左右,搜索區(qū)域的高度也為該音符高度的3/4左右,對于一般的情況是可以正確識別出附點的。但是,有時候兩個音符間的間隔會很短,甚至不到音符高度的3/4,這樣的話附點的搜索區(qū)域中會包含許多的非零像素點,導致識別結果為沒有附點,產(chǎn)生錯誤。因此,可以改進算法為,將在音符右邊的固定大小區(qū)域內搜索附點改為在該音符與下一個音符之間的區(qū)域中搜索附點,該區(qū)域的寬度的起點不變,寬度的計算變?yōu)?/3*(兩音符的間距),這樣搜索區(qū)域的大小是可變的,是隨著音符的間距的變化而變化,這樣就避免了區(qū)域劃分可能不準確的問題。
3) 對于易混淆音符的區(qū)分識別
由于各種各樣的因素干擾,使得識別結果總存在一定的誤差,比如3與5可能會發(fā)生混淆,這樣可以考慮一種補償識別算法,即當識別結果為3或5,就對該音符以另一種方法進行識別,比如穿線法,得到穿線的統(tǒng)計值以區(qū)別是否識別正確。
4) 用小節(jié)線來驗證識別節(jié)拍的正確與否
本算法對于小節(jié)線沒有進行任何處理,然而可以考慮一種驗證節(jié)拍算法,通過小節(jié)線的出現(xiàn),來驗證上一小節(jié)的拍子是否正確,如果不正確就說明上一小節(jié)的節(jié)拍識別有錯,不過在識別一開始就要對該簡譜的節(jié)拍標記進行識別,以確定每一小節(jié)應該有幾拍。
4 結束語
本文基于MATLAB軟件給出了簡譜識別的算法,包括對圖像的預處理、圖像分割和圖像的匹配識別等算法。經(jīng)過去噪、二值化、細化等一系列預處理步驟,再利用投影法進行準確的字符分割,最后對滿足數(shù)字條件的單個音符進行模糊匹配識別。這里,對于每個數(shù)字識別完成后,要進行高低音點,附點和減時線的識別。對于高低音點和符點的識別,我們采用的是一種區(qū)域搜索算法,對于減時線我們采用的是穿線法識別算法。實驗結果表明,對于一般的簡譜,能夠達到較準確的識別結果。
參考文獻:
[1] 張宏林.Visual C++數(shù)字圖像模式識別技術及工程實踐[M].人民郵電出版社,2003:1-8.
[2] 朱虹.數(shù)字圖像處理基礎[M].科學出版社,2005:1-6.
[3] 徐飛,施曉紅. MATALB應用圖像處理[M].西安電子科技大學出版社,2002:29-45.endprint
result(count)=
point(count)*1000+Reconga(count)*10+resultpai(count)
在上式中,point(count)標記了高低音點的數(shù)值,Reconga(count)標記了識別出的具體音符,resultpai(count)標記了音符的節(jié)拍數(shù)值,這就是說,每個音符的識別結果包含了:音的高低、具體的音節(jié)、以及音符的節(jié)拍。并且每識出一個音符就記一個結果到數(shù)組result,并將其數(shù)組元素的個數(shù)加1。
該算法實現(xiàn)了對于一般簡譜的識別功能,經(jīng)統(tǒng)計,識別率達87%左右。易發(fā)生識別錯誤的情況,多是對于高低音點、附點的識別,由于本算法最終沒有用到中值濾波,因而對于簡譜圖像上的較小的噪聲點沒有去除,使得噪聲點易于同簡譜中的圓點混淆。這是因為用到本算法用到了細化處理,如果先對整篇簡譜進行中值濾波,由于中值濾波是對該像素點相鄰的8個像素點取中間的像素點的值,而很多時候兩條減時線之間僅相隔一個像素點的間隔,則許多情況下兩條減時線就會被合成一條粗線,再經(jīng)細化處理就成為一條細線了 ,那么經(jīng)過穿線法統(tǒng)計的話,就會判斷成一條減時線,從而導致識別節(jié)拍的錯誤,如果進行中值濾波,那么簡譜上的噪聲能夠被較好的去除,高低音點和附點的識別率也會上升。在個別情況下,某幾個數(shù)字的識別也容易發(fā)生識別錯誤,比如有時5會被識別成3,2有時會被識別成7,當然,這也和具體的掃描上的簡譜的清晰度有關,也和模版選取的合適與否有一定的關系。
3 算法改進
1) 找到合適的去噪方法
本算法在一開始確定用中值濾波去噪,是有一定的理論根據(jù)的,但是對于簡譜這種具體情況,中值濾波的處理會影響到減時線的識別。因此,找到一種合適的去噪算法,使之既可以較好的去除圖像上的椒鹽噪聲點,又不會影響減實線的個數(shù)。
2) 附點搜索的改進算法
本算法對于附點的搜索是在音符的右邊,以該音符寬度的列終點為搜索區(qū)域的列起點,寬度為該音符高度的3/4左右,搜索區(qū)域的高度也為該音符高度的3/4左右,對于一般的情況是可以正確識別出附點的。但是,有時候兩個音符間的間隔會很短,甚至不到音符高度的3/4,這樣的話附點的搜索區(qū)域中會包含許多的非零像素點,導致識別結果為沒有附點,產(chǎn)生錯誤。因此,可以改進算法為,將在音符右邊的固定大小區(qū)域內搜索附點改為在該音符與下一個音符之間的區(qū)域中搜索附點,該區(qū)域的寬度的起點不變,寬度的計算變?yōu)?/3*(兩音符的間距),這樣搜索區(qū)域的大小是可變的,是隨著音符的間距的變化而變化,這樣就避免了區(qū)域劃分可能不準確的問題。
3) 對于易混淆音符的區(qū)分識別
由于各種各樣的因素干擾,使得識別結果總存在一定的誤差,比如3與5可能會發(fā)生混淆,這樣可以考慮一種補償識別算法,即當識別結果為3或5,就對該音符以另一種方法進行識別,比如穿線法,得到穿線的統(tǒng)計值以區(qū)別是否識別正確。
4) 用小節(jié)線來驗證識別節(jié)拍的正確與否
本算法對于小節(jié)線沒有進行任何處理,然而可以考慮一種驗證節(jié)拍算法,通過小節(jié)線的出現(xiàn),來驗證上一小節(jié)的拍子是否正確,如果不正確就說明上一小節(jié)的節(jié)拍識別有錯,不過在識別一開始就要對該簡譜的節(jié)拍標記進行識別,以確定每一小節(jié)應該有幾拍。
4 結束語
本文基于MATLAB軟件給出了簡譜識別的算法,包括對圖像的預處理、圖像分割和圖像的匹配識別等算法。經(jīng)過去噪、二值化、細化等一系列預處理步驟,再利用投影法進行準確的字符分割,最后對滿足數(shù)字條件的單個音符進行模糊匹配識別。這里,對于每個數(shù)字識別完成后,要進行高低音點,附點和減時線的識別。對于高低音點和符點的識別,我們采用的是一種區(qū)域搜索算法,對于減時線我們采用的是穿線法識別算法。實驗結果表明,對于一般的簡譜,能夠達到較準確的識別結果。
參考文獻:
[1] 張宏林.Visual C++數(shù)字圖像模式識別技術及工程實踐[M].人民郵電出版社,2003:1-8.
[2] 朱虹.數(shù)字圖像處理基礎[M].科學出版社,2005:1-6.
[3] 徐飛,施曉紅. MATALB應用圖像處理[M].西安電子科技大學出版社,2002:29-45.endprint