1 / 9

Macbeth Color Pattern

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.

levia
Download Presentation

Macbeth Color Pattern

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Macbeth Color Pattern Prof.: Marcelo Gatass Aluno: Felipe Baldino Moreira Fundamentos de Computação Gráfica 1. Semestre de 2013 - 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 intcorCIEXYZtosRGB_Bruce(floatX,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; }

  5. gamma_sRGB(double x) staticdoublegamma_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; }

  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 > 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; • }

  7. Int corCIEXYZIlumminantA_toD65_XYZScaling(floatX,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; }

  8. Learquivo voidlearquivo(char str[20]) {FILE *arq; floatf, fx,fy,fz,fl,fr,fg,fb,fxa,fya,fza,fra,fga,fba; floatlpart[lambdacolorsonfile]; char cname[1000]; inti,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);}

  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.

More Related