用PIL检测空白pag扫描

2024-04-29 14:49:49 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我经常在一个不聪明的佳能多功能上运行大量的双面扫描作业,这给我留下了一个巨大的jpeg文件夹。考虑使用PIL来分析一个文件夹中的图像来检测空白页面的扫描并标记它们删除,我是不是疯了?在

离开文件夹爬行和标记部件,我想这看起来像:

  • 检查图像是否为灰度,因为这是假定不确定的。在
  • 如果是的话,检测主色调范围(背景色)。在
  • 如果没有,则检测主色调范围,仅限于浅灰色。在
  • 确定所述阴影占整个图像的百分比。在
  • 尝试找到一个阈值,以充分检测页面的类型、文字或图像。在
  • 也许一次测试图像的片段以提高阈值的准确性。在

我知道这是一个边缘案例,但是有PIL经验的人能提供一些建议吗?在


Tags: 标记图像文件夹pil部件作业阈值页面
3条回答

需要考虑的一些非PIL具体建议:

打印或书写材料的扫描会有很多高对比度的锐利边缘;像中值滤波器(减少噪音)再加上某种简单的边缘检测,可能会很好地区分真实内容和空白页面。在

一次测试片段是有用的,不仅因为它可以提高你的准确性,还因为它可以帮助你在很多页面上尽早放弃。大概你的大部分扫描都是空白的,所以你应该从一个简单的检查开始,通常将非空白页面识别为非空白页面;只有当它显示页面可能是空白时,你才需要更仔细地查看。在

如果照明或页面本身是不均匀的,您可能需要从image = image-filter(image)开始,其中filter执行某种非常广泛的平滑处理。这将减少识别主色调的需要,以及当主色调在页面上不太一致时的处理。在

作为第一次尝试,按文件大小对图像文件夹进行排序。如果来自一个文档的所有扫描都具有相同的分辨率,则空白页肯定会导致比非空白页小的文件。在

我不知道你扫描了多少页,但如果数量足够少,这可能是一个简单的快速修复。在

这是一个替代解决方案,使用mahotas和{a2}。在

  1. 首先创建两个目录:positives/negatives/,您将在其中手动选择几个示例。在
  2. 我假设其余的数据在unlabeled/目录中
  3. 计算所有正片和负片图像的特征
  4. 学习分类器
  5. 对未标记的图像使用该分类器

在下面的代码中,我使用了jug让您有可能在多个处理器上运行它,但是如果您删除每一行提到TaskGenerator的代码也可以工作

from glob import glob
import mahotas
import mahotas.features
import milk
from jug import TaskGenerator


@TaskGenerator
def features_for(imname):
    img = mahotas.imread(imname)
    return mahotas.features.haralick(img).mean(0)

@TaskGenerator
def learn_model(features, labels):
    learner = milk.defaultclassifier()
    return learner.train(features, labels)

@TaskGenerator
def classify(model, features):
     return model.apply(features)

positives = glob('positives/*.jpg')
negatives = glob('negatives/*.jpg')
unlabeled = glob('unlabeled/*.jpg')


features = map(features_for, negatives + positives)
labels = [0] * len(negatives) + [1] * len(positives)

model = learn_model(features, labels)

labeled = [classify(model, features_for(u)) for u in unlabeled]

这使用了纹理特性,这可能已经足够好了,但是如果您愿意,您可以使用mahotas.features中的其他特性(或者尝试mahotas.surf,但这会变得更复杂)。一般来说,我发现很难用你想要的那种硬阈值进行分类,除非扫描控制得很好。在

相关问题 更多 >