检测打印图像中的缺陷/差异

信息处理 图片 opencv
2022-02-21 13:40:10

我一直在尝试各种方法来检测打印图像中的缺陷。被认定为缺陷的特征可能包括划痕、变色等。

我在图像处理方面不是很有经验,不确定我的方法是否可以接受。

我尝试了几种方法:

给定两张图片(一张是好的,另一张是缺陷的)

  1. 阈值和模糊
  2. 运行 Canny 边缘检测
  3. 使用去除噪音fastNlMeansDenoising
  4. 对这两个图像进行异或运算,并用于SIFT查找可能被归类为缺陷的突出特征。

它工作得很好——在非常有限的情况下。

正如本文所见,这种方法似乎在工业中被使用/提出了一点(?)但它的问题是,如果你有两个图像没有对齐到最轻微的位置,那么你会遇到问题,因为你所有的 XOR 都会导致一个非常错误的 XOR-ed 图像。所以对我来说,这似乎不是一个可接受的解决方案,因为不可能每次都完美地对齐两个图像(或者我可以尝试重新对齐图像)。

我应该如何处理这个问题。有没有一种类似于 XOR-ing 的方法更能容忍细微的差异?或者,也许是一种完全不同的方法。

可能的替代方案

将两个图像分成 n × n 像素的块。计算并比较从图像 A 到图像 B 分解的每个像素块的直方图。即使其中一个图像有点模糊,直方图应该仍然相似(不确定这是否是一个合理的假设)如果任何块包含黑色或白色斑点,这应该标记该块以供进一步检查。

差异 1 检测较深的字体颜色

差异 2 检测不应该存在的眉毛

差异 3 检测褪色/变亮区域

1个回答

评论区的所有评论都非常有建设性,谢谢。

最后,我最终使用了解决方案:OpenCV 中的图像对齐 (ECC) (C++ / Python)

就我而言,我的大多数图像预计不会倾斜超过几度,照明和深度受到严格控制。因此,欧几里得运动模型 ( MOTION_EUCLIDEAN) 应该足以findTransformECC计算校正错位所需的变换矩阵。