【问题标题】:Line Detection on a Musical Sheet Image in AndroidAndroid中乐谱图像上的线条检测
【发布时间】:2012-04-10 21:54:04
【问题描述】:

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

直观地说,我首先使用霍夫变换来检测五线谱(五线谱),然后计算它们与水平轴之间的角度,并将图像旋转到角度。这在理论上可行,但霍夫发现线段并且这些线段的角度不一致。所以没用。(可能是透视的影响)

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

现在我正在考虑一种类似于 Android 上的文档扫描仪的新方法。我尝试将我的图像转换为扫描文档之类的形式。我想将我的图像与水平轴对齐并消除由于倾斜和透视而产生的效果。

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

【问题讨论】:

  • this blog 可能有帮助,也可能没有帮助
  • 如果你愿意使用Java,你可能想看看audiveris.kenai.com,一个开源的光学音乐识别引擎(披露:很久以前我是一个简短的贡献者) .
  • @JasonRobinson:这对 OCR 项目会有所帮助,但我相信对这个项目没有帮助,无论如何,谢谢。
  • @btown:我在考虑使用 Audiveris 或 OpenOMR,但不幸的是我找不到任何 Android 支持或端口。你觉得有吗?
  • 嘿,我正在尝试做同样的事情,并且也在寻找audiveris。我和我的团队开发了一个音乐模型,我们希望将其用于 AI 训练(可以直接学习对象树而不是 xml 作为某种形式的输出)。您在这个问题上的状态如何?

标签: java android image-processing opencv rotation


【解决方案1】:

您可以简单地测量板材左侧和右侧的顶部或底部板条的高度,并据此计算角度。唯一的困难可能是找到一个自动测量高度的好点(即找到垂直扫描哪一列来寻找五线谱)。使其健壮的一种方法是检查 6 个或许多连续的黑色像素,这些像素由接近恒定宽度的白色区域隔开。当您发现这一点时,您可以确定没有偏离测量值的杂散音符或符号。

【讨论】:

  • 我尝试了一种非常相似的方法,但由于两个原因,它在很多情况下都不起作用。首先,由于光线、分辨率等原因,一条线并不总是一条线。其次,透视使照片看起来对齐但实际上并没有对齐。
  • 您不需要找到实际的线本身,您只需要绘制局部最大值(可能在平均过滤之后)并查看它们的间隔是否规则。既然有这么多行,它应该是相当健壮的。我不完全确定你所说的透视问题是什么意思。
【解决方案2】:

您应该首先消除相机失真:

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

接下来,按照openOMR的实现方式,你可以使用下面这段代码进行FFT,求出整个图像的倾斜角度:

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

【讨论】:

    猜你喜欢
    • 2021-12-20
    • 1970-01-01
    • 2019-10-28
    • 2011-06-05
    • 2016-10-07
    • 2013-05-15
    • 1970-01-01
    • 2013-10-31
    相关资源
    最近更新 更多