Voici un processus simple:
- Attribuez des mesures de texture à chaque région de l'image.
- Utilisez un algorithme d'étiquetage / connectivité de région (ou algorithme de croissance de région) pour joindre des régions adjacentes ayant la même mesure de texture.
- Implémentez un algorithme simple de suivi de bord pour tracer le contour de chaque région.
Les mesures de texture de Law sont une technique plus ancienne mais toujours utile pour déterminer la texture dans une image, et elles peuvent être suffisantes pour distinguer la texture A de la texture B dans toute l'image. Voir la section "Lois sur la texture des mesures énergétiques" dans l'article Wikipedia:
http://en.wikipedia.org/wiki/Image_texture
Dans un premier temps, calculez toutes les mesures de texture et déterminez quelle mesure particulière (par exemple, Edge ou Spot) vous permet de distinguer une texture de l'autre plus facilement. (Si vous postez des photos, je pourrais vous aider à identifier une mesure de texture.)
Si vous n'avez que deux textures, A et B, vous pouvez les traiter comme premier plan et arrière-plan, et un algorithme d'étiquetage de région standard fonctionnera. Pour faciliter la visualisation de ce qui se passe dans le traitement, vous pouvez générer une nouvelle image en affectant des texels A (éléments de texture, petits morceaux de texture) à la couleur blanche et des texels B à la couleur noire. Les algorithmes d'étiquetage de région et / ou de suivi de contour trouveraient alors les régions blanches et noires connectées. La fonction findContours () dans OpenCV fonctionnera bien.
http://en.wikipedia.org/wiki/Connected-component_labeling
Le même article Wikipedia inclut à la fois l'algorithme multipass traditionnel ainsi qu'un algorithme à passage unique. Je n'ai pas implémenté l'algorithme à passage unique décrit ici, mais j'ai travaillé avec l'algorithme à passage unique décrit dans l'article "Un algorithme d'étiquetage des composants utilisant la technique de traçage des contours" par Chen et Chang. L'article de Chen et Chang décrit également un algorithme standard de suivi des contours qui peut être mis en œuvre rapidement.
Si vous avez plus de deux textures, vous pouvez utiliser un algorithme de bassin versant ou de décalage moyen pour regrouper les régions après avoir remappé les textures en couleurs. Bien que ce remappage de la texture à la couleur ne soit pas nécessaire, il facilite le débogage et la compréhension du processus.