Вы находитесь на странице: 1из 5

1

Programaci n del algoritmo SIFT o


Delfn M rquez Josafat Esa a u Ing. en Mecatr nica o
I. I NTRODUCCI ON El procesamiento digital de im genes tiene una amplia gama a de m todos para resolver problemas de computer vision coe mo reconocer, clasicar y detectar ciertas caractersticas de im genes. El ajuste de imagen tambi n llamado image matching a e es de igual forma otro aspecto de varios problemas en computer vision. En el presente trabajo se muestra el algoritmo del m todo e Scale Invariant Feature Transformation tambi n llamado SIFT e para el reconocimiento de im genes en donde el problema cona siste en detectar los puntos donde las caractersticas sean invari antes al escalamiento, rotaci n, iluminaci n adem s de vistas o o a en 3D [1]. Se presenta el m todo sift para la extracci n de caractersticas e o distintivas e invariantes co las que se puede encontrar la correspondencia entre diferentes vistas de un objeto en la escena. La metodologa para realizar este an lisis se menciona a con a tinuaci n: o 1. Detecci n de extremos mediante el espacio-escala: Los o puntos de inter s son invariantes a la escala y a la orie entaci n por lo que se obtienen mediante el uso de la funo ci n de diferencia gaussiana. o 2. Localizaci n del punto de inter s: Estos puntos se deo e terminan en base a su estabilidad que presenten despu s e de un escalamiento, este an lisis se hace en lo pixeles en a comparaci n de los pixeles vecinos, los que se mantienen o durante el escalamiento entonces le llamaremos punto de inter s. e 3. Asignaci n de la orientaci n:Ya determinados los puno o tos de inter s de la imagen, se les asigna una orientaci n a e o cada pixel de acuerdo a la direcci n gradiente y a la zona o que rodea a dicho pixel. 4. Descriptor de los puntos de inter s: Los gradientes loe cales de la imagen son medidos en la escala seleccionada en la regi n de cada punto de inter s. Estos son transforo e mados a una representaci n que permita cambios de iluo minaci n y niveles peque os de variaci n en la imagen, el o n o descriptor est basado en el c lculo de la magnitud y oria a entaci n del primer gradiente para cada punto gradiente de o la imagen en la region alrededor de la ubicaci n del punto o de inter s. e La imagen a utilizar se muestra en la Figura II. D ETECCI ON
DE EXTREMOS MEDIANTE EL ESPACIO - ESCALA

Lugo Villeda Manuel Alejandro Ing. en Mecatr nica o

B ez Golubowski Gustavo Iaroslav a Ing. en Electromec nica a

dada la imagen I(x, y) se ltra mediante el ltro Gaussiano G(x, y, ) en donde nalmente se obtiene una nueva imagen L(x, y, ) producto de la convoluci n de la imagen original y la o imagen ltrada. Donde: 1 G (x, y, ) = 2 x2 + y 2 2 2 (1)

Haciendo uso del espacio escala para la diferencia de la funci n Gaussiana convolucionada con la imagen se tiene que: o D(x, y, ) = (G(x, y, k) G(x, y, )) I(x, y) = L(x, y, k) L(x, y, ) (2) (3)

por lo que se obtiene el espacio escala con el ltrado de la imagen:

Figura 1. Imagen escalada con ltro Gaussiano

Figura 2. Imagen con diferencia Gaussiana

En este primer paso se obtienen los puntos de inter s usando e un enfoque de cascada de ltros Gaussianos usando algoritmos ecientes que identiquen las ubicaciones candidatas que ser n a examinadas con m s detalle, debido a que la funci n Gaussiana a o es invariante al espacio escala, se aplica esta funci n en donde o
Scale Invariant Feature Transformation

Ahora bien la detecci n de la extrema local est denida por o a la comparaci n de cada pixel con 8 vecinos en la imagen actual, o 9 vecinos en la escala de arriba y nueve vecinos en la escala de abajo y se toma el pixel si es mas grande que todos los pixeles vecinos, a este pixel le llamamos punto de inter s, los cuales son e candidatos a puntos de inter s nales ya que es necesario hacer e una discriminaci n por algunos puntos que son inestables en la o imagen. En la siguiente imagen se muestra la imagen original y la imagen con 1634 puntos de inter s totales, sin discriminaci n. e o

T r(H)2 (r + 1)2 < Det(H) r

(8)

Donde el r = 10 y se eliminar n los puntos que no sean de a inter s que tengan un umbral por encima de 10. e Finalmente se hizo la localizaci n de los puntos de inter s o e con discriminaci n a lo largo de las orillas y bajo contraste de o la imagen en cuesti n, que se muestran en la Figura 4. Se eno contraron 407 puntos de inter s, esta es la primer imagen de la e primer octava con los puntos de inter s. e
Figura 3. Imagen con puntos de inter s sin discriminaci n e o

III. D ISCRIMINACI ON

DE PUNTOS DE INTER E S

Una vez se tengan localizados los puntos clave candidatos, el siguiente paso es realizar un ajuste detallado de los datos en las inmediaciones para la localizaci n, escala y proporci n entre o o las curvaturas principales. Esta informaci n permite rechazar o los puntos que tengan bajo contraste (sensibles al ruido) o est n e localizados a lo largo de las orillas. Como primer paso se ajusta una funci n cuadr tica en 3D mediante la expansi n de Taylor a o a o la funci n del espacio escala D(x, y, ) para localizar el m xio a mo interpolado en donde D y sus derivadas son evaluadas en un punto y x(x, y, )T es la compensaci n de ese punto. Ahora o bien el c lculo de el extremo x esta denido como: a x= 2 D1 D x2 x (4)

Figura 4. Imagen con puntos de inter s con discriminaci n e o

IV. A SIGNACI ON

DE LA ORIENTACI ON

El valor de la funci n del extremo, D(x) es util para rechazar o el extremo inestable de bajo contraste. Esto se puede calcular mediante : D() = D + x 1 DT x 2 x (5)

El valor de |D(x)| es menor que 0,03 . Ya discriminado el extremo inestable de bajo contraste ahora se hace la discriminaci n de los bordes u orillas, por lo que basados en la matriz o Hessiana H la cual se dene como: H= Dxx Dxy Dyx Dyy (6)

en donde los eigenvalores de la matriz H son que es el eigenvalor mayor y el eigenvalor menor estos son proporcionales a la curvatura principal de D y la traza se dene como T r(H) = + que es la suma de la diagonal de la matriz y el determinante de la matriz se dene como H = . Ahora bien sea r el radio entre la magnitud del eigenvalor m ximo a y el eigenvalor mnimo y por lo tanto se dene como = r. Entonces: (r + 1)2 T r(H)2 = Det(H) r
2

Un punto clave puede obtener invariancia a la rotaci n si se o toman en cuenta las propiedades locales de la imagen. Para esto se obtiene la magnitud y la orientaci n del gradiente aplicando o la diferencias entre pixeles. Se crea un histograma para cada orientaci n posible y si existen m ltiples picos cercanos al pico o u m ximo (entre el 80 y 100 %), entonces se tendr n m ltiples a a u puntos clave en el mismo lugar pero con orientaci n diferente. o Para cada punto de inter s se obtiene una matriz de 16 16 e el cual se ubica en la posici n (9, 8) dentro de la matriz. Para o cada pixel que no est en la orilla se obtiene un gradiente a lo e largo de los ejes x, y. Utilizando los gradientes se obtiene la norma y su angulo teniendo especial cuidado el cuadrante en donde caiga la norma. Los angulos se normalizan a m ltiplos u de 10 para obtener un histograma de 36 orientaciones diferentes el cu l se pondera con la magnitud de cada gradiente. El valor a m ximo dentro del histograma nos da la orientaci n principal. a o En la siguiente gura se observa el proceso para la obtenci n o del histograma de orientaci n. o

(7)

Figura 5. Proceso para la obtenci n del histograma de orientaci n o o

La cantidad (r+1) es el mnimo cuando los eigenvalores son r iguales y se incrementa con el radio r. Por lo tanto el radio de la curvatura principal est por debajo de el umbral r y solo se a debe cumplir lo siguiente:

V. D ESCRIPTOR DEL PUNTO

DE INTER E S

La matriz de 16 16 que se hace para cada punto de inter s e se divide en cuatro submatrices, a cada una de estas se le aplica

un procedimiento similar al descrito en apartado anterior para encontrar las magnitudes y angulos de los gradientes, posteri ormente se obtiene la diferencia entre los angulos locales y el angulo principal del gradiente total de la matriz. Las nuevas ori entaciones se distribuyen en un arreglo de 8 elementos de tal manera que los angulos se agrupan de 45 en 45 . Las magni tudes locales de cada submatriz se acumulan en el arreglo dada su orientaci n. Esto se hace para cada submatriz generando 16 o arreglos de 8 elementos que es la matriz del descriptor. Esta matriz se guarda en una estructura de acuerdo a su punto de inter s. e VI. E XPERIMENTOS Y
RESULTADOS

Se realizaron diversos experimentos utilizando la misma imagen del Che, en la imagen 6(a) se puede observar que se a adieron un par de objetos a la misma imagen adem s que n a se le aplic una rotaci n y un escalamiento, en la imagen 6(b) o o se aplic una oclusi n, en la imagen 6(c) se tiene la imagen o o original con los puntos de inter s, se realiz la b squeda de e o u correspondencia de los puntos de inter s en las im genes con e a escalamientos rotaciones y oclusiones con la imagen original. Se obtuvieron 5 correspondencias con un umbral de 0.8, para la segunda imagen se encontraron 77 correspondencias con el mismo umbral.

Figura 7. Imagen original sobre una escena

(a) Imagen rotada y escalada con objetos

(b) Imagen con oclusi n o

gunos par metros clave (e.g. ) que no concuerdan con las dea scripciones del artculo original y fue necesario consultar otras fuentes para poderlo denir. Algunos de los par metros que se a utilizan, simplemente se denen por el autor original y no tienen argumentos fuertes para respaldar su conveniencia. Al nal nos dimos cuenta que la programaci n fue complicao da, ya que eran muchos los pasos necesarios para poder encontrar los descriptores. El paradigma de encontrar correspondencia entre objetos utilizando pixeles aislados nos parece que no es el m s eciente. a Hemos pensado c mo es que nosotros los humanos podemos o reconocer objetos con oclusiones y transformaciones, llegando a la conclusi n de que es porque conocemos al objeto en su o totalidad, i. e., tenemos un mapa mental en 3D. Pero entonces el problema es: c mo hacer que un ordenador tenga la misma o habilidad? R EFERENCIAS
[1] D. G. Lowe, Distinctive image features from sacale-invariant keypoints, International Journal of Computer Vision, 2004.

(c) Imagen con puntos de inter s discriminados e Figura 6.

En otro experimento se combin la imagen del Che sobre otra o imagen como se muestra en la Figura y se encontr una correo spondencia de 8 descriptores usando un umbral de 200, considerar que no se normalizaron las matrices de los descriptores, a diferencia de los resultados anteriores presentados. VII. C ONCLUSIONES Al principio el algoritmo pareca relativamente sencillo de programar, sin embargo, a la hora de programarlo se obviaron todas las ambig edades del artculo [1]. Existen alu

A NEXOS Programaci n del SIFT en MATLAB R2010a. o


%Leer imagen I=imread(che2.jpg); %Convertir imagen a escala de grises I=rgb2gray(I); %Obtencin de Primera octava o [Im81,DoG1,sigma1]=DifoGau(I,1); %Obtencin de Segunda octava o I2=tam(Im81(:,:,5)); [Im82,DoG2,sigma2]=DifoGau(uint8(I2),2); %Obtencin de Tercera octava o I3=tam(Im82(:,:,5)); [Im83,DoG3,sigma3]=DifoGau(uint8(I3),3); %Seleccin de keyspoints 1ra octava o [keysp11,keysp12,keysp13,keysp]=keypoints(DoG1,I,4); %Seleccin de keyspoints 2da octava o [keysp21,keysp22,keysp23]=keypoints(DoG2,I2,5); %Seleccin de keyspoints 3ra octava o [keysp31,keysp32,keysp33]=keypoints(DoG3,I3,6); %Descriptores de la matriz 1 en la 1ra octava [keysOr11,KPstruct11]=orientacion(keysp11,2,Im81,sigma1); %Descriptores de la matriz 2 en la 1ra octava [keysOr12,KPstruct12]=orientacion(keysp12,3,Im81,sigma1); %Descriptores de la matriz 3 en la 1ra octava [keysOr13,KPstruct13]=orientacion(keysp13,4,Im81,sigma1); %Descriptores de la matriz 1 en la 2da octava [keysOr21,KPstruct21]=orientacion(keysp21,2,Im82,sigma2); %Descriptores de la matriz 2 en la 2da octava [keysOr22,KPstruct22]=orientacion(keysp22,3,Im82,sigma2); %Descriptores de la matriz 3 en la 2da octava [keysOr23,KPstruct23]=orientacion(keysp23,4,Im82,sigma2); %Descriptores de la matriz 1 en la 3ra octava [keysOr31,KPstruct31]=orientacion(keysp31,2,Im83,sigma3); %Descriptores de la matriz 2 en la 3ra octava [keysOr32,KPstruct32]=orientacion(keysp32,3,Im83,sigma3); %Descriptores de la matriz 3 en la 3ra octava [keysOr33,KPstruct33]=orientacion(keysp33,4,Im83,sigma3); -------------------------------------------------------------------------------function [Im8,DoG,sigma]=DifoGau(I,fig) k=2(1/3);%factor de escalamiento de sigma Im8=zeros(size(I,1),size(I,2),6); sigma=zeros(6,1); for i=0:5 gau=fspecial(gaussian,5,1.6*k(i));%filtro gaussiano de 5X5 sigma(i+1,1)=1.6*k(i); j=i+1; Im8(:,:,j)=imfilter(I,gau);%Aplicacin de filtro o figure(fig) subplot(2,6,j);imshow(uint8(Im8(:,:,j))) end end end end

keysp1=vertcat(keysp1,[x y]); end

end end figure(fig);subplot(1,3,1) imshow(uint8(I)) hold on scatter(keysp1(:,2),keysp1(:,1),1,.,w) %Se repite para las siguientes capas %Segundas tres diferencias keysp2=[0 0]; z=3; for y=2:size(DoG,2)-1 for x=2:size(DoG,1)-1

mat1=DoG(x-1:x+1,y-1:y+1,z-1); vector=[DoG(x-1,y-1,z);DoG(x,y-1,z);DoG(x+1,y-1,z);DoG(x-1,y,z);DoG(x+1,y,z);DoG(x-1,y+1,z);D mat3=DoG(x-1:x+1,y-1:y+1,z+1);

if DoG(x,y,z)>max(max(mat1)) || DoG(x,y,z)<min(min(mat1)) && DoG(x,y,z)>max(vector) || DoG(x, [Dx,traza]=derivada(DoG,x,y,z); if Dx>0.03 && traza<um keysp2=vertcat(keysp2,[x y]); end end

figure(fig);subplot(1,3,2) imshow(uint8(I)) hold on scatter(keysp2(:,2),keysp2(:,1),1,.,w) %Terceras tres diferencias keysp3=[0 0]; z=4; for y=2:size(DoG,2)-1 for x=2:size(DoG,1)-1

mat1=DoG(x-1:x+1,y-1:y+1,z-1); vector=[DoG(x-1,y-1,z);DoG(x,y-1,z);DoG(x+1,y-1,z);DoG(x-1,y,z);DoG(x+1,y,z);DoG(x-1,y+1,z);D

if DoG(x,y,z)>max(max(mat1)) || DoG(x,y,z)<min(min(mat1)) && DoG(x,y,z)>max(vector) || DoG(x, [Dx,traza]=derivada(DoG,x,y,z); if Dx>0.03 && traza<um keysp3=vertcat(keysp3,[x y]); end end

end end figure(fig);subplot(1,3,3) imshow(uint8(I)) hold on scatter(keysp3(:,2),keysp3(:,1),1,.,w) end

-------------------------------------------------------------------%Orientacin global o function [keysOr,KPstruct]=orientacion(keysp,z,Im8,sigma) mag=0; or=0; descrip=zeros(16,8); tam=size(keysp,1); DoG=zeros(size(I,1),size(I,2),5); Histo(36,tam)=0; for k=1:5 keysOr=[keysp zeros(tam,1)]; DoG(:,:,k)=Im8(:,:,k)-Im8(:,:,k+1);%Diferencias de gaussianas gau=fspecial(gaussian,18,1.5*sigma(z));%filtro gaussiano de 18X18 figure(fig) for k=1:tam subplot(2,6,k+6);imshow(DoG(:,:,k)) x=keysp(k,2); end y=keysp(k,1); cont=1; end KPstruct(k).Descripor=descrip;%Arreglo para descriptores if (x-9)>=1 && (y-8)>=1 && (x+8)<=size(Im8,2) && (y+9)<=size(Im8,1) ------------------------------------------------------------------matriz=Im8(y-8:y+9,x-9:x+8,z);%Matriz de 16X16 for j=2:size(matriz,1)-1 %reduccin del tamao de la imagen a la mitad o n for i=2:size(matriz,2)-1 function [res]=tam(I) gx=matriz(j,i+1)-matriz(j,i-1);%Gradiente en x res=I(1:2:size(I,1),1:2:size(I,2));%quitar renglones y columnas para reducir tamao n gy=matriz(j+1,i)-matriz(j-1,i);%Gradiente en y end if gx==0 && gy==0 -----------------------------------------------------------------------------mag(i,j,k)=0; o=0; function [keysp1,keysp2,keysp3,keysp]=keypoints(DoG,I,fig) continue; keys=zeros(size(DoG,1),size(DoG,2),1); end imk=zeros(size(DoG,1),size(DoG,2),1); m=(gx2+gy2)0.5;%magnitud del gradiente keysp1=[0 0]; mag(i,j,k)=m; keysp=[0 0]; o=atan(gy/gx);%orientacin del gradiente o %Primeras tres diferencias o=radtodeg(o); z=2; if gx>0 && gy>0 r=10;%radio para umbral en las orillas o=o; um=(r+1)2/r;%umbral elseif gx>0 && gy<0 for y=2:size(DoG,2)-1 o=360+o; for x=2:size(DoG,1)-1 elseif gx<0 && gy>0 o=180+o; mat1=DoG(x-1:x+1,y-1:y+1,z-1);%primera capa elseif gx<0 && gy<0 vector=DoG(x-1:x+1,y-1:y+1,z);%segunda capa o=180+o; mat3=DoG(x-1:x+1,y-1:y+1,z+1);%tercera capa elseif gx==0 && gy<0 o=360+o; %Mximos y mnimos a end if DoG(x,y,z)>max(max(mat1)) || DoG(x,y,z)<min(min(mat1)) && DoG(x,y,z)>max(max(vector)) || DoG(x,y,z)<min(min(vector)) && DoG(x,y,z)>max(max(mat3)) || DoG(x,y,z)<min(min(mat3)); or(i,j,k)=10*round(o/10); keysp=vertcat(keysp,[x y]); valor=ceil(or(i,j,k)/10); %clculo de derivada para gradiente y Hessiana a if valor ==0 [Dx,traza]=derivada(DoG,x,y,z); valor=1; %Discriminacin o end if Dx>0.03 && traza<um

Histo(valor,k)=Histo(valor)+m*gau(j,i);%Creacin de histograma o end end [C,I]=max(Histo(:,k));%Mximo pico en el histograma a [descrip]=or_locales(matriz,I,sigma,z);%clculo de orientaciones locas a KPstruct(k).Descripor=descrip; for c=1:36 if C == 0 continue; elseif Histo(c,k)>=0.8*C Orien(cont)=c*10; cont=cont+1; else continue; end end KPstruct(k).Orientacion=Orien; keysOr(k,3)=I*10; end end end

end end aux

------------------------------------------------------------

% Orientaciones locales para matrices de 4X4 function [descrip]=or_locales(matriz,I,sigma,z) matricita(:,:,1)=matriz(1:6,1:6); matricita(:,:,2)=matriz(1:6,5:10); matricita(:,:,3)=matriz(1:6,9:14); matricita(:,:,4)=matriz(1:6,13:18); matricita(:,:,5)=matriz(5:10,1:6); matricita(:,:,6)=matriz(5:10,5:10); matricita(:,:,7)=matriz(5:10,9:14); matricita(:,:,8)=matriz(5:10,13:18); matricita(:,:,9)=matriz(9:14,1:6); matricita(:,:,10)=matriz(9:14,5:10); matricita(:,:,11)=matriz(9:14,9:14); matricita(:,:,12)=matriz(9:14,13:18); matricita(:,:,13)=matriz(13:18,1:6); matricita(:,:,14)=matriz(13:18,5:10); matricita(:,:,15)=matriz(13:18,9:14); matricita(:,:,16)=matriz(13:18,13:18); descrip=zeros(16,8); g=fspecial(gaussian,6,0.5*sigma(z));%filtro gaussiano for mat=1:16 histlo=zeros(1,8); matricita(:,:,mat)=imfilter(matricita(:,:,mat),g);%aplicacin de filtro o for j=2:size(matricita,1)-1 for i=2:size(matricita,2)-1 gx=matricita(j,i+1,mat)-matricita(j,i-1,mat);%gradiente en x gy=matricita(j+1,i,mat)-matricita(j-1,i,mat);%gradiente en y if gx==0 && gy==0 m=0; o=0; continue; end m=(gx2+gy2)0.5;%magnitud de gradiente o=atan(gy/gx);%orientacin del gradiente o o=radtodeg(o); if gx>0 && gy>0 o=o; elseif gx>0 && gy<0 o=360+o; elseif gx<0 && gy>0 o=180+o; elseif gx<0 && gy<0 o=180+o; elseif gx==0 && gy<0 o=360+o; end ang=o-I*10; if ang < 0 ang=360+ang; end valor=ceil(ang/45); if valor == 0 valor=1; end histlo(valor)=histlo(valor)+m;%generacin del histograma o descrip(mat,:)=histlo; end end end descrip=descrip/max(max(descrip)); end

-------------------------------------------------------------------m=size(KPstruct13,2); n=size(KPstruct13Copy,2); aux=0; difnorm=zeros(n,1); for i=1:m uno = KPstruct13(i).Descripor; for j=1:n dos = KPstruct13Copy(j).Descripor; diferencia=norm(uno-dos); difnorm(j)=diferencia; end diftot=min(difnorm); if diftot==0 continue; elseif diftot < 0.8 aux=aux+1;

Вам также может понравиться