Melhorando imagens com java
Posted on jun 11, 2008 under Processamento de Imagem | 5 ComentáriosGeralmente as imagens podem ter ser contraste melhorado realçando partes da imagem que antes não muito destacadas uma forma de melhorar é através da equalização do histograma.
O histograma de uma imagem é demonstrado através de um gráfico de barras, onde é feito um somatório da ocorrência de cada pixel. Neste exemplo será utilizada uma imagem na escala de cinza com um resolução de 16bits (0 a 65536).
Desenvolvi um algoritmo que cria e equaliza o histograma.
O algoritmo mostrado aqui foi desenvolvido em Java usando a API ImageJ. E tem o seguinte príncipio de funcionamento:
- Lê a imagem;
- Cria o histograma;
- Cria a tabela LUT (Look Up Table);
- Encontra a escala que será o total do somátorio dividido pelos níveis de cinza;
- Atribui valores a tabela que será lut(n) = H[n] * escala;
- Aplica a tabela na imagem.
O código mostrado é um plugin do imageJ
import ij.ImagePlus;
import ij.plugin.filter.PlugInFilter;
import ij.process.ImageConverter;
import ij.process.ImageProcessor;
public class HistogramEqualization_ implements PlugInFilter{
int hist[];
private ImagePlus imp;
public int setup(String arg0, ImagePlus imp)
{
this.imp = imp;
return DOES_16;
}
public void run(ImageProcessor ip)
{
hist = ip.getHistogram();
equalizeHistogram(ip);
imp.setProcessor("Equalized", ip);
imp.updateAndDraw();
}
public void equalizeHistogram(ImageProcessor ip)
{
int max = 65535+1;
float sumH[] = new float[max];
float sum = 0;
for(int i=0;i< max;i++)
{
sum = sum + hist[i];
sumH[i] = sum;
}
int lut[] = new int[max];
double scale = max/sum;
for(int i = 1;i< max;i++)
lut[i] = (int)Math.round(sumH[i] * scale);
lut[max-1] = max;
ip.applyTable(lut);
}
}
Utilizando a famosa imagem do cameramam
Histograma Original
Após a execução do algoritmo temos a nova imagem do cameramam com o histograma equalizado
Histograma equalizado
Este algoritmo equalizou o histograma melhorando o contraste mostrando os prédios no fundo da imagem que não apareciam muito bem. Existem outras formas de equalizar o histograma e melhorar a imagem que podem serem pesquisadas no Livro Digital Image Processing
Assine o feed e receba as matérias do blog por email.





olá,cara estou querendo usar o imageJ mas nao sei como instala a API pra usar no java,eu sou iniciante em java e uso o netBeans
Olá Marcelo
Segue um link para instalação do ImageJ no Netbeans
http://www.mbl.edu/research/labs/adlc/CamAcqJ/NetBeansforIJDevelopment.html
Sucesso.
olá, mais algumas duvidas
Tu não teria esse codigo ai comentado, por exemplo nao sei em que parte do codigo você passou a imagem para o progama fazer o ajuste.
olá,dando uma pesquizada melhor entendi um pouco, vc cria esse plugin e utiliza no progama imageJ, é isso né.
Isso Marcelo
Aqui tem mais exemplos
http://rsbweb.nih.gov/ij/docs/examples/index.html