/* Definições principais para {exemplo.c}. */ #ifndef exemplo_H #define exemplo_H #define PROG_NAME "exemplo" #define PROG_DESC "testa alguns conceitos de processamento de imagens" #define PROG_VERS "1.0" /* Last edited on 2024-12-21 14:05:23 by stolfi */ #define PROG_HELP \ " " PROG_NAME " \\\n" \ " [ -lum {RY} {GY} {BY} ] \\\n" \ " " argparser_help_info_HELP " \\\n" \ " {NOME_ENT} {NOME_SAI}" #define PROG_INFO \ "NOME\n" \ " " PROG_NAME " - " PROG_DESC "\n" \ "\n" \ "SINOPSE\n" \ PROG_HELP "\n" \ "\n" \ "DESCRICAO\n" \ " O programa lê um arquivo \"{NOME_ENT}.ppm\" contendo uma imagem PPM colorida, e" \ " grava as imagens\n" \ " \"{NOME_SAI}-Y.pgm\", \"{NOME_SAI}-Yb.pgm\" - canal de brilho.\n" \ " \"{NOME_SAI}-V.pgm\", \"{NOME_SAI}-Vr.pgm\", \"{NOME_SAI}-Vb.pgm\" - canal vermelho-verde.\n" \ " \"{NOME_SAI}-A.pgm\", \"{NOME_SAI}-Ar.pgm\", \"{NOME_SAI}-Ab.pgm\" - canal azul-amarelo.\n" \ " \"{NOME_SAI}-YAV.ppm\" - imagem original reconstruída.\n" \ " \"{NOME_SAI}-YVA.ppm\" - imagem com canais A e V trocados.\n" \ " \"{NOME_SAI}-YV.ppm\" - imagem com canal A suprimido.\n" \ " \"{NOME_SAI}-YA.ppm\" - imagem com canal V suprimido.\n" \ " \"{NOME_SAI}-VA.ppm\" - imagem com canal Y suprimido.\n" \ " \"{NOME_SAI}-YbAV.ppm\" - imagem com canal Y borrado.\n" \ " \"{NOME_SAI}-YAbVb.ppm\" - imagem com canais A e V borrados.\n" \ "\n" \ "OPÇÕES\n" \ " -lum {RY} {GY} {BY}\n" \ " Estes parâmetros opcionais são o brilho relativo {Y} das" \ " três cores primárias do monitor. O default são os coeficientes" \ " do padrão NTSC, ou seja \"-lum 0.299 0.587 0.114\"\n" \ "OPÇÕES DE DOCUMENTAÇÃO\n" \ argparser_help_info_HELP_INFO "\n" \ "\n" \ "VEJA TAMBÉM\n" \ " convert(1), gimp(1), display(1), ppm(1), pgm(1).\n" \ "\n" \ "AUTOR\n" \ " Criado em 2007-08-01 por J. Stolfi, IC-UNICAMP.\n" \ "\n" \ "GARANTIA\n" \ argparser_help_info_NO_WARRANTY "\n" \ "\n" \ "DIREITOS\n" \ " Copyright © 2007 by the State University of Campinas (UNICAMP).\n" \ "\n" \ argparser_help_info_STANDARD_RIGHTS /* BIBLIOTECAS DO GNU/LINUX: */ #include #include #include #include #include /* BIBLIOTECAS DO PROFESSOR: */ #include /* Vetores do {R^3}. */ #include /* Matrizes {3×3}. */ #include /* Tipo {bool_t}, {TRUE}, {FALSE}. */ #include /* {open_read}, {open_write}. */ #include /* Imagens PBM/PGM/PPM. */ #include /* Imagens em formato float. */ /* FATORES GAMA */ #define BIAS_PC 0.000 #define BIAS_SUN 0.000 /* Bias for power-law correction. */ #define WR_GAMMA_PC 0.440 #define WR_GAMMA_SUN 0.555 /* Expoente gama a ser usado antes da gravação de uma imagem PPM, para imagens que serão exibidas em monitor de PC ou em um monitor da SUN, respectivamente. */ #define RD_GAMMA_PC (1/WR_GAMMA_PC) #define RD_GAMMA_SUN (1/WR_GAMMA_SUN) /* Expoente gama a ser usado após a leitura de uma imagem PPM, para imagens que ficam OK quando exibidas em monitor de PC ou em um monitor da SUN, respectivamente. */ /* PROTÓTIPOS GENÉRICOS */ int main(int argc,char** argv); /* Função principal do programa. */ float_image_t *ex_read_image(char *name, char *tag, double gamma, double bias, double vMin, double vMax); /* Lê uma imagem em formato PPM, PGM ou PBM, converte cada amostra para um valor em ponto flutuante no intervalo {[vMin _ vMax]}, aplica a correção de potência com parâmetros {gamma} e {bias}, e armazena o resultado todo na memória, na forma de uma nova {float_image_t}. */ void ex_write_image(char *name, char *tag, double vMin, double vMax, double gamma, double bias, float_image_t *A); /* Escreve a imagem {A} em um arquivo chamado "{name}{tag}", no formato PPM (se tiver 3 canais) ou PGM (se tiver 1 canal). Converte cada amostra do intervalo {[vMin _ vMax]} para {0..maxval} e aplica correção de potência com parâmetros {gamma} e {bias}. */ struct options_t *ex_parse_options(int argc, char **argv); /* Extrai os comandos da linha de comando e empacota-os em um registro de tipo {options_t}. */ #endif