1 import java.awt.*; 2 import java.awt.image.*; 3 import java.awt.event.*; 4 import java.applet.*; 5 import java.io.*; 6 import JSci.maths.wavelet.symmlet8.*; 7 8 15 public final class ImageTransform extends Applet { 16 final int W=256; 17 final FastSymmlet8 fwt=new FastSymmlet8(); 18 final float[][] mY=new float[W][W]; 19 final float[][] mI=new float[W][W]; 20 final float[][] mQ=new float[W][W]; 21 Image lena; 22 Image lenaTransformed; 23 24 public void init() { 25 System.err.println("(C) 1999 Daniel Lemire, Ph.D."); 26 setSize(2*W,W); 27 System.err.println("Loading image..."); 28 MediaTracker mt=new MediaTracker(this); 29 Class thisclass=this.getClass(); 30 InputStream is=thisclass.getResourceAsStream("lena.gif"); 31 if(is!=null) 32 System.err.println("Image found..."); 33 else 34 System.err.println("Image cannot be found!"); 35 int b; 36 ByteArrayOutputStream bais=new ByteArrayOutputStream(); 37 try { 38 while((b=is.read())!=-1) { 39 bais.write(b); 40 } 41 } catch(IOException ioe) { 42 ioe.printStackTrace(); 43 } 44 System.err.println("Image read..."); 45 lena=Toolkit.getDefaultToolkit().createImage(bais.toByteArray()); 46 mt.addImage(lena,0,W,W); 47 try { 48 mt.waitForAll(); 49 } catch (InterruptedException ie) { 50 ie.printStackTrace(); 51 } 52 System.err.println("Image loaded..."); 53 int[] pixels = new int[W * W]; 54 PixelGrabber pg = new PixelGrabber(lena, 0, 0, W, W, pixels, 0, W); 55 try { 56 pg.grabPixels(); 57 } catch (InterruptedException ie) { 58 ie.printStackTrace(); 59 } 60 byte red,green,blue; 61 for(int k=0;k<W;k++) { 62 for(int l=0;l<W;l++) { 63 red = (byte)( ((pixels[k*W+l]>>16) & 0xFF) -128); 64 green = (byte)( ((pixels[k*W+l]>>8) & 0xFF) - 128); 65 blue = (byte)( (pixels[k*W+l] & 0xFF) - 128); 66 mY[k][l] = ( red*.299f+green*.587f+blue*.114f); 67 } 68 } 69 transform(); 70 quantize(); 71 final int two24 = twoPower(24); 72 final int two16 = twoPower(16); 73 final int two8 = twoPower(8); 74 for(int k=0;k<W;k++) { 75 for(int l=0;l<W;l++) { 76 pixels[k*W+l]=(int)mY[k][l]*two16 +(int)mY[k][l]*two8 + (int)mY[k][l] -two24; 77 } 78 } 79 MemoryImageSource topmis=new MemoryImageSource(W, W, pixels, 0, W); 80 lenaTransformed=createImage(topmis); 81 mt.addImage(lenaTransformed,1,W,W); 82 try { 83 mt.waitForAll(); 84 } catch (InterruptedException ie) { 85 ie.printStackTrace(); 86 } 87 this.setFont(new Font("Default",Font.BOLD,12)); 88 } 89 90 private static int twoPower(int exp) 91 { 92 int result = 1; 93 for(int k = 0; k < exp; ++k) 94 result = 2*result; 95 return result; 96 } 97 98 public String getAppletInfo() { 99 return "This applet is meant to illustrate the FWT classes in JSci"; 100 } 101 102 private void transform() { 103 transformColumns(); 104 transformRows(); 105 } 106 private void transformColumns() { 107 float[] ColumnVector=new float[W]; 108 for(int col = 0; col <W; ++col) { 109 for(int row = 0; row < W; ++row) 110 ColumnVector[row] = mY[row][col]; 111 fwt.transform(ColumnVector); 112 for(int row = 0; row < W; ++row) 113 mY[row][col] = ColumnVector[row]; 114 } 115 } 116 private void transformRows() { 117 for(int row = 0; row < W; ++row) { 118 fwt.transform(mY[row]); 119 } 120 } 121 122 private void quantize() { 123 float max=mY[0][0]; 124 float min=mY[0][0]; 125 for(int k=0;k<W;k++) { 126 for(int l=0;l<W;l++) { 127 max=Math.max(mY[k][l],max); 128 min=Math.min(mY[k][l],min); 129 } 130 } 131 for(int k=0;k<W;k++) { 132 for(int l=0;l<W;l++) { 133 mY[k][l]=Math.round((mY[k][l]-min)/(max-min)*255.0); 134 } 135 } 136 } 137 138 public void paint(Graphics g) { 139 FontMetrics fm=this.getFontMetrics(this.getFont()); 140 int fontheight=fm.getHeight(); 141 g.setColor(Color.white); 142 g.drawImage(lena,0,0,this); 143 g.drawImage(lenaTransformed,256,0,this); 144 g.drawString("Real time computation of the Fast Wavelet Transform in Java",10,W-4*fontheight); 145 g.drawString("using "+(int)(Math.log(W)/Math.log(2)-3)+" iterations and Symmlet8 wavelets.",10,W-3*fontheight); 146 g.drawString ("(Only the Y channel is shown.)",10,W-2*fontheight); 147 g.drawString("Notice how economical the FWT representation is!",10,W-fontheight); 148 } 149 } 150 151 152 | Popular Tags |