Cet article présente une méthode innovante de désaturation d'images de nuit, conçue pour surmonter les défis spécifiques tels que les sources lumineuses artificielles, la répartition inégale de la lumière ambiante et le bruit prononcé. L'approche repose sur une estimation multi-échelle de la lumière atmosphérique et une optimisation adaptatvie du coefficient de transmission.
Modules Clés
Estimation Multi-Échelle de la Lumière Ambiante
L'image est décomposée en différentes résolutions à l'aide de la transformée en ondelettes pyramidale. Cette séparation permet de distinguer les composantes de basse fréquence (lumière globale), de moyenne fréquence (diffusion de la lumière) et de haute fréquence (détails et bruit).
% Exemple simplifié de décomposition multi-échelle (conceptuel)
coeffs = wavedec2(image_entree, 3, 'haar'); % Décomposition à 3 niveaux
cA = appcoef2(coeffs, 3); % Approximation (basse fréquence)
[cH, cV, cD] = detcoef2([1 2 3], coeffs, size(image_entree), 3); % Détails (moyenne/haute fréquence)
Fusion Adaptative de la Lumière Atmosphérique
Une stratégie de fusion pondérée est employée pour combiner les informations des différentes échelles. Cette combinaison est ensuite affinée à l'aide d'un filtre de moyenne non-locale pour réduire le bruit tout en préservant les structures importantes.
% Fusion pondérée et débruitage (conceptuel)
lumiere_fusionnee = 0.5 * cA + 0.3 * cH + 0.2 * cV; % Poids ajustables
lumiere_nettoyee = medfilt2(lumiere_fusionnee, [7 7]); % Filtre médian
Estimation Multi-Échelle du Coefficient de Transmission
Le coefficient de transmission est estimé en améliorant la méthode du canal sombre. Une étape de rehaussement des contours est appliquée pour mieux capturer les détails fins.
% Estimation du canal sombre et de la transmission (conceptuel)
canal_sombre = min(image_entree(:,:,1:3), [], 3);
transmission = 1 - 0.9 * (canal_sombre / max(canal_sombre(:)));
% Amélioration des contours
kernel_aiguisage = fspecial('unsharp', 0.5);
transmission_amelioree = imfilter(transmission, kernel_aiguisage, 'replicate');
Optimisation du Modèle de Restauration
Le modèle de restauration est adapté pour la scène nocturne, en tenant compte de la lumière atmosphérique fusionnée. Une correction colorimétrique est ensuite appliquée dans l'espace colorimétrique Lab pour améliorer la fidélité des couleurs.
% Modèle de restauration et correction colorimétrique (conceptuel)
epsilon = 1e-6; % Petite valeur pour éviter la division par zéro
image_restauree = (image_entree - lumiere_nettoyee) ./ (transmission_amelioree + epsilon) + lumiere_nettoyee;
% Correction colorimétrique dans l'espace Lab
image_lab = rgb2lab(image_restauree);
% ... ajustements dans l'espace Lab ...
image_corrige_couleur = lab2rgb(image_lab);
Innovations Principales
Modélisation Dynamique de la Lumière Ambianet
L'attribution dynamique des poids aux différentes échelles, basée sur la concentration de brouillard estimée, permet une adaptation plus fine. L'identification de la direction des sources lumineuses principales contribue à améliorer la modélisation.
Stratégie de Filtrage Hybride
L'utilisation combinée du filtrage guidé dans le domaine spatial et de l'optimisation par seuillage dans le domaine fréquentiel permet de préserver les bords tout en supprimant efficacement le bruit du coefficient de transmission.
Mécanisme de Restauration des Couleurs
Une adaptation de la théorie Retinex est utilisée pour séparer les composantes d'illumination et de réflectance. L'ajustement adaptatif de la saturation dans l'espace HSV améliore l'éclat des couleurs sans introduire d'artefacts.
Implémentation MATLAB
function [image_desaturee] = denoise_night_multi_scale(img_input)
% Paramètres
nb_niveaux = 3;
beta = 0.05;
% Décomposition multi-échelle
[cA, cH, cV, cD] = wdenoise2(img_input, nb_niveaux);
% Estimation lumière atmosphérique
A_basse_freq = imgaussfilt(cA, 2);
A_moyenne_freq = wiener2(cH, [5 5]);
A_haute_freq = medfilt2(cD, [3 3]);
% Fusion adaptative
poids_fusion = [0.6, 0.25, 0.15];
A_fusionnee = poids_fusion(1)*A_basse_freq + poids_fusion(2)*A_moyenne_freq + poids_fusion(3)*A_haute_freq;
% Estimation transmission
canal_sombre_estime = min(img_input(:,:,1:3), [], 3);
t_estime = 1 - 0.98*(canal_sombre_estime / max(canal_sombre_estime(:)));
t_final = imguidedfilter(img_input, t_estime, 'NeighborhoodSize', [7 7], 'DegreeOfSmoothing', 0.008);
% Restauration
seuil_t = 0.1; % Seuil pour éviter division par zéro
img_restauree = (img_input - A_fusionnee) ./ max(t_final, seuil_t) + A_fusionnee;
% Correction couleur et ajustement final
img_rgb_hsv = rgb2hsv(img_restauree);
img_rgb_hsv(:,:,2) = imadjust(img_rgb_hsv(:,:,2)); % Ajustement de la saturation
image_desaturee = hsv2rgb(img_rgb_hsv);
image_desaturee = imadjust(image_desaturee, [], []); % Ajustement global
end
Optimisation pour Scénarios Spécifiques
Surveillance Faible Visibilité
Extension de la plage dynamique pour gérer des niveaux d'éclairement variés et optimisation pour un traitement en temps réel sur des plateformes embarquées.
Systèmes de Conduite Autonome
Intégration avec des algorithmes de détection d'objets (ex: YOLO) pour améliorer la rceonnaissance dans des conditions de visibilité réduite et compensation des erreurs de diffusion atmosphérique pour l'estimation de profondeur.
Photogrammétrie Aérienne
Amélioration de la précision de la reconstruction du terrain par fusion avec des algorithmes de Structure from Motion (SfM) et optimisation des trajectoires d'objets dynamiques.