Question

J'ai écrit récemment un algorithme de détection de bord très de base qui fonctionne sur un tableau de caractères. Le programme a été conçu pour détecter les bords de blobs d'une seule valeur particulière sur le tableau et travaillé simplement regarder à gauche, à droite, de haut en bas sur l'élément de tableau et vérifier si l'une de ces valeurs est pas la même que la valeur était actuellement à la recherche. L'objectif était de ne pas produire une ligne mathématique, mais plutôt un ensemble de points ordonnés qui représentent un bord en boucle fermée descritized.

L'algorithme fonctionne parfaitement bien, sauf que mes données contenaient un peu de bruit serait donc produire au hasard des bords où il devrait être sans arêtes. Cela fait des ravages sur certains de mes autres programmes en bas de la ligne.

Il y a deux types de bruit que les données contiennent. Le premier type est assez rare et un peu au hasard. Le deuxième type est une ligne droite semi-continu sur l'axe x = y. Je sais que la source du premier type de bruit, son une caractéristique des données et il n'y a rien que je puisse faire à ce sujet. Quant au deuxième type, je sais que c'est la faute de mon programme pour faire ça ... si j'ai pas la moindre idée chaude exactement ce qui est à l'origine.

Ma question est: Comment dois-je m'y enlever complètement le bruit?

Je sais que les données correctes a des points qui sont toujours à côté de l'autre et il est très compact et ordonné (sans espace) et une boucle fermée ou plusieurs boucles. Le premier type de bruit est généralement rare et aléatoire, qui pourrait être facilement pris en charge en vérifiant si les arêtes se trouve à côté de ce point de bruit est également considéré comme un avantage. Sinon, le point est plus un air de défi bruit et doit être supprimé.

Cependant, le deuxième type de bruit, où nous avons une ligne semi-continue au sujet x = y pose plus d'un problème. La ligne est parfois continue pour des longueurs aléatoires (la plus longue était il est allé à mi-chemin à travers mon réseau entier sans interruption). Il est même possible pour couper le bord réel.

Toutes les idées sur la façon de le faire?

Était-ce utile?

La solution

Normalement, dans le traitement de l'image d'un filtre médian.

Vous faites aussi souvent dilatent (faire des lignes plus grandes) que d'une érosion (lignes de maquillage plus minces) pour fermer les lacunes dans les lignes

Autres conseils

a tendance à se concentrer le bruit à des fréquences plus élevées, de sorte que la gestion d'un filtre passe-bas sur l'image avant d'effectuer la détection des bords. Je l'ai vu ce principe utilisé pour faire la détection de bord de sous-pixel.

Ceci est le genre de chose que je vais jeter dans les tests unitaires. Obtenez des ensembles de données minimales qui présentent ce problème (quelque chose assez petit qu'il peut être codé directement dans le fichier de test), exécuter les tests, et avec le petit jeu de données juste étape à travers et voir ce qui se passe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top