# Equalização de histograma

A equalização de histograma é uma ação para mudar a distribuição dos valores de ocorrência em um histograma permitindo uma redução das diferenças acentuadas e assim, particularmente em imagens, acentuando detalhes não visíveis anteriormente.

## O histograma de uma imagem

O histograma de uma imagem digital é definido por Gonzalez e Woods como "uma função discreta $h({r_{k}})={n_{k}}$ onde ${r_{k}}$ é o k-ésimo valor de intensidade e ${n_{k}}$ é o número de pixels da imagem com intensidade ${r_{k}}$ e cujos níveis de intensidade desta imagem estejam no intervalo [0, L - 1]. ". O autor cita ainda que os Histogramas são a base para várias técnicas de processamento no domínio espacial, onde sua manipulação pode ser utilizada para realce de imagens, além de fornecer dados estatísticos a seu respeito.
Já os autores Patel e Goswami definem o Histograma de uma imagem como sendo a representação gráfica da probabilidade de ocorrência das intensidades versus valores de intensidade na imagem dada.
A seguir será dado o embasamento teórico a cerca do tema, um exemplo teórico conforme Gonzalez e Woods, e um exemplo prático utilizando o software ImageJ para processar uma dada imagem de 8 bits com seu respectivo histograma.

## Modificação histogrâmica

Sob o ponto de vista subjetivo do olho humano o realce de contraste tem por objetivo o melhoramento da qualidade da imagem, sendo assim, é usualmente empregada como uma etapa de pré-processamento em aplicações de reconhecimento de padrões. O contraste entre dois alvos de uma cena pode ser definido como a razão entre seus níveis de cinza médios.
Com base nesse conceito, manipular o contraste dos objetos presentes em uma imagem digital consiste em um remapeamento radiométrico de cada pixel da imagem, com a finalidade de aumentar a discriminação visual entre os mesmos. Embora a escolha do mapeamento adequado seja, em princípio, essencialmente empírica, uma análise prévia do histograma da imagem se afigura, em muitos casos bastante útil.
Por definição, temos que em uma imagem, o histograma é a tradução da distribuição estatística dos seus níveis de cinza, sendo de forma simples, uma representação gráfica do número de pixels associado a cada nível de cinza presente na imagem, também podendo ser expressa em termos do percentual do número de pixels total presente em uma imagem.
Sendo assim, para uma imagem digital f(x,y) definida com M linhas e N colunas, seu histograma H$_f$(C), pode ficar definido por:
$H_{f}(C)=n_{c}/M.N,$
Onde n$_c$ é o número de vezes em que o nível de cinza C se apresenta na imagem.
Como parâmetro de decisão afim de fornecer resultados para o pixel da imagem processada muitas operações pontuais utilizam o histograma.

## Exemplo de visualizações de histograma em imagens após modificações

| Figura 01. Imagem original. Fonte: Próprio autor | Figura 02. Histograma da imagem original. Fonte: Próprio autor |
| Figura 03. Imagem original com correção de brilho. Fonte: Próprio autor | Figura 04. Histograma da imagem com correção de brilho. Fonte: Próprio autor |
| Figura 05. Image original após aplicar Threshold. Fonte: Próprio autor | Figura 06. Histograma da image após aplicar Threshold. Fonte: Próprio autor |
| Figura 07. Imagem original após ser equalizada. Fonte: Próprio autor | Figura 08. Histograma de imagem após se equalizada. Fonte: Próprio autor |

### Observação

Exemplo demonstrando o histograma das figuras acima foi feito utilizando o software ImageJ, sendo o mesmo um software de processamento de imagem OpenSource desenvolvido em java que pode ser utilizado por qualquer Sistema Operacional.

## Inversão da escala de cinza

Pode-se ter diversas aplicações quando se trata da inversão da escala de cinza de uma imagem. Se tratando de negativo da imagem, uma delas é que após o registro fotográfico a partir de uma câmera convencional, a revelação do negativo do filme produzirá uma imagem positiva, passível de uso como slide. Em determinados tipos de imagem, pode-se ter adicionalmente, o negativo possibilitando uma melhor discriminação de alvos (e.g. imagens médicas).

## Exemplo de imagem com aplicação de inversão de escala de cinza

| Figura 09. Imagem original. Foto da avenida principal da UFLA. Fonte: Próprio autor | Figura 10. Imagem com escala cinza invertida. Foto da avenida principal da UFLA. Fonte: Próprio autor |

### Observação

Exemplo demonstrando o resultado do processo de inversão de escala de cinza foi feito utilizando o software ImageJ, sendo o mesmo um software de processamento de imagem OpenSource desenvolvido em java que pode ser utilizado por qualquer Sistema Operacional.

## Expansão de contraste

Abertura insuficiente do diafragma, tempo de exposição excessivamente curto, deficiência na iluminação no instante da aquisição da imagem ou outros problemas de natureza diversa ocorrido no processo de digitalização são os responsáveis pela geração de imagens de baixo contraste. Com esse contexto, em uma cena com contraste reduzido o discernimento de seus componentes fica dificultada. A expansão de contraste tem como propósito redistribuir os tons de cinza dos pixels de uma imagem de modo a elevar o contraste na faixa de níveis possíveis. Para casos em que a faixa de tons de cinza se encontram totalmente utilizadas, a expansão de contraste por parte, linear ou não, possibilita melhor discriminação da porção realçada da imagem.

## A equalização do histograma

O processo de equalização de histograma é, segundo Patel e Goswami, "um método para normalizar a distribuição da probabilidade de ocorrência de valores de intensidade na imagem".
De modo formal e técnico, Gonzalez e Woods, explicam a Equalização de um Histograma da seguinte forma: "Consideremos os valores contínuos de intensidade, com a variável $r$ expressando as intensidades de uma imagem a ser processada. Consideremos ainda que, $r$ esteja no intervalo $[0,L-1]$, com $r=0$ representando o preto, e $r=L-1$ representando o branco". O valor de $L$ é dado por, $L=2^{b}$ sendo $b$ o número de bits da imagem. É necessário ainda calcular os valores de $s$ que representam os níveis de intensidade de saída de $r$. Este processo é chamado de Mapeamento de Intensidade por Gonzalez e Woods, e é dado pela fórmula:
${s_{k}}=T({r_{k}})=(L-1)\sum _{j=0}^{k}{p_{r}}({r_{j}})={\frac {(L-1)}{M\,N}}\sum _{j=0}^{k}{n_{j}}$ sendo $k=0,1,2,...,L-1$

## Exemplo teórico

Como demonstrado na obra de Gonzalez e Woods, considere uma imagem de 64x64 pixels ($MN=64*64=4096$) com 3 bits ($L=2^{3}=8$) e assim, com níveis de intensidade no intervalo $[0,L-1]=[0,7]$. Considere ainda a tabela 1 com os valores de distribuição de intensidade e valores de histograma da suposta imagem do exemplo. Tabela 1. Distribuição de intensidades e valores de histograma para uma imagem digital de 3 bits e 64x64 pixels
| ${r_{k}}$ | ${n_{k}}$ | ${p_{r}}({r_{k}})={n_{k}}/MN$ | ${s_{k}}=T({r_{k}})=(L-1)\sum _{j=0}^{k}{p_{r}}({r_{j}})={\frac {(L-1)}{M\,N}}\sum _{j=0}^{k}{n_{j}}$ | ${s_{k}}$ Arredondado |
| ${r_{0}}=0$ | 790 | 0,19 | 1,33 | 1 |
| ${r_{1}}=1$ | 1.023 | 0,25 | 3,08 | 3 |
| ${r_{2}}=2$ | 850 | 0,21 | 4,55 | 5 |
| ${r_{3}}=3$ | 656 | 0,16 | 5,67 | 6 |
| ${r_{4}}=4$ | 329 | 0,08 | 6,23 | 6 |
| ${r_{5}}=5$ | 245 | 0,06 | 6,65 | 7 |
| ${r_{6}}=6$ | 122 | 0,03 | 6,86 | 7 |
| ${r_{7}}=7$ | 81 | 0,02 | 7,00 | 7 |
Fonte: Adaptação de Gonzalez e Woods
Desta forma, temos na primeira coluna os valores de intensidade possíveis na suposta imagem de entrada deste exemplo. Na segunda coluna, temos a quantidade de pixels da imagem em cada nível de intensidade da primeira coluna. Na terceira coluna, temos o valor da segunda coluna divido pelo produto das dimensões da imagem (MN = Linha x Coluna), que é a probabilidade de ocorrência do nível de intensidade ${r_{k}}$ na imagem. A quarta coluna traz o valor gerado pela soma de valores de probabilidade, que são arredondadas na quinta coluna, cujos valores representam os novos níveis de intensidade da imagem de saída gerada pelo histograma equalizado. Assim, podemos então concluir que, os 790 pixels de ${r_{0}}$ foram mapeados em ${s_{0}}=1$, os 1023 pixels de ${r_{1}}$ foram mapeados em ${s_{1}}=3$, os 850 pixels de ${r_{2}}$ foram mapeados em ${s_{2}}=5$. Entretanto, os 656+329 = 985 pixels de ${r_{3}}$ e ${r_{4}}$ respectivamente foram mapeados para o valor 6, o que também aconteceu com os 245+122+81 = 448 pixels de ${r_{5}}$, ${r_{6}}$ e ${r_{7}}$ que foram mapeados para o valor 7, fazendo assim, com que o Histograma fosse equalizado.
É importante citar ainda que segundo os autores Gonzalez e Woods, "um histograma é uma aproximação de uma Função Densidade de Probabilidade (do inglês, Probability Density Function - PDF), e nenhum novo nível de intensidade é criado no processo, histogramas perfeitamente uniformes são raros em aplicações práticas da equalização de histograma. Assim, diferentemente de seu equivalente contínuo, não pode ser provado (em geral) que a equalização de um histograma discreto resulta em um histograma uniforme."

## Exemplo prático

A seguir será demonstrado o resultado do processo de Equalização de Histograma na prática. Para tal, será utilizado o software ImageJ, que é um software de processamento de imagens Open Source projetado para imagens multidimensionais científicas. ImageJ é desenvolvido em Java, e por isso multiplataforma, podendo ser utilizado em qualquer Sistema Operacional. Além disso, é altamente extensível, e segundo sua documentação possui milhares de plugins e macros para executar uma ampla variedade de tarefas.

### Imagem predominantemente escura

Considere então, a Figura 11 abaixo, que possui 3264x2448 pixels ($MN=3264x2448=7.62MB$) e 8 bits, o que lhe confere, 256 níveis de cinza ($L={2^{8}}=256$). Onde então teremos um intervalo de $[0,L-1]=[0,255]$ níveis de intensidade.
| Figura 11. Imagem em ambiente fechado, com tons predominantemente escuros. Fonte: Próprio autor | Figura 12. Histograma da imagem acima não equalizada. Fonte: Próprio autor |
Na figura 12 está o histograma da figura 11. Observe que há uma grande quantidade de pixels nos níveis de cinza próximos a zero, e uma outra quantidade um pouco menos relevante próxima aos níveis de cinza mais elevados.
Após realizar a equalização baseada no Histograma da Figura 12, podemos ver na imagem da Figura 13 gerada, que a mesma é mais clara e nítida. Assim como os objetos escuros ficaram mais claros, os objetos claros, ficaram ainda mais claros. É possível notar comparando o Histograma na Figura 12, com o Histograma da Figura 14 que a quantidade de pixels em cada nível de cinza está agora mais espalhada. Observe como é possível identificar melhor o controle de videogame sobre a mesa escura.
| Figura 13. Imagem da Figura 11 após ser equalizada. Fonte: Próprio autor | Figura 14. Histograma da Figura 13. Fonte: Próprio autor |

### Imagem predominantemente clara

Consideremos agora outra imagem cuja predominância é de níveis de cinza mais elevados, tendendo assim, para o branco. Nesta imagem temos as mesmas dimensões e a mesma quantidade de bits da Figura 11.
Observe que a figura 15 é opaca, quase como se estivesse embaçada. Desta forma, em seu Histograma na Figura 16, é possível notar que os pixels estão concentrados nos níveis de cinza do centro até o topo.
| Figura 15. Ursos brancos no shopping no natal de 2014. Antes da equalização. Fonte: Próprio autor | Figura 16. Histograma da Figura 15 antes da equalização. Fonte: Próprio autor |
Após realizar a equalização do histograma, é possível notar na figura 17 que a imagem está mais nítida, sem a impressão de opacidade. Analisando seu histograma na figura 18, conseguimos identificar claramente que os pixels se espalharam pelos níveis de cinza, permitindo assim, esta melhora.
| Figura 17. Imagem da Figura 15 depois da equalização. Fonte: Próprio autor | Figura 18. Histograma da Figura 17 depois da equalização. Fonte: Próprio autor |
Com a aplicação do processo de equalização de histograma é possível perceber nas imagens anteriores uma melhora significativa, especialmente no contraste. Contudo, se aplicarmos este processo em uma imagem cujos pixels já estão espalhados por toda a escala de intensidade, o efeito praticamente não será notado. Observe ainda que, apesar dos histogramas serem diferentes, as imagens são praticamente as mesmas, pois a diferença consiste basicamente no contraste, não havendo qualquer modificação no conteúdo da imagem.