A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Macbeth Color Pattern Prof.: Marcelo Gatass

Apresentações semelhantes


Apresentação em tema: "Macbeth Color Pattern Prof.: Marcelo Gatass"— Transcrição da apresentação:

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

2 O padrão Macbeth gerado
O Padrão MacBeth gamma = 1.6/2.4

3 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.

4 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 = * X + ( * Y )+ ( ) * Z; *G =( ) * X +( * Y) * Z; *B = * X + ( * Y) * Z; return 1; }

5 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> ) 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; }

6 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 > ) ft = pow((t+0.055)/1.055,fVargamma); /*alterado de 2.4 para fVargamma */ else ft = t/12.92; return (x>0)?ft:-ft; }

7 Int corCIEXYZIlumminantA_toD65_XYZScaling(float X,float Y, float Z, float* XX, float* YY, float* ZZ)
{ double m[3*3] ={ , , , , , , , , }; *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; }

8 Learquivo void 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 D 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);}

9 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.


Carregar ppt "Macbeth Color Pattern Prof.: Marcelo Gatass"

Apresentações semelhantes


Anúncios Google