Академический Документы
Профессиональный Документы
Культура Документы
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)
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
(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)
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)
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:
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.
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.
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
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
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
-------------------------------------------------------------------%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
------------------------------------------------------------
% 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;