Je fais du traitement de l'image et j'essaie de garder une trace des points similaires à ceux entourés ci-dessous, un tache très sombre de quelques pixels diamètre, avec tous les pixels voisins étant brillants. Je suis sûr qu'il y a des algorithmes et des méthodes conçues pour cela, mais je ne sais tout simplement pas ce qu'ils sont. Je ne pense pas que la détection de bord fonctionnerait, car je ne veux que les petites taches. J'ai lu un peu sur les opérateurs morphologiques, pourrait-il s'agir d'une approche appropriée? p>
merci p>
P>
9 Réponses :
boucle sur votre pixel de votre image. Lorsque vous avez terminé d'envisager un pixel, marquez-le comme «utilisé» (changez-le à une valeur sentinelle, ou conservez ces données dans une matrice distincte parallèle à l'image). P>
Lorsque vous rencontrez un pixel sombre, effectuez un Remplissage inondé dessus, marquant tout Ces pixels comme "utilisés" et gardent la trace du nombre de pixels remplis. Pendant le remplissage inondable, assurez-vous que si le pixel que vous envisagez n'est pas sombre, que c'est suffisamment brillant. P>
Après le remplissage des inondations, vous saurez la taille de la zone sombre que vous avez remplie et si la frontière du remplissage était exclusivement des pixels vives. Maintenant, continuez la boucle d'origine, sautant des pixels "utilisés". P>
C'est une bonne approche, je vais l'essayer
Êtes-vous sûr de ne pas vouloir faire une approche de détection de pointe? Il semble que la comparaison du pixel actuel à la valeur moyenne des pixels de quartier ferait l'affaire. (J'évaluerais diverses tailles de quartier pour être sûr.) P>
Son été quelques années depuis que j'ai fait un traitement d'image. Mais je commencerais probablement en convertissant une représentation binaire. Il ne semble pas que vous soyez trop intéressé par les valeurs moyennes grises, les régions très sombres / très légères, alors éliminez tout le gris. À ce stade, diverses opérations morphologiques peuvent accentuer les points qui vous intéressent. L'ouverture et la fermeture sont assez faciles à mettre en œuvre et peuvent donner de très beaux résultats, vous laissant avec un champ de noir partout, à l'exception des points qui vous intéressent. p>
Que diriez-vous d'une sorte de filtrage médian? Échantillons de valeurs de 3 * 3 grille (ou d'une autre taille appropriée) autour du pixel et définissez la valeur du pixel vers la médiane de ces 9 pixels. p>
Puis si la plupart des voisins sont brillants, le pixel devient brillant, etc. p>
Edit: Après une pensée, j'ai réalisé que cela ne détectera pas les valeurs aberrantes, elle les supprimera. Donc, ce n'est pas la solution poster originale posée. P>
Je peux penser à ces méthodes pouvant fonctionner avec quelques paramètres de peaufinage: p>
Je vais en fait suggérer une correspondance de modèle simple pour cela, si toutes vos fonctionnalités ont à peu près la même taille. p>
Copiez simplement la coller les pixels d'une (ou quelques fonctionnalités) pour créer quelques modèles, puis utilisez une corrélation croisée normalisée ou tout autre score que OpenCV fournit dans ses routines de correspondance de modèle pour trouver des régions similaires. Dans le résultat, détecter tous les pics maximaux de la réponse (OPENCV a une fonction pour cela aussi), et ce sont vos coordonnées de fonctionnalité. P>
Personnellement, j'aime cette algorithmes de détection d'angle manuel. < / p>
Vous pouvez également vous entraîner d'algorithme de détection des angles naïfs en exploitant une idée que le pixel isolé est un tel pixel par lequel l'intensité change radicalement dans toutes les directions. C'est juste une idée de départ pour commencer et passer à plus de meilleurs algorithmes. P>
404 Sur le lien maintenant, voici la page Wikipedia pour la détection d'angle (je n'ai aucun moyen de savoir s'il couvre des informations similaires à l'article lié): en.wikipedia.org/wiki/corner_detection
Avez-vous essayé d'extraire des composants connectés à l'aide de CVContours? Premier seuil l'image (en utilisant la méthode d'Otsu), puis d'extraire chaque contour. Depuis que les taches que vous souhaitez suivre sont (d'après ce que je vois dans votre image) quelque peu isolée du quartier, ils seront des contours séparés. Maintenant, si nous calculons la zone du rectangle de liaison de chaque contour et de filtrer les plus grands que nous serions laissés avec seulement de petits points séparés des voisins sombres. Comme suggéré plus tôt un peu de bricolage morphologique avant que la séparation du contour ne produise de bons résultats. P>
flou (3x3) une copie de votre image puis différez votre image d'origine. Les pixels avec les valeurs les plus élevées sont ceux qui sont les plus différents de leurs voisins. Cela pourrait être utilisé comme algorithme de détection des bords, mais les points sont comme des super bords afin de définir votre seuil plus élevé.
what a single off pixel looks like: (assume surrounding pixels are all 1) original blurred diff 1,1,1 8/9,8/9,8/9 1/9,1/9,1/9 1,0,1 8/9,8/9,8/9 1/9,8/9,1/9 1,1,1 8/9,8/9,8/9 1/9,1/9,1/9 what an edge looks like: (assume surrounding pixels are the same as their closest neighbor) original blurred diff 1,0,0 6/9,3/9,0/9 3/9,3/9,0/9 1,0,0 6/9,3/9,0/9 3/9,3/9,0/9 1,0,0 6/9,3/9,0/9 3/9,3/9,0/9
Vous cherchez seulement des points foncés sur fond lumineux ou également opposé (points lumineux sur fond sombre)?