【问题标题】:How to detect a crack in an image?如何检测图像中的裂缝?
【发布时间】:2020-07-24 02:40:12
【问题描述】:

如何检测您在所附图像中看到的此类裂缝?我尝试了一些 OpenCV 算法,例如 blob 检测 (cv::SimpleBlobDetector),但没有得到任何结果。

这是一个裁剪图像,完整图像还有一些其他特征,所以我不确定阈值是否可以工作,因为我必须得到检测到裂缝的边界框。一种方法是分配多个(感兴趣区域)ROI 并尝试在该 ROI 内进行检测,但该裂缝不会出现在图像中的同一位置。有什么想法吗?

这个问题可以通过机器/深度学习(如对象检测)来解决吗?如果我用破解数据集训练模型?因为图像的裂纹部分没有很多特征,所以我不确定这种方法是否有效。请指导。

谢谢。

【问题讨论】:

    标签: image opencv image-processing deep-learning object-detection


    【解决方案1】:

    这些裂缝很难检测,因为图像有噪声(可能是 X 射线),对比度差,因此信噪比低。

    我会尝试应用高斯滤波器进行降噪,但仅限于水平方向,以保留水平边缘。然后检测水平边缘。

    这是关于 Gabor 过滤器的作用。你可以尝试不同的方向。

    【讨论】:

    • 非常感谢。我怎么不知道 Gabor 过滤器。我得到了合理的检测结果。但我相信需要更多的处理才能获得 100% 的结果。某些图像的信噪比非常低。现在,问题出现在 Gabor 上,我也得到了弯曲的部分。如果裂纹角度和曲线/边缘匹配。如何丢弃那些?如果裂缝是垂直的,我也会得到直的垂直边缘。
    • @maxpayne:我不明白你的意思“如果裂缝是垂直的,我也会得到直的垂直边缘。”这是预期的结果,不是吗?
    【解决方案2】:

    使用数学形态学运算。 以matlab代码为例:

    a=imread('in.png');
    se=strel( 'disk', 7);
    b = imgaussfilt(a,1.3);
    c=b-imopen(b,se);
    c=3*c;
    d=imclearborder(c);
    imwrite(d, 'out.png');
    

    【讨论】:

    • 感谢 alex,此解决方案有效,但并非适用于所有情况。一些低信噪比的图像不会给出任何结果,因为裂缝非常小并且对比度低。 Yves 方法最适合大多数情况。
    猜你喜欢
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    相关资源
    最近更新 更多