Le but de ce programme est de réaliser un programme C++ permettant de segmenter une image. Cette segmentation divise l'image originale en plusieurs régions distinctes et groupe les points adjacents de l'image possédant un attribut scalaire ou vectoriel homogène. La technique utilisée s'appuie sur une coopération de tous les points appartenant à une même région et donne de bons résultats sur des images complexes.
[...] C'est en créant un objet de type Segmentation_image que l'on va pouvoir traiter une image. En public, nous trouvons les méthodes qui seront utilisées en externe : - les afficheurs RVB, Rouge, Vert, Bleu, et Gris des images (vérification de l'acquisition de l'information colorimétrique) : voir Figure 1 - le traitement graphique, à savoir la segmentation graphique qu'on appellera dans le main - l'affichage des blocs Fig.1 Allocation de la couleur Vert, Bleu, Rouge et Gris moyenne des trois. En private nous avons les caractéristiques propres à l'image ainsi que les méthodes successives aboutissant à l'image segmentée : - les matrices (tableaux) de couleur Rouge, Vert, Bleu, et de Gris (une case représente UN pixel). [...]
[...] Nous avons donc contourné le problème car il était important de vérifier le bon fonctionnement de la segmentation. Nous travaillons dans la fenêtre ouverte dans le main. Le Bloc courant arrive de la division, car il remplit le critère d'homogénéité. On le remplit donc avec le niveau de gris moyen des pixels contenus dans le bloc. void afficher_RVB(window &F,int X,int On affiche l'image en couleur en redessinant l'image pixel par pixel. On définit pour cela la couleur du crayon avec les valeurs et B contenues dans les trois matrices de couleurs décrites auparavant. [...]
[...] Cette segmentation a bien été développée, et l'image apparaît bien segmentée. Néanmoins, nous n'avons pas pour cela développé la partie fusion, car celle-ci nous semblait trop complexe à mettre en œuvre. Enfin, il nous est apparu que cette segmentation semble être un filtre classique utilisé en imagerie ALGORITHME : #include "Segmentation_image.h" #include "cmugraphics.h" #include using namespace std; window F(600,628,670,0); int main() { int image Photo; Photo.Open("./Photo.jpg",JPEG); Segmentation_image Process(F,Photo,0,0); coutp_Fils4(),X1+(X2-X1)/2,Y1+(Y2- Y1)/2,X2,Y2,matrice); } } Segmentation_image::Segmentation_image(window &F,image &Image_Traitee,int X1,int Y1) { F.SetBuffering(true); tout ce qui est affichage est géré en interne, et est affiché apres l'update //suite à des ralentissements racine=0; nb_bloc=0; Height = Image_Traitee.GetHeight(); //rentre en paramètre les caractéristiques de l'image Width = Image_Traitee.GetWidth(); rouge = allocation(); //allocation->tableau pixel vert = allocation(); bleu = allocation(); gris = allocation(); F.DrawImage(Image_Traitee,X1,Y1); Draws an image at the location specified by The Width and Height Parameters can used to scale an image. [...]
[...] Le Bloc : Dans la première phase qui est la phase de division, il faut diviser l'image en plusieurs régions. Pour cela, nous avons créé la classe Bloc. Un Bloc est un des quatre cadrans issus de la division de l'image puis d'un bloc père suivant les médiatrices de ses côtés. La définition de Bloc est caractérisée par ses données public et private. En public se trouvent les méthodes et attributs utiles à manipuler par la suite en externe : - l'Ajout de Fils au Bloc : croissance en Arbre, utilisation de graphes - des pointeurs vers les Fils - l'initialisation des coordonnées et des paramètres du Bloc - un booléen indiquant si il y a filiation ou pas En private nous avons ceux intrinsèques au Bloc : - les coordonnées de 2 points opposés - la valeur du niveau de gris moyen et de la variance - le nombre de pixel - le nom du Bloc utile pour la fusion L'implémentation de Bloc détaille ces fonctions. [...]
[...] Nous ne justifierons pas les calculs, mais décrirons simplement ce que nous calculons. Pour le Bloc courant, nous calculons le niveau de gris moyen des pixels contenus dans le Bloc. Nous calculons aussi la variance : des mathématiques vient l'expression = - . est le niveau de gris moyen au carré, et est la moyenne de la somme des niveau de gris au carré. Si après ces calculs le bloc converge vers les critères d'homogénéité, alors il n'est pas divisé, sinon il est divisé en quatre fils, ayant des nouvelles coordonnées, qui son renvoyés vers division, d'où la notion de récursivité. [...]
Source aux normes APA
Pour votre bibliographieLecture en ligne
avec notre liseuse dédiée !Contenu vérifié
par notre comité de lecture