表单域的 HSV 颜色去除/丢失

Posted

技术标签:

【中文标题】表单域的 HSV 颜色去除/丢失【英文标题】:HSV color removal/dropout of form fields 【发布时间】:2013-04-19 11:49:24 【问题描述】:

我正在编写一个系统来从表单图像中删除某些字段边框。 字段中可能有文字,即使笔迹跨越字段边界,我也需要正确保留。

我有 2 张图像:1 张彩色图像(转换为 HSV 色彩空间)和 1 张按像素排列的黑白图像(这些图像由扫描仪生成)

鉴于 彩色图像中的颜色。

我的优势在于我事先知道场地的确切位置,并且 字段边界线的宽度/高度。

我当前的实现包括(对于每个字段),扫描彩色图像上的字段边界并计算该字段边界的平均 HSV 值(因为我确切知道字段边界在哪里,所以我只访问“字段边界”像素,但如果它们越过字段边界,我也可能会访问一些手写像素,其想法是它们不会使平均值产生很大偏差)。一旦我有了字段边界的“平均” HSV 值,我再次扫描字段边界,并为每个像素计算以下 delta 函数:

如果“当前”像素与平均 HSV 之间的 Delta 值小于 0.07(根据经验得出),则我将像素设置为白色(颜色接近),否则我将像素保持为黑色。

以下是字段的一些示例:

彩色图像: 黑白图像不丢失: 丢弃了在方程式中未使用饱和度的黑白图像: 完全使用公式的实际丢弃的黑白图像(使用所有 3 个分量 H、S 和 V)

我用来获取第三张图像的公式是上面的公式,但是 我将饱和度排除在等式之外(我只是在玩弄一些东西)。 这显然对颜色变化不够细腻,但配方非常 对饱和度变化敏感(这主要是由 JPEG 压缩伪影引起的 存在于图像中(示例工件):

我认为第 4 个示例是最好的,因为它对颜色变化非常敏感,所以 你不太可能删除笔迹,但问题是你更容易 由于简单的扫描或压缩导致的轻微色差而拾取边框 人工制品。

您有什么想法可以减轻出现的一些颜色(饱和度)变化 在字段边界内,是否使用直方图?那里涉及一些量化 减少垃圾箱的数量?

我想听听人们有什么想法。

谢谢。

【问题讨论】:

您是否尝试过对图像应用任何均值或中值过滤?这些过滤器可能会减少一些噪声/压缩伪影。 噪声问题的一个经典答案是graph cuts。 对于这个特定的示例,您可以轻松地仅使用亮度作为阈值。如果它低于大约 50% 的亮度,则为用户输入,否则为表单。您的输入是否比您这里的输入更多? (因为你有 HSV,你可能会用 V 代替亮度。) 【参考方案1】:

如果您将机器学习技术应用于此问题,您可能会得到一些不错的结果。

例如,如果您想将图像中的每个像素标记为字段边界或不标记字段边界,您可以尝试手动标记一些图像中的像素,计算一堆特征(您目前只使用颜色但我认为定向梯度也可能会产生一些好的结果)并将所有内容转储到支持向量机(SVM)中。

如果您熟悉 C++ 或 Python,OpenCV 会提供 SVM 和基于梯度的特征(描述符)的实现:

Support vector machines tutorial Histograms of oriented gradients

或者,Matlab 提供代码来训练 SVM 和计算梯度特征。

【讨论】:

【参考方案2】:

我不确定我是否完全理解您在这里的优先事项 - 第三张图片对我来说看起来不错(比第四张好得多)。我确实注意到第一个“S”的底部有一个间隙。

无论如何,由于您知道边界的位置并正在扫描这些像素,我建议为它们编译 H、S 和 V 的统计数据。对于 S 和 V,我想你可以只计算平均值和标准差。由于角度的环绕性质并且它可以是未定义的,因此色调更加棘手。您可以量化并找到模式(或窗口加权模式)。你可以对盒子的非白色内容做同样的事情,这样你就可以量化笔触与盒子像素的性质。要缩小分布范围,您可以丢弃 x SD 之外的任何像素作为异常值并重新计算平均值和 SD。从那时起,您可以简单地根据像素接近的概率分布对像素进行分类。

对此的优化包括:

忽略低饱和度的 H 分量。 如果不确定,如果靠近已知边界位置,则偏向边界。 如果不确定,如果有相邻像素已被归类为笔划,则运行第二遍,偏向笔划。

【讨论】:

以上是关于表单域的 HSV 颜色去除/丢失的主要内容,如果未能解决你的问题,请参考以下文章

openCV中HSV颜色表示

HSV介绍二:HSV颜色识别-HSV基本颜色分量范围

由RGB到HSV颜色空间的理解

HSV色彩空间

opencv 颜色识别hsv方法 C++(红色)

OpenCV 例程200篇209. HSV 颜色空间的图像分割