Está en la página 1de 4

INSTITUTO NACIONAL DE ASTROFÍSICA, ÓPTICA Y ELECTRÓNICA 1

Implementación del algoritmo Gerchberg-Saxton para


recuperacion de fase
Alejandro Sánchez Ortega
asortega@inaoep.mx

1. Introducción (x, y) es la intensidad, nivel de gris o brillo de la


imagen en ese punto.
La información de fase de una onda electro-
magnética es un parámetro que no puede medirse
fı́sicamente. En fenómenos fı́sicos donde la fase se 3. Implementación del algoritmo
ve alterada por algún tipo de modulación, resulta Gerchberg-Saxton en Matlab
interesante poder recuperarla para ası́ describir la
Se implemento el algoritmo Gerchberg-Saxton
funcion de onda en su forma completa. A este
(GB) en MATLAB, se utilizaron diferentes imáge-
proceso se le conoce como el problema de recu-
nes de entrada para probar el rendimiento. Cada
peración de fase[1].
pı́xel de la imagen representa un punto de mues-
El algoritmo Gerchberg-Saxton[2] fue la pri-
treo.
mera solución eficiente a este problema. El algo-
El algoritmo iterativo GS utiliza como base el
ritmo alterna entre la transformada de Fourier y
echo de que el patrón de difracción de un frente de
su inversa, utilizando las amplitudes de entrada
onda se puede calcular mediante la TF de dicho
en cada iteración para mejorar las estimaciones
frente, y viceversa, el frente de onda se puede
de fase. Como se usan las estimaciones de fase,
recuperar al aplicar la ITF al patrón de difracción
siempre hay un nivel de error involucrado.
[2]. Para aplicar este método se necesita conocer
Se implemento un código en Matlab para ex- parte de la información del frente de onda en estos
perimentar y observar la eficacia del algoritmo. dos planos, objeto y difracción. Esta información
actuara como restricciones para el campo en cada
2. Transformada de Fourier e imáge- plano. La información conocida puede ser la am-
plitud o la fase del frente de onda en cada plano.
nes digitales Para iniciar el algoritmo se necesita una fun-
La transformada de Fourier (TF) es una herra- cion de fase propuesta φ0 (x, y), tal que el plano
mienta importante dentro del procesamiento digi- objeto queda definido como:
tal de imágenes. Cuando a una imagen localizada
en el dominio espacial se le aplica la TF, se obtiene g0 (x, y) = eφ0 (x,y) . (1)
otra imagen, pero en el dominio de Fourier. Cada 1. Se establece que:
punto de la imagen en el dominio de frecuencias
representa una frecuencia particular contenida en g(x, y) = g0 (x, y). (2)
el dominio del espacio.
2. Se calcula la TF de la funcion g(x, y) para
La imagen de entrada puede entenderse como obtener G(u, v) en el plano de difracción:
una función discreta en dos dimensiones f (x, y), y
la amplitud de f en cualquier par de coordenadas F{g(x, y)} = |G(u, v)|eΦ(u,v) (3)
INSTITUTO NACIONAL DE ASTROFÍSICA, ÓPTICA Y ELECTRÓNICA 2

3. Se aplica la restricción en el plano de Fou-


rier sustituyendo la amplitud del campo
obtenido |G(u, v)| por por la imagen que
se quiere obtener F (u, v) y se conserva la
fase obtenida.

G0 (u, v) = |F (u, v)|eΦ(u,v) . (4)

4. Se calcula la ITF (transformada inversa Figura 2: Holograma reconstruido con 5 iteracio-


de Fourier) de la funcion G0 (u, v) para nes y con un error de 0.5877.
obtener g 0 (x, y) en el plano objeto:

F −1 {G0 (u, v)} = |g 0 (x, y)|eφ(x,y) . (5)

5. Se ignora la amplitud y solo se conserva


la fase φ(x, y).

g(x, y) = eφ(x,y) . (6)

6. El ciclo se repite desde el paso 1.


Figura 3: Holograma reconstruido con 20 iteracio-
Estos pasos se repiten varias veces hasta que nes y con un error de 0.3393.
cuando se aplica la TF a la fase de entrada se
obtiene una amplitud muy parecida a la imagen
del plano objeto.

4. Resultados obtenidos

Se evaluó el algoritmo con dos imágenes de


entrada diferentes, la primera de 274×274 pı́xeles
y la segunda de 512×512, ambas en escala de
grises y en formato png . Se calculo el error entre Figura 4: Holograma reconstruido con 100 itera-
la imagen de entrada y el holograma reconstruido. ciones y con un error de 0.1630.
Dichos resultados se muestra a continuación.

Figura 1: Imagen de entrada. Figura 5: Imagen de entrada.


INSTITUTO NACIONAL DE ASTROFÍSICA, ÓPTICA Y ELECTRÓNICA 3

(amigos) para 1500 o mas iteraciones el error se


redujo solo a 0.0245.
Esta simulación numérica se debió haber com-
plementado con una visita al laboratorio. La fase
obtenida se tenia que desplegar en una pantalla
de cristal liquido, iluminarla con un láser y con
ayuda de una lente positiva hacer la transforma-
da de Fourier y comparar los resultados con los
obtenidos en esta simulación.
Figura 6: Holograma reconstruido con 5 iteracio-
nes y con un error de 0.3560.
6. Apéndice
Código en Matlab
1 clear ; clc ; close a l l
2 N = 512;
3 dx = 2E− 6;
4 ds=1/dx ; ;
5 %E s p a c i o de c o o r d e n a d a s c a r t e s i a n a s
6 n1 = [ −N/ 2 :N/2 − 1] ∗ dx ;
7 x = repmat ( n1 , N, 1 ) ;
8 y = x ’;
9 %E s p a c i o de c o o r d e n a d a s f r e c u e n c i a l e s
10 N1=N;
11 ds2=ds /N1 ;
Figura 7: Holograma reconstruido con 20 iteracio- 12 n2 = [ − N1 / 2 : N1/2 − 1] ∗ ds2 ;
13 u = repmat ( n2 , N1 , 1 ) ;
nes y con un error de 0.1958.
14 v = u ’ ;
15 %Coordenadas f r e c u e n c i a l e s
16 v0 =0.25 ∗ ds ;
17 u0 =0.50 ∗ ds ;
18 %Codigo para mostrar e l o b j e t o de e n t r a d a %
19 M = imread ( ’ we1 . png ’ , ’ png ’ ) ;
20 imgray=r g b 2 g r a y (M) ;
21 M=M( : , : , 1 ) ;
22 M=d o u b l e (M) ;
23 [ ny , nx]= s i z e (M)
24 F=zeros (N,N) ;
25 F(N/2 − (nx / 2 ) +1:N/2+nx / 2 ,N/2 − (ny / 2 ) +1:N/2+ny
/ 2 ) = M;
26 F=F/max(max(F) ) ;
27 I o=F . ∗ conj (F) ;
28 promobj1=mean( I o ) ;
Figura 8: Holograma reconstruido con 100 itera- 29 promobj2=mean( promobj1 )
ciones y con un error de 0.0982. 30 f i g u r e
31 colormap ( gray ( 2 5 5 ) ) ;
32 image ( ( abs ( 2 5 6 ∗ F) ) ) ;
33 axis on

5. Conclusión 34 xlabel ( ’ p i x e l e s ’ ) , ylabel ( ’ p i x e l e s ’ )


35 t i t l e ( ’ Objeto de r e f e r e n c i a ’ )
El método de recuperación de fase a partir del 36 f a s e =2∗ pi ∗ ( ( u0 ∗ x ) +(v0 ∗ y ) ) ;
37 R=exp ( i ∗ f a s e ) ;
algoritmo GB tuvo buen desempeño al momento
38 a=input ( ’ N m e r o de i t e r a c i o n e s : ’);
de obtener la fase de una imagen de entrada. Con 39 d i f =0;

forme el numero de iteraciones fue mayor el error 40 f o r j =1: a


41 i f j <=1;
entre el holograma y la imagen de entrada fue 42 t=R;
menor. Al hacer varias pruebas se observo que 43 else
para 700 o mas iteraciones en la primer ima- 44 t=f i n a l ;
45 end
gen (escudo del INAOE) el error se redujo solo 46 %Transformada de F o u r i e r
a 0.0920. Mientras que para la segunda imagen 47 TFi=( f f t 2 ( t ) ) ;
INSTITUTO NACIONAL DE ASTROFÍSICA, ÓPTICA Y ELECTRÓNICA 4

48 %Termino de f a s e tome el valor de la fase obtenida en el primer ciclo


49 f a s e i=angle ( TFi ) ; y se repite todo el ciclo nuevamente.
50 %Se s u s t i t u y e l a a m p l i t u d por l a imagen
51 n u e v a i=F . ∗ exp ( i ∗ f a s e i ) ; Se establece un numero de iteraciones a que
52 %Transformada de F o u r i e r i n v e r s a el usuario tiene que especificar. Una vez que se
53 ITFi=( i f f t 2 ( n u e v a i ) ) ;
54 %Nuevo t e r m i n o de f a s e
terminan todos los ciclos se calcula la TF a la fase
55 f a s e 1 i=angle ( ITFi ) ; resultante. Se obtiene el promedio de su intensidad
56 f i n a l=exp ( i ∗ f a s e 1 i ) ; y se compara con la imagen de entrada.
57 end
58 T F f i n a l =( f f t 2 ( f i n a l ) ) ;
59 T F f i n a l=T F f i n a l /max(max( T F f i n a l ) ) ;
60 I r=T F f i n a l . ∗ conj ( T F f i n a l ) ;
Referencias
61 promholo1=mean( I r ) ; [1] G. Taylor, The Phase Problem. Acta Crystallogr. D59:11
62 promholo2=mean( promholo1 ) (2003), pp. 1881–1890.
63 d i f=promobj2 −promholo2 [2] R. W. Gerchberg and W. O. Saxton, A Practical Algo-
64 figure rithm for the Determination of Phase from Image and
65 colormap ( gray ( 2 5 5 ) ) ; Diffraction Plane Picture, Optik 35:2 (1982), pp. 237–246.
66 imagesc ( abs ( f a s e 1 i ) ) ;
67 t i t l e ( ’ Fase de e n t r a d a ’ )
68 figure
69 colormap ( gray ( 2 5 5 ) ) ;
70 imagesc ( abs ( T F f i n a l ) ) ;
71 t i t l e ( ’ Transformada de F o u r i e r de l a f a s e de
entrada ’ )

En las primeras 17 lineas del código implemen-


tado se definen los espacios objeto y de Fourier (los
que ya de habı́an definido en clase). De la linea
19 a 35 se trabaja con la imagen de entrada, se
define el tamaño, ası́ como su intensidad. Se usa el
comando mean() para obtener el valor promedio
de intensidad. En la linea 36 y 37 se define la
funcion de fase inicial R, en este caso una onda
plana inclinada. De la linea 40 a 56 se define el
ciclo iterativo, para ello se utiliza un ciclo f or y el
condicional if y else.
El ciclo inicia en j = 1 y la condición j <= 1,
como se cumple la condición t toma el valor de la
fase de entrada. Se calcula la TF con el comando
f f t2(); se selecciona únicamente la fase con el
comando angle() y se sustituye la amplitud por
la imagen. Cuando se aplica el comando angle()
la fase se vuelve una cantidad real, por lo que la
nueva funcion debe escribirse como:

nuevai = F. ∗ exp(i ∗ f asei),

con f asei el termino de fase calculado con angle()


y F la imagen de entrada.
A esta nueva funcion se le calcula ITF con
ayuda del comando if f t2. De igual forma se se-
lecciona el termino de fase y se expresa como el
de la ecuación anterior. Se termina el primer ciclo
y ahora j = 2, como no se cumple la condición
j <= 1, entonces el condicional else hace que t

También podría gustarte