清理扫描不良的乐谱的工作流程

Posted

技术标签:

【中文标题】清理扫描不良的乐谱的工作流程【英文标题】:Workflow to clean badly scanned sheet music 【发布时间】:2021-09-24 19:12:12 【问题描述】:

我正在寻找一种工作流程,可以清理(并可能纠正)旧的和扫描不良的乐谱图像(如下图所示)。

我尝试使用去噪、霍夫过滤器、imagemagick 几何过滤器,但我正在努力确定去除扫描仪噪声/偏差的过滤器系列。

【问题讨论】:

你那里的图像相当,相当,糟糕。该解决方案可能并不容易,也不会扩展到您的数据集的其他样本。准备好丢失很多原始信号(或图像)。如果深度学习是这种重建的唯一可行选择,我不会感到惊讶。 @stateMachine 这可能是个好主意。您是否有关于我如何人为地生成类似的噪声模式以便我可以为该角色训练 NN 的提示? 我会更进一步并声称这需要手动用户输入。充其量您可以希望将其清理一下并帮助用户准确地转录笔记。 我想我可能在this book 中读到过一些关于此的内容,但我不记得了 【参考方案1】:

只是一些简单的想法:

    去除灰度噪音:做一个低通滤波器(暗),因为音乐比很多噪音更暗。剩余的噪音主要是垂直线。

    旋转图像:对图像的每一列求和灰度值。您将在该列中获得一个具有总像素亮度的向量。使用梯度下降或搜索图像的旋转(在某些范围内,如 +/-15 度旋转)以最大化该向量的方差。这里的想法是垂直噪声线表示垂直对齐,因此我们希望图像的列与这些噪声线对齐(= 最大化方差)。

    去除垂直线噪声:旋转后,取每列的中值。像素与该中值暗度的距离(平方差)越大,我们就越确信它是其真实颜色(例如,当垂直噪声为灰色时,纯白色或黑色像素)。由于噪声是非白色的,您可以尝试将这个距离与中值的白度混合以获得替代的置信度指标。理想情况下,我认为您将在这里训练一些 7x7x2 卷积滤波器(2 个通道是像素值和与中值的距离)来估计像素的真实值。那将是最简单的机器学习方法,而不是使用一些成熟的 NN。但是,鉴于您缺乏训练数据,我们将不得不提出自己的启发式方法来确定真正的像素值是什么。您可能需要尝试一下,但我认为这可能会起作用:

    设置一些置信度阈值;高于该阈值,我们按原样取值。低于阈值,设置为白色(整个页面的二进制预期像素值)。 对于低于阈值的所有值,将 +/-2 像素 L1 距离(例如 5x5 卷积)内的最大置信度值作为该像素的值。似乎特征至少相隔 2 个像素,但对于较低的分辨率,可能需要调整窗口大小。由于白色像素最终可能总体上更加自信,因此您可以尝试优先考虑较暗的像素(以某种方式提高他们的自信)。 限制图像对比度,并可能运行另一个低通滤波器。

【讨论】:

玩弄我注意到垂直线似乎在顶部略微弯曲,所以你可以尝试以垂直 100px 的块计算它。或者,不要让聚合列的总和/中位数覆盖整个图像,而是在 100 像素窗口中进行聚合。 非常感谢您的见解。我将尝试围绕这些行编写代码并分享结果!

以上是关于清理扫描不良的乐谱的工作流程的主要内容,如果未能解决你的问题,请参考以下文章

nrf52832扫描停止

项目整体说明及WBS练习

自动清理不良数据[重复]

从乐谱中提取每行的小节[关闭]

乐谱五线谱排版软件种类与介绍

用于 MIDI 到乐谱(注释)和/或音频翻译的纯 python 库