我要检测移动的传送带上的裂缝。下面是一个例子:
对于上面的图像,我可以使用高斯模糊,然后用Canny,然后用findContour来检测裂纹。但在其他情况下,我需要检测重型皮带上的裂纹。例如,下面是无裂纹的“重型花纹”皮带。(抱歉,我找不到这种皮带有裂缝的)。在
我以前的方法对这种皮带不太管用。如果我用一个更大的核来计算高斯模糊,我可以去掉皮带图案。但它也能减少/消除裂缝。在
更新:这是另一个blob类型的裂纹图像。在
我试着用SimpleBlobDetector检测它。但在厚重的花纹带上,它给出了很多假阳性。有什么建议可以帮你在有花纹的皮带上检测出那样的斑点吗?在
更新2:
我听从了@Nathance关于双边过滤器的建议:
min_area = 400
blur = cv2.bilateralFilter(gray, 11, 125, 125)
thresh = cv2.adaptiveThreshold(blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,3,2)
canny = cv2.Canny(thresh, 120, 255, 1)
放大后的图像如下所示。在
对于这些特殊的图片,我可以做一个“最小面积=400”来区分裂缝和图案。然而,较大的内核模糊也会将部分裂缝和图案一起擦掉。所以我希望在更复杂的真实环境中(即不同的光照条件等),min_区域的选择不会非常稳定。我有个问题,因为模式总是+-45度。这些模式有什么可以帮助去除的吗?在
这里有一个潜在的解决方案
这是结果
一个潜在的预处理步骤是在检测裂纹之前去除暗区,因为这会破坏中值模糊和自适应阈值。例如,如果您能够删除最后一个图像上的黑色部分,您将得到这个结果。在
潜在的优化可能是使用中间模糊,因为这有助于平滑皮带上的图案。您还可以调整最小阈值区域以控制检测到的裂纹的大小
相关问题 更多 >
编程相关推荐