Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用opencv(c+;+;)分割光滑表面上的异常_C++_Opencv_Image Processing_Anomaly Detection - Fatal编程技术网

C++ 如何使用opencv(c+;+;)分割光滑表面上的异常

C++ 如何使用opencv(c+;+;)分割光滑表面上的异常,c++,opencv,image-processing,anomaly-detection,C++,Opencv,Image Processing,Anomaly Detection,我有一个光滑表面的图像: 我的目标是检测图像上的异常。我在这里向您展示的带有标记异常的相同图像: 正如我们从上面的图像中所看到的,异常的对比度很差(或者至少不是最好的),而且它们也会随着形状、对比度、方向的变化而变化。。。 我试图通过使用tophat过滤来增加异常对比度。结果如下: 现在我想在图像上看到更多的异常,我想把它们从图像中分割出来。其目的是对图像进行二值化,并使用connectedComponents函数计算异常的面积、尺寸和位置 你建议采用什么样的细分?对图像进行二值化的最佳方法

我有一个光滑表面的图像:

我的目标是检测图像上的异常。我在这里向您展示的带有标记异常的相同图像:

正如我们从上面的图像中所看到的,异常的对比度很差(或者至少不是最好的),而且它们也会随着形状、对比度、方向的变化而变化。。。 我试图通过使用tophat过滤来增加异常对比度。结果如下: 现在我想在图像上看到更多的异常,我想把它们从图像中分割出来。其目的是对图像进行二值化,并使用connectedComponents函数计算异常的面积、尺寸和位置

你建议采用什么样的细分?对图像进行二值化的最佳方法是什么?我甚至应该使用tophat过滤来增加异常对比度,还是应该尝试直接从第一张图像中分割异常?

您可以:

  • 尝试几个不同大小和参数的top hat过滤器,看看哪一个在抑制指纹的同时最能突出显示异常
  • 直接转到阈值并调整参数,以确保在该过程中不会丢失任何异常。然后利用连通分量的特征提取实际异常

  • 一种越来越流行的方法是使用大量异常图像训练深层神经网络,然后使用该网络识别它们。

    您以前也问过类似的问题,不是吗??你对“异常”的定义到底是什么?@slawekwin任何不完全干净的光滑表面都是异常。苏。。。灰尘、指纹、划痕、雾区是一些可能的异常现象的例子。我已经尝试过改变top hat过滤器和全球树洞的参数。我还尝试了自适应阈值()。但它在异常检测方面仍然不能满足我的要求。(或许我做错了什么)。另一方面,我对“神经网络”的想法很感兴趣,但我对这方面完全是新手。我知道网上有很多文献,但不管怎样,你能给我提供一些额外的信息吗?我可以在opencv(c++)中使用神经网络方法吗?有可能得到一些代码示例吗?I0m beginer在机器学习中……你需要几张没有异常的表面图像,还有几张有异常的表面图像。然后我们可以把问题带到频域,因为异常更容易检测到它们的频率。异常将由高频值表示。如果删除低频分量(查看样本的估计阈值),将有一个图像突出显示缺陷。如果你想为此尝试神经网络,有很好的教程。OpenCV确实支持机器学习,但我不知道有什么好的教程。非常感谢。我会尽可能地努力学习。然后我会得到健康和受损表面的图像(我们这里讨论的是多少样本?10?100?1000?)。还有一个问题:我必须使用整个图像作为一个样本吗?或者我可以记录一张图像(如文章中的第一张),然后将该图像切割成许多表示异常的较小图像,并将其用于神经网络的学习时间?强烈建议将图像切割成具有异常的较小图像,因为这样不同的异常不会出现在同一图像上。您也可以对良好曲面的图像执行此操作。如果您正在尝试基于频域的方法,那么从10到100张图像开始就足够了。对于机器学习,1000秒是标准。但是如果你没有那么多,试着用你所拥有的。