M.
Yassine ELGHARBI 4 SI
Problème :
Une image bitmap est constituée d’un ensemble de points appelés pixels. L’ensemble de pixels forme
une matrice de points. Chaque pixel est codé sur un certain nombre de bits déterminant ses
caractéristiques (couleurs, intensité,…). Ce nombre de bit est appelé profondeur de codage.
Soit une image bitmap dont ses pixels sont codés selon le mode RVB (Rouge Vert Bleu).
Chaque pixel de cette matrice est constitué en fonction de trois valeurs comprises entre 0 et 255
chacune proviennent successivement de trois matrices de n lignes et m colonnes décrites comme
suit:
M1 : Matrice des valeurs rouges
M2 : Matrice des valeurs vertes
M3 : Matrice des valeurs bleues
M1(rouge) M2(vert) M3(bleu) Image codée en RVB
Pixcel n°1=M(1,1)=f(M1(1,1), M2(1,1), M3(1,1))
Pixcel n°2=M(1,2)=f(M1(1,2), M2(1,2), M3(1,2))
….
Pixcel n°12=M(3,4)=f(M1(3,4), M2(3,4), M3(3,4))
Pour convertir une image de couleurs (RVB) en niveaux de gris, il suffit d’appliquer la formule
suivante :
Y = 0,3R + 0,59V + 0,11B où :
R : valeur rouge
V : valeur verte
B : valeur bleue
Y : exprime le niveau de gris pour un pixel donné
M1(rouge) M2(vert) M3(bleu) Image en niveau de gris (M4)
Pixcel n°1=M4(1,1)=0.23*M1(1,1)+0.59*M(1,1)+0.11* M3(1,1))
Pour convertir une image de niveaux gris en Noir et blanc (M5), il suffit de respecter les conditions
suivantes :
M5(i,j) = 0 Si 0 ≤ M4(i,j) ≤ 128
M5(i,j) = 1 Sinon
Notre problème est réduit sur le remplissage des matrices M1 (valeurs rouge), M2 (valeurs vertes),
M3 (valeurs bleues), M4 (Image en Niveau de gris) et M5 (Image en Noir et blanc) et de stocker les
valeurs de l’image en noir et blanc dans un fichier texte dont son nom physique est « [Link] » situé
sous « C:\4si\ ».
Questions :
1) Analyser ce problème en le décomposant en modules.
2) Analyser les modules envisagés.
3) En déduire l’algorithme du programme principal ainsi que ceux des modules envisagés.
Algorithmique et Programmation en Pascal 1
M. Yassine ELGHARBI 4 SI
Analyse
Analyse du problème
Nom : Conversion_image
Résultat= Proc Afficher ( F )
F= [ ] Fichier_Noir ( M5, L, C, F )
M5= [ ] Proc NoirBlanc ( M4, L, C, M5 )
M4=[ ] Proc Gris ( M1, M2, M3, L, C, M4 )
M3=[ ] Proc Matrice ( M3, L, C )
M2=[ ] Proc Matrice ( M2, L, C )
M1=[ ] Proc Matrice ( M1, L, C )
L,C=[ ] Proc Dimensions( L, C )
F = [ ] Proc Association ( F )
FIN Conversion_image
T.D.N.T T.D.O.G
Type Objet Type/Nature
Mat=Matrice de 30 lignes et 30 Afficher_matrice Procédure
colonnes d’entier NoirBlanc Procédure
Gris Procédure
Matrice Procédure
Dimensions Procédure
L, C Octet
M1, M2, M3, M4, M5 Mat
F Texte
Analyse de la procédure Association
DEF Proc Association ( Var F :texte )
Résultat = F
f = [ ] Associer (f, "C:\ 4si\[Link]")
FIN Association
Analyse de la procédure Dimensions
DEF Proc Dimensions ( Var L, C : octet )
Résultat = ( L, C )
L, C = [ ] Répeter
L,C=donnée("Saisir le nombre de lignes et de colonnes ")
jusqu’à (L>2) ET (C>2)
FIN Dimensions
Analyse de la procédure Matrice
DEF Proc Matrice ( var M : Mat ; L,C : octet )
Résultat = M
M = [ ] Pour i de 1 à L faire
Pour j de 1 à C faire
Proc Pixel(p)
M[ i, j ] p
Fin pour
Fin pour
FIN Matrice
Algorithmique et Programmation en Pascal 2
M. Yassine ELGHARBI 4 SI
T.D.O.L
Objet Type/Nature
i,j Octet
Analyse de la procédure Pixel
DEF Proc Proc Pixel (Var p : octet )
Résultat = p
P = [ ] Répeter
P=donnée("Saisir un octet ")
jusqu’à (p>=0) ET (p<2=255)
FIN Pixel
Analyse de la procédure Gris
DEF Proc Gris ( M1, M2, M3 : Mat ; L, C :octet ; Var M4 :Mat )
Résultat = M4
M4 = [ ] Pour i de 1 à L faire
Pour j de 1 à C faire
M4[ i, j ] 0.3*M1[ i, j ] + 0.59*M2[ i, j ] + 0.11*M3[ i, j ]
Fin pour
Fin pour
FIN Gris
T.D.O.L
Objet Type/Nature
i,j Octet
Analyse de la procédure NoirBlanc
DEF Proc NoirBlanc ( M4 : Mat ; L, C : integer ; M5 :Mat )
Résultat = M5
M5= [ ] Pour i de 1 à L faire
Pour j de 1 à C faire
Si ( M4[ i, j ] Dans [ 0 .. 128] ) Alors
M5[ i, j ] 0
Sinon
M5[ i, j ] 1
Fin si
Fin pour
Fin pour
FIN NoirBlanc
T.D.O.L
Objet Type/Nature
i,j octet
Analyse de la procédure Fichier_Noir
DEF Proc Fichier_Noir ( M5 :Mat ; L, C :octet ; Var f :text )
Résultat = F
Fermer( F )
F = [ ReCréer(f) ] Pour i de 1 à L faire
Pour j de 1 à C faire
ConvCh( M5[ i, j ], Ch )
Ecrire_nl ( f, Ch )
Algorithmique et Programmation en Pascal 3
M. Yassine ELGHARBI 4 SI
Fin pour
Fin pour
FIN Fichier_Noir
T.D.O.L
Objet Type/Nature
ch chaine
Analyse de la procédure Afficher
DEF Proc Afficher ( Var f :text )
Résultat = Aff
Fermer( F )
[ Ouvrir(f) ] Tant que Non (Fin_Fichier (F) ) Faire
Lire_nl ( f, Ch )
Ecrire( Ch )
Fin Tant que
FIN Afficher
T.D.O.L
Objet Type/Nature
ch chaine
Les Algorithmes
Algorithme du PP
0) Début Conversion_image
1) Proc Association ( F )
2) Proc Dimensions( L, C )
3) Proc Matrice ( M1, L, C )
4) Proc Matrice ( M2, L, C )
5) Proc Matrice ( M3, L, C )
6) Proc Gris ( M1, M2, M3, L, C, M4 )
7) Proc NoirBlanc ( M4, L, C, M5 )
8) Proc Fichier_Noir ( M5, L, C, F )
9) Proc Afficher ( F )
10) FIN Conversion_image
Algorithme de la procédure Association
0) DEF Proc Association ( Var F :texte )
1) Associer (f, "C:\4si\[Link]")
2) FIN Association
Algorithme de la procédure Dimensions
0) DEF Proc Dimensions ( Var L, C : octet )
1) Répéter
Ecrire("Saisir le nombre de lignes et de colonnes ")
Lire( L, C )
jusqu’à (L>2) ET (C>2)
2) FIN Dimensions
Algorithmique et Programmation en Pascal 4
M. Yassine ELGHARBI 4 SI
Algorithme de la procédure Pixel
0) DEF Proc Pixel (Var p : octet )
1) Répéter
Ecrire("Saisir un octet ")
jusqu’à (p>=0) ET (p<2=255)
2) FIN Pixel
Algorithme de la procédure Matrice
0) DEF Proc Matrice ( var M : Mat ; L,C : octet )
1) Pour i de 1 à L faire
Pour j de 1 à C faire
Proc Pixel(p)
M[ i, j ] p
Fin pour
Fin pour
2) FIN Matrice
Algorithme de la procédure Gris
0) DEF Proc Gris ( M1, M2, M3 : Mat ; L, C :octet ; Var M4 :Mat )
1) Pour i de 1 à L faire
Pour j de 1 à C faire
M4[ i, j ] 0.3*M1[ i, j ] + 0.59*M2[ i, j ] + 0.11*M3[ i, j ]
Fin pour
Fin pour
2) FIN Gris
Algorithme de la procédure NoirBlanc
0) DEF Proc NoirBlanc ( M4 :Mat ; L, C : Octet ; Var M5 :Mat )
1) Pour i de 1 à L faire
Pour j de 1 à C faire
Si ( M4[ i, j ] Dans [ 0 .. 128] ) Alors
M5[ i, j ] 0
Sinon
M5[ i, j ] 1
Fin si
Fin pour
Fin pour
2) FIN NoirBlanc
Algorithme de la procédure Fichier_Noir
0) DEF Proc Fichier_Noir ( M5 :Mat ; L, C :octet ; Var f :text )
1) ReCreer( F )
2) Pour i de 1 à L faire
Pour j de 1 à C faire
Ecrire_nl ( f, M5[ i, j ] )
Fin pour
Fin pour
3) Fermer ( F )
4) FIN Fichier_Noir
Algorithmique et Programmation en Pascal 5
M. Yassine ELGHARBI 4 SI
Algorithme de la procédure Afficher
0) DEF Proc Afficher ( Var f :text )
1) Ouvrir( f )
2) Tant que Non (Fin_Fichier (F) ) Faire
Lire_nl ( f, Ch )
Ecrire( Ch )
Fin Tant que
3) Fermer( F )
4) FIN Afficher
Algorithmique et Programmation en Pascal 6