首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于OpenCV的裂纹检测前背景纹理去除

基于OpenCV的裂纹检测前背景纹理去除
EN

Stack Overflow用户
提问于 2019-07-18 07:21:37
回答 1查看 3.2K关注 0票数 5

我想检测一下移动传送带上的裂缝。以下是一个例子:

对于上面的图像,我可以使用GaussianBlur,后面跟着一个Canny,然后是findContour来检测裂缝。但是在其他情况下,我需要发现带上的裂纹与沉重的模式。例如,下面是“重型”带,没有裂缝。(对不起,我找不到这种皮带上有裂纹的)。

我的旧方法在这种皮带上不太好用。如果我为GaussianBlur使用更大的内核,我可以删除带模式。但它也能减少/消除裂缝。

更新:这是另一个blob类型的裂纹图像。

我试着用SimpleBlobDetector来检测它。但在沉重的模式带上,却产生了大量的假阳性。关于如何在有图案的皮带上发现这样的斑点,有什么建议吗?

更新2:

我遵循了bilateralFilter上@nathancy的建议:

代码语言:javascript
复制
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)

放大的图像如下所示。

对于这些特殊的图片,我可以做一个"min_area = 400“来区分裂缝和图案。然而,较大的内核模糊也会将部分裂缝与模式一起擦掉。因此,我预计在更复杂的实际环境(即不同的光照条件等)中,min_area的选择不会非常稳定。我有个问题,因为模式总是+-45度。是否有任何过滤器可以帮助移除这些方向的模式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-18 21:21:25

这里有一个潜在的解决方案

  • 将图像转换为灰度和中值模糊
  • 自适应阈值
  • 精明边缘检测
  • 形态学变换去除噪声
  • 扩张以增强轮廓
  • 寻找轮廓
  • 用最小阈值面积迭代等高线和滤波器

这是结果

一个潜在的预处理步骤是在检测裂纹之前去除黑暗部分,因为它会导致中值模糊和自适应阈值的混乱。例如,如果您能够删除最后一个图像上的黑色部分,您将得到这个结果。

潜在的优化将是发挥中位模糊,因为这有助于平滑皮带上的模式。您还可以调整最小阈值区域以控制检测到的裂纹的大小。

代码语言:javascript
复制
import cv2
import numpy as np

image = cv2.imread('1.png')

blur = cv2.medianBlur(image, 7)
gray = cv2.cvtColor(blur, cv2.COLOR_BGR2GRAY)
thresh = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,3)

canny = cv2.Canny(thresh, 120, 255, 1)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
opening = cv2.morphologyEx(canny, cv2.MORPH_CLOSE, kernel)
dilate = cv2.dilate(opening, kernel, iterations=2)

cnts = cv2.findContours(dilate, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]

min_area = 3000
for c in cnts:
    area = cv2.contourArea(c)
    if area > min_area:
        cv2.drawContours(image, [c], -1, (36, 255, 12), 2)

cv2.imshow('image', image)
cv2.imwrite('image.png', image)
cv2.waitKey(0)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57089115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档