maxime0038
Messages postés6Date d'inscriptionlundi 3 janvier 2011StatutMembreDernière intervention15 juin 2011
-
3 janv. 2011 à 18:50
maxime0038
Messages postés6Date d'inscriptionlundi 3 janvier 2011StatutMembreDernière intervention15 juin 2011
-
5 janv. 2011 à 09:14
Bonjour à tous,
Est-il possible de déterminer la surface de zones dont la couleur est uniforme sur un bitmap ?
Je souhaiterais, par exemple, si mon image est un tableau de 25 cases de tailles différentes, déterminer la taille de la plus grande case, de la plus petite, la taille moyenne des cases...
Dans mon cas, les formes, en réalité, ne sont pas des rectangles mais peuvent ressembler à n'importe quoi.
Autre petite difficulté, je ne peux pas utiliser le nombre de pixel de la même couleur sur l'image étant donné que plusieurs formes distinctes peuvent avoir la même couleur.
Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 201918 4 janv. 2011 à 00:27
Salut,
Tel que le problème est exposé, je ne vois qu'un truc: c'est d'utiliser l'algo de Canvas.FloodFill. Mais ça ne va pas être très performant...
EN GROS :
1) Tu travailles sur une copie mémoire de ton Bitmap.
2) Tu le parcours pour lister les couleurs présentes.
3) Tu en déduis un tableau de couleurs qui n'y figurent pas (voir sa taille selon les besoins de ton application, mais supérieure au nombre de couleurs présentes, bien sûr).
4) Tu parcours de nouveau le bitmap, et à chaque nouvelle couleur trouvée qui fait partie des couleurs originales, tu fais un Canvas.FloodFill avec les couleurs du tableau (en l'incrémentant à chaque fois).
5) Tu parcours de nouveau le Bitmap en comptant les pixels de couleurs différentes. Tu auras autant de surfaces différentes que le nombre de couleurs employées (à adapter selon la couleur des 'frontières', s'il y en a...).
Voilà. Ca répond à peu près à ta question. Mais peut-être vaudrait-il mieux réfléchir à la façon de colorier les surfaces à l'origine plutôt que de ramper dans les tuyaux de cette usine à gaz...
_______________________________________
Soutenez Wikimédia France aujourd'hui : http://dons.wikimedia.fr
maxime0038
Messages postés6Date d'inscriptionlundi 3 janvier 2011StatutMembreDernière intervention15 juin 2011 4 janv. 2011 à 11:24
Merci beaucoup, je pense pouvoir m'en sortir...
Toutefois, je vais tenter de préciser si jamais quelqu'un voit une méthode susceptible d'être plus efficace.
J'ai une zone blanche sur laquelle je dessine différentes lignes de façon à illustrer un filet. les lignes peuvent être dessiné dans n'importe quelle direction.
Ce que je souhaite c'est obtenir la taille de mes mailles ainsi formées. Il s'agit donc des zones blanches entre les différents traits....
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 5 janv. 2011 à 01:10
Bonsoir
Je ne sais pas si j'ai tout compris mais bon, en supposant que :
[list]Tes lignes sont uniquement des droites.
Tu travailles sur une surface rectangulaire dont tu connais les dimensions./listTu peux alors mémoriser les coordonnées (en pixels, ou en valeurs réelles ) de départ et d'arrivée de chacune des lignes.
Ton problème se résume alors ( façon de parler, car ce n'est pas si simple qu'il n'y parait) à calculer les intersections de ces droites et donc d'obtenir les sommets des polygones de ton maillage afin d'en calculer leur aire.
De nombreux algo existent pour calculer les intersections de droites; regarde par exemple du côté de l'algo de Bentley-Ottman (voici quelques liens qui te seront peut être utiles, dans la langue de shakespeare bien souvent: ici, ici ou ici) et de façon plus générale pour un aperçu de différentes méthodes ici.
Il te faudra ensuite déterminer les polygones, puis leur aire; mais cela est une autre histoire...
N.B. Google est ton ami
Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein
maxime0038
Messages postés6Date d'inscriptionlundi 3 janvier 2011StatutMembreDernière intervention15 juin 2011 5 janv. 2011 à 09:14
Merci beaucoup. Ça fonctionne, j'ai utilisé FloodFill pour coloriser chacune des mailles d'une couleur différente puis ScanLine pour compter le nombre de pixels pour chacune des couleurs.