M2 SAM - Perception- University of Évry Val d'Essonne
Fait par
BELLAHCENE Kheir Eddine
Encadré par
Pr. Jean Philippe Tarel
Université de Gustave Eiffel
TD: Restauration de la visibilité dans une image
Promotion 2023 - 2024
Introduction
La présence de brouillard peut affecter la visibilité des objets éloignés. Le but de ce TD est de réaliser sur une image une méthode de réstauration de la visibilité des objets éloignés en se basant sur l'article donné en réference.
Réstauration de la visibilité dans une image
La loi de Koschmieder donne l'attenuation d'un objet d'intensité
lorsqu'il est observé à travers un brouillard de coefficient d'extinction k à une distance d. L'intensité vue de l'objet, par chaque pixel, est I: où
est l'intensité du ciel. Indépendamment de la détection du brouillard et de la mésure de la distance de visibilité (reliée à k), nous allons améliorer les contrastes atténués par la brouillard dans une image, en estimant le voile atmosphérique et en inversant la loi de Koschmieder.
Travail à effectuer
- Reécrire la loi de Koschmieder en introduisant le voile défini par la variable
et en éliminant le produit de variables
de l'équation (**) on sort
on trouve
, en remplaçant
dans
on trouve:
2. Inversant le modèle précédent en exprimant
en fonction de
afin d'obtenir l'expression de l'image restaurée
en fonction de l'image avec du brouillard
, le voile V et l'intensité du ciel
Cette équation va nous permettre de faire la réstauration de la visibilité dans une image dès qu'un Vet un
sont obtenus. De (*) on a:
3. En supposant que le ciel est la partie la plus lumineuse (on ne prend pas en considération la luminosité des marquages de la route ... ) estimer l'intensité du ciel
dans l'image "F00.png".
Tout d'abord on charge l'image en question "F00.png" et on la convertit en double et la normaliser on divisant cahque pixel par
afin d'éstimer l'intensité du ciel
I = double(imread("F00.png"))/255;
figure(1), imshow(I), title('Image originale avec Brouillard')
Pour estimer l'intensité du ciel il est claire que dans l'image originale le ciel se trouve dans la partie haute de notre image, et pour estimer le ciel parcequ'on a supposer qui la partie la plus lumineuse donc c'est le pixel d'intensité maximale (Proche de 1 'Le plus lumineux') dans les premières lignes:
Is = max(max(I(1:10,:)));
fprintf('Intensité du ciel Is: %f', Is)
Intensité du ciel Is: 0.698039
Pour qu'on soit sure qu'on est exactement dans le ciel on a choisit les dix premiers lignes de l'image en cherchant le pixel le plus proche du blanc est 
4. Afin d'estimer le voile sur notre image on va faire un lissage avec un filtre median assez large avec une taille de
pour éliminer les marquages et les autres objets blancs. I_lissee = medfilt2(I, filtre_size, "symmetric" );
figure(2), imshow(I_lissee), title('Image Lissé')
Ensuite en estime le voile V est estimé comme
du minimum entre l'image lissé et l'image originale.
V = 0.95 * min(I, I_lissee);
En claculant l'image après restauration des contrastes en utilisant l'équation II :
I0 = ((I-V)./(Is-V)).*Is;
figure(3), imshow(I0), title('Image après Restauration')
En appliquant une puissance sur l'intensité (transformation gamma) et il faut qu'elle soit inférieur à 1 pour qu'elle une division sur la luminosité de chaque pixel on le diminuant chaque pixel plus claire ce qu'implique un clairssisment de l'image.
figure(4), imshow(I0), title('Transformation gamma')
Commentaire:
On remarque bien qu'on a éliminer le brouillard pour une meilleur visbilité, on remarque bien qu'on a une meilleur visibilité en se réperant par la derinère balise à droite.
Appliquer les mêmes traitements sur l'image F01.png
I1 = double(imread("F01.png"))/255;
Is1 = max(max(I1(1:10,:)));
fprintf('Intensité du ciel Is: %f', Is1)
Intensité du ciel Is: 1.000000
figure(5),imshow(I1), title('Image F01 originale avec Brouillard')
I_lissee1 = medfilt2(I1, filtre_size, "symmetric" );
figure(6), imshow(I_lissee1), title('Image Lissé')
V1 = 0.95 * min(I1, I_lissee1);
I01 = ((I1-V1)./(Is1-V1)).*Is1;
figure(7), imshow(I01), title('Image après Restauration')
figure(8), imshow(I01), title('Transformation gamma')
Commentaire
On a une intensité du ciel égale à 1 dans ce exemple c'est normale parceque le brouillard est concentré dans le ciel donc on voit pas le ciel, après le traitement on enlever le brouillard on appliquant les mêmes traitement et on a une meilleurs visibilité en se réperant par la voiture dans la deuxième voie à gauche on la détecte bien maintenant.
Appliquer les mêmes traitements sur l'image F02.png
I2 = double(imread("F02.png"))/255;
Is2 = max(max(I2(1:10,:)));
fprintf('Intensité du ciel Is: %f', Is2)
Intensité du ciel Is: 0.996078
figure(9),imshow(I2), title('Image F01 originale avec Brouillard')
I_lissee2 = medfilt2(I2, filtre_size, "symmetric" );
figure(10), imshow(I_lissee2), title('Image Lissé')
V2 = 0.95 * min(I2, I_lissee2);
I02 = ((I2-V2)./(Is2-V2)).*Is2;
figure(11), imshow(I02), title('Image après Restauration')
figure(12), imshow(I02), title('Transformation gamma')
Commentaire
On a appliquer les même traitements sur l'image F02 et on éliminer le brouillard avec les méthode utilisé.
Adaptation de la réstauration pour l'image en couleurs F03
Dans ce traitement on va traiter chaque compossante seule
La composante R:
Ir = double(I3(:,:,1))/255;
figure(13),imshow(Ir),title('composante R avec Brouillard ')
Is3 = max(max(Ir(1:10,:)));
fprintf('Intensité du ciel Is: %f', Is3)
Intensité du ciel Is: 1.000000
I_lissee3 = medfilt2(Ir, filtre_size, "symmetric" );
figure(14), imshow(I_lissee3), title('Image R Lissé')
V3 = 0.95 * min(Ir, I_lissee3);
figure(15), imshow(V3), title('Le voile de R');
I03 = ((Ir-V3)./(Is3-V3)).*Is3;
figure(16), imshow(I03), title('Image après Restauration R')
figure(17), imshow(I03), title('Transformation gamma R')
La composante G:
Ig = double(I3(:,:,2))/255;
figure(17),imshow(Ig),title('composante G avec Brouillard ')
Is4 = max(max(Ig(1:10,:)));
fprintf('Intensité du ciel Is: %f', Is4)
Intensité du ciel Is: 1.000000
I_lissee4 = medfilt2(Ig, filtre_size, "symmetric" );
figure(18), imshow(I_lissee4), title('Image G Lissé')
V4 = 0.95 * min(Ig, I_lissee4);
figure(19), imshow(V4), title('Le voile de G');
I04 = ((Ig-V4)./(Is4-V4)).*Is4;
figure(20), imshow(I04), title('Image après Restauration G')
figure(21), imshow(I04), title('Transformation gamma G')
La composante B:
Ib = double(I3(:,:,3))/255;
figure(22),imshow(Ib),title('composante B avec Brouillard ')
Is5 = max(max(Ib(1:10,:)));
fprintf('Intensité du ciel Is: %f', Is5)
Intensité du ciel Is: 1.000000
I_lissee5 = medfilt2(Ib, filtre_size, "symmetric" );
figure(23), imshow(I_lissee5), title('Image B Lissé')
V5 = 0.95 * min(Ib, I_lissee5);
figure(24), imshow(V5), title('Le voile de B');
I05 = ((Ib-V5)./(Is5-V5)).*Is5;
figure(25), imshow(I05), title('Image après Restauration B')
figure(26), imshow(I05), title('Transformation gamma B')
Concatenation:
I3_gamma_rgb = cat(3,I03,I04,I05);
figure(28), imshow(I3_gamma_rgb), title("Transformation gamma RGB")
Vrgb = cat(3, V3, V4, V5);
figure(30), imshow(Vrgb), title("Le voile RGB")
Commentaire:
Le voile est coloré puisque lors de la concatenation du voile des troix composante on voit les plaques de signalisation en jaune et les feuilles des arbres, on a appliquer les traitements sur chaque composante seul puis on a concatener le resultat pour avoir le résultat en couleur et on remarque que aprés traitement on voit bien que la voiture au fond a droite est mieux visible maintenant, donc le brouillard est éliminé.
Considérant le brouillard est parfaitement blanc
Le voile est parfaitement blanc ce qui veut dire que Is = 1 ce qui le cas déja puis le résultat Is égale à 1 et on prend que le voile 99 % i.e que ne voit rien le voile est parfaitement blanc chaque pixel du voile est banc on peut pas mettre 1 puisque on a dans le dénominateur Is - V donc si on met 1 ca tombe vers l'infini.
I3_double_norm = double(I3)/255;
V_pblanc = I3_double_norm;
figure(40), imshow(V_pblanc),title('voile blanc parfait')
Et c'est ca l'adaptation ce qu'il faut ajouter à l'algo pour qu'il fonctionne:
Conclusion
On a pu faire les différentes transformation pour une meilleur visibilité dans le cas des situations dégradés pour les systèmes ADAS, et on applique ces traitement sur des images en niveau de gris puis on pu adapter l'alghorithme pour les différentes situation et on eu des résultat ou on a eu une meilleurs visibilité et détection des vehicules qui sont tros loing est qu'on ne voit pas avec le brouillard.