J'ai une image squelettisée (montrée ci-dessous).Recherche d'intersections d'une image squelettisée dans python opencv
Je voudrais obtenir les intersections des lignes. J'ai essayé la méthode suivante ci-dessous, skeleton
est une image opencv et l'algorithme retourne une liste de coordonnées:
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;
On trouve les coordonnées des pixels blancs où il y a plus de deux pixels adjacents. Je pensais que cela ne ferait que renvoyer des virages mais ce n'est pas le cas - cela rapporte beaucoup plus de points.
C'est la sortie avec les points qu'il détecte marqué sur l'image. C'est parce qu'il détecte certains des exemples ci-dessous qui ne sont pas des 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
Et beaucoup d'autres exemples. Y a-t-il une autre méthode que je devrais examiner pour détecter les intersections? Toutes les contributions et les idées appréciées, merci.
peut-être augmenter le nombre à 4 ou 6 pour filtrer les points dans cette ligne 'if (neighbourCount> 2):'. –