Python 检测由多个斑点形成的线条

Python 检测由多个斑点形成的线条,python,opencv,computer-vision,object-detection,hough-transform,Python,Opencv,Computer Vision,Object Detection,Hough Transform,在我对原始图像设置阈值后,我得到如下结果 和 红色圆圈部分是我想要检测的对齐斑点(因为这些斑点来自嘈杂的背景,我想去除它们),因此我可以在opencv中创建一个用于修复的遮罩,并去除这些强噪声 现在我只有一种方法可以从第一张图像中检测对齐的斑点。 所以我连接,扩张,腐蚀,做了霍夫检测 kernel = np.ones((1,10), np.uint8) c_im = cv2.morphologyEx(invthresh, cv2.MORPH_CLOSE,kernel) d_im = cv2.d

在我对原始图像设置阈值后,我得到如下结果 和

红色圆圈部分是我想要检测的对齐斑点(因为这些斑点来自嘈杂的背景,我想去除它们),因此我可以在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,并将其与原始灰度图像中的另一个阈值矩阵相乘(得到较暗的像素)

但我的方法有几个问题

  • 有时这些斑点的密度不够,我无法进行扩张和侵蚀(如下图)。要获得我想要的结果,哪种方法更通用

  • < P>(如果Q1没有足够好的解,那么我至少要检测图像1中的2个圆圈线,它们穿过边界,就像不是在无处的地方,而是触摸图像的边界),什么是检查一条直线是否越过边界的好方法。(如结果2所示,我不希望我划掉的部分。区分这些错误检测的部分的一种方法是它们是否接触两端的边界)

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

  • 如有任何提示,我们将不胜感激。非常感谢