实现地板污垢检测算法的方法

计算科学 matlab 图像处理 计算机视觉
2021-12-18 18:34:20

我正在尝试使用 MATLAB 及其图像处理工具箱检测一系列图像中的脏地板区域,如下所示:

干净/脏地板样品

在上图中,有两个不同的区域,较白的地板被认为是干净的,而肮脏的地板是黄色警告标志之外的区域。我正在寻找检测这些差异的方法。

一个相关问题是沿路径的照明强度和颜色可能不是恒定的。

我已经在较小的样本图像(取自下图)之间尝试了 2D 互相关,但它不是很有效。

清洁地板样品

我的方法是这样的:

  1. 屏蔽输入图像中不相关的特征(例如,除白色走廊外的走廊);

  2. 输入图像(分析目标)和全样本图像的RGB到灰度转换;

  3. 提取样本图像的一部分并提取其直方图;

  4. 对输入图像使用直方图均衡化,使用样本的直方图(histeq);

  5. 在输入图像和样本图像之间运行 normxcorr2;

  6. 在输入图像上绘制任意常数(例如 xCorr < 0.8)以下的所有点以检测“脏”区域。

也许图像分割的深度学习将是最有效的方法,但我目前没有时间实现它。

在这种情况下还有其他更有效的建议吗?

1个回答

以下是一些建议:

  1. 无论您尝试哪种方法,请查看大量脏地板样本以了解事物的范围 - 是否是较暗的区域,是否有条纹等。

  2. 对于一个简单的想法,您可能想尝试对一块地板进行 2 维 FFT 或 DCT。0,0 元素将为您提供 DC 值(平均强度),如果您正在寻找条纹,您可以忽略它。然后,从 0,0 向外移动的其他元素将为您提供图像分量的振幅,当您远离元素 0,0 时,频率会变得更高。通过查看各种干净和脏部分的结果,您可能能够得出频率范围和阈值限制。