一种基于图像识别技术的五线谱播放系统的制作方法

文档序号:9304798阅读:841来源:国知局
一种基于图像识别技术的五线谱播放系统的制作方法
【技术领域】
[0001] 本发明利用图像识别技术,集中解决了五线谱的识别并播放问题,着重构建了一 个五线谱拍照自动播放系统。
【背景技术】
[0002] 音乐是人们身心放松的工具。对于熟悉五线谱的人,即使他们会乐器,对于一个未 曾练习过的五线谱,他们需要花费一段时间去练习才能够欣赏到音乐;对于不熟悉五线谱 的人,如果仅拥有五线谱,是很难根据音符搜索到相应的音乐的,更不用提那些十分珍贵的 五线谱,网上也没有资源。所以本专利针对这一个问题设计了一个五线谱拍照自动播放系 统,做到只要有五线谱,就可以欣赏到音乐。
[0003]就目前来看,公开资料中有关于音符识别的资料,但并不是非常完善,有的识别方 法也非常复杂,五线谱作为一种只有黑白两色的图片,本专利希望以简单的方法,并且能够 并不限于图片形式,场景的要求,对乐谱进行识别。基于此,考虑到操作系统的开放性,本专 利设计了一款应用系统,读入五线谱图像并播放音乐,这样,人们能够在只要看到乐谱的情 况下,就可以欣赏一下音乐。

【发明内容】

[0004] 本发明的目的是设计一个应用系统,读入五线谱图像,通过图像处理技术识别音 符,再根据音符与频率的对应关系,使之发声为音乐。
[0005] 为达到上述目的,本发明提出的自动播放系统包括下列步骤:
[0006] -、图像的预处理识别步骤:将标准五线谱图片读入,通过对二值化图像的逐行和 逐列像素检测,计算黑色像素所占百分比,确定五线谱的行位置以及小节的分界线位置,获 得五线谱的整体结构。
[0007] 二、去除五线谱步骤:为了能够更好的识别音符图形,需要将五线谱从图片中去 除,在去除的过程中保留下与音符相连接的像素点。
[0008] 三、分离音符步骤:
[0009]A、检测符尾:检测符尾判断单音符个数;
[0010] B、判断音符正逆:根据音符的正逆判断符梁的位置;
[0011]C、去除连接:将两个由连接符号相连的音符断开,成为两个独立的连音音符或单 音符。
[0012] 四、连音音符分割步骤:将连音音符分割成一个个单音符。
[0013] 五、逐一识别音符步骤:对每一个音符图像进行提取,用模板匹配法确定第一排五 线谱的第一个图像确定乐曲的节拍,再识别单音符和特殊音符。
[0014] 六、转为数字信号并播放步骤:所有音符确定之后,根据音乐与扬声器的振动频率 对应关系,使之转换为数字信号,并通过扬声器发音。
[0015] 五线谱的去除步骤,此步骤的具体过程如下:
[0016]1)、1中每一个元素都是五线谱的行位置,对第1 (i)行
[0017]
[0018] temp即为第1 (i)行要保留的黑色像素
[0019] 2)、将第l(i)行去除,对这一行的所有列j,令:
[0020] ^'?emp(K〇j') = 1
[0021] 分离音符步骤A符尾检测,此步骤的具体过程如下:
[0022] 1)、获取音符小图,在单一小节的范围内,逐列检测黑色像素的有无确定音符的宽 度范围,记为PlrfJPP"ght。并在此宽度内逐行检测确定音符的高度范围,记为Pup与Ptelciw。 如果|Plrft-P"ght|>y(y为表示像素个数的整数参数),则认为此音符为连音音符,现将黑 白反转,那么音符的小图图像记为:
[0023] 11 = 1-1 (Pbel而:Pup,Pleft:Pright)
[0024]2)、符尾的检测,对11的每一列,计算每一列黑色像素的总数blk,第j列黑色像素 总数为:
[0025]
[0026] 找到blk中大于blk均值的列
[0027] temp_blk=blk{blk>mean(blk)}
[0028]temp_blk作为符尾的待选列,对于其中第t个元素,记其在temp_blk(t)列的黑色 像素分布
[0029]blk_distr(temp_blk(t)) =i{II(i,temp_blk(t)) = 1}
[0030] 对blk_distr进行差分处理,设blk_distr含有M个元素,令
[0031]res(i) =blk_distr(i+1) -blk_distr(i),i= 1, 2. . .M-l
[0032] 如果Var(res)〈 5 ( 5为参数,Var为方差),那么temp_blk(t)列就是符尾所在 列。
[0033] 分离音符步骤B判断音符正逆,先求得第j列的黑色像素分布:blk_distr(j),设 两个集合blk_up和blk_below,分别存储每一列黑色像素位置的最小值和最大值,其中:
[0034]blk_up(j) =min(blk_distr(j))
[0035]blk_below(j) =max(blk_distr(j))
[0036]计算过所有列后,如果Var(blk_up)〈Var(blk_below),那么这个音符为正立,反之 则为倒立。
[0037] 分离音符步骤C去除连接,音符之间的连接在实际中并没有任何意义,因此在识 别过程中要将其去除,如果符尾的数量大于4,那么认为是存在连接的,首先用步骤A中的 方法检测到前两条符尾和最后两条符尾位置,再用步骤B的方法确定音符连接的两个音符 分别是正立还是倒立,以正立为例,计算每一列的黑色像素位置最小值(如果倒立则计算 最大值),得到blk_up,如果在第j列出现
[0038]blk_up(j) -blk_up(j-1) >n
[0039] 其中n为表示像素个数的整数参数,那第一个音符将在第j列的位置结束,据此 可以将音符分开
[0040]连音音符分割步骤,先用步骤S3的方法找到符尾位置temp_blk(n),n= 1,2...N,N< 4,音符的分割需要指定初始位置,N个符尾对应着N-1个初始位置,记初始位 置为v:
[0041]v(i) = (temp_blk(i+1)+temp_blk(i))/2,i= 1,2.? ?N-1
[0042] v的选择需要判定是否合适,初始切割位置上只有符梁是理想情况,但是有时也会 切割到音符,找到v(i)列的黑色像素分布blk_distr(v(i)),对blk_distr(v(i))进行方差 处理,如果处理后的结果中有元素大于0 (0为表示像素个数的整数参数),则认为切割位 置不理想,需要改变,从下面的备选集合中选出合适的列作为新的v(i)
[0043]{v⑴ +1,v⑴-1,v⑴ +2,v⑴-2,v⑴ +3,v⑴-3}
[0044] 现在的初始位置v(i)所在列都是只包含符梁,设定两个变量temp和del并赋初 始值,
[0045]temp=blk_distr(v(i))
[0046] del=blk_distr(v(i))
[0047] 从v(i)列开始到v(i+1)列,进行迭代计算
[0048] temp=blk_distr(v(i)+1){(blk_distr(v(i)+1)-temp))< ^}
[0049] del=del+temp
[0050] 其中del是最后要去除的像素,也就是符梁,temp是每一次的比对像素,是当前列 和待比对列temp的所有像素位置相差小于G的像素位置U为表示像素个数的整数参 数),将del所对应的黑色像素删除则分割成功。
[0051] 利用本发明实施例,能够在不懂五线谱的情况下欣赏到五线谱的旋律,同时利用 摄像头拍摄非常的方便,具有很大的实用价值。
【附图说明】
[0052]图1为本发明一种基于图像识别技术的五线谱播放系统流程图;
[0053] 图2为步骤三分离音符的步骤流程图;
[0054] 图3为步骤S6连音音符分割的步骤流程图。
【具体实施方式】
[0055] 下面将结合附图对本发明【具体实施方式】进行详细说明。
[0056] 图1是本发明的流程图,包括以下步骤:
[0057] 步骤S1 :图像预处理识别;
[0058] 步骤S2:去除五线谱;
[0059] 步骤S3 :检测符尾;
[0060] 步骤S4 :判断音符正逆;
[0061] 步骤S5:去除连接;
[0062] 步骤S6 :连音音符分割;
[0063]步骤S7 :逐一识别每一音节的音符;
[0064] 步骤S8 :转为数字信号并播放。
[0065] 下面将对每个步骤进行具体的说明:
[0066] 步骤S1 :确定了五线谱的整体结构,其详细步骤为:
[0067] 1)、将标准五线谱图片读入,保证曲谱部分都在一个矩形区域中,并将图像二值 化。
[0068] 2)、定五线谱的行位置,设预处理过后的图像为I,I是一个MXN的矩形,对I的第 一行到第N行,确定每一行中黑色像素(计算机中为0)的总数占此行总像素数的比例,如 果超过a则认定此行为一条谱线(a为参数,取值范围为0到1),五线谱的位置为1,即:
[0069]
[0070]3)、定五线谱的小节,步骤S1. 2中,五线谱所在的位置已经确定,设两排相邻的五 线谱之间的距离为H。对两排相邻五线谱之间的每一列,确定每一列中黑色像素的总数占H 的比例,如果超过0则认定此行为一条小节线为参数,取值范围为〇到1)。小节线的 位置为P,即:
[0071]
[0072] 步骤S2将五线谱从图像I中去除,从而去除识别音符的干扰,在步骤S2中已经 确定了五线谱行的位置,将位置保存后,现在将五线谱去掉,同时为了将音符完整的保留下 来,在去除这一行的基础上,要保留下来那些上下有连接的地方,其详细步骤为:
[0073]1)、1中每一个元素都是五线谱的行位置,对第1 (i)行
[0074]
[0075] temp即为第1⑴行要保留的黑色像素
[0076] 2)、将第1⑴行去除,对这一行的所有列j,令:
[0077] ^temp(^Oj) = 1
[0078] 步骤S3要检测符尾从而判断单音符个数,其详细步骤为:
[0079] 1)、获取音符小图,在单一小节的范围内,逐列检测黑色像素的有无确定音符的宽 度范围,记为PlrfJPP"ght。并在此宽度内逐行检测确定音符的高度范围,记为Pup与Ptelciw。 如果|Plrft-P"ght|>y(y为表示像素个数的整数参数),则认为此音符为连音音符,现将黑 白反转,那么音符的小图图像记为:
[0080] 11 = 1-1 (Pbelow:Pup,Pleft:Pright)
[0081 ] 2)、符尾的检测,对11的每一列,计算每一列黑色像素的总数blk,第j列黑色像素 总数为:
[0082]
[0083] 找到blk中大于blk均值的列
[0084] temp_blk=blk{blk>mean(blk)}
[0085] temp_blk作为符尾的待选列,对于其中第t个元素,记其在temp_blk(t)列的黑色 像素分布
[0086]blk_distr(temp_blk(t)) =i{II(i,temp_blk(t)) = 1}
[0087] 对blk_distr进行差分处理,设blk_distr含有M个元素,令
[0088]res(i) =blk_distr(i+1) -blk_distr(i),i= 1, 2. . .M-l
[0089]如果V
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1