首页 > 解决方案 > 检测由多个斑点形成的线条

问题描述

在我对原始图像进行阈值处理后,我得到了类似的 在此处输入图像描述 东西 在此处输入图像描述

红色圆圈部分是我想要检测的对齐斑点(因为这些斑点来自嘈杂的背景,我想摆脱它们),所以我可以在 opencv 中创建一个用于修复的蒙版并摆脱这些强烈的噪音。

现在我只有一种方法可以从第一张图像中检测对齐的斑点。所以我连接、膨胀、腐蚀并做了霍夫检测。

kernel = np.ones((1,10), np.uint8)
c_im = cv2.morphologyEx(invthresh, cv2.MORPH_CLOSE,kernel)
d_im = cv2.dilate(c_im, kernel, iterations=2)
c2_im = cv2.morphologyEx(d_im, cv2.MORPH_CLOSE,kernel)
e_im = cv2.erode(c2_im, kernel, iterations=2)

image_l = e_im
#line detection
rho = 1  
theta = np.pi / 180  
threshold = 15  
min_line_length = 150  
max_line_gap = 30  
line_image = np.copy(image_l) * 0  

# Run Hough
lines = cv2.HoughLinesP(image_l, rho, theta, threshold, np.array([]),
                    min_line_length, max_line_gap)
points = []
for line in lines:
    for x1, y1, x2, y2 in line:
        points.append(((x1 + 0.0, y1 + 0.0), (x2 + 0.0, y2 + 0.0)))
        cv2.line(line_image, (x1, y1), (x2, y2), (255, 0, 0), 5)

lines_edges = cv2.addWeighted(image_l, 0.8, line_image, 1, 0)
ret2, lines_mask = cv2.threshold(lines_edges,254,255,cv2.THRESH_BINARY)
cv2.imshow('lines_mask',lines_mask)

这是结果图像 在此处输入图像描述在此处输入图像描述 在我的情况下,我可以将其用作 Mask_1 并将其与原始灰度图像中的另一个阈值矩阵相乘(获得较暗的像素)。

但是我的方法有几个问题。

  1. 有时,斑点的密度不足以让我进行扩张和侵蚀(如底部图像)。获得我想要的结果的更通用的方法是什么?

  2. 如果 Q1 没有足够好的解决方案,那么我至少想检测图像 1 中穿过边界的底部 2 条圆圈线,就像不在中间但触及图像的边界)检查一条线是否越过边界的好方法?(就像结果 2 一样,我不想要我划掉的部分。区分这些错误检测部分的方法是它们是否接触两端的边界)

  3. 如果我想检测图像中的蓝色圆圈部分(因为我想从我的面具中消除它们),有什么好的方法来执行它?形状比那些斑点大。

任何提示表示赞赏。非常感谢!

标签: pythonopencvcomputer-visionobject-detectionhough-transform

解决方案


推荐阅读