我有一个图像文件,我需要确定该图像的指定区域是否包含签名。或者用最终用户的术语来说,“这份文件是否已经签署?”
到目前为止,我所做的是检查区域中包含的所有像素,计算平均“黑暗度”,并将其与参考值进行比较。如果黑暗中的差异超过某个阈值,那么我认为它已签名。
这个(公认的简单化)方法的问题在于,由于签名本身的像素是如此小的一部分区域,我必须使用非常低的暗度阈值,这导致大量的误报。我无法区分真正的签名与杂散标记,污迹,传真文物等。
要明确......我不是要匹配任何特定签名或签名集。也就是说,我不关心谁签名,只关注它是否已签名。
是否有人知道可以做到这一点的Java库,或者比我目前正在做的更好的解决这个问题的方法?
修改
这是我正在使用的example种图像。该文件将传真给收件人,签名并传真回传。当我需要寻找签名时,它不会看起来很干净。
答案 0 :(得分:1)
我不知道任何简单的解决方案。您可以用queXF换行或用Java编写类似的东西。 This paper讨论了识别签名的颜色代码算法。
答案 1 :(得分:1)
这是我认为可以做到的(虽然不是一个非常好的解决方案),但可能仍然有用。这将涉及一些机器学习。我假设你的图像不包含手写文本,只是一个图像。
首先要做的是创建一个包含签名的图像数据集和不包含签名的图像数据集。数据集的正样本应仅包含签名(您可以学习多个宽高比的分类器),负样本应包含相同宽高比/维度的随机图像。现在,您可以计算这些样本的某些特征(HoG可以用作特征,虽然我并不认为它是用于此应用程序的最佳特征)并且可以为每个宽高比学习SVM。
下一步是在整个图像中滑动检测窗口(具有不同的宽高比),并使用您学到的多个SVM,并检查它们中是否有任何响应。
虽然这种方法可能总是不起作用,但应该给出相当的准确度。您将用于学习的数据越多,结果就越好(如果您能够提供一个好的特征向量来表示签名,那么它将有助于您进一步说明)