Обнаружение линий, образованных несколькими каплями - PullRequest
1 голос
/ 26 мая 2020

После порогового значения исходных изображений я получаю что-то вроде enter image description here и enter image description here

Части в красном кружке - это выровненные капли, которые мне нужны. для обнаружения (поскольку это шумный фон, и я хочу избавиться от них), поэтому я могу затем создать маску для рисования в 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)

И вот результаты изображений enter image description here и enter image description here В моем случае я затем можно использовать это как Mask_1 и умножить на другую пороговую матрицу из исходного изображения в градациях серого (получить более темные пиксели).

Но с моим подходом есть несколько проблем.

  1. Иногда капли недостаточно плотные, чтобы я мог расширяться и размываться (как на нижнем изображении). Каков более универсальный способ получить желаемый результат?

  2. ( Если нет достаточно хорошего решения для Q1 , тогда I на по крайней мере хотите обнаружить две нижние обведенные линии на изображении 1, которые пересекают границу, как будто не посреди ниоткуда, но касаются границы изображения) Каков хороший способ проверить, пересекает ли линия границу? (Как и в результате 2, я не хочу, чтобы та часть, которую я вычеркнула. И способ отличить эти неправильно обнаруженные части - это касаются ли они границы с обоих концов)

  3. Если Я хочу обнаружить на своих изображениях части, обведенные синим кружком (потому что я хочу удалить их из своей маски), как лучше это сделать? Формы больше, чем эти капли.

Любые подсказки приветствуются. Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...