【发布时间】:2017-07-17 18:17:17
【问题描述】:
我有这样的灰度图像:
我想检测这种图像的异常情况。在第一张图像(左上)我想检测三个点,在第二张(右上)有一个小点和一个“雾区”(在右下),最后一个,有也是图像中间某处的一个小点。
正常的静态阈值对我来说不起作用,而且 Otsu 的方法始终是最佳选择。有没有更好、更强大或更智能的方法来检测这样的异常?在 Matlab 中,我使用了类似 Frangi 过滤(特征值过滤)的东西。任何人都可以提出好的处理算法来解决这样的表面上的异常检测吗?
编辑:添加了另一个带有异常标记的图像:
使用@Tapio 的顶帽过滤和对比度调整。 由于@Tapio 为我们提供了如何增加表面异常对比度的好主意,就像我在开始时询问的那样,我向大家提供了我的一些结果。我有这样的图像:
这是我如何使用顶帽过滤和对比度调整的代码:
kernel = getStructuringElement(MORPH_ELLIPSE, Size(3, 3), Point(0, 0));
morphologyEx(inputImage, imgFiltered, MORPH_TOPHAT, kernel, Point(0, 0), 3);
imgAdjusted = imgFiltered * 7.2;
结果在这里:
还有一个问题是如何从最后一张图像中分割出异常??因此,如果有人知道如何解决它,那就接受吧! :) ??
【问题讨论】:
-
计算灰度图像的平均值。高于平均值某个百分比的像素可以声明为异常值
-
@JeruLuke:这是一个“模式识别简介”级别的答案,但对 Otsu 方法和特征值过滤的引用告诉我,我们没有考虑这个。
-
您能否提供更多关于我应该关注的 whitch 技术以及如何进行模式识别的信息?我应该在这里考虑一些“机器学习”的东西吗?
-
@skoda23:你当然可以在这个问题上扔一个 CNN,并提供足够的数据。它有效率吗?不完全是。你需要大量的训练数据吗?是的,至少与直接编程相比。是微不足道的吗?不,编写一个有用的错误函数需要做很多工作。
标签: c++ opencv image-processing anomaly-detection