Gabor 滤波器可以用于检测汽车的凹痕吗?

信息处理 matlab 图像处理
2022-01-17 02:02:54

我正在对用于检测汽车凹痕的 Gabor 过滤器进行一些研究。我知道 Gabor 滤波器已广泛用于模式识别、指纹识别等。

我有一个图像。

原始图像

使用 MathWorks 文件交换站点中的一些代码,我得到了以下输出。

处理后的图像

不知何故,这不是人们所期望的输出。这不是一个好结果。

我的脚本如下:

I = imread('dent.jpg');
I = rgb2gray(I);
[G, gabout] = gaborfilter1(I, 2, 4, 16, pi/2);
figure
imshow(uint8(gabout));

编辑:将不同的代码应用于以下图像:

输入图像

不同方向的gabor滤波器后的输出图像:

在此处输入图像描述

我如何隔离这个被正确检测到的 DENT?

3个回答

这是一个极其困难的问题。我是一个为此工作了几年的团队的一员,并且长期开发和支持其他此类应用程序,我可以说凹痕检测是一个特别棘手的问题,而且比最初看起来要困难得多。

让算法在实验室条件下或已知图像上工作是一回事。开发一个对“自然”图像(例如在停车场看到的汽车)准确且稳健的系统可能需要一个团队工作数年。除了创建算法的核心问题外,还有许多其他的工程难题。

您测试的示例代码并不是一个糟糕的开始。如果您能找到凹痕右侧较暗的边缘,您可以将带有凹痕的汽车的边缘图与在相同角度、相同照明条件下成像的已知好车的边缘图进行比较。控制照明将有很大帮助。

需要考虑的问题包括:

  1. 照明(比最初看起来要困难得多)
  2. 组装外板的预期 3D 表面(例如来自 CAD 数据)
  3. 表征凹痕的标准:面积、深度、轮廓等。
  4. 假阴性和假阳性的标准
  5. 保存凹痕数据和/或将凹痕映射到汽车模型(或蝴蝶布局)上的方法
  6. 测量“真实”凹痕特征的方法和设备:深度、面积等。
  7. 来自车辆随机抽样的广泛凹痕数据库
  8. 处理不同的油漆颜色和饰面

1. 照明 正如 Martin B 上面正确指出的那样,正确的照明对于这个问题至关重要。即使有良好的结构化照明,您也很难检测特征线附近的小凹痕、面板之间的间隙、把手等。

结构化照明的维基百科条目有点薄,但它是理解原理的开始: http ://en.wikipedia.org/wiki/Structured_light

光条纹可用于检测内凹(凹痕)和外凹(丘疹)。要看到叮当声,您需要光源和汽车之间的相对运动。灯光 + 摄像头相对于汽车一起移动,或者汽车经过灯光 + 摄像头。

虽然当在光条纹的边缘看到时,内凹和外凹具有特征外观,但给定凹痕的可检测性取决于相对于光条纹宽度的凹痕的大小和深度。汽车的曲率很复杂,因此很难向相机呈现一致的光条纹。随着光条在车身上移动,光条的曲率甚至强度都会发生变化。

一种部分解决方案是确保相机和光条始终相对于被检查表面部分的法线(3D 垂线)保持一致的角度。在实践中,机器人需要相对于身体表面准确地移动相机。准确地移动机器人需要了解车身的姿势(位置和 3D 角度),这本身就是一个令人讨厌的问题。

对于汽车应用的任何检查,您都需要完全控制照明。这意味着不仅要在已知位置放置您选择的灯光,还要阻挡所有其他灯光。这将意味着一个相当大的外壳。由于汽车的面板向外弯曲(几乎像球形表面),它们会反射来自周围光源的光。为了大大简化这个问题,您可以在覆盖有黑色天鹅绒的外壳内使用高频荧光棒。很多时候,在检测应用中需要走极端。

2. 3D 表面 汽车的外表面由复杂的曲线组成。为了知道可疑点是否是叮当声,您必须将该点与汽车的已知特征进行比较。这意味着您需要将来自相机的 2D 图像与以特定角度查看的 3D 模型进行匹配。这不是一个很快就能解决的问题,很难做好,有些公司专攻它。

3. 缺陷表征 对于学术研究或实验室测试,开发一种显示出前景或改进现有方法的算法可能就足够了。要在实际商业或工业用途中正确解决此问题,您需要对要检测的凹痕尺寸有一个非常详细的规范。

当我们解决这个问题时,对于凹痕(3D 变形)没有合理的行业或国家标准。也就是说,没有公认的技术来通过其面积、深度和形状来表征凹痕。我们刚刚获得了行业专家一致认为不好的样本,还不算太糟糕,并且在严重性方面处于边缘地位。定义 ding 的“深度”也很棘手,因为 ding 是(通常)向外弯曲的 3D 表面中的 3D 压痕。

较大的叮当声更容易检测到,但它们也不太常见。有经验的汽车工人可以快速扫描车身——比未经训练的观察者快得多——并迅速找到小指大小的浅凹痕。为了证明自动化系统的成本合理,您可能必须匹配有经验的观察者的能力。

4. 检测错误的标准 在 早期,您应该为可接受的假阴性和假阳性设置标准。即使您只是将这个问题作为一个研发项目来研究并且不打算开发产品,也请尝试定义您的检测标准。

假阴性:存在凹痕,但未检测到 假阳性:确定为凹痕的无瑕疵区域

通常有一个权衡:增加灵敏度,你会发现更多的叮当声(减少误报),但你也会发现更多不存在的叮当声(增加误报)。很容易说服自己一个算法比它实际的性能更好:我们天生的偏见是注意到算法检测到的缺陷并解释掉那些它没有检测到的缺陷。进行盲目的自动化测试。如果可能的话,让其他人测量叮当声并指定严重程度,这样您就不会知道真正的测量结果是什么。

5. 保存数据和/或对其 进行映射 凹痕的特征在于其严重程度及其在车身上的位置。要知道它的位置,必须解决上面提到的 2D 到 3D 的对应问题。

6. 确定凹痕的“真实”形状凹痕 很难测量。相同表面积和深度的尖锐凹痕和圆形凹痕会显得不同。用机械方法测量凹痕会导致主观判断,而且使用深度计、尺子等也很乏味,因为你可能不得不测量几十个,甚至更多。

对于任何制造缺陷检测项目来说,这是最难解决的工程问题之一:如何测量缺陷并对其进行表征?如果有这样做的标准,该标准是否与检查系统测量的东西有很好的相关性?如果检查系统没有找到它“应该”找到的 ding,那该怪谁?

也就是说,如果检测系统对已知缺陷样本运行良好,那么用户最终可能会信任它,系统本身就会成为定义缺陷严重程度的标准。

7. 广泛的凹痕数据库 理想情况下,您将拥有成百上千个不同严重程度的凹痕样本图像,这些样本图像来自困难制造商的车辆的不同位置。如果您有兴趣查找装配过程中因事故造成的凹痕,那么收集此类数据可能需要很长时间。在装配过程中造成的凹痕并不常见。

如果您只对寻找因事故或环境破坏造成的凹痕感兴趣,那就另当别论了。凹痕的类型将不同于汽车装配厂内意外碰撞造成的凹痕。

8. 处理不同 的油漆颜色 确实,边缘检测器在检测具有不同对比度级别的图像中的边缘时相当稳健,但看到“不同级别的对比度”对于不同的汽车油漆和饰面究竟意味着什么可能会非常令人沮丧. 在闪亮的黑色汽车上看起来很棒的光条纹在涂有旧油漆的白色汽车上几乎看不到。

大多数相机的动态范围相对有限,因此要为黑色亮面和白色暗面实现良好的对比度是很棘手的。您很可能必须自动控制照明强度。这也很难。

Gabor 过滤器只是用于此类缺陷检测任务的几个步骤中的第一步。另外,请注意,您只使用了 Gabor 过滤器的特定方向和比例——您通常会使用整个方向和比例范围。

使用 Gabor 滤波器的简单缺陷检测方法的粗略概述如下:

  • 以不同的方向和比例应用 Gabor 滤波器
  • 应用分类器(在合适的训练数据上训练)将每个像素分类为“缺陷”或“非缺陷”
  • 聚合来自相邻像素的检测以确保每个缺陷仅检测一次并消除虚假检测

不在此列表中但通常非常重要的一点是图像采集。您照亮物体和放置相机的方式对检测结果图像中的缺陷的难易程度有很大影响。您的示例图像似乎使用了当时恰好存在的环境照明——这很可能不是最佳的。

正如我所说,这只是一个非常粗略的大纲。自动检测是一个广泛的领域,需要大量的专业知识才能做好。

不,它不能。图像处理不是魔术,您需要提供更多信息。如果不知道汽车的外观,计算机应该如何区分凹痕和预期的车身造型?