Advertisement
Guest User

POPO

a guest
May 3rd, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.66 KB | None | 0 0
  1. import java.io.File;
  2.  
  3. // pacotes do AWT
  4. import java.awt.image.BufferedImage;
  5. import java.awt.image.Raster;
  6. import java.awt.image.WritableRaster;
  7.  
  8.  
  9. // pacote Swing para definir interface gráfica
  10. import javax.swing.JFrame;
  11. import javax.swing.JLabel;
  12. import javax.swing.JScrollPane;
  13. import javax.swing.ImageIcon;
  14.  
  15. // leitura em modo imediato - para J2SE 1.4+
  16. import javax.imageio.ImageIO;
  17.  
  18. public class FiltroMediana extends JFrame {
  19.  
  20. public static void main(String args[]) {
  21.  
  22. // Mostra JFrame decorado pelo Swing
  23. JFrame.setDefaultLookAndFeelDecorated(true);
  24.  
  25. // Carrega e Visualiza imagem original
  26.  
  27. String ima_name_in = "Comp453ruido.jpg";
  28. String ima_name_out = "Comp453Proc.jpg";
  29.  
  30. // String ima_name_in = "ccd1.gif";
  31. // String ima_name_out = "Saida.gif";
  32.  
  33. BufferedImage ima_in = CarregaImagem(ima_name_in);
  34.  
  35. FiltroMediana frame1 = new FiltroMediana();
  36.  
  37. frame1.MostraImagem(ima_in, ima_name_in);
  38.  
  39. // Carrega e processa imagem original e mostra imagem processada
  40.  
  41. BufferedImage ima_out = ProcessaImagem(ima_in);
  42.  
  43. FiltroMediana frame2 = new FiltroMediana();
  44.  
  45. frame2.MostraImagem(ima_out, ima_name_out);
  46.  
  47. SalvaImagem(ima_out, ima_name_out);
  48. }
  49.  
  50. // Método para carregar uma imagem do disco para um objeto da classe BufferedIma
  51.  
  52. public static BufferedImage CarregaImagem(String image_name) {
  53. // Associa objeto BufferedImage com <arquivo_imagem>
  54. BufferedImage ima_in = null;
  55.  
  56. // Carrega imagem
  57.  
  58. File file = new File(image_name);
  59. try {
  60. ima_in= ImageIO.read(file);
  61. } catch(Exception e) {
  62. System.out.println("Imagem '" + image_name + "' nao existe.");
  63. System.exit(0);
  64. }
  65.  
  66. System.out.println("Nome da Imagem: "+image_name+" Tipo da Imagem: "+ima_in.getType());
  67. System.out.println("Tamanho da Imagem: Colunas "+ima_in.getWidth()+" Linhas "+ima_in.getHeight());
  68.  
  69.  
  70. return ima_in;
  71.  
  72. }
  73.  
  74. // Método para Salvar uma imagem no formato JPEG
  75. public static void SalvaImagem(BufferedImage dest, String image_name) {
  76.  
  77. try {
  78.  
  79. ImageIO.write(dest, "jpg", new File(image_name));
  80.  
  81. } catch (Exception e) {
  82.  
  83. System.out.println("Problema gravando arquivo. ");
  84. System.exit(0);
  85. }
  86. }
  87.  
  88. // Método para Processar uma Imagem
  89.  
  90. public static BufferedImage ProcessaImagem (BufferedImage ima_in) {
  91.  
  92. // Cria imagem de saida com mesmo tamanho e tipo da imagem de entrada
  93.  
  94. BufferedImage ima_out = new BufferedImage(ima_in.getWidth(),ima_in.getHeight(),ima_in.getType());
  95.  
  96. // Recupera matriz das imagens de entrada e saida
  97.  
  98. Raster raster = ima_in.getRaster(); // declara e instancia objeto raster soh para leitura
  99. WritableRaster wraster = ima_out.getRaster(); // declara e instancia objeto raster para escrita
  100.  
  101. // Processa valores da imagem de entrada e armazena na imagem de saida
  102.  
  103. double valornr, valorng, valornb;
  104. int[] v = new int[9];
  105.  
  106. for(int y=1; y<ima_in.getHeight()-1; y++)
  107. for(int x=1; x<ima_in.getWidth()-1; x++){
  108.  
  109. // Aplica Filtro de Mediana 3x3
  110.  
  111. LeJanela3x3(raster,v,x,y,0);
  112. valornr = CalcMediana(9,v);
  113.  
  114. LeJanela3x3(raster,v,x,y,1);
  115. valorng = CalcMediana(9,v);
  116.  
  117. LeJanela3x3(raster,v,x,y,2);
  118. valornb = CalcMediana(9,v);
  119.  
  120. wraster.setSample(x,y,0,(int)(valornr+.5));
  121. wraster.setSample(x,y,1,(int)(valorng+.5));
  122. wraster.setSample(x,y,2,(int)(valornb+.5));
  123.  
  124. }
  125.  
  126. return ima_out;
  127. };
  128.  
  129.  
  130.  
  131. // Método para mostrar uma imagem em um frame
  132.  
  133. public void MostraImagem(BufferedImage ima, String image_name) {
  134.  
  135. // Define GUI com objetos do Swing
  136. JLabel lsrc2 = new JLabel(new ImageIcon(ima));
  137. getContentPane().add(new JScrollPane(lsrc2));
  138.  
  139. // Atribui nome e tamanho ao frame
  140. setTitle("Java2DImageDisplay: =>" + image_name);
  141. setSize(ima.getWidth()+40, ima.getHeight()+40);
  142. setVisible(true);
  143.  
  144. // Encerra a aplicação clicando no "close"
  145. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  146.  
  147.  
  148. }
  149.  
  150.  
  151. // Método para Ler uma janela 3x3 de uma banda de uma imagem de entrada num vetor v.
  152. // (x,y) representa a coluna e a linha central da janela
  153.  
  154. public static void LeJanela3x3(Raster raster, int []v, int x, int y, int banda){
  155.  
  156.  
  157. v[0] = raster.getSample(x-1,y-1,banda);
  158. v[1] = raster.getSample(x ,y-1,banda);
  159. v[2] = raster.getSample(x+1,y-1,banda);
  160. v[3] = raster.getSample(x-1,y ,banda);
  161. v[4] = raster.getSample(x ,y ,banda);
  162. v[5] = raster.getSample(x+1,y ,banda);
  163. v[6] = raster.getSample(x-1,y+1,banda);
  164. v[7] = raster.getSample(x ,y+1,banda);
  165. v[8] = raster.getSample(x+1,y+1,banda);
  166.  
  167. return;
  168. }
  169.  
  170.  
  171. // Método para Cálculo da Mediana de um vetor de npts pontos
  172.  
  173. public static double CalcMediana(int npts, int []v){
  174.  
  175. int aux;
  176.  
  177. // Ordena em ordem crescente os elementos do vetor
  178.  
  179. for(int i=0; i<npts-1; i++)
  180. for(int j=i+1; j<npts; j++)
  181. if(v[i] > v[j]){
  182. aux = v[i]; v[i]=v[j]; v[j]=aux;
  183. }
  184.  
  185. // Define o valor da mediana
  186. if((npts%2)==0)
  187. return((double)v[npts/2]);
  188. else
  189. return((double)((v[npts/2]+v[npts/2+1])/2.));
  190. }
  191.  
  192.  
  193. } // fim da classe FiltroMediana
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement