O efeito threshold é um método de segmentação que faz com que a foto fique com apenas duas cores utilizando um valor limite. No nosso caso, vamos utilizar a cor preta e a cor branca. Para escolher o threshold utilizaremos a média total dos valores de cada cor do RGB. Se um pixel tem uma das cores maior que o threshold então o pixel receberá a cor branca (255,255,255). Caso contrário, o pixel receberá a cor preta (0,0,0).
import java.awt.Color; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class Duplica { public static void main(String args[] ) throws IOException{ BufferedImage imagem = null; imagem = ImageIO.read( new File("C:\\Users\\ufc\\workspace\\PDI\\src\\teste.jpg") ); int w = imagem.getWidth(); int h = imagem.getHeight(); //retorna um vetor inteiro representando os pixels da imagem int pixels[] = imagem.getRGB(0, 0, w, h, null, 0, w); double mediaR = 0.0; double mediaG = 0.0; double mediaB = 0.0; double mediaT = 0.0; for (int col = 0; col < w; col++) { for (int lin = 0; lin < h; lin++) { //Pega a cor em cada pixel Color c = new Color(pixels[lin*w + col]); mediaR += (double)c.getRed()/(w*h); mediaG += (double)c.getGreen()/(w*h); mediaB += (double)c.getBlue()/(w*h); mediaT += (double)(c.getRed() + c.getGreen() + c.getBlue())/(3*w*h); } } System.out.println("media do vermelho: " + mediaR); System.out.println("media do verde: " + mediaG); System.out.println("media do azul: " + mediaB); System.out.println("media do total: " + mediaT); int threshold = (int)mediaT; for (int col = 0; col < w; col++) { for (int lin = 0; lin < h; lin++) { int r,g,b; //Pega a cor em cada pixel Color c = new Color(pixels[lin*w + col]); if(c.getRed() > threshold || c.getGreen() > threshold || c.getBlue() > threshold) { r=255; g = 255; b = 255; } else { r =0; g = 0; b =0; } pixels[lin*w + col] = new Color(r, g , b).getRGB(); } } //seta um vetor inteiro representando os pixels da imagem imagem.setRGB(0, 0, w, h, pixels, 0, w); ImageIO.write(imagem, "JPG", new File("C:\\Users\\ufc\\workspace\\PDI\\src\\teste2.jpg")); } }Exemplos:
Nenhum comentário:
Postar um comentário