У меня есть скелетонизированное изображение (показано ниже).
Я хотел бы получить пересечения линий. Я пробовал следующий метод ниже, skeleton
- это изображение openCV, и алгоритм возвращает список координат:
def getSkeletonIntersection(skeleton):
image = skeleton.copy();
image = image/255;
intersections = list();
for y in range(1,len(image)-1):
for x in range(1,len(image[y])-1):
if image[y][x] == 1:
neighbourCount = 0;
neighbours = neighbourCoords(x,y);
for n in neighbours:
if (image[n[1]][n[0]] == 1):
neighbourCount += 1;
if(neighbourCount > 2):
print(neighbourCount,x,y);
intersections.append((x,y));
return intersections;
Он находит координаты белых пикселей, где есть более двух соседних пикселей. Я думал, что это вернет только углы, но это не так - он возвращает гораздо больше очков.
Это результат с отмеченными на изображении точками, которые он обнаруживает. Это связано с тем, что он обнаруживает некоторые из показанных ниже примеров, которые не являются пересечениями.
0 0 0 1 1 0 0 1 1
1 1 1 0 1 0 1 1 0
0 0 1 0 0 1 0 0 0
И еще много примеров. Есть ли другой метод, на который я должен обратить внимание, чтобы обнаружить пересечения. Все входные данные и идеи приветствуются, спасибо.
if(neighbourCount > 2):
. - person v.coder   schedule 17.01.2017