У меня есть очень зашумленное изображение, полученное с помощью микротомографии, и мне нужно получить общую форму, чтобы получить центр тяжести в качестве точки выравнивания. Я использую морфологическое закрытие с многочисленными итерациями, чтобы получить только один контур с хорошими результатами, но операция удаляет границу изображения; следовательно, я теряю данные, когда фигура не находится в центре.
Я пытался использовать разные типы границ, но всегда получаю тот же результат, что и в примерах изображений. Могу ли я использовать этот алгоритм без потери данных границы? Существует ли другой способ получить центр тяжести этих изображений?
Система должна быть автономной для различных «зашумленных форм».
примеры изображений: https://www.dropbox.com/sh/xaalq70skq2fgm2/AABOnfvLKXteavCPMX42Zvzca?dl=0
Код:
kernel = np.ones((3, 3), np.uint8)
i = j = 2
closing1 = cv2.morphologyEx(thresh1.copy(), cv2.MORPH_CLOSE, kernel, iterations = i,\
borderType = cv2.BORDER_CONSTANT, borderValue = 0)
(_,contours1,_) = cv2.findContours(closing1.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
closing2 = cv2.morphologyEx(thresh2.copy(), cv2.MORPH_CLOSE, kernel, iterations = j,\
borderType = cv2.BORDER_CONSTANT, borderValue = 0)
(_,contours2,_) = cv2.findContours(closing2.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
while len(contours1) != 1:
i *= 2
closing1 = cv2.morphologyEx(thresh1.copy(), cv2.MORPH_CLOSE, kernel, iterations = i,\
borderType = cv2.BORDER_CONSTANT, borderValue = 0)
(_,contours1,_) = cv2.findContours(closing1.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
while len(contours2) != 1:
j *= 2
closing2 = cv2.morphologyEx(thresh2.copy(), cv2.MORPH_CLOSE, kernel, iterations = j,\
borderType = cv2.BORDER_CONSTANT, borderValue = 0)
(_,contours2,_) = cv2.findContours(closing2.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
closing1 = cv2.morphologyEx(thresh1.copy(), cv2.MORPH_CLOSE, kernel, iterations = i)
и т.д. - person Miki   schedule 09.02.2017