- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
因此我们需要检测扫描仪创建的图像是否表示空白页面。在图像处理方面我力不从心,所以我必须由社区来运行它。
这是我到目前为止的想法:
空白页面可以是耀眼的白色、灰色再生纸或泛黄的旧纸。目前的想法是为页面创建一个直方图,寻找曲线的陡峭增加,并获得比它更暗的像素百分比。如果超过阈值,则该页面可能不为空。
由于这可能会将顶部包含单行文本的页面归类为空页面,因此我们会平铺页面并收集有关每个平铺的统计信息。
我们需要检测扫描的订书机和装订孔(可能只在某些图 block 中),但这可以推迟到以后的某个阶段。但是,如果您知道除了这两个之外还需要注意什么,请在评论中提及。
这需要很快。它是每天处理(数万)数千页的文档处理工作流程的一部分。如果处理一个页面需要多花十秒钟,那么我们的客户将不得不告诉他们的客户他们需要多等几天才能得到结果。 (如果这导致更多的误报,一些客户宁愿让别人检查几十个发现的“空”页面,也不愿让他们的客户多等一天。)
所以这是我的问题:
走这条路线是个好主意还是有更好的办法?
如果我们这样做,我会怎么做?查找页面阈值的好(便宜)算法是什么?我们能否通过对一批文档假设类似的阈值来显着提高速度?在记录之前,亮度值可以四舍五入到什么精度?我们可以期待什么怪癖?
最佳答案
如果您知道扫描的页面将完全填满图像,那么计算标准差可能是一个很好的方法。
我建议稍微模糊页面以减少一些噪音。然后计算页面的标准差,理论上,一个页面或多或少都是一种颜色的标准差较低,而文本较多的页面标准差较高。然后是“训练”系统计算出页面何时为纯文本和何时为文本的情况。您可能会发现它很难分辨某些页面。
你可以通过让它处理大量页面来训练它,它会遍历所有页面,然后你说它是否简单。
编辑
好吧,如果我们只有页面而没有周围的东西,那么一个带有黑色文本的白页将具有灰色的平均颜色,可能是相当浅的灰色。获取平均值是一个 for 循环遍历所有像素,将它们的值相加,然后除以像素数。我不擅长这个 o(logN) 的东西,但我只想说,它不会那么长。除非你有巨大的图像。
SD是第二次for循环,这次我们是统计每个像素与均值的差值,然后除以均值。这将比平均值花费更长的时间,因为我们必须做类似的事情
diff = thispixel - mean;
if(diff < 0) {
diff = -diff;
}
runningTotal += diff;
对于纯色页面,每个像素都将接近平均值,因此我们的 SD 会很低。如果 SD 低于某个值,我们可以假设这意味着页面都是一种颜色。
如果文本量非常少,这可能会有问题,因为它不会对 SD 产生很大影响,所以也许就像您在问题中建议的那样,将页面分成几个部分。我建议水平 strip ,因为文本往往是这样的。如果我们一次一个地做这些 strip 之一,一旦一个 strip 表明它有文本,我们就可以停止,因为我们不关心其余部分是否为空白。
模糊页面有助于减少噪音,因为噪音的奇数像素会降低其影响,从而为您提供“更紧凑”的标清。您还可以使用它来降低图像的分辨率。
假设您的图片是 300 宽 x 900 高,您可以以 9 个像素为一组进行采样,3 * 3,因此最终得到一个 100 宽 x 300 高的图像,所以它实际上可以用来减少您需要进行的计算量,在本例中为九分之一!
主要的问题是计算出只有一个普通页面的 SD 可以达到多高。也许让它找到一堆空白页的 SD。
听上去,您可能想要一个中间立场,让它变得不确定并要求人为干预,可能让人类值(value)训练系统变得更好?
关于algorithm - 检测扫描文档中的空白页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5245785/
我有一个 .sln 文件,里面有几个项目。为了简单起见,让我们称它们为... 项目A 项目B 项目C ...其中 A 是引用 B 和 C 的主要项目。我的目标是更新我的构建脚本,为 ProjectA
我安装了 Magento,我想知道如何生成完整的 API 文档,例如 http://docs.magentocommerce.com/ 上的文档是使用 phpdoc 生成的。 Magento 中是否包
我通常使用jetbrains family ide。在为函数创建文档时非常有用,只需输入 /** 如何在创建文档时创建自定义标签,例如@date标签。 最佳答案 JavaScript、Java: st
我正在尝试使用 jOpenDocument library创建文档。我已经执行了创建电子表格的示例 - 代码编译并运行正常,但当我尝试使用 Excel Office 2012 或 Google Doc
如标题。 有没有介绍HTML DOM构造的图片? 最佳答案 DOM(文档 对象模型)从文档 节点开始。它被称为“根节点”。 观察下面的树(括号中对应的nodeType): [HTMLDocument]
我喜欢 ColdFusion Builder。但我不喜欢帮助只有 CF9 文档。有什么方法可以将其更改为拥有 ColdFusion 8 文档? 最佳答案 http://livedocs.adobe.c
这个问题在这里已经有了答案: What is the consequence of this bit of javascript? (4 个答案) 关闭 9 年前。 我看到一些 jQuery 脚本嵌
我有一个 XML 文件,其中包含需要在 Word 文档中填充的数据。 我需要找到一种方法来定义一个模板,该模板可用作从 XML 文件填充数据并创建输出文档的基线。 我相信有两种方法可以做到这一点。 创
我正在尝试查找有关如何使用 AVAudioEngine 的详细文档。有谁知道我在哪里可以找到它? 我找到了这个,但与文档丰富的 UI 内容相比,它似乎非常简陋。 https://developer.a
我对 Tensorflow 文档越来越感到恼火和沮丧。我在谷歌上搜索了有关 的文档 tf.reshape 我被定向到一个通用页面,例如 here 。我想查看 tf.reshape 的详细信息,而不是整
我正在学习本教程:http://moxleystratton.com/clojure/clojure-tutorial-for-the-non-lisp-programmer 然后遇到了这个片段: u
如何在 swagger 中为对象数组编写文档。这是我的代码,但我不知道如何访问对象数组中的数据。 { "first_name":"Sam", "last_name":"Smith",
是否有针对 Javascript 的 JavaDocs 之类的东西?当我在 netbeans IDE 中按 ctrl+space 时 写javascript,指定对象的javascript文档就出来了
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
我需要 JavaScript 中的 heredoc 之类的东西。你对此有什么想法吗?我需要跨浏览器功能。 我发现了这个: heredoc = '\ \ \ zzz\ \
WSDL 文档是包含一系列的,可描述某个 web service 的定义的,简单的 XML 文档 WSDL 文档结构 WSDL 文档用下表这些主要的元素来描述某个 web service 的
是否有 ocropus 的文档? 我正在寻找对以下功能的解释: make_SegmentPageByRAST(): segment() RegionExtractor(): setPageLines(
这个问题在这里已经有了答案: Understanding events and event handlers in C# (13 个回答) 4年前关闭。 我正在使用 NRECO 和 ffmpeg 对视
我正在尝试访问工作服务器以与名为 Spotfire 的应用程序一起使用。我的同事把这个传给我,现在已经休息了几个星期,我对他的建议有意见。 实际上,当我通过 localhost 运行我的 Web 应用
Elm 文档没有给出示例用法,因此很难理解类型规范的含义。在几个地方,我看到“a”用作参数标识符,例如 Platform.Cmd : map : (a -> msg) -> Cmd a -> Cmd
我是一名优秀的程序员,十分优秀!