Difference between revisions of "File:Fafo2test2.png"

From TORI
Jump to navigation Jump to search
(Importing image file)
 
 
Line 1: Line 1:
  +
Filtering of the real array $A$ shown in [[File:Fafo2test0.png|128px]].
Importing image file
 
  +
  +
The [[Fourier-2 transform]] $B$ of the function $A$ is determines with
  +
  +
: $\displaystyle B(p,q)=\frac{1}{2\pi} \int \int \mathrm d x \mathrm d y \exp(-ipx-iqy) A(x,y)$
  +
  +
  +
The modulus of array $B$ is shown in figure [[File:Fafo2test1.png|128px]].
  +
  +
The filtered function $\tilde A$ is determined with
  +
  +
: $\displaystyle \tilde A(x,y)=\frac{1}{2\pi} \int \int \mathrm d x \mathrm d y \exp(ipx+iqy)
  +
\exp(-0.04 (p^2+q^2))
  +
B(p,q)$
  +
  +
The generator is copypasted below.
  +
  +
==[[C++]] generator==
  +
// Files [[ado.cin]] and [[fafo.cin]] should be in the working directory for the compillation of the code below:
  +
  +
#include<math.h>
  +
#include<stdio.h>
  +
#include <stdlib.h>
  +
#include <complex>
  +
using namespace std;
  +
#define z_type complex<double>
  +
#define DB double
  +
  +
#include "fafo.cin"
  +
#include "ado.cin"
  +
#define DO(x,y) for(x=0;x<y;x++)
  +
  +
main(){ int m,M=64, n,N=64; DB x,y, dx,dy, u,v, s,t;
  +
z_type c,z;
  +
FILE *o;
  +
o=fopen("fafo2test2.eps","w"); ado(o, 10*M+2, 10*N+2);
  +
fprintf(o,"1 1 translate\n");
  +
fprintf(o,"10 10 scale\n");
  +
z_type *A; A=(z_type *)malloc((size_t)((M*N)*sizeof(z_type)));
  +
z_type *b; b=(z_type *)malloc((size_t)((M)*sizeof(z_type)));
  +
  +
// Assuming M >= N
  +
dx=sqrt(2.*M_PI/M);
  +
dy=sqrt(2.*M_PI/N);
  +
DO(m,M){ x=dx*(m-M/2.);
  +
DO(n,N){ y=dy*(n-N/2.); if(.3*x*x+.2*y*y >2.1) A[n*M+m]=0.; else A[n*M+m]=1.;
  +
if(fabs(x)<.8 && fabs(y+1.7)<.3 ) A[n*M+m]-=1.;
  +
if( (fabs(x-1.)<.3 || fabs(x+1.)<.3 ) && fabs(y-.8)<.2 ) A[n*M+m]-=1.;
  +
}}
  +
  +
// Fourier:
  +
DO(m,M){ DO(n,N) b[n]=A[n*M+m]; fafo(b,N,1); DO(n,N) A[n*M+m]=b[n]; }
  +
DO(n,N){ DO(m,M) b[m]=A[n*M+m]; fafo(b,M,1); DO(m,M) A[n*M+m]=b[m]; }
  +
  +
DO(m,M){ x=dx*(m-M/2.);
  +
DO(n,N){ y=dy*(n-N/2.); s=x*x+y*y; A[n*M+m]*=exp(-.04*s); }}
  +
  +
DO(m,M){ DO(n,N) b[n]=A[n*M+m]; fafo(b,N,-1); DO(n,N) A[n*M+m]=b[n]; }
  +
DO(n,N){ DO(m,M) b[m]=A[n*M+m]; fafo(b,M,-1); DO(m,M) A[n*M+m]=b[m]; }
  +
  +
fprintf(o,"gsave\n");
  +
fprintf(o,"%2d %2d scale\n",M,N);
  +
fprintf(o,"%2d %2d 4 [%2d 0 0 %2d 0 %2d]\n<", M,N,M,-N,N);
  +
  +
s=0; DO(m,M) DO(n,N){ t=abs(A[n*M+m]); if(t>s) s=t; }
  +
s=15./s;
  +
  +
for(n=N-1;n>=0;n--) { fprintf(o,"\n");
  +
DO(m,M){ fprintf(o,"%1x",int(s*abs(A[n*M+m])+.6) );
  +
}}
  +
fprintf(o,"\n>\n");
  +
fprintf(o,"image\n");
  +
free(A);
  +
fprintf(o,"grestore\n");
  +
#define M(x,y) fprintf(o,"%6.3f %6.3f M\n",0.+x,0.+y);
  +
#define L(x,y) fprintf(o,"%6.3f %6.3f L\n",0.+x,0.+y);
  +
M(M/2.+.5,-1); L(M/2+.5,N+1);
  +
M(-1,N/2.+.5); L(M+1,N/2.+.5);
  +
fprintf(o,"1 0 0 RGB .1 W S\n");
  +
fprintf(o,"showpage\n%c%cTrailer\n",'%','%'); fclose(o);
  +
system("epstopdf fafo2test2.eps");
  +
system( "convert fafo2test2.eps fafo2test2.gif");
  +
system( "convert fafo2test2.eps fafo2test2.png");
  +
system( "open fafo2test2.png");
  +
}
  +
  +
==Resulting EPS==
  +
  +
%!PS-Adobe-2.0 EPSF-2.0
  +
  +
%%BoundingBox: 0 0 642 642
  +
  +
/M {moveto} bind def
  +
/L {lineto} bind def
  +
/S {stroke} bind def
  +
/s {show newpath} bind def
  +
/C {closepath} bind def
  +
/F {fill} bind def
  +
/o {.1 0 360 arc C S} bind def
  +
/times-Roman findfont 20 scalefont setfont
  +
/W {setlinewidth} bind def
  +
/RGB {setrgbcolor} bind def
  +
1 1 translate
  +
10 10 scale
  +
gsave
  +
64 64 scale
  +
64 64 4 [64 0 0 -64 0 64]
  +
<
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000001111100000000000000000000000000000
  +
0000000000000000000000000000123444321000000000000000000000000000
  +
0000000000000000000000000002469bbb964200000000000000000000000000
  +
00000000000000000000000000259cdeeedc9520000000000000000000000000
  +
000000000000000000000000025adfffffffda52000000000000000000000000
  +
000000000000000000000000149dfffffffffd94100000000000000000000000
  +
00000000000000000000000026cefffffffffec6200000000000000000000000
  +
00000000000000000000000149dfffffffffffd9410000000000000000000000
  +
0000000000000000000000026ceeccefffecceec620000000000000000000000
  +
0000000000000000000000139dec88cfffc88ced931000000000000000000000
  +
000000000000000000000014befc88cfffc88cfeb41000000000000000000000
  +
000000000000000000000014befeccefffeccefeb41000000000000000000000
  +
000000000000000000000014bfffffffffffffffb41000000000000000000000
  +
000000000000000000000014befffffffffffffeb41000000000000000000000
  +
000000000000000000000014befffffffffffffeb41000000000000000000000
  +
0000000000000000000000139dfffffffffffffd931000000000000000000000
  +
0000000000000000000000026cfffecbbbcefffc620000000000000000000000
  +
00000000000000000000000149effc85558cffe9410000000000000000000000
  +
00000000000000000000000026cefc85558cfec6200000000000000000000000
  +
000000000000000000000000149dfecbbbcefd94100000000000000000000000
  +
000000000000000000000000025adeeeeeeeda52000000000000000000000000
  +
00000000000000000000000000259cdeeedc9520000000000000000000000000
  +
0000000000000000000000000002469bbb964200000000000000000000000000
  +
0000000000000000000000000000123444321000000000000000000000000000
  +
0000000000000000000000000000001111100000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
0000000000000000000000000000000000000000000000000000000000000000
  +
>
  +
image
  +
grestore
  +
32.500 -1.000 M
  +
32.500 65.000 L
  +
-1.000 32.500 M
  +
65.000 32.500 L
  +
1 0 0 RGB .1 W S
  +
showpage
  +
%%Trailer
  +
==Keywords==
  +
  +
==References==
  +
  +
[[Category:Fourier-2 transform]]
  +
[[Category:Filtering of images]]

Latest revision as of 09:39, 21 June 2013

Filtering of the real array $A$ shown in Fafo2test0.png.

The Fourier-2 transform $B$ of the function $A$ is determines with

$\displaystyle B(p,q)=\frac{1}{2\pi} \int \int \mathrm d x \mathrm d y \exp(-ipx-iqy) A(x,y)$


The modulus of array $B$ is shown in figure Fafo2test1.png.

The filtered function $\tilde A$ is determined with

$\displaystyle \tilde A(x,y)=\frac{1}{2\pi} \int \int \mathrm d x \mathrm d y \exp(ipx+iqy)

\exp(-0.04 (p^2+q^2)) B(p,q)$

The generator is copypasted below.

C++ generator

// Files ado.cin and fafo.cin should be in the working directory for the compillation of the code below:

#include<math.h>
#include<stdio.h>
#include <stdlib.h> 
#include <complex>  
using namespace std;
#define z_type complex<double>
#define DB double
#include "fafo.cin"
#include "ado.cin"
#define DO(x,y) for(x=0;x<y;x++)
main(){ int m,M=64, n,N=64; DB  x,y, dx,dy, u,v, s,t; 
z_type c,z;
FILE *o;
o=fopen("fafo2test2.eps","w"); ado(o, 10*M+2, 10*N+2);
fprintf(o,"1 1 translate\n");
fprintf(o,"10 10 scale\n");
z_type  *A; A=(z_type *)malloc((size_t)((M*N)*sizeof(z_type)));
z_type *b; b=(z_type *)malloc((size_t)((M)*sizeof(z_type)));
// Assuming M >= N 
dx=sqrt(2.*M_PI/M);
dy=sqrt(2.*M_PI/N);
DO(m,M){ x=dx*(m-M/2.);
DO(n,N){ y=dy*(n-N/2.); if(.3*x*x+.2*y*y >2.1) A[n*M+m]=0.; else A[n*M+m]=1.; 
if(fabs(x)<.8 && fabs(y+1.7)<.3 )   A[n*M+m]-=1.;
if( (fabs(x-1.)<.3 || fabs(x+1.)<.3 ) && fabs(y-.8)<.2 )   A[n*M+m]-=1.;
}}
// Fourier:
 DO(m,M){ DO(n,N) b[n]=A[n*M+m]; fafo(b,N,1); DO(n,N) A[n*M+m]=b[n]; }
 DO(n,N){ DO(m,M) b[m]=A[n*M+m]; fafo(b,M,1); DO(m,M) A[n*M+m]=b[m]; }
DO(m,M){ x=dx*(m-M/2.);
DO(n,N){ y=dy*(n-N/2.); s=x*x+y*y; A[n*M+m]*=exp(-.04*s); }} 
 DO(m,M){ DO(n,N) b[n]=A[n*M+m]; fafo(b,N,-1); DO(n,N) A[n*M+m]=b[n]; }
 DO(n,N){ DO(m,M) b[m]=A[n*M+m]; fafo(b,M,-1); DO(m,M) A[n*M+m]=b[m]; }
fprintf(o,"gsave\n");
fprintf(o,"%2d %2d scale\n",M,N);
fprintf(o,"%2d %2d 4 [%2d 0 0 %2d 0 %2d]\n<", M,N,M,-N,N);
s=0; DO(m,M)  DO(n,N){ t=abs(A[n*M+m]); if(t>s) s=t; }
s=15./s;
for(n=N-1;n>=0;n--) { fprintf(o,"\n");
DO(m,M){ fprintf(o,"%1x",int(s*abs(A[n*M+m])+.6) );
      }}
fprintf(o,"\n>\n");
fprintf(o,"image\n");
free(A);
fprintf(o,"grestore\n");
#define M(x,y) fprintf(o,"%6.3f %6.3f M\n",0.+x,0.+y);
#define L(x,y) fprintf(o,"%6.3f %6.3f L\n",0.+x,0.+y);
M(M/2.+.5,-1); L(M/2+.5,N+1);
M(-1,N/2.+.5); L(M+1,N/2.+.5);
fprintf(o,"1 0 0 RGB .1 W S\n");
fprintf(o,"showpage\n%c%cTrailer\n",'%','%'); fclose(o); 
system("epstopdf fafo2test2.eps");
system( "convert fafo2test2.eps fafo2test2.gif");
system( "convert fafo2test2.eps fafo2test2.png");
system(   "open fafo2test2.png");
}

Resulting EPS

%!PS-Adobe-2.0 EPSF-2.0

%%BoundingBox: 0 0 642 642

/M {moveto} bind def
/L {lineto} bind def
/S {stroke} bind def
/s {show newpath} bind def
/C {closepath} bind def
/F {fill} bind def
/o {.1 0 360 arc C S} bind def
/times-Roman findfont 20 scalefont setfont
/W {setlinewidth} bind def
/RGB {setrgbcolor} bind def
1 1 translate
10 10 scale
gsave
64 64 scale
64 64 4 [64 0 0 -64 0 64]
<
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000001111100000000000000000000000000000
0000000000000000000000000000123444321000000000000000000000000000
0000000000000000000000000002469bbb964200000000000000000000000000
00000000000000000000000000259cdeeedc9520000000000000000000000000
000000000000000000000000025adfffffffda52000000000000000000000000
000000000000000000000000149dfffffffffd94100000000000000000000000
00000000000000000000000026cefffffffffec6200000000000000000000000
00000000000000000000000149dfffffffffffd9410000000000000000000000
0000000000000000000000026ceeccefffecceec620000000000000000000000
0000000000000000000000139dec88cfffc88ced931000000000000000000000
000000000000000000000014befc88cfffc88cfeb41000000000000000000000
000000000000000000000014befeccefffeccefeb41000000000000000000000
000000000000000000000014bfffffffffffffffb41000000000000000000000
000000000000000000000014befffffffffffffeb41000000000000000000000
000000000000000000000014befffffffffffffeb41000000000000000000000
0000000000000000000000139dfffffffffffffd931000000000000000000000
0000000000000000000000026cfffecbbbcefffc620000000000000000000000
00000000000000000000000149effc85558cffe9410000000000000000000000
00000000000000000000000026cefc85558cfec6200000000000000000000000
000000000000000000000000149dfecbbbcefd94100000000000000000000000
000000000000000000000000025adeeeeeeeda52000000000000000000000000
00000000000000000000000000259cdeeedc9520000000000000000000000000
0000000000000000000000000002469bbb964200000000000000000000000000
0000000000000000000000000000123444321000000000000000000000000000
0000000000000000000000000000001111100000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
>
image 
grestore
32.500 -1.000 M
32.500 65.000 L
-1.000 32.500 M
65.000 32.500 L
1 0 0 RGB .1 W S
showpage

%%Trailer

Keywords

References

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeThumbnailDimensionsUserComment
current17:50, 20 June 2013Thumbnail for version as of 17:50, 20 June 2013642 × 642 (6 KB)Maintenance script (talk | contribs)Importing image file

The following page uses this file: