• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于MATLAB的簡譜識別算法研究

    2015-01-20 11:45:12束美其
    電腦知識與技術(shù) 2014年36期
    關(guān)鍵詞:分割算法

    束美其

    摘要:該文介紹了運用MATLAB軟件實現(xiàn)簡譜識別的算法。該算法主要實現(xiàn)圖像的預(yù)處理、分割以及匹配識別等功能,關(guān)鍵是對音符進(jìn)行準(zhǔn)確的分割,因為這直接影響到識別效果的好壞。

    關(guān)鍵詞:簡譜識別;算法;MATLAB;分割

    中圖分類號:TP37 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2014)36-8757-03

    隨著數(shù)字化信息時代的到來,全球經(jīng)濟(jì)以前所未有的速度向前發(fā)展,同時,人們的生活水平和文化要求也越來越高,人們在各個領(lǐng)域的工作也更加的細(xì)化和深化,軟件行業(yè)異軍突起, 各種應(yīng)用軟件不斷的得以開發(fā)并應(yīng)用于工業(yè)、農(nóng)業(yè)、行政、文化娛樂等行業(yè),不僅為信息時代的人類提供了更加簡潔、方便的工作和生活方式,更加使我們的生活豐富多彩。在音樂方面,各種樂譜編輯軟件、音樂合成軟件和音樂制作軟件已經(jīng)廣泛地應(yīng)用于音樂愛好者和專業(yè)人士的音樂工作中,在這些眾多的軟件中,絕大部分的音樂處理軟件都是對唱譜的后期制作與處理軟件,而對于樂譜的識別軟件相關(guān)的卻不多,樂譜識別,是相應(yīng)于現(xiàn)代化人們對快節(jié)奏工作方式的要求而產(chǎn)生的,但現(xiàn)有的識別軟件大多都存在種種的誤差,實際應(yīng)用性不高,能夠較準(zhǔn)確地識別出樂譜地軟件更是少之又少,這就給樂譜識別的軟件開發(fā)人員帶來了動力與挑戰(zhàn),同時,樂譜識別軟件的開發(fā)也具有較好的市場發(fā)展前景。

    簡譜,相對于五線譜而言,它書寫較為簡便,學(xué)習(xí)起來也比較容易,越來越多的人傾向于用簡譜來創(chuàng)作音樂,演奏音樂,目前市場上的簡譜識別軟件非常少,這與簡譜本身的特點有關(guān),使得識別處理存在一些難點。因此,該文主要研究和設(shè)計了簡譜識別算法。

    1 算法設(shè)計與實現(xiàn)

    1.1 設(shè)計思路

    對于一張掃描到電腦中的簡譜,進(jìn)行識別前需要首先進(jìn)行預(yù)處理,使之能夠轉(zhuǎn)化為易于進(jìn)行數(shù)字化處理的形式。依次為中值濾波、二值化、細(xì)化處理,如前所述,中值濾波可以較好的去除圖片中的椒鹽噪聲,二值化將待處理音符提取出來,細(xì)化處理很好的保留了音符的形狀、邊界特征,這對于后續(xù)的識別是大有好處的。本識別系統(tǒng)中最重要的一步就是準(zhǔn)確地分割出簡譜中的每個音符,分割的準(zhǔn)確與否直接影響到識別效果的好壞,我們采用水平投影、垂直投影并以零為閾值分割出每行和每列,再次利用水平和垂直投影分割出單個音符,之后即可進(jìn)行單個音符及其它符號的識別,這里需要注意的是需要用到多重循環(huán),其嵌套關(guān)系是逐步遞進(jìn)的??偠灾?,即先分割,每分割出一個音符就進(jìn)行一次識別,然后對該字符附近幾個區(qū)域進(jìn)行搜索其它符號的算法,每識別出一個音符賦一次值。其流程圖如圖1。

    圖1 簡譜識別的基本流程

    1.2 簡譜的分割算法

    在本系統(tǒng)中,我們對簡譜用了四次分割:1) 水平投影(針對整篇簡譜)——行分割;2) 垂直投影(針對每行)——列分割;3) 水平投影(針對每列)——音符高度的分割;4) 垂直投影(針對2和3截出的區(qū)域)——音符寬度的分割。

    第一次對整篇細(xì)化后的簡譜進(jìn)行水平投影,可以劃分出每行的高度,這里的高度一般就是小節(jié)線的高度(記為higth(u),u為行數(shù)),當(dāng)然,若該行中存在高低音點或減時線的話,水平投影后還會分割出距離較小的行高度,一般其值不超過5,這樣的行是沒有意義的,因為它不包含音符,所以在進(jìn)行第二次每行的垂直分割之前,須進(jìn)行一次判斷,即若該行的高度是大于5的,才對該行進(jìn)行后面的垂直投影分割,小于等于5的情況不作處理;

    第二次對每行進(jìn)行垂直投影,可以劃分出每列的最大寬度(width(h),h為列數(shù)),這里的最大寬度可能是單個音符的寬度,也可能是帶有減時線的組合音符的寬度;

    經(jīng)過兩次分割,截出的圖象區(qū)域的高度不是準(zhǔn)確的字符高度,寬度也可能不是單個音符的寬度(不帶減時線的情況下可以分割出單個音符的寬度),因此,有必要再次確定音符的準(zhǔn)確高度和寬度;

    第三次水平投影,是對第二次分割出的每列進(jìn)行的,這樣得到的高度值中可能也包含距離較小的高度(可能包含減時線),又因為音符的準(zhǔn)確高度只能為一個值,所以我們可對分割出的高度higth1取最大值即:maxhigth1=max(higth1),即是單個字符的確切高度;

    第四次分割是以第二次分割出的每個寬度width(h)為寬度,以第三次分割出的maxhigth1為高度,進(jìn)行垂直投影,這樣就可以把組合音符也分割開來。

    至此,每個音符都可以被依次分割出來,依次識別。具體的分割算法如下(以第一次分割為例):

    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是做過細(xì)化后的二值圖像,y2是每行像素值之和,m是該簡譜圖像的行數(shù)。經(jīng)過該算法處理后,就可以得到準(zhǔn)確的行高度和位置。其它三次分割算法與此類似。

    1.3 音符及各種符號的識別算法

    基圖的識別算法及流程:分割出單個音符后,首先要對其歸一化,即經(jīng)過放縮、線形插值算法處理,使其成為與模版相同的大小,這樣與模版進(jìn)行匹配識別才能達(dá)到較準(zhǔn)確的匹配比較結(jié)果。歸一化之后是圖像的匹配識別處理,這里模版的選取也是要值得注意的,因為平常掃描的簡譜字符屬于印刷體,印刷體雖然比手寫體規(guī)范許多,但是也會因印刷體的版本、大小不同有所區(qū)別。大小不同可以經(jīng)過歸一化處理轉(zhuǎn)化為規(guī)定大小;版本不同,但是音符的書寫的特點并未改變,所以采用模糊模版匹配的識別方法,即讓分割出的音符矩陣與模版矩陣做差并求和,認(rèn)為與模版誤差最小的音符就是該模版所代表的音符。定義模版之前,需要查閱大量的簡譜,統(tǒng)計其音符的特點,之后選取與大部分音符特征最為相近的數(shù)字作為模版數(shù)字。這里模版的定義是:對模版數(shù)字1、2、3、4、5、6、7、0同樣放縮到規(guī)定大小,它們依次存放在一個矩陣中。進(jìn)行模版匹配時,要讓分割出的每個音符分別與每個數(shù)字模版進(jìn)行一次差值比較,對各差值取絕對值,這樣得到8個差值,再對這8個差值求最小值,那么該最小值對應(yīng)的模版數(shù)字就是該音符的識別結(jié)果。

    混合圖的識別算法及流程: 在簡譜中,存在著大量的組合音符,如圖2(a)圖中前四個音符就屬于一個組合音符,(b)圖中前三個是一個組合音符,后兩個也是一個組合音符。

    (a) (b)

    圖2 混合圖的識別舉例

    由圖2可以看出,組合音符一般都包含減時線,使多個音符組成一個整體。如何識別這些復(fù)雜的組合音符呢?我們采用了先分割,再識別的方法,即在第一次水平分割,垂直分割的基礎(chǔ)上再次進(jìn)行一次水平分割和一次垂直分割,有前所述,對于單個音符,第一次的分割可以得到準(zhǔn)確的音符寬度和上下帶有空余的音符高度,在此基礎(chǔ)上進(jìn)行第二次水平分割就可得到準(zhǔn)確的音符高度。但對于組合音符,在第二次水平投影分割后得到的是準(zhǔn)確的已去除減時線的組合音符的高度和寬度,并未分割出單個音符,因此必須再次進(jìn)行垂直投影分割。這樣,整個簡譜經(jīng)過兩次水平投影分割,兩次垂直投影分割就可以準(zhǔn)確地分割出單個音符了。

    在最后一次列分割完成后,得到一個存放音符的數(shù)組,該數(shù)組中可能只有一個音符(對應(yīng)于單個音符的情況),也可能包含若干個音符(對應(yīng)于組合音符的情況),接下來對該數(shù)組中的每個音符要進(jìn)行識別判斷,若該列的寬度是小于或等于5的,則不滿足音符條件,屬于附點,進(jìn)行下一列的處理,否則滿足音符條件就進(jìn)行音符的匹配識別。

    各種符號的識別算法: 對簡譜中的小節(jié)線、延時線、高、低音點和附點的識別,我們都采用了閾值判別法,因為細(xì)化處理給我們帶來的很大的好處就是小節(jié)線、延時線在理想情況下都被細(xì)化成寬度或高度為1個像素值,經(jīng)過統(tǒng)計,即使不太理想的情況下其投影寬度也不會超過5,而附點的有無是通過計算特定區(qū)域內(nèi)的像素不為零的點的個數(shù)(pointcnt),經(jīng)過統(tǒng)計,可定其閾值范圍為0

    對小節(jié)線的判別是判斷它的寬度是否是<=5,是則不處理,否則進(jìn)行延時線的判別;

    對延時線是判斷它的高度是否是<=5的,是則對其前一個音符作延時線標(biāo)記,否則可判定它滿足音符的條件,進(jìn)行音符識別處理;

    對高低音點和附點有無的判斷是在識別完該音符后,再在該音符的上方、下方、右方的某一特定區(qū)域內(nèi)搜索不為零的像素個數(shù),如果個數(shù)是大于0且小于或等于4的話就說明存在,并對該音符進(jìn)行高低音點、附點標(biāo)記;

    高音點的搜索區(qū)域(point1) 是這樣定義的:高度的行起點為從該音符的行起點值減去該音符的高度,行終點為該音符的行起點;寬度就是該音符的寬度,并與之列的起點和終點對齊。低音點的搜索區(qū)域與高音點的搜索區(qū)域(point2) 相對應(yīng),如下代碼實現(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;這些將作為識別結(jié)果的四位代碼的首位。同時,在代碼中,高低音點的識別采用相并行的處理方法,即若首先判斷出該音符有高音點,則不用再去執(zhí)行低音點的識別程序,這樣既可簡化識別過程,又符合邏輯。

    附點的識別區(qū)域的高度定義為pointhigth=round(3/4*maxhigth1),寬度為該音符寬度的列終點加上pointhigth。識別過程與高低音點的識別相似,這里不再贅述。

    對減時線的識別采用的是穿線法判別,即通過計算音符正下方一定區(qū)域內(nèi)豎直方向上灰度突變的次數(shù)總和并求均值,四舍五入取整后,若統(tǒng)計結(jié)果是2,則表明該音符下方有一條減時線;若統(tǒng)計結(jié)果是4,則表明該音符下方有兩條減時線,若統(tǒng)計結(jié)果為0則表明該音符下方?jīng)]有減時線

    2 運行結(jié)果

    識別結(jié)果由一個四位的代碼來表示,有前所述,第一位代表音符是否含有高低音點,有高音點用3表示,有低音點用1表示,兩者都沒有用2表示;第二位代表的是具體的識別音符,用“x6”表示,其中“x”就是識別的音符(0~7) ,6這一位是與聲音庫中的代碼相對應(yīng)的;最后一位代表的是音符的節(jié)拍,用阿拉伯?dāng)?shù)字0~9表示,識別結(jié)果的賦值語句如下:

    result(count)=

    point(count)*1000+Reconga(count)*10+resultpai(count)

    在上式中,point(count)標(biāo)記了高低音點的數(shù)值,Reconga(count)標(biāo)記了識別出的具體音符,resultpai(count)標(biāo)記了音符的節(jié)拍數(shù)值,這就是說,每個音符的識別結(jié)果包含了:音的高低、具體的音節(jié)、以及音符的節(jié)拍。并且每識出一個音符就記一個結(jié)果到數(shù)組result,并將其數(shù)組元素的個數(shù)加1。

    該算法實現(xiàn)了對于一般簡譜的識別功能,經(jīng)統(tǒng)計,識別率達(dá)87%左右。易發(fā)生識別錯誤的情況,多是對于高低音點、附點的識別,由于本算法最終沒有用到中值濾波,因而對于簡譜圖像上的較小的噪聲點沒有去除,使得噪聲點易于同簡譜中的圓點混淆。這是因為用到本算法用到了細(xì)化處理,如果先對整篇簡譜進(jìn)行中值濾波,由于中值濾波是對該像素點相鄰的8個像素點取中間的像素點的值,而很多時候兩條減時線之間僅相隔一個像素點的間隔,則許多情況下兩條減時線就會被合成一條粗線,再經(jīng)細(xì)化處理就成為一條細(xì)線了 ,那么經(jīng)過穿線法統(tǒng)計的話,就會判斷成一條減時線,從而導(dǎo)致識別節(jié)拍的錯誤,如果進(jìn)行中值濾波,那么簡譜上的噪聲能夠被較好的去除,高低音點和附點的識別率也會上升。在個別情況下,某幾個數(shù)字的識別也容易發(fā)生識別錯誤,比如有時5會被識別成3,2有時會被識別成7,當(dāng)然,這也和具體的掃描上的簡譜的清晰度有關(guān),也和模版選取的合適與否有一定的關(guān)系。

    3 算法改進(jìn)

    1) 找到合適的去噪方法

    本算法在一開始確定用中值濾波去噪,是有一定的理論根據(jù)的,但是對于簡譜這種具體情況,中值濾波的處理會影響到減時線的識別。因此,找到一種合適的去噪算法,使之既可以較好的去除圖像上的椒鹽噪聲點,又不會影響減實線的個數(shù)。

    2) 附點搜索的改進(jìn)算法

    本算法對于附點的搜索是在音符的右邊,以該音符寬度的列終點為搜索區(qū)域的列起點,寬度為該音符高度的3/4左右,搜索區(qū)域的高度也為該音符高度的3/4左右,對于一般的情況是可以正確識別出附點的。但是,有時候兩個音符間的間隔會很短,甚至不到音符高度的3/4,這樣的話附點的搜索區(qū)域中會包含許多的非零像素點,導(dǎo)致識別結(jié)果為沒有附點,產(chǎn)生錯誤。因此,可以改進(jìn)算法為,將在音符右邊的固定大小區(qū)域內(nèi)搜索附點改為在該音符與下一個音符之間的區(qū)域中搜索附點,該區(qū)域的寬度的起點不變,寬度的計算變?yōu)?/3*(兩音符的間距),這樣搜索區(qū)域的大小是可變的,是隨著音符的間距的變化而變化,這樣就避免了區(qū)域劃分可能不準(zhǔn)確的問題。

    3) 對于易混淆音符的區(qū)分識別

    由于各種各樣的因素干擾,使得識別結(jié)果總存在一定的誤差,比如3與5可能會發(fā)生混淆,這樣可以考慮一種補償識別算法,即當(dāng)識別結(jié)果為3或5,就對該音符以另一種方法進(jìn)行識別,比如穿線法,得到穿線的統(tǒng)計值以區(qū)別是否識別正確。

    4) 用小節(jié)線來驗證識別節(jié)拍的正確與否

    本算法對于小節(jié)線沒有進(jìn)行任何處理,然而可以考慮一種驗證節(jié)拍算法,通過小節(jié)線的出現(xiàn),來驗證上一小節(jié)的拍子是否正確,如果不正確就說明上一小節(jié)的節(jié)拍識別有錯,不過在識別一開始就要對該簡譜的節(jié)拍標(biāo)記進(jìn)行識別,以確定每一小節(jié)應(yīng)該有幾拍。

    4 結(jié)束語

    本文基于MATLAB軟件給出了簡譜識別的算法,包括對圖像的預(yù)處理、圖像分割和圖像的匹配識別等算法。經(jīng)過去噪、二值化、細(xì)化等一系列預(yù)處理步驟,再利用投影法進(jìn)行準(zhǔn)確的字符分割,最后對滿足數(shù)字條件的單個音符進(jìn)行模糊匹配識別。這里,對于每個數(shù)字識別完成后,要進(jìn)行高低音點,附點和減時線的識別。對于高低音點和符點的識別,我們采用的是一種區(qū)域搜索算法,對于減時線我們采用的是穿線法識別算法。實驗結(jié)果表明,對于一般的簡譜,能夠達(dá)到較準(zhǔn)確的識別結(jié)果。

    參考文獻(xiàn):

    [1] 張宏林.Visual C++數(shù)字圖像模式識別技術(shù)及工程實踐[M].人民郵電出版社,2003:1-8.

    [2] 朱虹.數(shù)字圖像處理基礎(chǔ)[M].科學(xué)出版社,2005:1-6.

    [3] 徐飛,施曉紅. MATALB應(yīng)用圖像處理[M].西安電子科技大學(xué)出版社,2002:29-45.endprint

    result(count)=

    point(count)*1000+Reconga(count)*10+resultpai(count)

    在上式中,point(count)標(biāo)記了高低音點的數(shù)值,Reconga(count)標(biāo)記了識別出的具體音符,resultpai(count)標(biāo)記了音符的節(jié)拍數(shù)值,這就是說,每個音符的識別結(jié)果包含了:音的高低、具體的音節(jié)、以及音符的節(jié)拍。并且每識出一個音符就記一個結(jié)果到數(shù)組result,并將其數(shù)組元素的個數(shù)加1。

    該算法實現(xiàn)了對于一般簡譜的識別功能,經(jīng)統(tǒng)計,識別率達(dá)87%左右。易發(fā)生識別錯誤的情況,多是對于高低音點、附點的識別,由于本算法最終沒有用到中值濾波,因而對于簡譜圖像上的較小的噪聲點沒有去除,使得噪聲點易于同簡譜中的圓點混淆。這是因為用到本算法用到了細(xì)化處理,如果先對整篇簡譜進(jìn)行中值濾波,由于中值濾波是對該像素點相鄰的8個像素點取中間的像素點的值,而很多時候兩條減時線之間僅相隔一個像素點的間隔,則許多情況下兩條減時線就會被合成一條粗線,再經(jīng)細(xì)化處理就成為一條細(xì)線了 ,那么經(jīng)過穿線法統(tǒng)計的話,就會判斷成一條減時線,從而導(dǎo)致識別節(jié)拍的錯誤,如果進(jìn)行中值濾波,那么簡譜上的噪聲能夠被較好的去除,高低音點和附點的識別率也會上升。在個別情況下,某幾個數(shù)字的識別也容易發(fā)生識別錯誤,比如有時5會被識別成3,2有時會被識別成7,當(dāng)然,這也和具體的掃描上的簡譜的清晰度有關(guān),也和模版選取的合適與否有一定的關(guān)系。

    3 算法改進(jìn)

    1) 找到合適的去噪方法

    本算法在一開始確定用中值濾波去噪,是有一定的理論根據(jù)的,但是對于簡譜這種具體情況,中值濾波的處理會影響到減時線的識別。因此,找到一種合適的去噪算法,使之既可以較好的去除圖像上的椒鹽噪聲點,又不會影響減實線的個數(shù)。

    2) 附點搜索的改進(jìn)算法

    本算法對于附點的搜索是在音符的右邊,以該音符寬度的列終點為搜索區(qū)域的列起點,寬度為該音符高度的3/4左右,搜索區(qū)域的高度也為該音符高度的3/4左右,對于一般的情況是可以正確識別出附點的。但是,有時候兩個音符間的間隔會很短,甚至不到音符高度的3/4,這樣的話附點的搜索區(qū)域中會包含許多的非零像素點,導(dǎo)致識別結(jié)果為沒有附點,產(chǎn)生錯誤。因此,可以改進(jìn)算法為,將在音符右邊的固定大小區(qū)域內(nèi)搜索附點改為在該音符與下一個音符之間的區(qū)域中搜索附點,該區(qū)域的寬度的起點不變,寬度的計算變?yōu)?/3*(兩音符的間距),這樣搜索區(qū)域的大小是可變的,是隨著音符的間距的變化而變化,這樣就避免了區(qū)域劃分可能不準(zhǔn)確的問題。

    3) 對于易混淆音符的區(qū)分識別

    由于各種各樣的因素干擾,使得識別結(jié)果總存在一定的誤差,比如3與5可能會發(fā)生混淆,這樣可以考慮一種補償識別算法,即當(dāng)識別結(jié)果為3或5,就對該音符以另一種方法進(jìn)行識別,比如穿線法,得到穿線的統(tǒng)計值以區(qū)別是否識別正確。

    4) 用小節(jié)線來驗證識別節(jié)拍的正確與否

    本算法對于小節(jié)線沒有進(jìn)行任何處理,然而可以考慮一種驗證節(jié)拍算法,通過小節(jié)線的出現(xiàn),來驗證上一小節(jié)的拍子是否正確,如果不正確就說明上一小節(jié)的節(jié)拍識別有錯,不過在識別一開始就要對該簡譜的節(jié)拍標(biāo)記進(jìn)行識別,以確定每一小節(jié)應(yīng)該有幾拍。

    4 結(jié)束語

    本文基于MATLAB軟件給出了簡譜識別的算法,包括對圖像的預(yù)處理、圖像分割和圖像的匹配識別等算法。經(jīng)過去噪、二值化、細(xì)化等一系列預(yù)處理步驟,再利用投影法進(jìn)行準(zhǔn)確的字符分割,最后對滿足數(shù)字條件的單個音符進(jìn)行模糊匹配識別。這里,對于每個數(shù)字識別完成后,要進(jìn)行高低音點,附點和減時線的識別。對于高低音點和符點的識別,我們采用的是一種區(qū)域搜索算法,對于減時線我們采用的是穿線法識別算法。實驗結(jié)果表明,對于一般的簡譜,能夠達(dá)到較準(zhǔn)確的識別結(jié)果。

    參考文獻(xiàn):

    [1] 張宏林.Visual C++數(shù)字圖像模式識別技術(shù)及工程實踐[M].人民郵電出版社,2003:1-8.

    [2] 朱虹.數(shù)字圖像處理基礎(chǔ)[M].科學(xué)出版社,2005:1-6.

    [3] 徐飛,施曉紅. MATALB應(yīng)用圖像處理[M].西安電子科技大學(xué)出版社,2002:29-45.endprint

    result(count)=

    point(count)*1000+Reconga(count)*10+resultpai(count)

    在上式中,point(count)標(biāo)記了高低音點的數(shù)值,Reconga(count)標(biāo)記了識別出的具體音符,resultpai(count)標(biāo)記了音符的節(jié)拍數(shù)值,這就是說,每個音符的識別結(jié)果包含了:音的高低、具體的音節(jié)、以及音符的節(jié)拍。并且每識出一個音符就記一個結(jié)果到數(shù)組result,并將其數(shù)組元素的個數(shù)加1。

    該算法實現(xiàn)了對于一般簡譜的識別功能,經(jīng)統(tǒng)計,識別率達(dá)87%左右。易發(fā)生識別錯誤的情況,多是對于高低音點、附點的識別,由于本算法最終沒有用到中值濾波,因而對于簡譜圖像上的較小的噪聲點沒有去除,使得噪聲點易于同簡譜中的圓點混淆。這是因為用到本算法用到了細(xì)化處理,如果先對整篇簡譜進(jìn)行中值濾波,由于中值濾波是對該像素點相鄰的8個像素點取中間的像素點的值,而很多時候兩條減時線之間僅相隔一個像素點的間隔,則許多情況下兩條減時線就會被合成一條粗線,再經(jīng)細(xì)化處理就成為一條細(xì)線了 ,那么經(jīng)過穿線法統(tǒng)計的話,就會判斷成一條減時線,從而導(dǎo)致識別節(jié)拍的錯誤,如果進(jìn)行中值濾波,那么簡譜上的噪聲能夠被較好的去除,高低音點和附點的識別率也會上升。在個別情況下,某幾個數(shù)字的識別也容易發(fā)生識別錯誤,比如有時5會被識別成3,2有時會被識別成7,當(dāng)然,這也和具體的掃描上的簡譜的清晰度有關(guān),也和模版選取的合適與否有一定的關(guān)系。

    3 算法改進(jìn)

    1) 找到合適的去噪方法

    本算法在一開始確定用中值濾波去噪,是有一定的理論根據(jù)的,但是對于簡譜這種具體情況,中值濾波的處理會影響到減時線的識別。因此,找到一種合適的去噪算法,使之既可以較好的去除圖像上的椒鹽噪聲點,又不會影響減實線的個數(shù)。

    2) 附點搜索的改進(jìn)算法

    本算法對于附點的搜索是在音符的右邊,以該音符寬度的列終點為搜索區(qū)域的列起點,寬度為該音符高度的3/4左右,搜索區(qū)域的高度也為該音符高度的3/4左右,對于一般的情況是可以正確識別出附點的。但是,有時候兩個音符間的間隔會很短,甚至不到音符高度的3/4,這樣的話附點的搜索區(qū)域中會包含許多的非零像素點,導(dǎo)致識別結(jié)果為沒有附點,產(chǎn)生錯誤。因此,可以改進(jìn)算法為,將在音符右邊的固定大小區(qū)域內(nèi)搜索附點改為在該音符與下一個音符之間的區(qū)域中搜索附點,該區(qū)域的寬度的起點不變,寬度的計算變?yōu)?/3*(兩音符的間距),這樣搜索區(qū)域的大小是可變的,是隨著音符的間距的變化而變化,這樣就避免了區(qū)域劃分可能不準(zhǔn)確的問題。

    3) 對于易混淆音符的區(qū)分識別

    由于各種各樣的因素干擾,使得識別結(jié)果總存在一定的誤差,比如3與5可能會發(fā)生混淆,這樣可以考慮一種補償識別算法,即當(dāng)識別結(jié)果為3或5,就對該音符以另一種方法進(jìn)行識別,比如穿線法,得到穿線的統(tǒng)計值以區(qū)別是否識別正確。

    4) 用小節(jié)線來驗證識別節(jié)拍的正確與否

    本算法對于小節(jié)線沒有進(jìn)行任何處理,然而可以考慮一種驗證節(jié)拍算法,通過小節(jié)線的出現(xiàn),來驗證上一小節(jié)的拍子是否正確,如果不正確就說明上一小節(jié)的節(jié)拍識別有錯,不過在識別一開始就要對該簡譜的節(jié)拍標(biāo)記進(jìn)行識別,以確定每一小節(jié)應(yīng)該有幾拍。

    4 結(jié)束語

    本文基于MATLAB軟件給出了簡譜識別的算法,包括對圖像的預(yù)處理、圖像分割和圖像的匹配識別等算法。經(jīng)過去噪、二值化、細(xì)化等一系列預(yù)處理步驟,再利用投影法進(jìn)行準(zhǔn)確的字符分割,最后對滿足數(shù)字條件的單個音符進(jìn)行模糊匹配識別。這里,對于每個數(shù)字識別完成后,要進(jìn)行高低音點,附點和減時線的識別。對于高低音點和符點的識別,我們采用的是一種區(qū)域搜索算法,對于減時線我們采用的是穿線法識別算法。實驗結(jié)果表明,對于一般的簡譜,能夠達(dá)到較準(zhǔn)確的識別結(jié)果。

    參考文獻(xiàn):

    [1] 張宏林.Visual C++數(shù)字圖像模式識別技術(shù)及工程實踐[M].人民郵電出版社,2003:1-8.

    [2] 朱虹.數(shù)字圖像處理基礎(chǔ)[M].科學(xué)出版社,2005:1-6.

    [3] 徐飛,施曉紅. MATALB應(yīng)用圖像處理[M].西安電子科技大學(xué)出版社,2002:29-45.endprint

    猜你喜歡
    分割算法
    基于MapReduce的改進(jìn)Eclat算法
    Travellng thg World Full—time for Rree
    進(jìn)位加法的兩種算法
    算法初步兩點追蹤
    論夫妻共同財產(chǎn)分割問題
    機(jī)載Lidar建筑物點云中非建筑物點剔除研究
    價值工程(2017年2期)2017-02-06 15:44:12
    基于增強(qiáng)隨機(jī)搜索的OECI-ELM算法
    離婚糾紛按揭商品房分割問題探析
    基于改進(jìn)遺傳算法的圖像分割方法
    一種改進(jìn)的整周模糊度去相關(guān)算法
    绥芬河市| 双鸭山市| 上蔡县| 铜梁县| 德庆县| 苏尼特右旗| 麻阳| 大洼县| 象州县| 堆龙德庆县| 墨竹工卡县| 凤山县| 遂平县| 梁平县| 浪卡子县| 福清市| 汉阴县| 永善县| 广西| 陇川县| 汕尾市| 九龙坡区| 民权县| 桐柏县| 临邑县| 长沙市| 安阳县| 邯郸市| 平南县| 宿州市| 信丰县| 新竹市| 鲁甸县| 萝北县| 郁南县| 出国| 元江| 隆尧县| 盐边县| 华安县| 临江市|