Histograma - neoneper/ClassProg3D1 GitHub Wiki
COMO GERAR HISTOGRAMAS?
O histograma é uma tabela que relaciona a cor do pixel, com a quantidade de vezes que um pixel daquela cor aparece na imagem. A análise do histograma nos dá uma noção de onde aplicar o algoritmo de threshold (limiarização) para obter o melhor Resultado possível.
Para começar iniciamos nosso gerenciador de processos com imagens, o mesmo utilizado anteriormente para trabalhar com efeitos visuais e convoluções.
Inicializando objeto que me permite trabalhar com convolução, histogramas e efeitos
BufferedImageOperation imageOperation = new BufferedImageOperation();
Agora podemos carregar uma imagem para gerar seu histograma. Em exemplos anteriores utilizamos os metodos nativos do objeto ImageIO para carregar e salvar imagens, porém a biblioteca BufferedImageOperation possui metodos simples para facilitar esta tarefa. Vejamos abaixo
Carregando imagem para gerar seu histograma
BufferedImage inImage = imageOperation.LoadImage("montanha.jpg");
Agora que ja temos uma imagem carregada para trabalhar podemos gerar diversos tipos de Histogramas.
Gera histograma quantitativo da imagem em tons de cinza:
int[] histogram = imageOperation.GetHistogram(inImage, BufferedImageEqualizeType.GRAYSCALE);
Acima geramos um histograma quantitativo baseado nos tons de cinza da imagem. Mas também podemos trabalhar com todos os canais de cores RGB com como do HSV, mais utilizado em imagens coloridas. Para selecionar o tipo de Histograma a ser gerado basta modificar a tag BufferedImageEqualizeType.GRAYSCALE, para qualquer uma das aceitas pelo sistema.
- Histograma acumulativo: Outra forma de visualizarmos o histograma é através da distribuição acumulada. Ou seja, a cada tom, calculamos a quantidade de pixels com tom igual ou menor aquele tom. A grande utilidade do histograma acumulado é que, com ele, é possível realizar operações de correção de contraste automaticamente. Isso é conhecido como equalização de histograma
Utilizando a biblioteca é possível Gerar um Histograma Acumulado diretamente partir de uma Imagem e ou a partir de um Array contendo um Histograma Quantitativo. Observe:
Gera histograma acumulativo da imagem em tons de cinza
int[] histogramAcc = imageOperation.GetHistogramAcc(inImage, BufferedImageEqualizeType.GRAYSCALE);
Ou:
int[] histogramAcc = imageOperation.GetGrayHistogramAcc(histogram );
- Histograma equalizdo ou normalizado:
Diferente de Gerar uma uma imagem Equalizada com histograma e então verificar seu atual histograma esta biblioteca permite gerar e visualizar um histograma acumulativo equalizado. Equalizar um histograma acumulado e o mesmo que normalizar os valores acumulados para mante-los na escala de 0 a 255. Gerando um gráfico a partir de um histograma normalizado é possível verificar as mesmas curtas de um Acumulado porém com seus valores acentuados para a escala de 0 a 255.
Normalizar um Histograma é muito simples. Basta Equalizar um Histograma Acumulado. Vejamos abaixo como equalizar o histograma acumulado gerado acima:
imageOperation.GetGrayHistogramEqualized(histogramAcc);
Observe quais seriam os resultados destes histogramas gerando gráficos dos mesmos:
A Figura do Histograma Equalizado corresponde à Equalização da imagem origem e observação do novo histograma gerado após a equalização dos tons de cinza.