我想将之前考试问题的PDF文件处理成我可以打印出来的图像。删除线条(用于写入)和更多无用的空白时我遇到了麻烦。这是我试图压缩的页面的一个例子。 Example raw page
因此,我首先将PDF页面转换为PIL图像,然后将其转换为Numpy数组。
我删除线条的初始方法是迭代每行像素并计算平均颜色值:值越低,线条越暗,它包含有用的写入而不是空白的可能性就越大。我用matplotlib来形象化。 It looked like this(与上例相同的页面完成)。
您可以清楚地看到[160,280]和[450,750]范围内的峰值,其中出现非常尖锐的峰值,周围没有噪音。
所以我决定在数组中进行2次传递,每次都计算平均颜色值。第一遍粗略地删除了线条(具有197的圆形平均值的行)。第二遍删除了具有高于254的圆角平均值(空白)的行。生成的Numpy数组将重新转换为PIL图像,然后保存。它通常看起来像like this。
这对我的目的很好;但是,当我尝试将不同的PDF文件输入到不同平均值的峰值时,这种方法失败了(虽然它们仍然非常尖锐,但周围没有噪音)。
我如何编写一个更通用的算法,可以检测到这些尖锐的峰值并删除它们,而不会有删除问题真实内容的风险?