Pratiques de conversion RVB/HSV et traitement d’images en niveau gris avec MATLAB

Ce document présente des notions fondamentales sur la manipulation d’images numériques en niveaux de gris et en couleur, ainsi que des techniques de conversion entre les espaces RVB et HSV. Il s’adresse aux étudiants en traitement d’images utilisant MATLAB, en proposant des méthodes pratiques pour le chargement, la transformation, le filtrage et la détection de contours d’images.

D'après le document Pratiques de conversion RVB/HSV et traitement d’images en niveau gris avec MATLAB

Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.

Pratiques de conversion RVB/HSV et traitement d’images en niveau gris avec MATLAB

Document source

Pratiques de conversion RVB/HSV et traitement d’images en niveau gris avec MATLAB

Image Processing, Programming, Digital Imaging · PDF · 3 pages

Afficher l'aperçu du document

Consulter le document original →

Ce document présente des notions fondamentales sur la manipulation d’images numériques en niveaux de gris et en couleur, ainsi que des techniques de conversion entre les espaces RVB et HSV. Il s’adresse aux étudiants en traitement d’images utilisant MATLAB, en proposant des méthodes pratiques pour le chargement, la transformation, le filtrage et la détection de contours d’images.

Définition de l’image numérique

Une image numérique est représentée par une matrice de pixels identifiés par leurs coordonnées (x, y). Pour une image couleur, chaque pixel est codé par trois composantes (r, g, b), chacune variant généralement entre 0 et 255, correspondant aux intensités de rouge, vert et bleu. Pour une image en niveaux de gris, un seul canal est utilisé, codé également entre 0 et 255, représentant la luminosité du pixel.

Traitements d’image

Les traitements d’image consistent à manipuler les tableaux d’entiers représentant les composantes des pixels. Ces traitements sont principalement appliqués aux images en niveaux de gris, mais peuvent aussi concerner les images couleur.

Changement de format de l’image sous MATLAB

L’œil humain perçoit les couleurs via trois récepteurs correspondant aux couleurs primaires rouge, vert et bleu. De ce fait, les espaces couleur sont tridimensionnels. Les espaces les plus courants sont RVB (Rouge-Vert-Bleu) et HSV (Teinte-Saturation-Valeur).

  • Charger deux images : une en noir et blanc et une en couleur.
  • Déterminer la taille de chaque image.
  • Décomposer l’image couleur en ses trois plans R, G et B, puis afficher ces trois images séparément.
  • Convertir l’image couleur en niveau de gris et afficher côte à côte l’image couleur et l’image en niveaux de gris.

Commandes MATLAB utiles : imread, imshow, rgb2gray.

Exemple de décomposition RVB et conversion en niveaux de gris
% Chargement de l'image couleur
img_color = imread('image_couleur.jpg');

% Taille de l'image
[hauteur, largeur, nb_canaux] = size(img_color);

% Décomposition en plans R, G, B
R = img_color(:,:,1);
G = img_color(:,:,2);
B = img_color(:,:,3);

% Affichage des plans
imshow(R); title('Plan Rouge');
imshow(G); title('Plan Vert');
imshow(B); title('Plan Bleu');

% Conversion en niveaux de gris
img_gray = rgb2gray(img_color);

% Affichage côte à côte
figure;
subplot(1,2,1); imshow(img_color); title('Image couleur');
subplot(1,2,2); imshow(img_gray); title('Image en niveaux de gris');

Histogramme d’images

  • Charger et afficher une image.
  • Afficher son histogramme.
  • Égaliser l’histogramme de l’image.
  • Afficher l’histogramme de l’image égalisée.

L’histogramme d’une image montre la répartition des niveaux de gris. L’égalisation permet d’améliorer le contraste en redistribuant les intensités.

Commandes MATLAB utiles : imhist, histeq.

Exemple d’affichage et égalisation d’histogramme
img = imread('image_gris.jpg');
imshow(img); title('Image originale');

% Affichage de l'histogramme
figure;
imhist(img); title('Histogramme original');

% Égalisation de l'histogramme
img_eq = histeq(img);

% Affichage de l'image égalisée
figure;
imshow(img_eq); title('Image après égalisation');

% Histogramme de l'image égalisée
figure;
imhist(img_eq); title('Histogramme égalisé');

Filtrage d’images

Le filtrage vise à améliorer la qualité visuelle en réduisant le bruit, c’est-à-dire les parasites présents dans l’image. Les basses fréquences correspondent aux zones uniformes, tandis que les hautes fréquences correspondent aux contours et au bruit.

Un filtre passe-bas adoucit l’image en réduisant les hautes fréquences, tandis qu’un filtre passe-haut accentue les contours et le bruit.

Ajout de bruit

Avec la commande imnoise, on peut ajouter différents types de bruit à une image : bruit gaussien, bruit sel et poivre.

Filtrage linéaire

  • Filtre moyenneur : filtre qui remplace chaque pixel par la moyenne des pixels voisins.
  • Filtre gaussien : filtre pondéré selon une distribution gaussienne, plus doux que le filtre moyenneur.

Exemple de filtrage moyenneur sur une image bruitée :

Exemple de filtrage moyenneur avec bruit gaussien
% Chargement de l'image
img = imread('image_gris.jpg');

% Ajout de bruit gaussien avec variance 0.2 et 0.4
img_bruit_02 = imnoise(img, 'gaussian', 0, 0.2);
img_bruit_04 = imnoise(img, 'gaussian', 0, 0.4);

% Affichage des images
figure;
subplot(1,3,1); imshow(img); title('Image originale');
subplot(1,3,2); imshow(img_bruit_02); title('Bruit gaussien variance 0.2');
subplot(1,3,3); imshow(img_bruit_04); title('Bruit gaussien variance 0.4');

% Création des filtres moyenneurs 3x3, 5x5, 7x7
filtre_3 = fspecial('average', [3 3]);
filtre_5 = fspecial('average', [5 5]);
filtre_7 = fspecial('average', [7 7]);

% Filtrage des images bruitées
img_filtre_3 = filter2(filtre_3, img_bruit_02) / 255;
img_filtre_5 = filter2(filtre_5, img_bruit_02) / 255;
img_filtre_7 = filter2(filtre_7, img_bruit_02) / 255;

% Affichage des résultats
figure;
subplot(1,3,1); imshow(img_filtre_3); title('Filtre moyenneur 3x3');
subplot(1,3,2); imshow(img_filtre_5); title('Filtre moyenneur 5x5');
subplot(1,3,3); imshow(img_filtre_7); title('Filtre moyenneur 7x7');

Filtrage non linéaire

  • Filtre médian : remplace chaque pixel par la médiane des pixels voisins, efficace contre le bruit sel et poivre.
  • Filtres minimum et maximum : remplacent le pixel par la valeur minimale ou maximale des pixels voisins, utiles pour certains effets spécifiques.

Exemple de filtrage non linéaire :

Filtrage non linéaire sur images bruitées
% Chargement de l'image
img = imread('image_gris.jpg');

% Ajout de bruit gaussien et sel et poivre
img_bruit_gauss = imnoise(img, 'gaussian', 0, 0.2);
img_bruit_sp = imnoise(img, 'salt & pepper', 0.02);

% Affichage des images
figure;
subplot(1,3,1); imshow(img); title('Image originale');
subplot(1,3,2); imshow(img_bruit_gauss); title('Bruit gaussien 0.2');
subplot(1,3,3); imshow(img_bruit_sp); title('Bruit sel et poivre');

% Filtrage médian
img_med_gauss = medfilt2(img_bruit_gauss, [3 3]);
img_med_sp = medfilt2(img_bruit_sp, [3 3]);

% Filtrage minimum et maximum (exemple avec filtre 3x3)
img_min_sp = ordfilt2(img_bruit_sp, 1, true(3));
img_max_sp = ordfilt2(img_bruit_sp, 9, true(3));

% Affichage des résultats
figure;
subplot(2,2,1); imshow(img_med_gauss); title('Filtre médian sur bruit gaussien');
subplot(2,2,2); imshow(img_med_sp); title('Filtre médian sur bruit sel et poivre');
subplot(2,2,3); imshow(img_min_sp); title('Filtre minimum sur bruit sel et poivre');
subplot(2,2,4); imshow(img_max_sp); title('Filtre maximum sur bruit sel et poivre');

Détection de contours

La détection de contours vise à identifier les points d’une image où l’intensité lumineuse change brutalement. Cela permet de réduire la quantité de données tout en conservant les informations structurelles importantes.

Filtre de Prewitt

Le filtre de Prewitt utilise deux matrices de convolution pour détecter les contours horizontaux et verticaux :

hx = [-1 0 1]

hy = transpose(hx)

Les convolutions avec ces matrices produisent deux images Gx et Gy, représentant les gradients horizontaux et verticaux. La magnitude du gradient est ensuite calculée pour localiser les contours.

Commande MATLAB typique :

hx = [-1 0 1];
hy = hx';

Gx = filter2(hx, img);
Gy = filter2(hy, img);

G = sqrt(Gx.^2 + Gy.^2);

imshow(G, []); title('Contours détectés avec Prewitt');

Filtre de Sobel

Le filtre de Sobel calcule le gradient d’intensité pour chaque pixel, indiquant la direction et le taux de variation de la luminosité. Il utilise des matrices 3×3 convoluées avec l’image pour approximer les dérivées horizontale (Gx) et verticale (Gy).

La norme du gradient est calculée par :

G = sqrt(Gx^2 + Gy^2)

Cette méthode permet de détecter les bords avec une meilleure sensibilité que Prewitt, notamment en présence de bruit.

Filtre de Robert

Les filtres de Roberts sont une approximation discrète du gradient avec un pas de 1 pixel. Pour un pixel I(x,y), les gradients sont :

Gx = I(x+1,y) - I(x,y)

Gy = I(x,y+1) - I(x,y)

Les filtres correspondants sont :

Rx = [-1 1]

Ry = transpose(Rx)

Différentes façons de calculer l’amplitude du gradient :

G1(x,y) = sqrt(Gx^2 + Gy^2)

G2(x,y) = max(|Gx|, |Gy|)

G3(x,y) = |Gx| + |Gy|

La direction du gradient est donnée par :

D(x,y) = Arctan(Gy / Gx)

Ces filtres sont très sensibles au bruit car ils amplifient les variations locales brusques, ce qui peut engendrer des contours épais sur des rampes de luminosité.

Glossaire des termes clés

  • Pixel : Plus petite unité d’une image numérique, codée par une ou plusieurs composantes.
  • RVB : Espace couleur fondé sur les composantes Rouge, Vert, Bleu.
  • HSV : Espace couleur basé sur Teinte (Hue), Saturation, Valeur (luminosité).
  • Histogramme : Distribution des niveaux de gris dans une image.
  • Égalisation d’histogramme : Technique pour améliorer le contraste d’une image.
  • Bruit gaussien : Bruit aléatoire suivant une distribution normale.
  • Bruit sel et poivre : Bruit impulsionnel avec pixels noirs et blancs aléatoires.
  • Filtre moyenneur : Filtre linéaire qui remplace chaque pixel par la moyenne de ses voisins.
  • Filtre gaussien : Filtre linéaire pondéré selon une fonction gaussienne.
  • Filtre médian : Filtre non linéaire qui remplace chaque pixel par la médiane de ses voisins.
  • Filtre minimum/maximum : Filtres non linéaires qui remplacent le pixel par la valeur minimale ou maximale locale.
  • Détection de contours : Identification des zones de variation rapide d’intensité lumineuse.
  • Filtre de Prewitt : Filtre de détection de contours basé sur des convolutions horizontales et verticales simples.
  • Filtre de Sobel : Filtre de détection de contours utilisant des convolutions 3×3 pour approximer le gradient.
  • Filtre de Robert : Filtre discret de gradient utilisant des différences sur un pas de 1 pixel.

Points clés à retenir

  • Une image numérique est une matrice de pixels codés en RVB pour la couleur ou en un seul canal pour le niveau de gris.
  • La conversion entre espaces couleur RVB et niveaux de gris est essentielle pour de nombreux traitements d’image.
  • L’histogramme permet d’analyser la répartition des intensités et son égalisation améliore le contraste.
  • Le filtrage linéaire (moyenneur, gaussien) et non linéaire (médian, minimum, maximum) sont des outils pour réduire le bruit.
  • La détection de contours repose sur le calcul du gradient d’intensité, avec des filtres adaptés comme Prewitt, Sobel ou Robert.
  • Les filtres de détection de contours sont sensibles au bruit et peuvent produire des contours épais sur des variations progressives.

Partager

Commentaires

Aucun commentaire pour le moment. Posez la première question.

Les commentaires sont relus avant publication. Votre e-mail n'est jamais affiché.

← Toutes les révisions