Baixe o app para aproveitar ainda mais
Prévia do material em texto
TRABALHO PRATICO DE AEDS2 TP0: 50 TONS DE CINZA Prof. Gisele Pappa e Rodrygo Santos Aluna: Julia Ferri Leite Storino 1. Introducao Ao longo da disciplina, foi trabalhado dois conceitos fundamentais: Alocação dinâmica de memória e Tipo Abstrato de dados. A alocação dinâmica consiste em alocar dinamicamente variáveis, no caso os Apontadores, que armazenam o endereço de memoria na variavel. Ja os Tipos Abstratos de Dados (TADs), agrupam a estrutura de dados juntamente com as operações que podem ser feitas sobre esses dados. O objetivo desse trabalho e implementar um programa para conversao de uma imagem colorida para tons de cinza. Isso foi feito a partir da transformação de cada pixel (amostra de um espaço de cores) colorido em um tom de cinza. Essa transformação foi feita de acordo com um calculo pre-definido, envolvendo a escala RGB em forma matricial. Desse modo, espera-se com isso trabalhar e entender melhor o funcionamento dos conceitos de Alocação dinâmica de memória e Tipo Abstrato de dados, tao importantes na disciplina. 2. Implementacao Para facilitar a implementação e evitar a criação de varias variáveis, foi utilizado no código o conceito aprendido de Estrutura de Dados. De acordo com a proposta, foi criado, juntamente com o typedef, uma struct para armazenar os dados das matrizes, tanto de entrada quanto a de saída. A struct criada Dados, armazena todas as informações contidas na matriz, organizando-as em tipos diferentes, tais como: char tipo para guardar o tipo da imagem, int linha int coluna para guardar o tamanho da matriz (ixj), int cor para definir a quantidade de tons, e int mat para definir a matriz. Alem da estrutura de dados, foi implementado funções que dividiram o problema em 3: a leitura (1), a transformação (2) e a escrita(3) do arquivo. 1) Dados* matrizinput(char* nome): essa função recebe a matriz/foto a ser lida. Para isso, ela abre o arquivo, com a opcao “r”, para realizar a leitura e armazena seus dados nas variáveis do tipo struct Dados, de acordo com o significado dos números e as armazenam na variavel inputPPM. 2) Dados* transformacao(Dados *inputPPM): essa função recebe a variável inputPPM, derivada da função de leitura, e as convertem para a variável onde sera armazenadas as informações de saída (outputPGM). Para isso, o tipo e modificado para “P2”, visto que a escala não e mais RGB, as linhas e colunas se mantém, o numero de cores, ou tons, e modificado para 49 (visto que o loop for vai de 0 a 49, totalizando 50 tons). E o mais importante, os pixels em escala RGB são convertidos para a escala de cinza, de acordo com a formula fornecida. A função então, retorna a variável outputPGM, que armazena todas essas informações acima. 3) void matrizoutput(Dados *outputPGM, char *saida): essa função cria um novo arquivo, a partir da opcao “w”, que contem todas as informações convertidas de inputPPM para outputPGM. Alem disso, ela imprime com os devidos espaços entre os números, assim como a matriz recebida. Essa função também e responsavel por fechar o arquivo. - O programa main.c e responsável por receber os argumentos de entrada e saída (input/output), e inseri-los nas devidas funções acima. Alem disso, o programa principal libera a memória utilizada pelo malloc, a partir do comando “free”. Em geral, o arquivo Trabalho Pratico foi dividido em 3 partes: o main.c, programa principal que define a entrada e a saída e “chama as funções”, Trabalhopratico.c onde foi definido o que cada função faz, e o Trabalhopratico.h onde foi definido a struct a ser utilizada, evitando a criação de variáveis de forma desorganizada. 4. Conclusao O desenvolvimento do algoritmo ocorreu de forma tranquila, visto que foi trabalhado desde o dia do lançamento do trabalho, ate a data de entrega, evitando desesperos e surpresas. A principal dificuldade encontrada foi entender a formula pre definida no Trabalho Pratico e implementa-la. Desse modo, ao meu ver, a transformação da escala RGB em tons de cinza, apesar de ser uma conta fácil, exige o entendimento do significado de cada numero na tabela, para assim, ser convertido na escala de tons de cinza sem comprometer os resultados. Referencias [1] Ziviani, N., Projeto de Algoritmos com Implementações em Pascal e C, 2ª Edição, Editora Thomson, 2004. [2] Material disponibilizado pelo Moodle da disciplina
Compartilhar