Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.File;
- // pacotes do AWT
- import java.awt.image.BufferedImage;
- import java.awt.image.Raster;
- import java.awt.image.WritableRaster;
- // pacote Swing para definir interface gráfica
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JScrollPane;
- import javax.swing.ImageIcon;
- // leitura em modo imediato - para J2SE 1.4+
- import javax.imageio.ImageIO;
- public class FiltroMediana extends JFrame {
- public static void main(String args[]) {
- // Mostra JFrame decorado pelo Swing
- JFrame.setDefaultLookAndFeelDecorated(true);
- // Carrega e Visualiza imagem original
- String ima_name_in = "Comp453ruido.jpg";
- String ima_name_out = "Comp453Proc.jpg";
- // String ima_name_in = "ccd1.gif";
- // String ima_name_out = "Saida.gif";
- BufferedImage ima_in = CarregaImagem(ima_name_in);
- FiltroMediana frame1 = new FiltroMediana();
- frame1.MostraImagem(ima_in, ima_name_in);
- // Carrega e processa imagem original e mostra imagem processada
- BufferedImage ima_out = ProcessaImagem(ima_in);
- FiltroMediana frame2 = new FiltroMediana();
- frame2.MostraImagem(ima_out, ima_name_out);
- SalvaImagem(ima_out, ima_name_out);
- }
- // Método para carregar uma imagem do disco para um objeto da classe BufferedIma
- public static BufferedImage CarregaImagem(String image_name) {
- // Associa objeto BufferedImage com <arquivo_imagem>
- BufferedImage ima_in = null;
- // Carrega imagem
- File file = new File(image_name);
- try {
- ima_in= ImageIO.read(file);
- } catch(Exception e) {
- System.out.println("Imagem '" + image_name + "' nao existe.");
- System.exit(0);
- }
- System.out.println("Nome da Imagem: "+image_name+" Tipo da Imagem: "+ima_in.getType());
- System.out.println("Tamanho da Imagem: Colunas "+ima_in.getWidth()+" Linhas "+ima_in.getHeight());
- return ima_in;
- }
- // Método para Salvar uma imagem no formato JPEG
- public static void SalvaImagem(BufferedImage dest, String image_name) {
- try {
- ImageIO.write(dest, "jpg", new File(image_name));
- } catch (Exception e) {
- System.out.println("Problema gravando arquivo. ");
- System.exit(0);
- }
- }
- // Método para Processar uma Imagem
- public static BufferedImage ProcessaImagem (BufferedImage ima_in) {
- // Cria imagem de saida com mesmo tamanho e tipo da imagem de entrada
- BufferedImage ima_out = new BufferedImage(ima_in.getWidth(),ima_in.getHeight(),ima_in.getType());
- // Recupera matriz das imagens de entrada e saida
- Raster raster = ima_in.getRaster(); // declara e instancia objeto raster soh para leitura
- WritableRaster wraster = ima_out.getRaster(); // declara e instancia objeto raster para escrita
- // Processa valores da imagem de entrada e armazena na imagem de saida
- double valornr, valorng, valornb;
- int[] v = new int[9];
- for(int y=1; y<ima_in.getHeight()-1; y++)
- for(int x=1; x<ima_in.getWidth()-1; x++){
- // Aplica Filtro de Mediana 3x3
- LeJanela3x3(raster,v,x,y,0);
- valornr = CalcMediana(9,v);
- LeJanela3x3(raster,v,x,y,1);
- valorng = CalcMediana(9,v);
- LeJanela3x3(raster,v,x,y,2);
- valornb = CalcMediana(9,v);
- wraster.setSample(x,y,0,(int)(valornr+.5));
- wraster.setSample(x,y,1,(int)(valorng+.5));
- wraster.setSample(x,y,2,(int)(valornb+.5));
- }
- return ima_out;
- };
- // Método para mostrar uma imagem em um frame
- public void MostraImagem(BufferedImage ima, String image_name) {
- // Define GUI com objetos do Swing
- JLabel lsrc2 = new JLabel(new ImageIcon(ima));
- getContentPane().add(new JScrollPane(lsrc2));
- // Atribui nome e tamanho ao frame
- setTitle("Java2DImageDisplay: =>" + image_name);
- setSize(ima.getWidth()+40, ima.getHeight()+40);
- setVisible(true);
- // Encerra a aplicação clicando no "close"
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- }
- // Método para Ler uma janela 3x3 de uma banda de uma imagem de entrada num vetor v.
- // (x,y) representa a coluna e a linha central da janela
- public static void LeJanela3x3(Raster raster, int []v, int x, int y, int banda){
- v[0] = raster.getSample(x-1,y-1,banda);
- v[1] = raster.getSample(x ,y-1,banda);
- v[2] = raster.getSample(x+1,y-1,banda);
- v[3] = raster.getSample(x-1,y ,banda);
- v[4] = raster.getSample(x ,y ,banda);
- v[5] = raster.getSample(x+1,y ,banda);
- v[6] = raster.getSample(x-1,y+1,banda);
- v[7] = raster.getSample(x ,y+1,banda);
- v[8] = raster.getSample(x+1,y+1,banda);
- return;
- }
- // Método para Cálculo da Mediana de um vetor de npts pontos
- public static double CalcMediana(int npts, int []v){
- int aux;
- // Ordena em ordem crescente os elementos do vetor
- for(int i=0; i<npts-1; i++)
- for(int j=i+1; j<npts; j++)
- if(v[i] > v[j]){
- aux = v[i]; v[i]=v[j]; v[j]=aux;
- }
- // Define o valor da mediana
- if((npts%2)==0)
- return((double)v[npts/2]);
- else
- return((double)((v[npts/2]+v[npts/2+1])/2.));
- }
- } // fim da classe FiltroMediana
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement