l'image de fond

fr       en

Traitements d'Images Couleur

Espace de Couleur pour Imprimante

CMY

La couleur utilisée dans les imprimantes est soustractive. Elle utilise les trois couleurs primaires cyan (C), magenta (M) et jaune (Y). Les pages sur lequelles nous imprimons sont blanche donc si C = M = Y = 0 pas d'encre est utilisé nous aurons donc du blanc sur la page. A contrario, si C = M = Y = 1 les trois encres sont utilisées à saturation donc la couleur obtenue sera noir. Une manière simple de calculer les trois composantes est :

C = 1 - R ,
M = 1 - G ,
Y = 1 - B ,

Le programme Matlab :

C=(255-R);
M=(255-G);
Y=(255-B);

figure(  'Name','RGB --> CMY',...
            'NumberTitle','off',...
            'color',[0.3137 0.3137 0.5098]);
vide=zeros(ligne,colonne);
subplot(321)
imshow(uint8(cat(3,R,vide,vide)))
title('Image R origine')
subplot(323)
imshow(uint8(cat(3,vide,G,vide)))
title('Image G origine')
subplot(325)
imshow(uint8(cat(3,vide,vide,B)))
title('Image B origine')
 subplot(322)
imshow(uint8(cat(3,vide,C,C)))
title('Image C')
subplot(324)
imshow(uint8(cat(3,M,vide,M)))
title('Image M')
subplot(326)
imshow(uint8(cat(3,Y,Y,vide)))
title('Image Y')
 

et un exemple
rgbcmy

CMYK méthode 1

La saturation des trois composante CMY ne donne pas du noir en réalité, pour corriger se problème on utilise généralement de l'encre noir pour compléter. Une technique simple pour calculer la composante de noir K est de faire :

K = min ( C , M , Y )

On calcule les nouvelles composantes grâce à K.

( C ' M ' Y ' K ' ) = ( C - K M - K Y - K K )

On peux utiliser le programme suivant :

% conversion RGB --> CMYK
% methode 1
C=(255-R);
M=(255-G);
Y=(255-B);
K=min(cat(3,C,M,Y),[],3);
C=C-K;
M=M-K;
Y=Y-K;

figure(  'Name','RGB --> CMYK Methode 1',...
            'NumberTitle','off',...
            'color',[0.3137 0.3137 0.5098]);
vide=zeros(ligne,colonne);
subplot(331)
imshow(uint8(cat(3,R,vide,vide)))
title('Image R origine')
subplot(334)
imshow(uint8(cat(3,vide,G,vide)))
title('Image G origine')
subplot(337)
imshow(uint8(cat(3,vide,vide,B)))
title('Image B origine')
 subplot(332)
imshow(uint8(cat(3,vide,C,C)))
title('Image C')
subplot(335)
imshow(uint8(cat(3,M,vide,M)))
title('Image M')
subplot(338)
imshow(uint8(cat(3,Y,Y,vide)))
title('Image Y')
subplot(333)
imshow(uint8(cat(3,K,K,K)))
title('Image K')
 

Et un exemple
rgbcmyk1

CMYK méthode 2

Une autre méthode consiste à réduire les composantes d'un facteur f ou : f = 1 1 - K si K < 1 et 1 si K = 1 . On obtient donc

( C ' M ' Y ' K ' ) = ( ( C - K M - K Y - K ) f K )

De cette manière si R = G = B alors l'imprimante n'utilisera que la cartouche noire.
voici le programme :

% conversion RGB --> CMYK
% methode 2
% normalisation
Rn=R/255;
Gn=G/255;
Bn=B/255;
Cn=(1-Rn);
Mn=(1-Gn);
Yn=(1-Bn);
Kn=min(cat(3,Cn,Mn,Yn),[],3);
Knp=Kn;
Kn=1./(1-Kn);
Kn(Kn==Inf)= 1;
Cn=(Cn-Knp).*Kn;
Mn=(Mn-Knp).*Kn;
Yn=(Yn-Knp).*Kn;
% dénormalisation
C=Cn*255;
M=Mn*255;
Y=Yn*255;
K=Knp*255;
figure(  'Name','RGB --> CMYK Methode 2',...
            'NumberTitle','off',...
            'color',[0.3137 0.3137 0.5098]);
vide=zeros(ligne,colonne);
subplot(331)
imshow(uint8(cat(3,R,vide,vide)))
title('Image R origine')
subplot(334)
imshow(uint8(cat(3,vide,G,vide)))
title('Image G origine')
subplot(337)
imshow(uint8(cat(3,vide,vide,B)))
title('Image B origine')
 subplot(332)
imshow(uint8(cat(3,vide,C,C)))
title('Image C')
subplot(335)
imshow(uint8(cat(3,M,vide,M)))
title('Image M')
subplot(338)
imshow(uint8(cat(3,Y,Y,vide)))
title('Image Y')
subplot(333)
imshow(uint8(cat(3,K,K,K)))
title('Image K')
 

Et un exemple
rgbcmyk2

CMYK méthode 3

( C ' M ' Y ' K ' ) = ( C - F U C R ( K ) M - F U C R ( K ) Y - F U C R ( K ) F B G ( K ) )

Avec

F U C R ( K ) = S k K ,
F B G ( K ) = { 0 f o r K < K o K max K - K o 1 - K o f o r K K o )

Le programme

% conversion RGB --> CMYK
% methode 3
% normalisation
Rn=R/255;
Gn=G/255;
Bn=B/255;
Cn=(1-Rn);
Mn=(1-Gn);
Yn=(1-Bn);
Kn=min(cat(3,Cn,Mn,Yn),[],3);

Sk = 0.1;
FucrK = Sk * Kn;

Ko = 0.3;
FBGK=(Kn<Ko)* (max(max(Kn))) .* (Kn-Ko)./(1-Ko);
   
Cn=(Cn-FucrK);
Mn=(Mn-FucrK);
Yn=(Yn-FucrK);
Kn=FBGK;
% dénormalisation
C=Cn*255;
M=Mn*255;
Y=Yn*255;
K=Knp*255;
figure(  'Name','RGB --> CMYK Methode 3',...
            'NumberTitle','off',...
            'color',[0.3137 0.3137 0.5098]);
vide=zeros(ligne,colonne);
subplot(331)
imshow(uint8(cat(3,R,vide,vide)))
title('Image R origine')
subplot(334)
imshow(uint8(cat(3,vide,G,vide)))
title('Image G origine')
subplot(337)
imshow(uint8(cat(3,vide,vide,B)))
title('Image B origine')
 subplot(332)
imshow(uint8(cat(3,vide,C,C)))
title('Image C')
subplot(335)
imshow(uint8(cat(3,M,vide,M)))
title('Image M')
subplot(338)
imshow(uint8(cat(3,Y,Y,vide)))
title('Image Y')
subplot(333)
imshow(uint8(cat(3,K,K,K)))
title('Image K')

Et un exemple
rgbcmyk3

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);
Imax = max(max(img));

% conversion RGB --> CMY
C=(255-R);
M=(255-G);
Y=(255-B);

figure(  'Name','RGB --> CMY',...
            'NumberTitle','off',...
            'color',[0.3137 0.3137 0.5098]);
vide=zeros(ligne,colonne);
subplot(321)
imshow(uint8(cat(3,R,vide,vide)))
title('Image R origine')
subplot(323)
imshow(uint8(cat(3,vide,G,vide)))
title('Image G origine')
subplot(325)
imshow(uint8(cat(3,vide,vide,B)))
title('Image B origine')
 subplot(322)
imshow(uint8(cat(3,vide,C,C)))
title('Image C')
subplot(324)
imshow(uint8(cat(3,M,vide,M)))
title('Image M')
subplot(326)
imshow(uint8(cat(3,Y,Y,vide)))
title('Image Y')


% conversion RGB --> CMYK
% methode 1
C=(255-R);
M=(255-G);
Y=(255-B);
K=min(cat(3,C,M,Y),[],3);
C=C-K;
M=M-K;
Y=Y-K;

figure(  'Name','RGB --> CMYK Methode 1',...
            'NumberTitle','off',...
            'color',[0.3137 0.3137 0.5098]);
vide=zeros(ligne,colonne);
subplot(331)
imshow(uint8(cat(3,R,vide,vide)))
title('Image R origine')
subplot(334)
imshow(uint8(cat(3,vide,G,vide)))
title('Image G origine')
subplot(337)
imshow(uint8(cat(3,vide,vide,B)))
title('Image B origine')
 subplot(332)
imshow(uint8(cat(3,vide,C,C)))
title('Image C')
subplot(335)
imshow(uint8(cat(3,M,vide,M)))
title('Image M')
subplot(338)
imshow(uint8(cat(3,Y,Y,vide)))
title('Image Y')
subplot(333)
imshow(uint8(cat(3,K,K,K)))
title('Image K')

% conversion RGB --> CMYK
% methode 2
% normalisation
Rn=R/255;
Gn=G/255;
Bn=B/255;
Cn=(1-Rn);
Mn=(1-Gn);
Yn=(1-Bn);
Kn=min(cat(3,Cn,Mn,Yn),[],3);
Knp=Kn;
Kn=1./(1-Kn);
Kn(Kn==Inf)= 1;
Cn=(Cn-Knp).*Kn;
Mn=(Mn-Knp).*Kn;
Yn=(Yn-Knp).*Kn;
% dénormalisation
C=Cn*255;
M=Mn*255;
Y=Yn*255;
K=Knp*255;
figure(  'Name','RGB --> CMYK Methode 2',...
            'NumberTitle','off',...
            'color',[0.3137 0.3137 0.5098]);
vide=zeros(ligne,colonne);
subplot(331)
imshow(uint8(cat(3,R,vide,vide)))
title('Image R origine')
subplot(334)
imshow(uint8(cat(3,vide,G,vide)))
title('Image G origine')
subplot(337)
imshow(uint8(cat(3,vide,vide,B)))
title('Image B origine')
 subplot(332)
imshow(uint8(cat(3,vide,C,C)))
title('Image C')
subplot(335)
imshow(uint8(cat(3,M,vide,M)))
title('Image M')
subplot(338)
imshow(uint8(cat(3,Y,Y,vide)))
title('Image Y')
subplot(333)
imshow(uint8(cat(3,K,K,K)))
title('Image K')


% conversion RGB --> CMYK
% methode 3
% normalisation
Rn=R/255;
Gn=G/255;
Bn=B/255;
Cn=(1-Rn);
Mn=(1-Gn);
Yn=(1-Bn);
Kn=min(cat(3,Cn,Mn,Yn),[],3);

Sk = 0.1;
FucrK = Sk * Kn;

Ko = 0.3;
FBGK=(Kn<Ko)* (max(max(Kn))) .* (Kn-Ko)./(1-Ko);
   
Cn=(Cn-FucrK);
Mn=(Mn-FucrK);
Yn=(Yn-FucrK);
Kn=FBGK;
% dénormalisation
C=Cn*255;
M=Mn*255;
Y=Yn*255;
K=Knp*255;
figure(  'Name','RGB --> CMYK Methode 3',...
            'NumberTitle','off',...
            'color',[0.3137 0.3137 0.5098]);
vide=zeros(ligne,colonne);
subplot(331)
imshow(uint8(cat(3,R,vide,vide)))
title('Image R origine')
subplot(334)
imshow(uint8(cat(3,vide,G,vide)))
title('Image G origine')
subplot(337)
imshow(uint8(cat(3,vide,vide,B)))
title('Image B origine')
 subplot(332)
imshow(uint8(cat(3,vide,C,C)))
title('Image C')
subplot(335)
imshow(uint8(cat(3,M,vide,M)))
title('Image M')
subplot(338)
imshow(uint8(cat(3,Y,Y,vide)))
title('Image Y')
subplot(333)
imshow(uint8(cat(3,K,K,K)))
title('Image K')

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