8
votes

Traitement des images Python: Aide nécessaire à la détection d'angle de préférence PIL ou tout module pertinent

Je suis nouveau au traitement de l'image et je dois faire une détection de coin pour cette image: Entrez la description de l'image ici

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.


0 commentaires

5 Réponses :


1
votes

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.

J'espère que cela aide.


1 commentaires

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 ).



0
votes

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.

Cela ressemble également à des devoirs. Si oui, vous devriez l'étiqueter comme tel.


0 commentaires

2
votes

Je recommanderais d'utiliser OpenCV , qui est livré avec le détecteur de coin Harris et le shi- Détecteur de coin Tomasi.


0 commentaires

28
votes

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()


2 commentaires

Nice - Très bon usage de convolvol ici - j'aurais fini par utiliser 8 différents np.rolls donc je suis une meilleure personne pour avoir lu votre réponse! ;)


Heureux que vous ayez trouvé cela utile!



2
votes

La réponse acceptée ne trouve pas tous les coins de l'image.

Utiliser Détection de coin Harris , on peut trouver tous les coins possibles. Comme le choix des modules de OP n'est pas restreint, j'ai choisi d'effectuer les éléments suivants à l'aide de la bibliothèque OpenCV.

résultat:

 Entrez la description de l'image ici

Chaque coin présent présent dans l'image est correctement identifié.

Cette page fournit Détails de l'algorithme et du code.


0 commentaires