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