У меня есть изображения, подобные следующим (это выходные данные UNET на исходном изображении):
,
, ![example3](https://i.stack.imgur.com/GPEK6.png)
Я думал, что сегментирование исходного изображения было трудной задачей, но я боролся со следующей задачей:
для каждого изображения необходимо вычислить ширину зеленой области в соответствии с красной, как показано ниже:
,
, ![distance3](https://i.stack.imgur.com/M1kq3.png)
Что я пытался сделать:
Обнаружение краев зеленой зоны было простым. Затем я нашел линии в полярных координатах через преобразование Хафа:
image = cv2.imread("../../../../example_1.png")
image[:, :, 2] = 0
canny = cv2.Canny(image, 150, 250, 3)
lines = cv2.HoughLinesP(canny, cv2.HOUGH_PROBABILISTIC, np.pi/180, 20)
for line in lines:
for x0, y0, x1, y1 in line:
cv2.line(image, (x0,y0), (x1,y1), (255, 255, 255), 1)
fig = plt.figure(figsize = (15, 10))
fig.add_subplot(1, 2, 1).set_title("canny")
plt.imshow(canny, cmap = "gray")
fig.add_subplot(1, 2, 2).set_title("lines")
plt.imshow(image)
Что дает:
![cannyplushough](https://i.stack.imgur.com/npsHF.png)
Как видите, есть много строк кандидатов (много ложных срабатываний), и я изо всех сил стараюсь сохранить те, которые мне нужны. Кроме того: Как бы вы рассчитали ширину?
Используя грубые линии в полярных координатах, я смог получить угол, который каждая линия имеет с началом оси, поэтому для вычисления ширины я должен найти пару параллельных линий (одинаковый угол или почти одинаковый угол) с разным расстоянием от происхождение. Я не уверен, что это лучший подход.
Спасибо за помощь