l'image de fond

fr       en

Traitements d'Images Couleurs

Conversion vers Niveaux de Gris

Dans cette section , Nous allons apprendre à transformer une image couleur en RGB en une image en niveau de gris.

Moyenne

Une méthode simple pour faire cette conversion et de faire la moyenne des trois espaces de couleur.

I m g m o y = ( R G B ) 3

Où R,G et B sont les trois composantes couleurs rouge, verte et bleu.
Regardons un exemple :


grismoyen

et le programme associé :

clear all;
close all;

[filename, pathname] = uigetfile({'*.jpg;*.tif;*.png;*.gif;*.bmp','All Image Files';...
          '*.*','All Files' },'mytitle',...
          'C:\Work\myfile.jpg');

img = imread(filename);
[ligne colonne dimension]=size(img)
img=double(img);
R=img(:,:,1);
G=img(:,:,2);
B=img(:,:,3);
%conversion niveau de gris moyenne

img_avg = (R+G+B) /3;
figure(  'Name','Grayscale average',...
            'NumberTitle','off',...
            'color',[0.3137 0.3137 0.5098]);
subplot(121)
imshow(uint8(img))
title('Image ')
subplot(122)
imshow(uint8(img_avg))
title('Image GrayScale Average')

Luminance

La conversion précedente ne tient pas compte de la physiologie de l'oeil humain. En effet l'oeil ne voit pas les trois composantes avec la même intensité. En effet, l'oeil perçoit mieux les couleurs vertes que les couleurs bleues. Le rouge se situe entre les deux. La conversion précédente fonctionne mais ne représente pas bien le fonctionnement de l'oeil humain. Pour améliorer la conversion en niveaux de gris nous allons utiliser le calcul de la luminance. Qui se fait comme suit :

I m g l u m = w r R + w g G + w b B

Où wr, wg et wb sont les trois facteurs de pondération pour les trois couleurs R, G et B. Il existe beaucoup de normes différentes pour ces facteurs. Je vous en donne deux exemples. Pour le signal analogique de télévision wr=0,299 wg=0,587 et wb=0,114. Pour l'encodage digital de couleur: wr=0,2125 wg=0,7154 et wb=0,072. Voici un exemple pour ces deux conversions en luminance :


grisluminance

et le programme pour les réaliser

%conversion luminance
wr=0.299;
wg=0.587;
wb=0.114;
img_L = ( R * wr + G * wg + B * wb );
wr=0.2125;
wg=0.7154;
wb=0.072;
img_L2 = ( R * wr + G * wg + B * wb );

figure(  'Name','Grayscale Luminance',...
            'NumberTitle','off',...
            'color',[0.3137 0.3137 0.5098]);
subplot(131)
imshow(uint8(img))
title('Image ')
subplot(132)
imshow(uint8(img_L))
title('Image Luminance')
subplot(133)
imshow(uint8(img_L2))
title('Image Luminance 2')
 

Nuances de Gris dans les images couleurs

Pour représenter un niveau de gris dans une image couleur, il suffit d'associer la même valeur pour les trois composantes. soit : [ R , G , B ] = [ Y , Y , Y ]
Où Y est une composante en niveaux de gris.
Un exemple :


grishueless

et le programme

% Grayscale in ColorScale
img_hueless = cat(3, img_L, img_L, img_L);
figure(  'Name','Grayscale in Colorspace',...
            'NumberTitle','off',...
            'color',[0.3137 0.3137 0.5098]);
subplot(121)
imshow(uint8(img))
title('Image ')
subplot(122)
imshow(uint8(img_hueless))
title('Image Hueless Color')

Le Programme complet

clear all;
close all;

[filename, pathname] = uigetfile({'*.jpg;*.tif;*.png;*.gif;*.bmp','All Image Files';...
          '*.*','All Files' },'mytitle',...
          'C:\Work\myfile.jpg');

img = imread(filename);
[ligne colonne dimension]=size(img)
img=double(img);
R=img(:,:,1);
G=img(:,:,2);
B=img(:,:,3);
%conversion niveau de gris moyenne

img_avg = (R+G+B) /3;
figure(  'Name','Grayscale average',...
            'NumberTitle','off',...
            'color',[0.3137 0.3137 0.5098]);
subplot(121)
imshow(uint8(img))
title('Image ')
subplot(122)
imshow(uint8(img_avg))
title('Image GrayScale Average')


%conversion luminance
wr=0.299;
wg=0.587;
wb=0.114;
img_L = ( R * wr + G * wg + B * wb );
wr=0.2125;
wg=0.7154;
wb=0.072;
img_L2 = ( R * wr + G * wg + B * wb );

figure(  'Name','Grayscale Luminance',...
            'NumberTitle','off',...
            'color',[0.3137 0.3137 0.5098]);
subplot(131)
imshow(uint8(img))
title('Image ')
subplot(132)
imshow(uint8(img_L))
title('Image Luminance')
subplot(133)
imshow(uint8(img_L2))
title('Image Luminance 2')

% Grayscale in ColorScale
img_hueless = cat(3, img_L, img_L, img_L);
figure(  'Name','Grayscale in Colorspace',...
            'NumberTitle','off',...
            'color',[0.3137 0.3137 0.5098]);
subplot(121)
imshow(uint8(img))
title('Image ')
subplot(122)
imshow(uint8(img_hueless))
title('Image Hueless Color')

Copyright © 2010-2014, tous droits réservés, contact : operationpixel@free.fr