Macbeth Color Pattern

9
Macbeth Color Pattern Prof.: Marcelo Gatass Aluno: Felipe Baldino Moreira Fundamentos de Computação Gráfica 1. Semestre de 2013 - Trabalho 0

description

Macbeth Color Pattern. Prof.: Marcelo Gatass Aluno: Felipe Baldino Moreira Fundamentos de Computação Gráfica 1. Semestre de 2013 - Trabalho 0. O padrão Macbeth gerado. O Padrão MacBeth gamma = 1.6/2.4. O que foi feito. - PowerPoint PPT Presentation

Transcript of Macbeth Color Pattern

Page 1: Macbeth Color  Pattern

Macbeth Color Pattern

Prof.: Marcelo GatassAluno: Felipe Baldino MoreiraFundamentos de Computação Gráfica 1. Semestre de 2013 - Trabalho 0

Page 2: Macbeth Color  Pattern

O padrão Macbeth gerado

• O Padrão MacBeth gamma = 1.6/2.4

Page 3: Macbeth Color  Pattern

O que foi feito• Alterado o arquivo color.c com as constantes passadas pelo

professor para o parametro A e D65 do espectro para a conversão para o sistema XYZ.

• Criada a função de conversão corCIEXYZtosRGB_Bruce que recebe como entrada as cores no sistema CIEXYZ e retorna no sistema sRGB mantendo o iluminante atual e usa a fórmula obtida no site do Bruce Lindbloom.

• Inserida a variável de ajuste Gamma no programa.• Implementada a função de leitura do arquivo• corCIEXYZIlumminantA_toD65_XYZScaling – converte o

iluminante A para o D65 no espaço de cor XYZ.• Apresentado o padrão tanto com o Iluminant A como o D65.

Page 4: Macbeth Color  Pattern

corCIEXYZtosRGB_Bruce

int corCIEXYZtosRGB_Bruce(float X,float Y, float Z, float* R, float* G, float* B)/*converte XYZ para sRGB , fórmula obtida do site do Bruce LindBloom */{*R = 3.24071 * X + (-1.53726 * Y )+ (-0.498571) * Z; *G =(-0.969258) * X +( 1.87599 * Y) + 0.0415557 * Z; *B = 0.0556352 * X + (-0.203996 * Y) + 1.05707 * Z; return 1;}

Page 5: Macbeth Color  Pattern

gamma_sRGB(double x)

static double gamma_sRGB(double x){/* Retorna o valor da cor x corrigido com a correção gamma */ double ft,t = (x>0)?x:-x;if (t>0.0031308) ft = 1.055*pow(t,fVargamma)-0.055; /*código original ft = 1.055*pow(t,1.0/2.4)-0.055; */else ft = 12.92*t;return (x>0)?ft:-ft; }

Page 6: Macbeth Color  Pattern

inv_gamma_sRGB• static double inv_gamma_sRGB( float x) {• /* Como foi alterada a função da variação gamma, também foi necessário

alterar a inv_gamma_sRGB */

• double ft,t=(double) (x>0)?x:-x;• if ( t > 0.04045 ) • ft = pow((t+0.055)/1.055,fVargamma);• /*alterado de 2.4 para fVargamma */• else• ft = t/12.92;• • return (x>0)?ft:-ft;• }

Page 7: Macbeth Color  Pattern

Int corCIEXYZIlumminantA_toD65_XYZScaling(float X,float Y, float Z, float* XX, float* YY, float* ZZ)

{ double m[3*3] ={0.8652435, 0.0000000, 0.0000000, 0.0000000, 1.0000000 , 0.0000000, 0.0000000 , 0.0000000 , 3.0598005}; *XX = (m[0] * X) + (m[1] * Y )+ (m[2] ) * Z; *YY =(m[3] * X) + (m[4] * Y )+ (m[5] ) * Z;; *ZZ = (m[6] * X) + (m[7] * Y )+ (m[8] ) * Z;; return 1;}

Page 8: Macbeth Color  Pattern

Learquivovoid learquivo(char str[20]){FILE *arq; float f, fx,fy,fz,fl,fr,fg,fb,fxa,fya,fza,fra,fga,fba; float lpart[lambdacolorsonfile]; char cname[1000]; int i,cnumber,linha,n; for (i=0;i<maxcolorspattern;i++) { vetred[i]=0; vetgreen[i]=0; vetblue[i]=0; vetred2[i]=0; vetgreen2[i]=0;vetblue2[i]=0; }if (! (arq=fopen(str,"rt"))){ printf("\n\n\n\t\t\t FILE NOT FOUND \n\n\n"); getchar(); exit(255); }cnumber=0; linha=0;

while (! feof(arq) &(cnumber<24)){ while (fgetc(arq)!='\n') ; //pula a primeira linha

fscanf(arq,"%i\t %s ",&cnumber,cname);fr=0.0f;fg=0.0f;fb=0.0f;fxa=0;fya=0;fza=0;fra=0;fga=0;fba=0;for(n=0;n<lambdacolorsonfile;n++) lpart[n]=0.0f;fx=0;fy=0;fz=0;fl=0;n=0;for (i=380;i<=730;i+=10)

{fl=0;fscanf(arq,"%f",&fl); lpart[n]=fl;n++;} corCIEXYZfromSurfaceReflectance(380.0f,36,10,lpart,&fxa,&fya,&fza,D65);//(i,&fx,&fy,&fz);corCIEXYZtosRGB_Bruce(fxa,fya,fza,&fr,&fg,&fb);vetred[cnumber-1]=fr;vetgreen[cnumber-1]=fg;vetblue[cnumber-1]=fb;fr=0;fg=0;fb=0;corCIEXYZfromSurfaceReflectance(380.0f,36,10,lpart,&fx,&fy,&fz,A);

corCIEXYZIlumminantA_toD65_XYZScaling(fx,fy,fz,&fx,&fy,&fz); //troca de iluminante de A para D65

corCIEXYZtosRGB_Bruce(fx,fy,fz,&fr,&fg,&fb); // muda de sistema sem alterar o iluminante

vetred2[cnumber-1]=fr;vetgreen2[cnumber-1]=fg;vetblue2[cnumber-1]=fb;}fclose(arq);}

Page 9: Macbeth Color  Pattern

O output do Programa• O padrão superior utiliza o Iluminante D65

O Padrão inferior utiliza o iluminante A e o converte para ser exibido no monitor.