我正在编写一个系统来从表单图像中删除某些字段边框。 这些字段可能在其中写入,即使手写跨越字段边界,我也需要正确保存。
我有2张图片:1张彩色图片(转换为HSV色彩空间)和1张黑白图像,每个像素排列像素(这些是由扫描仪生成的)
我想删除(摘取)黑白图像中的场边界像素,给出 彩色图像中的颜色。
我有一个优势,因为我知道该领域的确切位置,并且 字段边界线的宽度/高度。
我当前的实现包括(对于每个字段),扫描彩色图像上的字段边界并计算该字段边界的平均HSV值(因为我确切知道字段边界的位置,我只访问“字段边界”像素,但如果它们越过场边界,我也可能会访问几个手写像素,这个想法是它们不会非常偏向平均值)。一旦我获得了场边界的“平均”HSV值,我再次扫描场边界,并为每个像素计算以下delta函数:
如果“当前”像素和平均HSV之间的Delta值小于0.07(根据经验找到),那么我将像素设置为白色(颜色靠近在一起),否则我将像素保持为黑色。
以下是字段的一些示例:
彩色图片: 黑色和白色图像不掉光: 丢弃黑色和白色图像,其中饱和度未在公式中使用: 实际掉线黑&配方使用的白色图像(使用全部3个组件H,S& V)
我用来获得第3张丢失图像的公式是上面的公式但是 我把饱和度排除在等式之外(我只是玩弄东西) 这显然不够精致,颜色变化,但公式非常 对饱和度变化敏感(这主要是由JPEG压缩伪像引起的 存在于图像中(示例工件):
我认为第四个例子是最好的,因为它对颜色变化非常敏感 你不太可能删除手写内容,但问题是你更容易被删除 由于简单的扫描或压缩导致的轻微色差,拾取边框 伪影。
您有什么想法可以减轻发生的一些颜色(饱和度)变化 在字段边界内,是否使用直方图?有一些量化涉及到 减少垃圾箱数量?
我想听听别人的想法。
谢谢。
答案 0 :(得分:0)
如果您将机器学习技术应用于此问题,您可能会获得一些好的结果。
例如,如果您想将图像中的每个像素标记为字段边框或不是字段边框,您可以尝试手工标记几个图像中的像素,计算一组要素(您目前只使用颜色)但我认为面向渐变也可能会给出一些好的结果)并将所有内容转储到支持向量机(SVM)中。
如果您熟悉C ++或Python,OpenCV提供了SVM和基于梯度的功能(描述符)的实现:
另外,Matlab还提供了训练SVM和计算梯度特征的代码。
答案 1 :(得分:0)
我不确定我是否完全理解你的优先事项 - 第三张图片对我来说非常好(比第四张要好得多)。我注意到第一个“S”的底部有一个间隙。
在任何情况下,如您所知,边界的位置并扫描这些像素,我建议为它们编制H,S和V的统计数据。对于S和V,我想你可以计算平均值和标准差。由于角度的环绕特性,色调很棘手,并且它可能是不确定的。您可以只量化并找到模式(或窗口加权模式)。你可以对盒子的非白色内容做同样的事情,这样你就可以量化笔划与盒子像素的性质。要缩小您的分布,您可以丢弃任何超出x SD的像素作为异常值并重新计算平均值和SD。从那时起,您可以简单地根据它落在哪个概率分布内对像素进行分类。
对此的优化包括: