判断图像是否包含签名的Java库或策略

判断图像是否包含签名的Java库或策略,java,opencv,image-processing,computer-vision,Java,Opencv,Image Processing,Computer Vision,我有一个图像文件,我需要确定该图像的指定区域是否包含签名。或者用最终用户的话来说,“这份文件已经签署了吗?” 到目前为止,我所做的是检查该区域中包含的所有像素,计算平均“黑暗度”,并将其与参考值进行比较。如果黑暗中的差异超过某个阈值,那么我认为它是有符号的。< /P> 这种方法(承认过于简单)的问题是,因为签名本身的像素是面积的一小部分,所以我必须使用非常低的暗阈值,这会导致大量误报。我无法将真实的签名与杂散的标记、污迹、传真伪影等区分开来 明确地说……我没有试图匹配任何特定的签名或签名集。也就

我有一个图像文件,我需要确定该图像的指定区域是否包含签名。或者用最终用户的话来说,“这份文件已经签署了吗?”

到目前为止,我所做的是检查该区域中包含的所有像素,计算平均“黑暗度”,并将其与参考值进行比较。如果黑暗中的差异超过某个阈值,那么我认为它是有符号的。< /P> 这种方法(承认过于简单)的问题是,因为签名本身的像素是面积的一小部分,所以我必须使用非常低的暗阈值,这会导致大量误报。我无法将真实的签名与杂散的标记、污迹、传真伪影等区分开来

明确地说……我没有试图匹配任何特定的签名或签名集。也就是说,我不在乎是谁签的,只在乎是否签了

有没有人知道Java库可以做到这一点,或者有没有比我目前所做的更好的方法来解决这个问题

编辑:


这是我正在处理的各种图像中的一种。此文件将传真给收件人,签名并传真回。当我需要寻找签名时,它看起来不会这么干净。

我不知道任何简单的解决方案。您可以用Java编写类似的东西。讨论识别签名的色码算法。

我认为这是可以做到的(虽然不是一个很好的解决方案),但可能仍然有效。这将涉及一点机器学习。我假设您的图像不包含手写文本,它只是一个图像

首先要做的是创建一个包含签名和不包含签名的图像数据集。数据集的正样本应仅包含签名(您可以学习多纵横比分类器),而负样本应包含相同纵横比/维度的随机图像。现在,您可以在这些样本上计算一些特征(HoG可以用作特征,尽管我并不认为它是用于此应用程序的最佳特征),并为每个纵横比学习SVM

下一步是在整个图像中滑动一个检测窗口(具有不同的纵横比),并使用您学习的多个支持向量机,检查其中是否有任何支持向量机给出了肯定的响应


虽然这种方法可能并不总是有效,但应该能够提供相当的准确性。学习所用的数据越多,结果就越好(如果你能找到一个好的特征向量来表示签名,它将帮助你进一步区分大小)

与其使用平均暗度,不如看看是否有大于某个值的像素线。例如,找到第一个非白色像素,然后看看有多少非白色像素在任何方向连接到它。你甚至可以检查是否有不止一个地区,他们很可能会用手稿而不是草书来签字。或者,如果某个区域的像素数超过某个数量,以防它们在“X”上签名。您可以上传一些示例图像吗。。?我最近处理过一个类似的问题,我相信我可以帮你。@scap3y我添加了一个示例图像的链接。你也可以上传一个带有签名的图像吗?顺便说一句,我使用的方法是:使用文本检测区域,然后删除它们。如果有任何像素被遗漏,那么图像将进入一个稍深的测试(这基本上删除了所有“正常”文本)。参考的论文涉及识别特定签名:“这张图像与X的签名匹配吗?”我的问题是:“这张图像是否包含任何签名?”巴拉特建议的方法可以很好地工作。我使用的是同样的滑动窗口方法,但我使用的不是支持向量机,而是结构神经网络,它工作得更好。同样,使用滑动窗口方法,您可以通过创建位图强度(在获得正值时增加像素值)并在最大像素强度值上使用阈值来解释分类器误报。