Как соединить сегменты маски изображения без искажений размеров? - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть маска интересующей области на изображении, которое я пытаюсь измерить.Но эти маски не всегда имеют высокое качество, и иногда мои объекты интереса (киты из беспилотных изображений) состоят из нескольких сегментов изображения, разделенных парой пикселей.Поэтому я пытаюсь выполнить некоторые операции по расширению и эрозии, чтобы создать одну маску, но слишком большое расширение затем отбрасывает мои последние измерения.Есть ли способ сделать расширение, чтобы соединить фигуры, эрозию, чтобы убрать всю добавленную обхват / длину от расширения, но предотвратить эрозию от создания двух отдельных сегментов?

Вот то, что у меня сейчас есть:

import cv2
# my_mask = output from Mask RCNN
plt.imshow(my_mask, cmap="gray")
plt.show()

first image

mask_uint = np.array(my_mask, dtype=np.uint8)

kernel = np.ones((5,5), np.uint8)
dilation = cv2.dilate(mask_uint, kernel, iterations=5)

plt.imshow(dilation, cmap="gray")
plt.show()

second image

erosion = cv2.erode(dilation, kernel, iterations=4)

plt.imshow(erosion, cmap="gray")
plt.show()

image three

И в конце вы можете видеть, что это все еще два отдельных сегмента, если я делаю меньше итераций эрозии, то маска слишком широка и мои измерения маски слишком искажены.

ОБНОВЛЕНИЕ

Я пытался изменить свою систему, чтобы использовать функцию minAreaRect () opencv для измерения длины, и это привело к чистому решению, но оно добавляет довольно значительный буфер, приводящий к очень плохим измерениям длины.

image four

...