Android中音乐表图像的线检测

时间:2012-04-10 21:54:05

标签: java android image-processing opencv rotation

我正在开发有关光学音乐识别的Android项目。我通过移动相机拍了一张乐谱的照片,我试着识别这些音符和符号。我对预处理后的方法非常熟悉,但这些工作通常是在扫描仪的帮助下完成的。 (相反,我必须使用移动相机)

直观地,我首先使用霍夫变换来检测谱表(谱线),然后计算它们与水平轴之间的角度,并将图像旋转到角度。这可能是理论上的工作,但霍夫找到线段,这些段的角度不一致。所以它没有用。(也许是因为透视的影响)

之后,我尝试了许多边缘检测和寻线算法,但它们都没有稳定运行。 (包括频域旋转和线段检测器)

现在我正在考虑一种类似于Android上的文档扫描程序的新方法。我尝试将图像转换为扫描文档等形式。我想将我的图像与水平轴对齐,并因倾斜和透视而摆脱效果。

我想知道是否有人知道如何实现这种“文档扫描”。或者,如果您对对齐文档或稳定线路检测有任何想法,那么对我未来的工作将会有所帮助。谢谢。

2 个答案:

答案 0 :(得分:3)

您可以简单地测量工作表左侧和右侧顶部或底部五线谱的高度,并从中计算出角度。唯一的困难可能是找到一个自动测量高度的好点(即找到垂直扫描哪一列用于冷却壁)。使其稳健的一种方法是检查6或者多少连续的黑色像素由接近恒定宽度的白色区域分开。当您发现这一点时,您确定没有丢失测量的杂散音符或符号。

答案 1 :(得分:2)

您应首先删除相机扭曲:

http://en.wikipedia.org/wiki/Distortion_(optics)#Software_correction

接下来,按照openOMR的实现方式,您可以使用以下代码执行FFT,以便找到整个图像倾斜的角度:

http://www.koders.com/java/fid38ED5C64ADB6C4F5F01FB05FB08744AF159A8244.aspx?s=FFT#L23