Skip to content

Conversão de Imagens para GrayScale/Binária/R/G/B

Boa tarde,

Este é um pequeno exercício de Sistemas Multimidias (INE5431). O mesmo consistia em:

1) Transforme a imagem do elefante em tons de cinza.
2) Gere 3 imagens fazendo a função de split RGB, cada imagens com intensidades luminosas proporcionais a um componente de cor.
3) Implemente um programa que transforme a imagem do elefante em imagem binária.

Primeiramente, como realizar conversão de RGB para Tons de cinza:

Y = 0.3R + 0.59G + 0.11B;

Para realizar a conversão para binário precisamos uma imagem de tons binários e aplicamos a seguinte lógica:

if (Y > 127) {b = 1; } else { b = 0; }

Para deixar somente uma componente de cor, necessitamos manipular a imagem para que a mesma fique somente com a componente que desejamos.

No projeto em anexo, acessamos uma imagem e temos várias funções que realizam a conversão para GrayScale, Binária e Componente RGB. Apartir da imagem original, criamos um Buffer do mesmo tamanho e percorremos os Pixels da imagem original realizamos as transformações adequadas em cada método e jogamos nesse novo Buffer, criando assim uma nova imagem.

Método responsável por receber um BufferedImage e converter o mesmo para tons de cinza
[code lang="java"]
public static BufferedImage criaImagemCinza(BufferedImage imgJPEG) {
// Cria um novo Buffer para BYTE GRAY
BufferedImage img = new BufferedImage(imgJPEG.getWidth(), imgJPEG.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
WritableRaster raster = img.getRaster();
WritableRaster rasterJPEG = imgJPEG.getRaster();
// Para cada Pixel realiza a transformação para tons de cinza e joga na nova imagem.
for(int h=0;h<256;h++) for(int w=0;w<256;w++) { int[] p = new int[4]; rasterJPEG.getPixel(w, h, p); p[0] = (int) (0.3 * p[0]); p[1] = (int) (0.59 * p[1]); p[2] = (int) (0.11 * p[2]); int y = p[0] + p[1] + p[2]; raster.setSample(w,h,0,y); } return img; } [/code] Método responsável por receber uma BufferedImage e converte-la para binária. [code lang="java"] public static BufferedImage criaImagemBinaria(BufferedImage imgJPEG) { // Cria um novo buffer para binário BufferedImage img = new BufferedImage(imgJPEG.getWidth(), imgJPEG.getHeight(), BufferedImage.TYPE_BYTE_BINARY); WritableRaster raster = img.getRaster(); WritableRaster rasterPB = criaImagemCinza(imgJPEG).getRaster(); // Para cada pixel realiza a verificação de se é mais cinza ou mais branco decidindo se o pixel será branco ou preto. for(int h=0;h<256;h++) for(int w=0;w<256;w++) { int[] p = new int[1]; rasterPB.getPixel(w, h, p); if(p[0] > 127) {
raster.setSample(w, h, 0, 1);
} else {
raster.setSample(w, h, 0, 0);
}
}
return img;
}
[/code]

Método responsável por receber um BufferedImage e um Tipo (R - 1, G - 2, B - 3) e só deixar a componente de cor escolhida.
[code lang="java"]
public static BufferedImage criaImagemRGB(BufferedImage imgJPEG, int tipo) {
// Cria um novo Buffer para RGB
BufferedImage img = new BufferedImage(imgJPEG.getWidth(), imgJPEG.getHeight(), BufferedImage.TYPE_INT_RGB);

WritableRaster rasterT = img.getRaster();
WritableRaster raster = imgJPEG.getRaster();
// Para cada pixel pega a componente desejada e utiliza somente a mesma na nova imagem
for(int h=0;h<256;h++) for(int w=0;w<256;w++) { int[] p = new int[4]; raster.getPixel(w,h,p); rasterT.setSample(w,h,tipo-1,p[tipo-1]); } return img; } [/code] Manipulador de imagens para GrayScale, Binária e Componente de cor desejada.

Matheus

Published injava

3 Comments

  1. x x

    Fui dentro de varios sites na internet destinado a afundar
    sobre isto, li varios sites e também nem um se compara a esse até este lugar, teu Texto e exelente, bastante claramente aclimado e também explicativo, adorei.
    bem-agradecido pelas informaçoes.
    desculpe o portugues estou abaixo do BR a anos.

  2. I have noticed you don't monetize your website, don't waste your traffic, you can earn additional cash
    every month because you've got high quality content.

    If you want to know how to make extra bucks, search for: Mertiso's tips best adsense
    alternative

  3. I have checked your page and i have found some duplicate content, that's
    why you don't rank high in google's search results, but there is a tool that can help you to
    create 100% unique articles, search for; SSundee advices unlimited content for your
    blog

Leave a Reply

Your email address will not be published. Required fields are marked *