Disciplina: Algoritmos e Técnicas de Programação II
Uma imagem em tons de cinza pode ser representada por uma matriz bidimensional, tal que cada elemento desta matriz (também chamado de pixel) possui um valor de 0 (preto) a 255 (branco). Arquivos de formatos de imagens (como BMP, JPG, PNG), incluem além desta matriz da imagem, outras informações relevantes sobre a imagem. Por exemplo, no formato PGM, um dos mais simples encontrados, a imagem pode ser representada pela seguinte estrutura:
<tipo do arquivo>
<número de colunas> <número de linhas>
<número máximo de tons de cinza>
<matriz da imagem>
onde <tipo do arquivo>
é um código de dois caracteres (p. ex. "P2"), <número de colunas>
e <número de linhas>
indicam o tamanho da matriz de imagem, <número máximo de tons de cinza>
contém uma informação sobre a quantização da imagem e, finalmente, <matriz da imagem>
contém os valores dos pixels, do pixel superior esquerdo ao pixel inferior direito.
Faça um programa que carregue uma imagem PGM, faça as operações descritas abaixo e salve a imagem resultante em cada passo em outro arquivo PGM. As operações são:
-
Limiarização: Verifique para cada pixel se seu valor é maior que um limiar (p. ex. 150). Em caso positivo, substitua o seu valor para 255. Caso contrário, defina-o para zero;
-
Negativo: Substitua o valor v de cada pixel, por (255 - v);
-
Histograma: Gere um histograma da imagem inicial e salve em um arquivo .txt. Um histograma é a contagem de pixels que cada tonalidade de cinza possui.
-
Para visualizar arquivos PGM você pode procurar algum editor de imagens que aceita este tipo de arquivo.
-
Um arquivo PGM de exemplo está disponível. Tente abrir o arquivo em um editor de texto comum para você ver a estrutura acima.
-
É altamente recomendável que o aluno faça um código bem organizado, utilizando funções para cada operação acima, além de outras auxiliares, tal como abrir o arquivo e carregar em uma matriz e salvar um arquivo .PGM.
- Código fonte produzido
- Imagens de exemplo utilizadas e resultados gerados