/* Definições principais para {ex_fourier.c}. */ #ifndef ex_fourier_H #define ex_fourier_H #define PROG_NAME "ex_fourier" #define PROG_DESC "testa transformada de Fourier de imagens" #define PROG_VERS "1.0" /* Last edited on 2024-12-21 14:05:33 by stolfi */ #define PROG_HELP \ " " PROG_NAME " \\\n" \ " " argparser_help_info_HELP " \\\n" \ " [ -bla {BLA} {BLE} {BLU} ] \\\n" \ " {NOME_ENT} {NOME_SAI} {EXT}" #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}.{EXT}\" contendo" \ " uma imagem colorida (se {EXT} = \"ppm\") ou cinérea (se {EXT} = \"pgm\"), e" \ " grava as seguintes imagens:\n" \ "\n" \ " \"{NOME_SAI}-F.{EXT}\" - cópia da imagem original.\n" \ " \"{NOME_SAI}-D.{EXT}\" - imagem original deslocada de meio pixel.\n" \ " \"{NOME_SAI}-N.{EXT}\" - imagem original interpolada em meio pixel.\n" \ " \"{NOME_SAI}-L.{EXT}\" - imagem original filtrada por passa-baixas.\n" \ " \"{NOME_SAI}-M.{EXT}\" - imagem original filtrada por passa-médias.\n" \ " \"{NOME_SAI}-H.{EXT}\" - imagem original filtrada por passa-altas.\n" \ "\n" \ " A imagem \"F\" é reconstruída a partir da transformada de" \ " Fourier (TdF) da imagem de entrada. A imagem \"D\" é obtida" \ " por modificação e inversão da TdF. A imagem \"N\" é obtida" \ " por interpolação linear no ponto médio entre dois pixels.\n" \ "\n" \ " Para cada {X} em {\"F\", \"D\", \"N\", \"L\", \"M\", \"H\"}, o programa" \ " também grava as seguintes imagens, referentes" \ " à imagem \"{NOME_SAI}-{X}.{EXT}\":\n" \ "\n" \ " \"{NOME_SAI}-{X}-FT.{EXT}\" - transformada de Hartley da imagem.\n" \ " \"{NOME_SAI}-{X}-PW.pgm\" - espectro de potência da imagem.\n" \ "\n" \ "OPÇÕES\n" \ " -bla {BLA} {BLE} {BLU}\n" \ " Este parâmetro bla bla bla. O default é \"-bla 3.14 2.72 1.41\"\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-12-06 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. */ #include /* Conversão de imagens. */ #include /* Conversão de imagens. */ #include /* Pega parâmetros da linha de comando. */ /* 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