Dans cette section , Nous allons apprendre à transformer une image couleur en RGB en une image en niveau de gris.
Une méthode simple pour faire cette conversion et de faire la moyenne des trois espaces de couleur.
Où R,G et B sont les trois composantes couleurs rouge, verte et bleu.
Regardons un exemple :
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')
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 :
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 :
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')
Pour représenter un niveau de gris dans une image couleur, il suffit d'associer la même valeur pour les trois composantes. soit :
Où Y est une composante en niveaux de gris.
Un exemple :
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')
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