Я использую OpenCV через Python 3.7. У меня есть набор моно chrome изображений, которые выглядят так:
Я хотел бы найти все "точки соединения" на этих изображениях где «точка соединения» - это центр (1 пиксель) каждого пересечения двух планок. Эти "суставы" примерно представлены красными цифрами на изображении ниже:
Первая идея состояла в том, чтобы скелетизировать изображение и затем найти все соединенные края Алгоритмически, но все методы скелетонизации дали мне волнистые или круглые углы и дополнительные «ростки».
import cv2
import numpy as np
from skimage.morphology import skeletonize
image = cv2.imread("SOURCE_IMAGE.jpg", cv2.IMREAD_GRAYSCALE)
binary_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 91, 12)
skeleton = (skeletonize(binary_image//255) * 255).astype(np.uint8)
Результат:
Вторая идея заключалась в том, чтобы найти внутренние контуры, приблизить их к ограничивающим точкам, найти ближайших соседей и затем каким-то образом вычислять центры, но, опять-таки, метод обнаружения краев Кенни дал мне волнистые углы и дополнительные точки.
import cv2
image = cv2.imread("SOURCE_IMAGE.jpg", cv2.IMREAD_GRAYSCALE)
edged = cv2.Canny(image, 100, 200)
Результат:
Есть ли надежные подходы к этой проблеме?