Hi!everybody. I'm unable to get correct fourier image of even a simple sinusoid with the following code. 'll appreciate help. Thankx.
Code:void freq_spect(){ double F[][][]; double FX[][]; double f_r[]; double f_r1[]; double NNN[][]; double Four[][]; int fxy[][]; int wd=new_img.getWidth(); int ht=new_img.getHeight(); F=new double[wd][ht][2]; Four=new double[wd][ht]; FX=new double[wd][2]; f_r=new double[wd*ht]; f_r1=new double[wd*ht]; NNN=new double[wd][ht]; img_fourier=newBufferedImage(new_img.getWidth(),new_img.getHeight(),BufferedImage.TYPE_BYTE_GRAY); rstr_f=img_fourier.getRaster(); //writable raster for (int u=0;u<new_img.getWidth();u++) { for (int v=0;v<new_img.getHeight();v++) { NNN[u][v]=rstr.getSample(u,v,0); //rstr is the writable raster of the image. NNN[u][v]=NNN[u][v]* Math.pow(-1,(u+v)); F[u][v][0]=0; F[u][v][1]=0; } } int vv=0; for (int u=0;u<new_img.getWidth();u++) { FX[u][0]=0; //real array FX[u][1]=0; //imaginary array for (int a=0; a<new_img.getWidth();a++) { for(int b=0;b<new_img.getHeight();b++) { FX[u][0]=FX[u][0]+(NNN[a][b])* Math.cos(Math.PI/180*( (6.28318*((u*a)/wd))); FX[u][1] =FX[u][1]-((NNN[a][b])* Math.sin(Math.PI/180*( (6.28318*((u*a)/wd)))); } } } vv=0; for (int u=0;u<new_img.getWidth();u++) { for(int v=0;v<new_img.getHeight();v++) { for(int b=0;b<new_img.getHeight();b++) { F[u][v][0]=F[u][v][0]+(FX[u][0])* Math.cos(Math.PI/180*(6.28318*((v*b)/ht)))+(FX[u][1])* Math.sin(Math.PI/180*(6.28318*((v*b)/ht))); F[u][v][1] =F[u][v][1]+(FX[u][1])* Math.cos(Math.PI/180*(6.28318*((v*b)/ht)))-((FX[u][0])* Math.sin(Math.PI/180*(6.28318*((v*b)/ht)))); } double sum11=F[u][v][0]*F[u][v][0]; double sum22=F[u][v][1]*F[u][v][1]; Four[u][v]=(sum11+sum22); f_r[vv]=Four[u][v]; f_r[vv]=Math.sqrt(f_r[vv]); //power spectrum vv++; } } for (int a=0; a<new_img.getWidth();a++) for(int b=0;b<new_img.getHeight();b++) { rstr_f.setSample(a,b,0,Four[a][b]); } repaint(); }


Reply With Quote
)



Bookmarks