Beruflich Dokumente
Kultur Dokumente
Rsum
Ce dossier a pour vocation de prsenter le travail eectu dans le cadre des travaux pratiques de Traitement d'images. Ce dossier prsente les rsultats obtenues pour les dirents exercices proposs au cours du semestre.
7
. 7 . 7 . 8 . 8 . 10 . . . . . . . . . . . . . . . . . . . . . . . . .
15
15 16 17 19 21 21 25 26 32 32 34 37 37 38 39 40 41 42 55 56 56 66 67 67 68
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sous Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
5.1 Dtection de contours . . . . . . . . . . . . . . . . . . . . . 5.1.1 Gradient Simple . . . . . . . . . . . . . . . . . . . . 5.1.2 Gradient de Roberts . . . . . . . . . . . . . . . . . . 5.1.3 Filtre de Prewitt . . . . . . . . . . . . . . . . . . . . 5.1.4 Filtre de Sobel . . . . . . . . . . . . . . . . . . . . . 5.1.5 Filtre de Canny . . . . . . . . . . . . . . . . . . . . . 5.1.6 Filtre Laplacien . . . . . . . . . . . . . . . . . . . . . 5.1.7 Seuillage par hystrsis . . . . . . . . . . . . . . . . 5.2 Segmentation l'aide de la mthode d'agrgation de pixels
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
73
6 Conclusion
129
Visualisation des informations concernant les formats supports par le priphrique d'acquisition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Achage de l'histogramme (imhist)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Binarisation d'images paramtrable (seuil=120) . . . . . . . . . . . . . . . . . . . . . . . . . . . . Binarisation d'images paramtrable (seuil=150) . . . . . . . . . . . . . . . . . . . . . . . . . . . . Binarisation d'images selon la mthode d'Otsu . . . . . . . . . . . . . . . . . . . . . . . . . . . . Quantication d'images (niveaux de gris=3) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Quantication d'images (niveaux de gris=5) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Quantication d'images (niveaux de gris=10) Quantication d'images (niveaux de gris=25) Quantication d'images (niveaux de gris=50) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fonction de transformation pour l'tirement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tirement d'histogrammes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . galisation d'histogrammes Bruit sel et poivre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Bruit gaussien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bruit suivant la loi de Poisson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonctionnement d'un ltre mdian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Filtre mdian sur un bruit sel et poivre (densit : 0.005, 1 passe, taille 3x3)
Filtre mdian sur un bruit sel et poivre (densit : 0.05, 1 passe, taille 3x3) . . . . . . . . . . . . Filtre mdian sur un bruit sel et poivre (densit : 0.5, 1 passe, taille 3x3) . . . . . . . . . . . . . Filtre mdian sur un bruit sel et poivre (densit : 0.5, 1 passe, taille 7x7) . . . . . . . . . . . . . Filtre mdian sur un bruit sel et poivre (densit : 0.5, 1 passe, taille 7x7) . . . . . . . . . . . . . Filtre mdian sur un bruit sel et poivre (densit : 0.5, 2 passes, taille 3x3) . . . . . . . . . . . . Filtre mdian sur un bruit sel et poivre (densit : 0.5, 5 passes, taille 3x3) . . . . . . . . . . . . Filtre mdian sur un bruit sel et poivre (densit : 0.5, 10 passes, taille 3x3) Filtre mdian sur un bruit gaussien (variance :0.001, 1 passe, taille 3x3) . . . . . . . . . . . Filtre mdian sur un bruit sel et poivre (densit : 0.5, 2 passes, taille 5x5) . . . . . . . . . . . . . . . . . . . . . . . . . . Filtre mdian sur un bruit gaussien (variance :0.01, 1 passe, taille 3x3) . . . . . . . . . . . . . . . Filtre mdian sur un bruit gaussien (variance :0.05, 1 passe, taille 3x3) . . . . . . . . . . . . . . . Filtre mdian sur un bruit gaussien (variance :0.01, 1 passe, taille 7x7) . . . . . . . . . . . . . . . Filtre mdian sur un bruit gaussien (variance :0.01, 2 passes, taille 3x3) Filtre mdian sur un bruit gaussien (variance :0.01, 2 passes, taille 7x7) . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Filtre mdian sur un bruit de Poisson (1 passe, taille 3x3) . . . . . . . . . . . . . . . . . . . . . . Filtre mdian sur un bruit de Poisson (1 passe, taille 7x7) . . . . . . . . . . . . . . . . . . . . . . Filtre mdian sur un bruit de Poisson (2 passes, taille 3x3) Filtre mdian sur un bruit de Poisson (2 passes, taille 7x7) Fonctionnement d'un ltre moyenneur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Filtre moyenneur sur un bruit (densit : 0.005, 1 passe, taille 3x3) Filtre moyenneur sur un bruit (densit : 0.005, 1 passe, taille 7x7)
Filtre moyenneur sur un bruit (densit : 0.005, 2 passes, taille 3x3) . . . . . . . . . . . . . . . . . Filtre moyenneursur un bruit gaussien (variance :0.001, 1 passe, taille 3x3) . . . . . . . . . . . . . Filtre moyenneur sur un bruit gaussien (variance :0.01, 1 passe, taille 3x3) . . . . . . . . . . . . . Filtre moyenneur sur un bruit gaussien (variance :0.05, 1 passe, taille 3x3) . . . . . . . . . . . . . Filtre moyenneur sur un bruit gaussien (variance :0.01, 1 passe, taille 7x7) . . . . . . . . . . . . . Filtre moyenneur sur un bruit gaussien (variance :0.01, 2 passes, taille 3x3) Filtre moyenneur sur un bruit gaussien (variance :0.01, 2 passes, taille 7x7) . . . . . . . . . . . . . . . . . . . . . . . .
Filtre moyenneur sur un bruit de Poisson (1 passe, taille 3x3) . . . . . . . . . . . . . . . . . . . . Filtre moyenneur sur un bruit de Poisson (1 passe, taille 7x7) . . . . . . . . . . . . . . . . . . . . Filtre moyenneur sur un bruit de Poisson (2 passes, taille 3x3) Filtre moyenneur sur un bruit de Poisson (2 passes, taille 7x7) Flou de mouvement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
Correction de ou (longueur :15, angle :0, aucun bruit) . . . . . . . . . . . . . . . . . . . . . . . . Correction de ou (longueur :35, angle :0, aucun bruit) . . . . . . . . . . . . . . . . . . . . . . . . Correction de ou (longueur :15, angle :0, bruit sel et poivre) Correction de ou (longueur :15, angle :0, bruit gaussien) Correction de ou (longueur :15, angle :0, bruit de Poisson) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
70 70 71 71 72 72 73 76 76 77 77 78 78 79 80 82 82 83 83 84 84 85 85 87 87 88 88 89 89 90 91 93 93 94 94 95 95 96 97 97 99 99
Correction de ou (longueur :15, angle :45, aucun bruit) . . . . . . . . . . . . . . . . . . . . . . . Principe du gradient Simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dtection de contours l'aide du gradient simple (sans binarisation) . . . . . . . . . . . . . . . . Dtection de contours l'aide du gradient simple (binarisation de seuil 14) Dtection de contours l'aide du gradient simple (binarisation de seuil 8) Dtection de contours l'aide du gradient simple (binarisation de seuil 3) poivre) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dtection de contours l'aide du gradient simple (binarisation de seuil 14 et un bruit sel et . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dtection de contours l'aide du gradient simple (binarisation de seuil 14 et un bruit gaussien) . Dtection de contours l'aide du gradient simple (binarisation de seuil 14 et un bruit de Poisson) Principe du gradient de Roberts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dtection de contours l'aide du gradient de Roberts (seuil : 0.2) . . . . . . . . . . . . . . . . . . Dtection de contours l'aide du gradient de Roberts (seuil : 0.1) . . . . . . . . . . . . . . . . . . Dtection de contours l'aide du gradient de Roberts (seuil : 0.05) . . . . . . . . . . . . . . . . . Dtection de contours l'aide du gradient de Roberts (seuil : 0.01) . . . . . . . . . . . . . . . . . Dtection de contours l'aide du gradient de Roberts (seuil : 0.05 et bruit sel et poivre) Dtection de contours l'aide du gradient de Roberts (seuil : 0.05 et bruit gaussien) . . . . . . . . . . .
Dtection de contours l'aide du gradient de Roberts (seuil : 0.05 et bruit de Poisson) . . . . . . Principe du ltre de Prewitt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dtection de contours l'aide du ltre de Prewitt (seuil : 0.2) . . . . . . . . . . . . . . . . . . . . Dtection de contours l'aide du ltre de Prewitt (seuil : 0.1) . . . . . . . . . . . . . . . . . . . . Dtection de contours l'aide du ltre de Prewitt (seuil : 0.05) Dtection de contours l'aide du ltre de Prewitt (seuil : 0.01) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dtection de contours l'aide du ltre de Prewitt (seuil : 0.05 et bruit sel et poivre) Dtection de contours l'aide du ltre de Prewitt (seuil : 0.05 et bruit gaussien)
Dtection de contours l'aide du ltre de Prewitt (seuil : 0.05 et bruit de Poisson) . . . . . . . . Principe du ltre de Sobel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dtection de contours l'aide du ltre de Sobel (seuil : 0.2) . . . . . . . . . . . . . . . . . . . . . Dtection de contours l'aide du ltre de Sobel (seuil : 0.1) . . . . . . . . . . . . . . . . . . . . . Dtection de contours l'aide du ltre de Sobel (seuil : 0.05) Dtection de contours l'aide du ltre de Sobel (seuil : 0.01) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dtection de contours l'aide du ltre de Sobel (seuil : 0.05 et bruit sel et poivre) Dtection de contours l'aide du ltre de Sobel (seuil : 0.05 et bruit gaussien) Dtection de contours l'aide du ltre de Sobel (seuil : 0.05 et bruit de Poisson) Principe du ltre de Canny Principe du ltre de Canny
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dtection de contours l'aide du ltre de Canny (seuil : 0.8) Dtection de contours l'aide du ltre de Canny (seuil : 0.4) Dtection de contours l'aide du ltre de Canny (seuil : 0.2)
Dtection de contours l'aide du ltre de Canny (seuil : 0.03) . . . . . . . . . . . . . . . . . . . . 100 Dtection de contours l'aide du ltre de Canny (seuil : 0.2 et bruit sel et poivre) Dtection de contours l'aide du ltre de Canny (seuil : 0.2 et un bruit de Poisson) Principe du ltre Laplacien 4-connexe Principe du ltre Laplacien 8-connexe Dtection de contours l'aide du ltre de Canny (seuil : 0.2 et un bruit gaussien) . . . . . . . . . 101 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 . . . . . . . . . . . . . 105 . . . . . . . . . . . . . 105
Dtection de contours l'aide du ltre Laplacien 4-connexe (aucun bruit) Dtection de contours l'aide du ltre Laplacien 8-connexe (aucun bruit)
Dtection de contours l'aide du ltre Laplacien 8-connexe (bruit 'sel et poivre') . . . . . . . . . 106 Dtection de contours l'aide du ltre Laplacien 8-connexe (bruit gaussien) . . . . . . . . . . . . 106 Dtection de contours l'aide du ltre Laplacien 8-connexe (bruit de Poisson) . . . . . . . . . . . 107 Dtection de contours l'aide du seuillage par hystresis (seuil haut : 125, seuil bas : 100, aucun bruit) bruit) bruit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Dtection de contours l'aide du seuillage par hystresis (seuil haut : 100, seuil bas : 75, aucun Dtection de contours l'aide du seuillage par hystresis (seuil haut : 100, seuil bas : 25, aucun
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
Dtection de contours l'aide du seuillage par hystresis (seuil haut : 40, seuil bas : 25, aucun bruit) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Dtection de contours l'aide du seuillage par hystresis (seuil haut : 100, seuil bas : 25, bruit sel et poivre) gaussien) de Poisson) Dtection de contours l'aide du seuillage par hystresis (seuil haut : 100, seuil bas : 25, bruit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 . . . . . . . . . . . . . . . 117 . . . . . . . . . . . . . . . 118 . . . . . . . . . . . . . . . 118 . . . . . . . . . . . . . . . . 119 . . . . . . . . . . . . . . . 122 . . . . . . . . . . . . . . . 122 . . . . . . . . . . . . . . . 123 . . . . . . . . . . . . . . . . 123 . . . . . . . . . . . . . . . 127 . . . . . . . . . . . . . . . 127 . . . . . . . . . . . . . . . 128 . . . . . . . . . . . . . . . . 128 Dtection de contours l'aide du seuillage par hystresis (seuil haut : 100, seuil bas : 25, bruit Segmentation l'aide de la mthode d'agrgation de pixels (seuil :20) Segmentation l'aide de la mthode d'agrgation de pixels (seuil :15) Segmentation l'aide de la mthode d'agrgation de pixels (seuil :10) Segmentation l'aide de la mthode d'agrgation de pixels (seuil :5) Segmentation l'aide de la mthode d'agrgation de pixels (seuil :20) Segmentation l'aide de la mthode d'agrgation de pixels (seuil :15) Segmentation l'aide de la mthode d'agrgation de pixels (seuil :10) Segmentation l'aide de la mthode d'agrgation de pixels (seuil :5) Segmentation l'aide de la mthode d'agrgation de pixels (seuil :20) Segmentation l'aide de la mthode d'agrgation de pixels (seuil :15) Segmentation l'aide de la mthode d'agrgation de pixels (seuil :10) Segmentation l'aide de la mthode d'agrgation de pixels (seuil :5)
Fonction d'inversion d'images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonction de binarisation selon la mthode d'Otsu . . . . . . . . . . . . . . . . . . . . . . . . . . . Gestionnaire d'vnements du slider pour la quantication . . . . . . . . . . . . . . . . . . . . . . Fonction de quantication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonction d'tirement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonction d'galisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonction d'galisation (Suite) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonction de slection du bruit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonction d'ajout de bruits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonction de ltrage mdian (medlt2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonction de ltrage mdian (Algorithme maison)
Fonction de ltrage moyenneur (imlter) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonction d'application de ltres moyenneurs (Algorithme maison) . . . . . . . . . . . . . . . . . . Fonction de cration du ou . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonction d'application du ou . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonction de correction de ou . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonction de dtection de contours l'aide du gradient Simple . . . . . . . . . . . . . . . . . . . . Fonction de dtection de contours l'aide du gradient Simple (Suite) . . . . . . . . . . . . . . . . Fonction de dtection de contours l'aide du gradient de Roberts . . . . . . . . . . . . . . . . . . Fonction de dtection de contours l'aide du ltre de Prewitt . . . . . . . . . . . . . . . . . . . . Fonction de dtection de contours l'aide du ltre de Sobel . . . . . . . . . . . . . . . . . . . . . Fonction de dtection de contours l'aide du ltre de Canny Fonction de dtection de contours l'aide du ltre Laplacien . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 104
38 39 40 41 42 43 44
Fonction de dtection de contours l'aide du seuillage par hystresis (Suite) . . . . . . . . . . . . 109 Fonction d'agrgation de pixels selon la distance simple . . . . . . . . . . . . . . . . . . . . . . . 115 . . . . . . . . . . . . . . . . . . . 116 . . . . . . . . . . . . . . . . . 121 . . . . . . . . . . . . . 125 Fonction d'agrgation de pixels selon la distance simple (Suite)
Fonction d'agrgation de pixels selon la moyenne de rgion . . . . . . . . . . . . . . . . . . . . . . 120 Fonction d'agrgation de pixels selon la moyenne de rgion (Suite) Fonction d'agrgation de pixels selon la moyenne et l'cart type de rgion
Fonction d'agrgation de pixels selon la moyenne et l'cart type de rgion (Suite) . . . . . . . . . 126
1 Introduction
Ce dossier se compose de cinq parties. Dans une premire partie, nous prsenterons les concepts de bases permettant de raliser une application Matlab destine au traitement d'images. La deuxime partie prsentera un ensemble de fonctions permettant notamment la manipulation d'histogrammes. Dans la partie suivante, nous exposerons un ensemble de mthodes permettant de ltrer les bruits ventuels et de corriger les eets de ous. La cinquime partie de ce dossier s'attardera sur le problme de dtection des contours dans une image et sur le problme de segmentation. Nous terminerons ce dossier par une brve conclusion.
Figure 1 GUIDE
Une bote outils contenant les dirents contrles se situe dans la partie 1 de l'diteur. Pour ajouter un contrle notre interface, il sut de slectionner un des objets de la bote outils et de de le placer dans l'interface situe dans la partie 2 de l'diteur. Les objets suivants seront utiliss dans notre application :
L'objet Push Button sera notamment utilis pour lancer les dirents traitements. Les objets Check Box, Pop-up Menu et Radio Button seront utiliss pour congurer des options. Les objets Static Text et Edit Text seront utiliss pour l'achage et la saisie d'informations. L'objet Slider sera utilis pour permettre l'utilisateur de paramtrer des variables numriques. L'objet Button Group sera utilis pour regrouper les fonctions de l'application par thme. L'objet Axes sera utilis pour l'achage des images, des histogrammes et des fonctions mathmatiques.
Une fois qu'un contrle est prsent dans l'interface, il est possible de paramtrer ce dernier en double-cliquant dessus. Nous accdons alors l'inspector permettant notamment de dnir le nom, le contenu ou mme la couleur du contrle.
Des gestionnaires d'vnements seront galement ajout dans notre code an de dterminer le comportement de notre application lorsque l'utilisateur interagit avec les dirents contrles de l'interface. Pour se faire, nous utilisons des fonctions Callback :
Cette fonction, une fois associe un contrle de l'interface, permet de rpondre aux vnements correspondant ce dernier.
Figure 4 Visualisation des informations concernant les formats supports par le priphrique d'acquisition
Plusieurs formats seront utiliss lors des travaux pratiques. Nous utiliserons principalement trois formats :
Le format RGB24_320x240 et RGB24_160x120 lorsque nous travaillerons dans la salle de l'universit (Les webcams de cette salle supporte le mode RGB). Ce mode sera galement utilis notre domicile pour utiliser une camra Logitech non intgre. Ce mode sera utilis pour les traitements lourds. La faible taille de l'image permettra de limiter la dure des traitements.
Les formats RGB24_640x480 lorsque nous travaillerons dans la salle de l'universit (Les webcams de cette salle supporte le mode RGB). Ce mode sera galement utilis notre domicile pour utiliser une camra Logitech non intgre. Ce mode sera utilis pour les traitements lgers. La taille de l'image plus importante permettra d'amliorer le rendu.
Le format YUY2_320x240 lorsque nous travaillerons notre domicile (Utilisation d'une webcam intgre un ordinateur portable). Ce mode sera utilis pour les traitements lourds. La faible taille de l'image permettra de limiter la dure des traitements. Le format YUY2_1024x768 lorsque nous travaillerons notre domicile (Utilisation d'une webcam intgre un ordinateur portable). Ce mode sera utilis pour les traitements lgers. La taille de l'image plus importante permettra d'amliorer le rendu.
Nous spcions tout d'abord le nom de l'adaptateur utiliser pour communiquer avec le priphrique d'acquisition (winvideo dans notre cas) et nous l'associons la camra n1 dans un format stock dans la variable mode. Nous associons ensuite l'entre vido issue du priphrique l'entre vido de l'interface (handles.vid). Nous congurons ensuite l'entre vido de l'interface. Nous xons tout d'abord le mode de dclenchement des captures Manual. Nous spcions ensuite qu'une seule image doit tre capture pour chaque dclenchement (trigger). Enn, nous prcisons que nous pouvons dclencher la capture autant de fois qu'on le souhaite. Nous allons maintenant prsenter le code permettant de dclencher la capture d'une image (dclenchement du trigger) :
Nous mettons tout d'abord jour l'objet handles.vid l'aide de la fonction guidata. Nous initialisons ensuite la capture l'aide de la fonction start. Il nous sut ensuite de dclencher le trigger l'aide de la fonction trigger. Une image est alors stocke dans l'objet handles.vid. Il nous est possible de rcuprer cette image l'aide de la fonction getdata. Le code suivant permet de stopper l'acquisition :
Aprs avoir stopp la capture l'aide de la fonction stop, nous eaons les images stockes en mmoire l'aide de la fonction clear.
La partie 1 contient un ensemble de contrles de type Axes. Deux d'entre eux sont utiliss pour visualiser les images en entre ainsi que les histogrammes correspondant ces dernires dans la partie Image et histogramme en entre. La partie Image traite utilise quant elle trois contrle de types Axes pour acher les images traits, les histogrammes correspondant ces images ainsi que les fonctions mathmatiques caractrisant le traitement lorsque cela est pertinent (galisation et tirement notamment).
La partie 2 contient les fonctions gnralistes tel que la conguration du format vido ou encore les contrles permettant de stopper le traitement en cours. La partie 3 contient un contrle charg d'acher des informations sur le traitement en cours. La partie 4 regroupe les traitements de modications d'histogrammes, de binarisation et de quantication. La partie 5 regroupe les traitements de ltrage de bruit et de ou. La partie 6 contient les traitements permettant la dtection de contours. La partie 7 regroupe les traitements permettant la segmentation d'images.
Aprs avoir cr l'interface, nous allons maintenant mettre en place la fonction principale de notre programme. Cette dernire permettra de lancer le traitement adapt en fonction des actions de l'utilisateur sur les dirents contrles de l'interface. Cette fonction permet galement de grer les actions sur les boutons Stopper le
10
else
end
%Fonction de t r a i t e m e n t de l ' image . Cette f o n c t i o n l a n c e l e t r a i t e m e n t %p a s s en paramtre f u n c t i o n t r a i t e m e n t ( hObject , eventdata , handles , nomTraitement ) s e t ( h a n d l e s . stop , ' UserData ' , 0 ) ; %h a n d l e s : donnes l i e s au GUIDE i c i on impose que l e bouton Stop s o i t 0 ( non a c t i v ) % C o n f i g u r a t i o n de l e n t r e v i d o %Rcupration du mode de v i s u a l i s a t i o n mode=g e t ( h a n d l e s . listeMode , ' Value ' ) ; s w i t c h mode case 1 mode= ' YUY2_1024x768 ' ; s e t ( h a n d l e s . hauteur , ' S t r i n g ' , ' 768 ' ) ; s e t ( h a n d l e s . l a r g e u r , ' S t r i n g ' , ' 1024 ' ) ; case 2 mode= ' YUY2_320x240 ' ; s e t ( h a n d l e s . hauteur , ' S t r i n g ' , ' 240 ' ) ; s e t ( h a n d l e s . l a r g e u r , ' S t r i n g ' , ' 320 ' ) ; case 3 mode= ' RGB24_320x240 ' ; s e t ( h a n d l e s . hauteur , ' S t r i n g ' , ' 240 ' ) ; s e t ( h a n d l e s . l a r g e u r , ' S t r i n g ' , ' 320 ' ) ; otherwise end vid = v i d e o i n p u t ( ' winvideo ' , 1 , mode ) ; %on a s s o c i e l a d a p t a t e u r ( l o g i c i e l d a c c s l a camra ) au " d e v i c e i d " %de l a camra ( d e v i c e i d = 1) h a n d l e s . vid = vid ; %on a s s o c i e l e n t r e v i d o c e l l e l i e au GUIDE % Fixe l e s p r o p r i t s de l o b j e t vid t r i g g e r c o n f i g ( h a n d l e s . vid , ' Manual ' ) ; %dclenchement manuel pour l a c a p t u r e des frames s e t ( h a n d l e s . vid , ' FramesPerTrigger ' , 1 ) ; %nombre de frames c a p t u r e r chaque f o i s quon l a n c e l a f o n c t i o n " t r i g g e r " ( i c i nb = 1) s e t ( h a n d l e s . vid , ' TriggerRepeat ' , I n f ) ; %on peut u t i l i s e r l a f o n c t i o n " t r i g g e r " autant de f o i s que l o n veut g u i d a t a ( hObject , h a n d l e s ) ; %m o d i f i e l e GUIDE avec l e s n o u v e l l e s donnes % Capture des frames p a r t i r de l a v i d o s t a r t ( h a n d l e s . vid ) ;
11
%s i on na pas appuy s u r l e bouton " Stop " %On e x c u t e l a f o n c t i o n de t r a i t e m e n t adapte i f ( strcmp ( nomTraitement , ' i n v e r s i o n ' ) ) i n v e r s i o n ( hObject , eventdata , h a n d l e s ) ; %Mise j o u r des i n f o r m a t i o n s t i t r e ={ ' I n v e r s i o n ' } ; s a u t L i g n e={ ' ' } ; infosComp={ ' I n v e r s i o n de l ' ' image en e n t r e ( p r a l a b l e m e n t c o n v e r t i t en niveau de g r i s ) ' } s e t ( h a n d l e s . i n f o s T r a i t e m e n t , ' S t r i n g ' , [ t i t r e ; s a u t L i g n e ; infosComp ] ) ; e l s e i f ( strcmp ( nomTraitement , ' histogrammeImHist ' ) ) histogrammeImHist ( hObject , eventdata , h a n d l e s ) ; %Mise j o u r des i n f o r m a t i o n s t i t r e ={ ' Histogramme ' } ; s a u t L i g n e={ ' ' } ; infosComp={ ' A f f i c h a g e de l ' ' histogramme de l ' ' image en e n t r e ( U t i l i s a t i o n de l a f o n c t i o n i m h i s t ) ' } ; s e t ( h a n d l e s . i n f o s T r a i t e m e n t , ' S t r i n g ' , [ t i t r e ; s a u t L i g n e ; infosComp ] ) ; e l s e i f ( strcmp ( nomTraitement , ' histogrammeMaison ' ) ) histogrammeMaison ( hObject , eventdata , h a n d l e s ) ; %Mise j o u r des i n f o r m a t i o n s t i t r e ={ ' Histogramme ' } ; s a u t L i g n e={ ' ' } ; infosComp={ ' A f f i c h a g e de l ' ' histogramme de l ' ' image en e n t r e ( U t i l i s a t i o n d ' ' un a l g o r i t h m e maison ) ' } ; s e t ( h a n d l e s . i n f o s T r a i t e m e n t , ' S t r i n g ' , [ t i t r e ; s a u t L i g n e ; infosComp ] ) ; e l s e i f ( strcmp ( nomTraitement , ' b i n a r i s a t i o n P a r a m ' ) ) b i n a r i s a t i o n P a r a m ( hObject , eventdata , h a n d l e s ) ; %Mise j o u r des i n f o r m a t i o n s t i t r e ={ ' B i n a r i s a t i o n ' } ; s a u t L i g n e={ ' ' } ; infosComp={ ' B i n a r i s a t i o n de l ' ' image en e n t r e s e l o n l e s e u i l s a i s i e . U t i l i s e z l e champ de s a i s i e ' ' S e u i l ' ' . ' } ; s e t ( h a n d l e s . i n f o s T r a i t e m e n t , ' S t r i n g ' , [ t i t r e ; s a u t L i g n e ; infosComp ] ) ; e l s e i f ( strcmp ( nomTraitement , ' b i n a r i s a t i o n O t s u ' ) ) b i n a r i s a t i o n O t s u ( hObject , eventdata , h a n d l e s ) ; %Mise j o u r des i n f o r m a t i o n s t i t r e ={ ' B i n a r i s a t i o n Otsu ' } ; s a u t L i g n e={ ' ' } ; infosComp={ ' B i n a r i s a t i o n de l ' ' image en e n t r e s e l o n un s e u i l c a l c u l l ' ' a i d e de l a mthode d ' ' Otsu ( f o n c t i o n g r a y t h r e s h ) . ' } ; s e t ( h a n d l e s . i n f o s T r a i t e m e n t , ' S t r i n g ' , [ t i t r e ; s a u t L i g n e ; infosComp ] ) ; e l s e i f ( strcmp ( nomTraitement , ' q u a n t i f i c a t i o n ' ) ) q u a n t i f i c a t i o n ( hObject , eventdata , h a n d l e s ) ; %Mise j o u r des i n f o r m a t i o n s t i t r e ={ ' Q u a n t i f i c a t i o n ' } ; s a u t L i g n e={ ' ' } ; infosComp={ ' Q u a n t i f i c a t i o n de l ' ' image en e n t r e . S p c i f i e z l e nombre de niveaux de g r i s d s i r l ' ' a i d e du s l i d e r . ' } ; s e t ( h a n d l e s . i n f o s T r a i t e m e n t , ' S t r i n g ' , [ t i t r e ; s a u t L i g n e ; infosComp ] ) ;
break else
12
13
3.1 Histogramme
Avant de prsenter des traitements proprement parler, nous allons donner deux fonctions permettant de visualiser l'histogramme d'une image. Par dnition, un histogramme est un graphe permettant de reprsenter la rpartition d'une variable. Dans le cas d'une image, l'histogramme permet de connatre le nombre de pixels
15
ayant un niveau de gris donn. Cet outil permet d'obtenir un certain nombres d'indications sur l'image. Il est ensuite possible de raliser un certain nombre de traitements partir de l'histogramme tel qu'un tirement, une galisation ou un seuillage.
Nous rcuprons tout d'abord l'image acquise l'aide de la fonction getdata vue prcdemment. On convertit ensuite cette image en niveau de gris l'aide de la fonction rgb2gray. Nous obtenons alors une image o chaque pixel de l'image est cod l'aide d'un unique octet (la valeur d'un pixel varie donc de 0 255). Nous appelons ensuite la fonction imhist sur l'image I4 an d'obtenir l'histogramme de l'image. On procde ensuite l'achage des images et des histogrammes. Nous plaons respectivement l'image d'entre et son histogramme dans les contrles axes1 et axes2. La fonction plot est utilise pour raliser l'achage de l'histogramme tandis que la fonction subimage est utilise pour raliser l'achage de l'image. On notera l'utilisation des fonctions xlabel et ylabel pour nommer les axes de nos dirents graphiques. Pour acher l'histogramme de l'image d'entre, il nous sut dsormais de cliquer sur le bouton Histogramme imhist de l'interface prsente un peu plus tt dans ce dossier. Le rsultat obtenu est le suivant :
16
17
Nous rcuprons tout d'abord la hauteur et la largeur de l'image d'entre. Ces informations sont stockes dans des contrles de type Edit text invisibles. La valeur de ces contrles est x ds le lancement du traitement et en fonction du choix du mode eectu par l'utilisateur. La fonction get est utilise pour rcuprer la valeur de chaque champ. Cette fonction prend en paramtre le contrle dont on veut rcuprer la valeur ainsi que le type de donnes attendu. Chaque contrle de notre interface est accessible grce la notation handles.nomControle. An d'obtenir des dimensions numriques, nous convertissons les chanes obtenues l'aide de la fonction str2num permettant de convertir une chane de caractres en variable numrique. Nous rcuprons ensuite l'image en entre puis nous la convertissons en niveau de gris. Pour produire l'histogramme de l'image en entre, il nous faut compter le nombre d'occurrences (le nombre de pixel) de chaque niveau de gris. Pour comptabiliser ces dernires, nous crons un tableau tabCompteur de 256 cases. Chaque case contiendra le nombre d'occurrences du niveau de gris correspondant son indice. Nous initialisons chacun des compteurs zro l'aide d'une premire boucle for. Nous parcourons ensuite l'ensemble de l'image l'aide de deux boucles for imbriques. Pour chaque pixel de l'image, nous incrmentons le compteur ayant pour indice le niveau de gris du pixel +1 (les tableaux commenant 1 sous Matlab). Il nous sut ensuite d'acher l'image en entre dans le contrle axe1 et notre histogramme dans le contrle axe2. Pour acher l'histogramme de l'image d'entre, il nous sut dsormais de cliquer sur le bouton Histogramme maison de l'interface prsente un peu plus tt dans ce dossier. Le rsultat obtenu est le suivant :
18
3.2 Inversion
Le premier traitement que nous allons prsenter est l'inversion d'images. Ce traitement relativement simple mettre en place consiste convertir chaque pixel de l'image en entre (en niveau de gris dans notre cas) en sa valeur inverse sur l'chelle des 256 couleurs. Ainsi, un pixel ayant pour valeur 10 sera converti en la valeur 245 alors qu'un pixel ayant pour valeur 250 sera converti en la valeur 5. Pour raliser ce traitement, nous ajoutons la fonction inversion suivante dans notre programme Matlab :
19
Nous rcuprons tout d'abord l'image acquise puis on convertit ensuite cette image en niveau de gris. Pour inverser l'image, il nous sut ensuite de soustraire la valeur de chaque pixel de l'image 255 et de stocker le rsultat ainsi obtenue dans une nouvelle image nomme Inv. Nous construisons ensuite des histogrammes pour l'image d'entre et l'image de sortie l'aide de la fonction imhist. On procde ensuite l'achage des images et des histogrammes. Nous plaons respectivement l'image d'entre et son histogramme dans les contrles axes1 et axes2. Pour terminer, nous plaons respectivement l'image de sortie et son histogramme dans les contrles axes3 et axes4. Pour raliser une inversion d'images, il nous sut dsormais de cliquer sur le bouton Inversion de l'interface prsente un peu plus tt dans ce dossier. Le rsultat obtenu est le suivant :
20
3.3 Binarisation
Nous allons maintenant prsenter des fonctions permettant de raliser une binarisation de l'image en entre. La binarisation permet de rduire l'chelle chromatique de 256 valeurs seulement deux valeurs : 0 et 1. Pour raliser la binarisation, il est ncessaire de choisir un seuil (de manire automatique ou arbitraire). On parcourt ensuite l'ensemble des pixels de l'image d'entre. Chaque pixel ayant un niveau de gris infrieur au seuil se voit assign la valeur 0. Les pixels ayant un niveau de gris suprieur sont quant eux pass 1.
21
else
end end %C o n s t r u c t i o n des histogrammes h i s t o E n t r e e=i m h i s t ( I 4 ) ; h i s t o S o r t i e=i m h i s t ( imgBin ) ; %A f f i c h a g e axes ( h a n d l e s . axes1 ) ; subimage ( I 4 ) ; y l a b e l ( ' Image en e n t r e ' ) ; axes ( h a n d l e s . axes2 ) ; plot ( histoEntree ) ; x l a b e l ( ' Niveau de g r i s ' ) ; y l a b e l ( ' Quantit de p i x e l s ' ) ; axes ( h a n d l e s . axes3 ) ; subimage ( imgBin ) ; y l a b e l ( ' Image en s o r t i e ' ) ; axes ( h a n d l e s . axes4 ) ; plot ( histoSortie ) ; x l a b e l ( ' Niveau de g r i s ' ) ; y l a b e l ( ' Quantit de p i x e l s ' ) ;
end
imgBin ( p , n )=0;
Aprs avoir rcupr l'image en entre et pass cette dernire en niveau de gris, nous rcuprons le seuil saisi par l'utilisateur. Nous dclarons ensuite une nouvelle image qui contiendra le rsultat de la binarisation. Pour allouer cette image, nous avons recours la fonction zeros qui permet d'allouer une matrice de zros. Nous convertissons ensuite cette matrice en image contenant des pixels cods sur un octet l'aide de la fonction im2uint8. Pour raliser la binarisation, il nous sut de parcourir l'image l'aide de deux boucles for. Si la valeur du pixel courant est suprieure au seuil rcupr prcdemment, on passe sa valeur 255 (1) dans la nouvelle image (imgBin). Dans le cas contraire, on passe la valeur du pixel 0. Nous achons ensuite les images et les histogrammes de la mme manire que les fonctions prcdentes. Pour raliser une binarisation d'images paramtrable, il nous sut dsormais de cliquer sur le bouton Binarisation paramtrable de l'interface et de saisir le seuil voulu dans le champ texte prvu cet eet. Avec un seuil de 50, le rsultat obtenu est le suivant :
22
23
24
pixels noirs en sortie du traitement. Les seuils 90 et 120 permettent en revanche d'obtenir des binarisations de bonnes qualits. Le seuil de 150, en revanche, donne un rsultat peu convaincant cause de la prsence d'une zone noire sur la gauche de l'image. Cette zone est provoqu par la sous-exposition de l'image dans cette zone.
else
end end %C o n s t r u c t i o n des histogrammes h i s t o E n t r e e=i m h i s t ( I 4 ) ; h i s t o S o r t i e=i m h i s t ( imgBin ) ; %A f f i c h a g e axes ( h a n d l e s . axes1 ) ; subimage ( I 4 ) ; y l a b e l ( ' Image en e n t r e ' ) ; axes ( h a n d l e s . axes2 ) ; plot ( histoEntree ) ; x l a b e l ( ' Niveau de g r i s ' ) ; y l a b e l ( ' Quantit de p i x e l s ' ) ; axes ( h a n d l e s . axes3 ) ; subimage ( imgBin ) ; y l a b e l ( ' Image en s o r t i e ' ) ; axes ( h a n d l e s . axes4 ) ; plot ( histoSortie ) ; x l a b e l ( ' Niveau de g r i s ' ) ; y l a b e l ( ' Quantit de p i x e l s ' ) ;
end
imgBin ( p , n )=0;
La fonction graythresh prend en paramtre l'image binariser et retourne un seuil compris entre 0 et 1. Il nous faut donc multiplier ce seuil par 255 pour pouvoir l'utiliser par la suite. Nous achons ensuite le seuil retourn par la mthode d'Otsu dans un champ texte. Pour cela, la mthode set est utilise. Cette dernire prend en paramtre le contrle dont la valeur doit tre modi, le type de la valeur et la valeur proprement parler. Nous appliquons ensuite la binarisation de la mme manire que prcdemment puis nous achons les images et les histogrammes.
25
Pour raliser une binarisation d'images selon la mthode d'Otsu, il nous sut dsormais de cliquer sur le bouton Binarisation Otsu de l'interface et de saisir le seuil voulu dans le champ texte prvu cet eet. Le rsultat obtenu est le suivant :
3.4 Quantication
La quantication, l'image de la binarisation, permet de rduire l'chelle chromatique utilise par l'image. Cette rduction peut tre apprciable dans le cadre de la compression d'images. En eet, lorsqu'une image utilise 256 niveau de gris, il est ncessaire d'utiliser un octet pour stocker la valeur de chaque pixel. Si nous pouvons convertir cette image de manire ce qu'elle utilise 16 niveau de gris, nous pourrions alors nous contenter de quatre bits pour coder chaque pixel. La taille de l'image s'en trouverait donc diviser par deux. Pour spcier le nombre de couleurs utilises par l'image de sortie, nous mettons tout d'abord un slider disposition de l'utilisateur. Ce slider est associ un champ texte qui se chargera de mmoriser la valeur du slider un instant donn. Nous plaons un gestionnaire d'vnement sur le slider pour mettre jour le champ texte :
26
Dans un premier temps, nous rcuprons la valeur du slider l'aide de la fonction get puis nous stockons cette valeur dans la variable valeurSlider. Il est noter que la valeur du slider est born par un minimum gale zro et un maximum gale 255. On place ensuite la valeur ainsi rcupr dans le champ texte l'aide de la mthode get puis nous mettons jour les dirents composants de l'interface en appelant la fonction guidata. Nous pouvons maintenant dvelopper la fonction permettant de quantier une image :
27
28
intervalle (ou tranche). On multiplie l'indice du centre d'intervalle par la taille d'une tranche puis nous ajoutons cette valeur la taille d'une tranche divise par deux (an d'obtenir le centre de l'intervalle). Pour quantier l'image, il nous faut maintenant parcourir cette dernire l'aide de deux boucles for. Pour chacun des pixels, nous calculons l'intervalle correspondant au niveau du gris du pixel. Pour cela, on divise le niveau de gris par la taille de la tranche (nous ajoutons 1 car les tableaux dmarrent cet indice sous Matlab). Nous xons ensuite la valeur du pixel courant pour l'image de sortie avec la valeur du centre de l'intervalle ainsi obtenue. Pour raliser une quantication d'images, il nous sut dsormais de cliquer sur le bouton Quantication de l'interface et de rgler le nombre de niveaux de gris souhaits en sortie l'aide du slider. Avec un nombre de niveaux de gris gale 3, le rsultat obtenu est le suivant :
29
30
31
i j = 255
32
Nous rcuprons tout d'abord l'image en entre puis nous convertissons celle ci en niveau de gris. On cherche ensuite dnir les bornes a et b de l'image. Pour cela, les fonctions min et max sont utilises. Ces fonctions sont utiliss deux fois conscutivement : la premire utilisation renvoie le minimum/maximum de chaque ligne. On obtient donc un tableau mono-dimensionnel contenant le minimum/maximum de chaque ligne de l'image. On appelle ensuite une nouvelle fois la fonction pour obtenir le minimum/maximum de l'image. Aprs avoir allou l'image rsultat, nous parcourons l'ensemble de l'image en entre pour appliquer la formule donne pr-
33
cdemment. Aprs avoir construit les histogrammes, nous construisons la fonction de transformation. Pour cela, nous allouons un tableau de 256 valeurs nomm transfoLineaire. Chaque case de ce tableau contient la valeur de la fonction de transformation pour le niveau de gris donn par l'indice. Aprs avoir calcul les 256 valeurs du tableau, nous achons les images, les histogrammes et la fonction de transformation dans les axes prvus cet eet. Pour raliser un tirement d'histogrammes, il nous sut dsormais de cliquer sur le bouton tirement de l'interface. Le rsultat obtenu est le suivant :
34
35
for p=1:256
Comme nous l'avons dit un peu plus tt, nous calculons tout d'abord les densits de probabilits. Pour se faire, nous allouons un tableau densiteProba de 256 cases. Nous parcourons ensuite l'image en incrmentant les dirents compteurs contenus dans le tableau densiteProba. Pour terminer le calcul des densits, nous divisons chaque compteur du tableau par le nombre de pixels de l'image. Nous crons ensuite la fonction de rpartition en cumulant les valeurs des densits de probabilits. Aprs avoir construit cette fonction, il nous sut de parcourir l'image une dernire fois pour appliquer la formule prsente prcdemment. Pour raliser une galisation d'histogrammes, il nous sut dsormais de cliquer sur le bouton galisation de l'interface. Le rsultat obtenu est le suivant :
On peut voir que l'galisation a permis de rpartir les pixels parmi l'ensemble des niveaux de gris de l'image. On peut galement remarquer que l'galisation permet galement de raliser un tirement de l'histogramme. On obtient donc un histogramme en sortie utilisant l'ensemble des niveaux de gris et avec des proportions quasi identiques (La discrtisation de l'image ne permet pas d'obtenir un histogramme constant). Enn, la fonction de transformation a une allure similaire celle tudies lors des travaux dirigs de traitements d'images.
37
38
39
Ce gestionnaire d'vnement capte les vnements concernant le Button Group ajout prcdemment. Ainsi, lorsqu'un des radios boutons situs l'intrieur du groupe est modi, le gestionnaire est excut. Nous
40
rcuprons tout d'abord le tag du composant rcemment modi (le radio bouton qui vient d'tre cliqu). En fonction du tag du radio bouton, nous xons ensuite la valeur du champ texte invisible. La fonction ci-dessous permet d'ajouter un bruit l'image en fonction de la valeur du champ texte invisible :
Aprs avoir rcupr l'image en entre et convertit cette dernire en niveau de gris, nous allouons l'image rsultat de la fonction (imgBruit). Il est noter que cette dernire est retourn par la fonction. L'ajout de valeurs de retour est eectu en ajoutant le nom des variables retournes aprs le mot-clef function. Aprs avoir rcupr la valeur du champ texte invisible bruitChoisi, on ajoute le bruit souhait l'aide de la fonction imnoise. Cette fonction prend en paramtre l'image modier, le type du bruit ajouter ainsi qu'un certain nombre d'ventuels paramtres. Le bruit Gaussien peut tre paramtr avec une moyenne et une variance. Dans notre cas, nous ne modierons que la variance. Enn, le bruit Sel et poivre peut tre paramtr avec une densit. La fonction bruit est excut avant le lancement des fonctions de ltrage. Nous allons maintenant prsenter ces dernires.
41
42
Nous rcuprons tout d'abord les dimensions de l'image. Aprs cela, nous ralisons une copie de l'image bruite passe en entre de la fonction. Cette copie permettra de conserver l'image d'origine en vue de l'achage nal (Achage de l'image bruite gauche et de l'image ltre droite). Nous rcuprons ensuite la conguration du ltre. L'utilisateur peut en eet paramtrer la taille du ltre l'aide d'une liste droulante (3x3, 5x5, 7x7, 9x9 et 11x11). Nous rcuprons galement le nombre de passes (nombre d'applications du ltre). Aprs avoir allou l'image rsultat, nous dmarrons une boucle for. Le nombre d'itrations de cette boucle est x par le nombre de passes rcupr prcdemment. Pour chaque itration, nous ltrons l'image l'aide de la fonction medlt2 en passant en paramtre l'image bruite et les dimensions du ltre. Aprs avoir appliqu le ltre autant de fois que ncessaire, nous achons les histogrammes et les images dans les contrles prvus cet eet. Pour raliser un ltrage mdian de l'image d'entre, il nous sut dsormais de cliquer sur le bouton Filtre
43
mdian de l'interface prsente un peu plus tt dans ce dossier en ayant au pralable congur la taille du ltre et le nombre de passes. Nous allons tout d'abord nous intresser au rsultat d'un ltrage mdian sur un bruit sel et poivre. Avec un bruit sel et poivre de densit 0.005 trait par un ltre mdian de taille 3x3 une seule reprise, le rsultat obtenu est le suivant :
Figure 26 Filtre mdian sur un bruit sel et poivre (densit : 0.005, 1 passe, taille 3x3)
Avec un bruit sel et poivre de densit 0.05 trait par un ltre mdian de taille 3x3 une seule reprise, le rsultat obtenu est le suivant :
44
Figure 27 Filtre mdian sur un bruit sel et poivre (densit : 0.05, 1 passe, taille 3x3)
Avec un bruit sel et poivre de densit 0.5 trait par un ltre mdian de taille 3x3 une seule reprise, le rsultat obtenu est le suivant :
Figure 28 Filtre mdian sur un bruit sel et poivre (densit : 0.5, 1 passe, taille 3x3)
Avec un bruit sel et poivre de densit 0.5 trait par un ltre mdian de taille 7x7 une seule reprise, le rsultat obtenu est le suivant :
45
Figure 29 Filtre mdian sur un bruit sel et poivre (densit : 0.5, 1 passe, taille 7x7)
Avec un bruit sel et poivre de densit 0.5 trait par un ltre mdian de taille 11x11 une seule reprise, le rsultat obtenu est le suivant :
Figure 30 Filtre mdian sur un bruit sel et poivre (densit : 0.5, 1 passe, taille 7x7)
Avec un bruit sel et poivre de densit 0.5 trait par un ltre mdian de taille 3x3 deux reprises, le rsultat obtenu est le suivant :
46
Figure 31 Filtre mdian sur un bruit sel et poivre (densit : 0.5, 2 passes, taille 3x3)
Avec un bruit sel et poivre de densit 0.5 trait par un ltre mdian de taille 3x3 cinq reprises, le rsultat obtenu est le suivant :
Figure 32 Filtre mdian sur un bruit sel et poivre (densit : 0.5, 5 passes, taille 3x3)
Avec un bruit sel et poivre de densit 0.5 trait par un ltre mdian de taille 3x3 dix reprises, le rsultat obtenu est le suivant :
47
Figure 33 Filtre mdian sur un bruit sel et poivre (densit : 0.5, 10 passes, taille 3x3)
Avec un bruit sel et poivre de densit 0.5 trait par un ltre mdian de taille 5x5 deux reprises, le rsultat obtenu est le suivant :
Figure 34 Filtre mdian sur un bruit sel et poivre (densit : 0.5, 2 passes, taille 5x5)
Ces direntes illustrations conrment que le ltre mdian est trs ecace pour liminer les bruits impulsionnels comme le bruit poivre et sel. Pour des densits gale 0.005 et 0.05, l'image ltre est trs proche de l'image d'origine (non bruite). Avec une densit de 0.5, des rsidus subsistent aprs le ltrage. Nous constatons
48
toutefois que sur l'image bruite, il est dicile de dterminer la nature de l'image alors qu'aprs ltrage, il est tout fait possible de distinguer les formes principales. Pour supprimer les rsidus, nous pouvons augmenter la taille du ltre, le nombre de passes ou mme combiner les deux. Nous constatons que l'augmentation de la taille du ltre a tendance diminuer la nettet des contours. Le contraste entre les direntes rgions de l'image deviennent alors moins nettes. En revanche, l'augmentation du nombre de passes conservent relativement bien la nettet des contours. Toutefois, les dformations de ces derniers sont plus important que dans le cas d'une augmentation de la taille du ltre. Pour liminer les rsidus ecacement tout en conservant une qualit de l'image acceptable, nous dcidons d'augmenter un peu ces deux paramtres (2 passes avec un ltre 5x5). Nous obtenons alors un ltrage tout fait satisfaisant. Nous allons maintenant tudier le comportement du ltre mdian sur une image bruite par un bruit gaussien. Avec un bruit gaussien ayant une variance gale 0.001 trait par un ltre mdian de taille 3x3 une reprise, le rsultat obtenu est le suivant :
Figure 35 Filtre mdian sur un bruit gaussien (variance :0.001, 1 passe, taille 3x3)
Avec un bruit gaussien ayant une variance gale 0.01 trait par un ltre mdian de taille 3x3 une reprise, le rsultat obtenu est le suivant :
49
Figure 36 Filtre mdian sur un bruit gaussien (variance :0.01, 1 passe, taille 3x3)
Avec un bruit gaussien ayant une variance gale 0.05 trait par un ltre mdian de taille 3x3 une reprise, le rsultat obtenu est le suivant :
Figure 37 Filtre mdian sur un bruit gaussien (variance :0.05, 1 passe, taille 3x3)
Avec un bruit gaussien ayant une variance gale 0.01 trait par un ltre mdian de taille 7x7 une reprise, le rsultat obtenu est le suivant :
50
Figure 38 Filtre mdian sur un bruit gaussien (variance :0.01, 1 passe, taille 7x7)
Avec un bruit gaussien ayant une variance gale 0.01 trait par un ltre mdian de taille 3x3 deux reprises, le rsultat obtenu est le suivant :
Figure 39 Filtre mdian sur un bruit gaussien (variance :0.01, 2 passes, taille 3x3)
Avec un bruit gaussien ayant une variance gale 0.01 trait par un ltre mdian de taille 7x7 deux reprises, le rsultat obtenu est le suivant :
51
Figure 40 Filtre mdian sur un bruit gaussien (variance :0.01, 2 passes, taille 7x7)
Les captures d'crans ci-dessus nous permettent de voir que le ltre mdian est relativement inecace pour liminer un bruit gaussien. Malgr l'augmentation de la taille du ltre et du nombres de passes, nous n'arrivons pas obtenir une image en sortie correcte. Le ltre mdian a mme tendance taler les eets du bruit sur l'ensemble des pixels. Pour nir, nous allons tudier le comportement du ltre mdian sur une image bruite par un bruit de Poisson. Avec un bruit de Poisson trait par un ltre mdian de taille 3x3 une reprise, le rsultat obtenu est le suivant :
52
53
54
Pour appliquer le ltrage mdian, nous parcourons l'ensemble des pixels de l'image acquise l'aide de deux boucles for imbriques. Un tableau de neuf cases nomm valeur est utilis pour stocker les valeurs des pixels utiliss pour ltrer le pixel courant. On rcupre et on stocke les valeurs des voisins l'aide de deux nouvelles boucles for permettant de parcourir le voisinage du pixel courant. Aprs avoir rcupr les valeurs, il nous sut de trier le tableau l'aide de la fonction sort. On rcupre ensuite la valeur mdiane qui sera utilis comme valeur du pixel courant dans l'image rsultat. Nous achons ensuite les histogrammes et les images. Pour raliser un ltrage mdian maison de l'image d'entre, il nous sut dsormais de cliquer sur le bouton Filtre mdian maison de l'interface prsente un peu plus tt dans ce dossier en ayant au pralable congur la taille du ltre et le nombre de passes. Les rsultats obtenus par cette fonction sont identiques aux rsultats prsents prcdemment. L'excution de notre fonction maison est toutefois moins rapide que l'excution de la fonction utilisant la fonction medlt2.
55
56
Aprs avoir rcupr les dimensions de l'image, nous rcuprons la taille du ltre souhaite, le nombre de passes et le type de gestion des bordures. Ce dernier paramtre peut prendre trois valeurs. Ce paramtre permet de spcier comment seront grs les pixels situs en bordure. En eet, pour ces pixels, il est ncessaire d'utiliser des pixels hors images pour calculer leur valeur. Le mode 'Symmetric' permet de spcier que les pixels situs au del des limites de l'image sont le symtrique de l'image. Ainsi le pixel situ juste aprs la limite de l'image a la mme valeur que celui situ avant la limite. Le mode 'Replicate' permet de spcier que les valeurs situs aprs les limites de l'image ont la mme valeur que les pixels situs en bordure de l'image. Enn, le mode 'Circular' permet de rpter l'image au del des bordures. Ainsi, le pixel situ juste aprs la limite droite de l'image par exemple aura la valeur du pixel le plus gauche dans l'image. Aprs avoir rcupr les paramtres, nous crons le ltre moyenneur. Ce dernier est compos de neuf valeurs gale 1/9. Nous crons tout d'abord un ltre de ct gale la taille du ltre passe en paramtre rempli de 1 l'aide de la fonction ones. Nous parcourons ensuite le ltre l'aide de deux boucles for en divisant chaque valeur par le carr de la taille du ltre. Nous appliquons ensuite ce ltre sur l'image l'aide de la mthode imlter autant de fois que ncessaire (nombre de passes). Pour appliquer un ltre moyenneur l'image d'entre, il nous sut dsormais de cliquer sur le bouton Filtre moyenneur de l'interface prsente un peu plus tt dans ce dossier en ayant au pralable congur la taille du ltre, le nombre de passes et le type de gestion des bordures. Nous allons tout d'abord nous intresser au rsultat obtenu par le ltre moyenneur sur un bruit sel et poivre. Avec un bruit sel et poivre de densit 0.005 trait par un ltre moyenneur de taille 3x3 une seule reprise, le rsultat obtenu est le suivant :
Figure 46 Filtre moyenneur sur un bruit (densit : 0.005, 1 passe, taille 3x3)
Avec un bruit sel et poivre de densit 0.005 trait par un ltre moyenneur de taille 7x7 une seule reprise, le rsultat obtenu est le suivant :
58
Figure 47 Filtre moyenneur sur un bruit (densit : 0.005, 1 passe, taille 7x7)
Avec un bruit sel et poivre de densit 0.005 trait par un ltre moyenneur de taille 3x3 deux reprises, le rsultat obtenu est le suivant :
Figure 48 Filtre moyenneur sur un bruit (densit : 0.005, 2 passes, taille 3x3)
Nous pouvons voir que les ltres moyenneurs sont peu ecaces en prsence de bruit impulsionnel. L'application d'un ltre moyenneur a pour eet de dilater les pixels noirs et blancs. La qualit de l'image rsultat est
59
donc relativement mdiocre. On peut noter toutefois que l'augmentation de la taille du ltre permet de faire disparatre en partie les pixels parasites. Toutefois, nous constatons l'apparition d'un ou important sur l'image rsultat. Nous allons maintenant nous intresser au rsultat obtenu par le ltre moyenneur sur un bruit gaussien. Avec un bruit gaussien ayant une variance gale 0.001 trait par un ltre moyenneur de taille 3x3 une reprise, le rsultat obtenu est le suivant :
Figure 49 Filtre moyenneursur un bruit gaussien (variance :0.001, 1 passe, taille 3x3)
Avec un bruit gaussien ayant une variance gale 0.01 trait par un ltre moyenneur de taille 3x3 une reprise, le rsultat obtenu est le suivant :
60
Figure 50 Filtre moyenneur sur un bruit gaussien (variance :0.01, 1 passe, taille 3x3)
Avec un bruit gaussien ayant une variance gale 0.05 trait par un ltre moyenneur de taille 3x3 une reprise, le rsultat obtenu est le suivant :
Figure 51 Filtre moyenneur sur un bruit gaussien (variance :0.05, 1 passe, taille 3x3)
Avec un bruit gaussien ayant une variance gale 0.01 trait par un ltre moyenneur de taille 7x7 une reprise, le rsultat obtenu est le suivant :
61
Figure 52 Filtre moyenneur sur un bruit gaussien (variance :0.01, 1 passe, taille 7x7)
Avec un bruit gaussien ayant une variance gale 0.01 trait par un ltre moyenneur de taille 3x3 deux reprises, le rsultat obtenu est le suivant :
Figure 53 Filtre moyenneur sur un bruit gaussien (variance :0.01, 2 passes, taille 3x3)
Avec un bruit gaussien ayant une variance gale 0.01 trait par un ltre moyenneur de taille 7x7 deux reprises, le rsultat obtenu est le suivant :
62
Figure 54 Filtre moyenneur sur un bruit gaussien (variance :0.01, 2 passes, taille 7x7)
Nous pouvons voir que les rsultats obtenus par le ltre moyenneur avec le bruit gaussien sont quasiment identiques ceux obtenus avec le ltre mdian. Pour nir, nous allons observer les eets d'un ltre moyenneur sur le bruit de Poisson. Avec un bruit de Poisson trait par un ltre moyenneur de taille 3x3 une reprise, le rsultat obtenu est le suivant :
63
64
65
Pour appliquer le ltrage moyenneur, nous parcourons l'ensemble des pixels de l'image acquise l'aide de deux boucles for imbriques. Un tableau de neuf cases nomm valeur est utilis pour stocker les valeurs des pixels utiliss pour ltrer le pixel courant. On rcupre et on stocke les valeurs des voisins l'aide de deux nouvelles boucles for permettant de parcourir le voisinage du pixel courant. Aprs avoir rcupr les valeurs, il nous sut de calculer la moyenne des valeurs du tableau. On place ensuite cette valeur dans le pixel de l'image rsultat. Pour raliser un ltrage moyenneur maison de l'image d'entre, il nous sut dsormais de cliquer sur le bouton Filtre moyenneur maison de l'interface prsente un peu plus tt dans ce dossier en ayant au pralable congur la taille du ltre, le nombre de passes et la gestion des bordures. Les rsultats obtenus par cette fonction sont identiques aux rsultats prsents prcdemment. L'excution de notre fonction maison est toutefois moins rapide que l'excution de la fonction utilisant la fonction imlter.
66
4.4.1 Flou
L'application du ou sur une image s'eectue en trois tapes. Nous crons tout d'abord le ou proprement parler l'aide de la fonction suivante :
Le ou est paramtr l'aide de deux contrles. Un premier champ texte permet de paramtrer la longueur du ou tandis qu'un second champ texte permet de rgler l'angle du ou. Aprs avoir rcupr ces deux paramtres, nous crons le ou l'aide de la fonction fspecial et nous le stockons dans la variable PSF. La fonction fspecial prend en paramtre le type de ou, la longueur et l'angle du ou. Dans notre cas, nous crons un ou de mouvement (type 'motion'). Il est noter que la variable PSF est retourn par la fonction pour tre utilis par la suite. Il nous faut maintenant appliquer le ou l'image :
Nous rcuprons tout d'abord l'image l'aide de la mthode habituelle. Nous appliquons ensuite le ou l'aide de la fonction imlter. Cette dernire permet de convoluer l'image avec le ou PSF pass en paramtre de la fonction. Il est noter qu'un contrle de type 'checkbox' est plac dans l'interface pour permettre l'utilisateur d'ajouter du bruit en supplment du ou. Lorsque la case cocher est valid, l'utilisateur peut alors paramtrer le bruit l'aide des contrles prsents prcdemment. Les gures suivantes prsentent une mme image plus ou moins altre par un ou de mouvement :
67
68
Pour corriger l'image oute (passe en paramtre de la fonction), il sut d'utiliser la fonction deconvwnr en passant en paramtre l'image corriger et le ou qui a t appliqu (variable PSF passe en paramtre). Il est noter qu'il est possible de donner une approximation du ou la fonction si l'on ne dispose pas du ou exacte. Pour raliser une correction de ou de l'image d'entre, il nous sut dsormais de cliquer sur le bouton Flou Wiener de l'interface prsente un peu plus tt dans ce dossier en ayant au pralable congur la longueur du ou et l'angle de celui ci. Il est galement possible d'ajouter un bruit l'aide de la case cocher prvue cet eet. Avec un ou de longueur 15, un angle nul et aucun bruit, le rsultat obtenu est le suivant :
69
70
Figure 62 Correction de ou (longueur :15, angle :0, bruit sel et poivre)
Avec un ou de longueur 15, un angle nul et un bruit gaussien, le rsultat obtenu est le suivant :
71
72
donc ncessaire d'appliquer au pralable un ltre pour corriger le bruit de l'image avant d'appliquer le ltre de Wiener. Enn, lorsque le ou de mouvement a un angle, le ltre de Wiener se rvle assez peu ecace.
73
else
end
end
end
imgContour ( i , j )=0;
end
end
%norme=f l o o r ( s q r t ( double ( ( ( imgGx ( i , j ) * imgGx ( i , j ))+(imgGy ( i , j ) * imgGy ( i , j ) ) ) ) ) ) ; norme=abs ( imgGx ( i , j ))+ abs ( imgGy ( i , j ) ) ; imgContour ( i , j )=norme ; end
74
Aprs avoir rcupr et convertit l'image, nous regardons si la case cocher est valide. Si c'est le cas, nous ajoutons un bruit l'image l'aide des fonctions prsentes prcdemment dans ce dossier. Nous rcuprons ensuite la valeur du seuil saisie par l'utilisateur. Cette valeur inuencera le nombre de contours dtects comme nous pourrons le voir dans les captures d'cran un peu plus loin dans ce dossier. Nous allouons ensuite trois images : une premire image qui contiendra l'image rsultat ainsi que deux images qui permettront de stocker respectivement les contours horizontaux et verticaux Nous commenons tout d'abord par appliquer le gradient horizontal. Pour cela, nous parcourons l'intgralit de l'image et nous appliquons la formule issue du ltre. Pour un pixel (i,j), il nous faut utiliser la valeur de ce pixel ainsi que le pixel situ sa droite (c'est dire le pixel (i,j+1)). Le ltre est centr sur la valeur -1. Pour calculer le gradient horizontal d'un pixel, on soustrait donc la valeur de ce pixel la valeur du pixel situ sa droite. Nous appliquons ensuite le gradient vertical. Pour cela, nous parcourons l'ensemble des pixels de l'image. Pour un pixel(i,j), il nous faut utiliser la valeur de ce pixel ainsi que la valeur du pixel situ au dessous(c'est dire le pixel (i+1,j)). Pour calculer le gradient vertical d'un pixel, on soustrait donc la valeur de ce pixel la valeur du pixel situ en dessous. Aprs avoir calcul les gradients horizontaux et verticaux, nous calculons la norme des gradients pour chaque pixel de l'image rsultat. Ainsi, le pixel de l'image rsultat (i,j) sera gale la somme norme des pixels (i,j) des deux images contenant les gradients. La norme utilise est la norme des valeurs absolues. Il est noter qu'il est tout fait possible d'utiliser un autre type de norme (voir norme euclidienne en commentaire dans le code). Il est noter que nous avons ajout la possibilit de binariser le rsultat du gradient simple. Ainsi, l'utilisateur peut spcier qu'il souhaite binariser l'image l'aide d'une case cocher. Lorsque cette dernire est valide, nous appliquons alors une binarisation de l'image rsultat en se basant sur le seuil saisie par l'utilisateur dans le champ texte prvu cet eet. Pour raliser une dtection de contours l'aide du gradient Simple, il nous sut dsormais de cliquer sur le bouton Gradient Simple de l'interface prsente un peu plus tt dans ce dossier en ayant ventuellement ajout un bruit l'aide de la case cocher. Sans binarisation, le rsultat obtenu est le suivant :
75
76
77
Figure
poivre)
Avec une binarisation de seuil 14 et un bruit gaussien, le rsultat obtenu est le suivant :
Figure 72 Dtection de contours l'aide du gradient simple (binarisation de seuil 14 et un bruit gaussien)
Avec une binarisation de seuil 14 et un bruit de Poisson, le rsultat obtenu est le suivant :
78
Figure 73 Dtection de contours l'aide du gradient simple (binarisation de seuil 14 et un bruit de Poisson)
On peut voir que le gradient simple permet de dtecter assez ecacement les contours. Les contours produits par ce traitement sont relativement propres et pour la plupart ferms. Toutefois, ce type de ltre est relativement sensible aux bruits.
79
80
Aprs avoir rcupr et convertit l'image, nous regardons si la case cocher est valide. Si c'est le cas, nous ajoutons un bruit l'image l'aide des fonctions prsentes prcdemment dans ce dossier. Nous rcuprons ensuite la valeur du seuil saisie par l'utilisateur. Cette valeur inuencera le nombre de contours dtect comme nous pourrons le voir dans les captures d'cran un peu plus loin dans ce dossier. Aprs avoir allou l'image de sortie imgContour, nous utilisons la fonction Matlab edge pour raliser la dtection des contours de l'image. Cette fonction prend en paramtre l'image d'origine, le nom de la mthode de dtection ('roberts' dans le cas prsent) et le seuil de dtection. Pour raliser une dtection de contours l'aide du gradient de Roberts, il nous sut dsormais de cliquer sur le bouton Gradient de Roberts de l'interface prsente un peu plus tt dans ce dossier en ayant au pralable paramtr le seuil de la dtection et ventuellement ajout un bruit l'aide de la case cocher. Avec un seuil de 0.2, le rsultat obtenu est le suivant :
81
82
83
Figure 79 Dtection de contours l'aide du gradient de Roberts (seuil : 0.05 et bruit sel et poivre)
Avec un seuil de 0.05 et un bruit gaussien, le rsultat obtenu est le suivant :
Figure 80 Dtection de contours l'aide du gradient de Roberts (seuil : 0.05 et bruit gaussien)
Avec un seuil de 0.05 et un bruit de Poisson, le rsultat obtenu est le suivant :
84
Figure 81 Dtection de contours l'aide du gradient de Roberts (seuil : 0.05 et bruit de Poisson)
Nous pouvons voir que lorsque le seuil est lev, seul les contours les plus marqus sont dtects. Avec un seuil de 0.05, nous obtenons une grande partie des contours de l'image. Enn, lorsque le seuil est trop bas, beaucoup trop d'lments sont considrs comme des contours par le dtecteur.
L'application d'un ltre de Prewitt est constitu de deux tapes. Dans un premier temps, on applique les deux ltres de convolution l'image. Le premier de ces ltres permet de dtecter les contours verticaux tandis que le second ltre permet de dtecter les contours horizontaux de l'image. Nous obtenons ainsi deux images. Il sut ensuite de fusionner les deux images en utilisant un calcul de norme. La fonction suivante permet de dtecter les contours l'aide du ltre de Prewitt :
Cette fonction est trs similaire celle du gradient de Roberts. La seule dirence se trouve dans l'utilisation de la fonction edge. Le type de dtection utilis est cette fois 'prewitt'. Pour raliser une dtection de contours l'aide du ltre de Prewitt, il nous sut dsormais de cliquer sur le bouton Filtre de Prewitt de l'interface prsente un peu plus tt dans ce dossier en ayant au pralable paramtr le seuil de la dtection et ventuellement ajout un bruit l'aide de la case cocher. Avec un seuil de 0.2, le rsultat obtenu est le suivant :
86
87
88
Figure 87 Dtection de contours l'aide du ltre de Prewitt (seuil : 0.05 et bruit sel et poivre)
Avec un seuil de 0.05 et un bruit gaussien, le rsultat obtenu est le suivant :
Figure 88 Dtection de contours l'aide du ltre de Prewitt (seuil : 0.05 et bruit gaussien)
Avec un seuil de 0.05 et un bruit de Poisson, le rsultat obtenu est le suivant :
89
Figure 89 Dtection de contours l'aide du ltre de Prewitt (seuil : 0.05 et bruit de Poisson)
Nous pouvons voir que les rsultats obtenus sont similaires ceux obtenus l'aide du gradient de Roberts. Toutefois, le ltre de Prewitt permet de limiter l'apparition des parasites lorsque le seuil est trop faible comme en tmoigne la capture d'cran ralise avec un seuil de 0.01. On peut voir galement que ce ltre rsiste assez bien au bruit gaussien.
90
91
Cette fonction est trs similaire celle du ltre de Prewitt. La seule dirence se trouve dans l'utilisation de la fonction edge. Le type de dtection utilis est cette fois 'sobel'. Pour raliser une dtection de contours l'aide du ltre de Sobel, il nous sut dsormais de cliquer sur le bouton Filtre de Sobel de l'interface prsente un peu plus tt dans ce dossier en ayant au pralable paramtr le seuil de la dtection et ventuellement ajout un bruit l'aide de la case cocher. Avec un seuil de 0.2, le rsultat obtenu est le suivant :
92
93
94
Figure 95 Dtection de contours l'aide du ltre de Sobel (seuil : 0.05 et bruit sel et poivre)
Avec un seuil de 0.05 et un bruit gaussien, le rsultat obtenu est le suivant :
Figure 96 Dtection de contours l'aide du ltre de Sobel (seuil : 0.05 et bruit gaussien)
Avec un seuil de 0.05 et un bruit de Poisson, le rsultat obtenu est le suivant :
95
Figure 97 Dtection de contours l'aide du ltre de Sobel (seuil : 0.05 et bruit de Poisson)
Nous pouvons voir que les rsultats obtenus sont similaires ceux obtenus l'aide du gradient de Roberts. Toutefois, le ltre de Sobel permet de ltrer une partie des parasites lorsque le seuil est trop faible comme en tmoigne la capture d'cran ralise avec un seuil de 0.01.
un critre de bonne dtection garantissant une rponse forte en sortie du ltre mme en prsence de faibles contours sur l'image d'entre. un critre de bonne localisation du contour. un critre d'unicit de la rponse permettant d'assurer une seule dtection pour un contour et ainsi d'viter les eets de rebond.
96
97
Cette fonction est trs similaire celle du ltre de Sobel. La seule dirence se trouve dans l'utilisation de la fonction edge. Le type de dtection utilis est cette fois 'canny'. Pour raliser une dtection de contours l'aide du ltre de Canny, il nous sut dsormais de cliquer sur le bouton Filtre de Canny de l'interface prsente un peu plus tt dans ce dossier en ayant au pralable paramtr le seuil de la dtection et ventuellement ajout un bruit l'aide de la case cocher. Avec un seuil de 0.8, le rsultat obtenu est le suivant :
98
99
100
Figure 104 Dtection de contours l'aide du ltre de Canny (seuil : 0.2 et bruit sel et poivre)
Avec un seuil de 0.2 et un bruit gaussien, le rsultat obtenu est le suivant :
Figure 105 Dtection de contours l'aide du ltre de Canny (seuil : 0.2 et un bruit gaussien)
Avec un seuil de 0.2 et un bruit de Poisson, le rsultat obtenu est le suivant :
101
Figure 106 Dtection de contours l'aide du ltre de Canny (seuil : 0.2 et un bruit de Poisson)
Avec un seuil de 0.8, les contours les plus marqus de l'image ont t parfaitement dtects. Les seuils de 0.4 et 0.2 permettent de dtecter une grande partie des contours de l'image. Enn, lorsque le seuil est trop faible comme c'est le cas pour le seuil gale 0.03, nous constatons l'apparition de nombreuses gries sur l'image rsultat. Nous pouvons voir que les bruits gaussien et de Poisson sont trs bien ltrs par le ltre de Canny. En revanche, le bruit sel et poivre est assez mal support.
102
103
Cette fonction est trs similaire aux fonctions de dtection prcdentes. Aprs avoir rcupr le type de connexit choisi pour le ltre, nous construisons ce dernier dans la variable 'laplacien'. Nous appliquons ensuite ce ltre l'image par convolution l'aide de la fonction imlter. Pour raliser une dtection de contours l'aide du ltre Laplacien, il nous sut dsormais de cliquer sur le bouton Filtre Laplacien de l'interface prsente un peu plus tt dans ce dossier en ayant au pralable choisi la connexit du ltre et ventuellement ajout un bruit l'aide de la case cocher. Avec un ltre Laplacien 4-connexe, le rsultat obtenu est le suivant :
104
Figure 109 Dtection de contours l'aide du ltre Laplacien 4-connexe (aucun bruit)
Avec un ltre Laplacien 8-connexe, le rsultat obtenu est le suivant :
Figure 110 Dtection de contours l'aide du ltre Laplacien 8-connexe (aucun bruit)
Avec un ltre Laplacien 8-connexe et un bruit sel et poivre, le rsultat obtenu est le suivant :
105
Figure 111 Dtection de contours l'aide du ltre Laplacien 8-connexe (bruit 'sel et poivre')
Avec un ltre Laplacien 8-connexe et un bruit gaussien, le rsultat obtenu est le suivant :
Figure 112 Dtection de contours l'aide du ltre Laplacien 8-connexe (bruit gaussien)
Avec un ltre Laplacien 8-connexe et un bruit de Poisson, le rsultat obtenu est le suivant :
106
Figure 113 Dtection de contours l'aide du ltre Laplacien 8-connexe (bruit de Poisson)
Le ltre Laplacien permet une dtection de contour trs correcte. Nous pouvons noter que le ltre 8-connexe produit des contours plus nettes que le ltre 4-connexe. Pour nir, nous pouvons voir ce type de ltres ne convient pas lorsque l'image en entre est bruite.
tape 1 : Initialisation de l'image rsultat. tape 2 : Identication des pixels ayant une valeur de Laplacien suprieur au seuil haut (dni manuellement). Ces pixels sont stocks en mmoire dans une pile ou une le. On xe leur valeur 1 (ou 255) dans l'image rsultat. tape 3 : Parcours de la pile/le. Pour chaque pixel de la structure, on observe les pixels voisins (il est ncessaire de dterminer ce que l'on entend par voisinage (distance de Manhattan ou autre) avant de raliser ce traitement). Si un pixel voisin a une valeur du Laplacien suprieure au seuil bas (dni manuellement), on xe sa valeur 1 (ou 255) dans l'image rsultat et on l'ajoute la pile/le. On poursuit ainsi jusqu' l'puisement de la pile/le.
La fonction suivante permet de dtecter les contours l'aide du seuillage par hystresis :
107
108
Aprs avoir rcupr le seuil haut et bas, nous crons la pile qui sera utilise dans le traitement. Un tableau est utilise pour reprsenter cette structure et une variable numrique est utilise pour mmoriser l'indice du dernier lment de la pile. Ce tableau est compos de deux colonnes : une colonne pour stocker l'indice en x du pixel et une autre colonne pour stocker l'indice en y. Nous parcourons ensuite l'image la recherche de pixels ayant une valeur du Laplacien suprieure au seuil haut. On xe la valeur de ce pixel 255 sur l'image rsultat puis on ajoute les coordonnes de ce dernier dans la pile. Nous eectuons ensuite la deuxime phase. Celle ci se termine lorsque la pile est vide (boucle while). Nous rcuprons tout d'abord l'lment situ en haut de la pile. Nous inspectons ensuite le voisinage de ce pixel. Si un pixel voisin a une valeur de Laplacien suprieure au seuil bas, on xe la valeur de ce pixel 255 sur l'image rsultat puis on ajoute les coordonnes de ce pixel dans la pile. Pour raliser une dtection de contours l'aide du seuillage par hystresis, il nous sut dsormais de cliquer sur le bouton Seuillage par hystresis de l'interface prsente un peu plus tt dans ce dossier en ayant au pralable x les seuils haut et bas l'aide des champs textes prvus cet eet. Dans les tests ci-dessus, nous utiliserons une image trait par un ltre Laplacien 8-connexe. L'image gauche est l'image en sortie du ltre Laplacien tandis que l'image de droite est l'image rsultant du seuillage. Avec seuil haut de 125 et un seuil bas de 100, le rsultat obtenu est le suivant :
109
Figure 114 Dtection de contours l'aide du seuillage par hystresis (seuil haut : 125, seuil bas : 100, aucun
bruit) Avec seuil haut de 100 et un seuil bas de 75, le rsultat obtenu est le suivant :
Figure 115 Dtection de contours l'aide du seuillage par hystresis (seuil haut : 100, seuil bas : 75, aucun
bruit) Avec seuil haut de 100 et un seuil bas de 25, le rsultat obtenu est le suivant :
110
Figure 116 Dtection de contours l'aide du seuillage par hystresis (seuil haut : 100, seuil bas : 25, aucun
bruit) Avec seuil haut de 40 et un seuil bas de 25, le rsultat obtenu est le suivant :
Figure 117 Dtection de contours l'aide du seuillage par hystresis (seuil haut : 40, seuil bas : 25, aucun
bruit) Avec seuil haut de 100, un seuil bas de 25 et un bruit sel et poivre, le rsultat obtenu est le suivant :
111
Figure 118 Dtection de contours l'aide du seuillage par hystresis (seuil haut : 100, seuil bas : 25, bruit
sel et poivre) Avec seuil haut de 100, un seuil bas de 25 et un bruit gaussien, le rsultat obtenu est le suivant :
Figure 119 Dtection de contours l'aide du seuillage par hystresis (seuil haut : 100, seuil bas : 25, bruit
gaussien) Avec seuil haut de 100, un seuil bas de 25 et un bruit de Poisson, le rsultat obtenu est le suivant :
112
Figure 120 Dtection de contours l'aide du seuillage par hystresis (seuil haut : 100, seuil bas : 25, bruit
de Poisson) On peut voir que le seuillage par hystresis est particulirement ecace lorsque les seuils sont bien rgls. Un seuil haut assez lev permet de dtecter seulement les vrais contours lors de la premire phase en excluant les parasites. La seconde phase se contente ainsi de prolonger ces contours. Un seuil bas assez faible permet de prolonger les contours trouvs dans la premire phase. On peut voir qu'un seuil haut trop bas laisse passer beaucoup de parasites. Enn, nous pouvons voir que le seuillage par hystresis supporte trs mal le bruit. Ce dernier constat tait prvisible tant donn que le seuillage par hystresis se base sur le ltre Laplacien, rsistant lui mme assez mal au bruit.
Ils sont connexes (L'objet est constitu d'un seul et unique morceau). Ils ont une couleur et une texture cohrente. Ils sont dlimits par des contours nets.
Pour identier les objets d'une image, plusieurs approches peuvent tre utiliss :
Les segmentations bases sur les contours : dans cette approche, on cherche trouver les frontires de chacun des objets pour les identier. Pour que cette technique soit ecace, il est ncessaire d'utiliser des techniques de reconstructions de contours (fermeture de contours) car ces derniers sont souvent peu prcis ou morcels.
Les segmentations bases sur les rgions : Cette approche regroupe notamment des techniques comme la croissance de rgion ou le spilt and merge. L'ide principale de cette approche est de placer dans l'image des germes (choisir des pixels) puis de faire grossir des rgions homognes partir de ces derniers. Il existe galement des mthodes de segmentations bass sur les histogrammes, des segmentations hybrides s'appuyant sur plusieurs approches etc etc
Dans cette partie, nous aurons recours l'approche bases sur les rgions et plus prcisment, la mthode d'agrgation de pixels. Le principe de cette mthode est de regrouper les pixels connexes semblables en se basant sur
113
deux paramtres :
Un critre d'adjacence : dnition du voisinage considr pour chaque pixel de l'image : 4-connexit ou 8-connexit (Dans notre cas, nous utiliserons la 8-connexit). Un critre d'homognit : dnition d'une distance entre deux pixels voisins. Plusieurs critres d'homognit seront utiliss dans notre tude.
Aprs avoir dni ces deux critres, on dnit un seuil S qui sera utilis comme comparaison avec le critre d'homognit. On place ensuite un germe dans l'image. Ce dernier est plac d'une manire alatoire ou bien en utilisant les valeurs des gradient des pixels (Cette dernire mthode vite de placer le germe sur un contour). Le germe ainsi choisi reoit une tiquette. Cette tiquette permet d'identier la rgion en cours de traitement. A terme, chaque rgion de l'image aura une tiquette dirente. On cherche ensuite faire crotre la taille de la rgion du germe. Pour cela, on recherche dans le voisinage du germe (dni par le critre d'adjacence) des pixels ayant une distance (dni par le critre d'homognit) infrieure au seuil. Si ces pixels respecte ce critre, ils ont ajout la rgion et nous appliquons ensuite la mme mthode sur leur voisinage. Lorsque tous les pixels susceptibles d'tre intgr la rgion ont t observs, on place un nouveau germe dans une partie de l'image non tiquet puis on recommence le processus. Nous allons tout d'abord prsent une fonction permettant de raliser une agrgation de pixels utilisant le critre d'homognit suivant :
114
115
else
La fonction d'agrgation prend en paramtre l'image acquise ainsi que le rsultat de la fonction permettant de calculer le gradient simple de l'image. Nous commenons tout d'abord par rcuprer la dimension de l'image et le seuil saisi par l'utilisateur. Nous initialisons ensuite une variable nomme tiquette 1. Cette variable sera utilis pour tiqueter les direntes rgions de l'image. Nous parcourons ensuite l'image la recherche d'un germe. Pour cela, nous cherchons un pixel non tiquet (valeur du pixel dans l'image rsultat imgRegion gale zro) ayant une valeur de gradient faible pour viter d'obtenir un pixel appartenant un contour. Aprs avoir choisi le premier germe, nous dmarrons une boucle. Cette dernire se termine lorsque tous les pixels de l'image ont t tiquets. A l'instar du seuillage par hystrsis, une pile est utilis pour stocker les pixels tudier. Lors de la premire itration, cette pile contient seulement le germe. On inspecte donc le voisinage de ce germe l'aide de deux boucles for. Pour chaque pixel de ce voisinage, nous vrions tout d'abord que les coordonnes du voisin ne sont pas en dehors de l'image. Ce cas se produit lorsque le pixel de la pile tudi est en bordure d'images. Dans le cas o le voisin est bien dans l'image, nous calculons la distance entre ce pixel et le pixel de la pile. Pour ce critre d'homognit, nous soustrayons simplement la valeur du pixel voisin la valeur du pixel de la pile. Dans le cas o cette distance est infrieure au seuil et que le pixel voisin n'est pas dj tiquet, nous ajoutons ce dernier la rgion en xant la valeur de ce pixel dans l'image imgRegion avec la valeur de l'tiquette. On ajoute ensuite ce pixel dans la pile pour que son voisinage soit tudi par la suite.
116
Lorsque la pile est vide, nous recherchons alors un nouveau germe et nous augmentons la valeur de l'tiquette de un pour dmarrer l'agrgation d'une nouvelle rgion de l'image. Si aucun germe n'a t trouv (tous les pixels de l'image font partie d'une rgion), nous stoppons le traitement. Pour raliser une segmentation l'aide de la mthode d'agrgation de pixels avec ce critre d'homognit, il nous sut dsormais de cliquer sur le bouton Agrgation de pixels de l'interface prsente un peu plus tt dans ce dossier en ayant au pralable slectionn le critre d'homognit Distance simple l'aide des boutons radios et x le seuil l'aide du champ de saisie prvu cet eet. Avec seuil de 20, le rsultat obtenu est le suivant :
117
118
la moyenne des
119
else
Cette fonction est trs similaire la fonction prcdente. Un tableau nomm intensit est utilis pour stocker les valeurs des intensits des pixels de la rgion. On stocke galement le nombre de valeurs prsentes dans ce tableau l'aide d'un compteur. Lorsqu'un pixel est ajout la rgion, nous ajoutons sa valeur dans le tableau. Nous recalculons ensuite la moyenne du tableau l'aide de la fonction mean. La moyenne est utilise pour calculer la distance sparant le pixel tudi de la rgion en cours d'agrgation. Pour raliser une segmentation l'aide de la mthode d'agrgation de pixels avec ce critre d'homognit, il nous sut dsormais de cliquer sur le bouton Agrgation de pixels de l'interface prsente un peu plus tt dans ce dossier en ayant au pralable slectionn le critre d'homognit Moyenne de rgion l'aide des boutons radios et x le seuil l'aide du champ de saisie prvu cet eet. Avec seuil de 20, le rsultat obtenu est le suivant :
121
122
123
notamment le cas du fond blanc de l'image dont les parties bncient d'un clairage dirent. Pour nir, nous allons prsent une fonction permettant de raliser une agrgation de pixels utilisant un dernier critre d'homognit :
R l'cart
type de la rgion.
124
125
Algorithme 44 Fonction d'agrgation de pixels selon la moyenne et l'cart type de rgion (Suite)
intensiteTemp ( k)= i n t e n s i t e ( k ) ; end moyenne=f l o o r ( mean ( intensiteTemp ) ) ; ecartType=c e i l ( s t d ( intensiteTemp ) ) ; i f ( ecartType==0) ecartType =5000; end imgRegion ( i , j )= e t i q u e t t e ; end end end end end %On r e c h e r c h e un germe germeX=0; germeY=0; for i =1: hauteur for j =1: l a r g e u r %S i l e p i x e l n ' e s t pas t i q u e t e t que son g r a d i e n t e s t %i n f r i e u r 10 , i l peut t r e u t i l i s comme germe i f ( imgRegion ( i , j )==0)% && imgGradient ( i , j ) <10) germeY=i ; germeX=j ; end end end %S i aucun germe n ' a pu t r e trouv , on stoppe l e t r a i t e m e n t i f ( germeY==0 | | germeX==0) a r r e t =1; e t i q u e t t e=e t i q u e t t e +1; end end %C o n s t r u c t i o n des histogrammes h i s t o E n t r e e=i m h i s t ( img ) ; h i s t o S o r t i e=i m h i s t ( imgRegion ) ; %Ajout de c o u l e u r s pour d i f f r e n c i e r l e s r g i o n s imgRegion=l a b e l 2 r g b ( imgRegion ) ; %A f f i c h a g e axes ( h a n d l e s . axes1 ) ; subimage ( img ) ; y l a b e l ( ' Image en e n t r e ' ) ; axes ( h a n d l e s . axes2 ) ; plot ( histoEntree ) ; x l a b e l ( ' Niveau de g r i s ' ) ; y l a b e l ( ' Quantit de p i x e l s ' ) ; axes ( h a n d l e s . axes3 ) ; subimage ( imgRegion ) ; y l a b e l ( ' Image en s o r t i e ' ) ; axes ( h a n d l e s . axes4 ) ; plot ( histoSortie ) ; x l a b e l ( ' Niveau de g r i s ' ) ; y l a b e l ( ' Quantit de p i x e l s ' ) ;
for k=1: n b re V al e ur s
else
En plus de la moyenne, nous calculons galement l'cart-type du tableau d'intensits de la rgion. Cette valeur est calcule l'aide de la fonction std. L'cart type et la moyenne sont ensuite utiliss pour le critre d'homognit selon les formules prsentes prcdemment. Pour raliser une segmentation l'aide de la mthode d'agrgation de pixels avec ce critre d'homognit, il nous sut dsormais de cliquer sur le bouton Agrgation de pixels de l'interface prsente un peu plus tt dans ce dossier en ayant au pralable slectionn le critre d'homognit cart type l'aide des boutons
126
radios et x le seuil l'aide du champ de saisie prvu cet eet. Avec seuil de 20, le rsultat obtenu est le suivant :
128
6 Conclusion
Cette srie de travaux pratiques nous a permis de nous initier de nombreuses techniques de traitements d'images. Ces travaux ont t l'occasion d'tudier une partie du cycle de vie d'une image. Partant de l'acquisition de l'image, nous avons pu ensuite nous essayer l'amlioration d'images l'aide des histogrammes, la restauration d'images l'aide des ltres de bruit et de ou. Par la suite, nous avons tudi des traitements de plus haut niveau tel que les traitements de dtection de contours ou de segmentation d'images. Nous avons ainsi acquis une vision globale de ce domaine. Ces travaux pratiques nous ont galement permis d'apprendre dvelopper des applications graphiques avec Matlab. Nous avons pu voir que cette plate-forme tait parfaitement adapte aux problmes de traitements d'images.
129