Je suis nouveau au traitement de l'image et je dois faire une détection de coin pour cette image:
p>
Dans cette image, j'ai besoin d'extraire les points de départ et de fin de chaque segment de ligne ou des coordonnées des coins. Ceci est juste une petite partie de mon projet et je suis coincé sur cela parce que je n'ai aucune expérience dans le traitement de l'image. p>
5 Réponses :
Je ne sais pas si je comprends la question correctement, mais je pense qu'un moyen d'efficacité basse de le faire est de numériser chaque pixel et de vérifier les 4 directions autour de ce pixel. Si 2 directions non opposées (i.e up & gauche ou vers le haut et vers le haut, etc.) sont colorées, alors c'est un coin. p>
J'espère que cela aide. P>
Cela fonctionnerait si les lignes étaient de 1 épaisseur de pixels. C'est rarement le cas et l'exemple d'image n'est pas non plus une exception (zoom avant). Les algorithmes de travail sont bien plus compliqués ( lien ).
Ceci est un peu de tir dans le noir, mais je suppose que vous pourriez analyser l'en-tête PNG pour récupérer la largeur / la hauteur de l'image (jetez un coup d'œil à Cette RFC pour les détails PNG ). Combinez ceci avec la profondeur de bits de l'image et vous devriez pouvoir déterminer où chaque coin est avec des mathématiques simples. Une fois que vous avez trouvé le coin, vous devriez pouvoir suivre la ligne à l'aide d'un algorithme simple vérifiant les données de pixels voisines. P>
Cela ressemble également à des devoirs. Si oui, vous devriez l'étiqueter comme tel. P>
Je recommanderais d'utiliser OpenCV , qui est livré avec le détecteur de coin Harris et le shi- Détecteur de coin Tomasi. P>
Voici une solution, en utilisant Scikit-Image :
from skimage import io, color, morphology from scipy.signal import convolve2d import numpy as np import matplotlib.pyplot as plt img = color.rgb2gray(io.imread('6EnOn.png')) # Reduce all lines to one pixel thickness snakes = morphology.skeletonize(img < 1) # Find pixels with only one neighbor corners = convolve2d(snakes, [[1, 1, 1], [1, 0, 1], [1, 1, 1]], mode='same') == 1 corners = corners & snakes # Those are the start and end positions of the segments y, x = np.where(corners) plt.imshow(img, cmap=plt.cm.gray, interpolation='nearest') plt.scatter(x, y) plt.axis('off') plt.show()
Nice - Très bon usage de convolvol ici - j'aurais fini par utiliser 8 différents np.rolls code> donc je suis une meilleure personne pour avoir lu votre réponse! ;)
Heureux que vous ayez trouvé cela utile!
La réponse acceptée ne trouve pas tous les coins de l'image. P>
Utiliser résultat: p>
Chaque coin présent présent dans l'image est correctement identifié. P>
Cette page fournit Détails de l'algorithme et du code. P>