# Cosas temporales para cursos

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)

sobre image annotation [1] acceso a la toolbox de matlab [2] dentro del sitio [3]

[n m]=size(gt);

im_u=zeros(size(x));

for l=1:n_ciclos %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%positivas figure(1) imshow(x+uint8(im_u*255)) title('muestras positivas') coord=floor(ginput(k));

for i=1:k muestra_positiva((l-1)*k+i,:)=squeeze(x(coord(i,2),coord(i,1),:)); end

distancia=zeros(n,m,l*k);

for i=1:l*k d(:,:,1)=double(x(:,:,1))-double(muestra_positiva(i,1));

d(:,:,2)=double(x(:,:,2))-double(muestra_positiva(i,2)); d(:,:,3)=double(x(:,:,3))-double(muestra_positiva(i,3));

d=d.^2; d=sum(d,3);

distancia(:,:,i)=d;

end

distancia_clase_1=min(distancia,[],3); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%negativas figure(2) imshow(x+uint8(im_u*255)) title('muestras negativas') coord=floor(ginput(k));

for i=1:k muestra_negativa((l-1)*k+i,:)=squeeze(x(coord(i,2),coord(i,1),:)); end

distancia=zeros(n,m,l*k);

for i=1:l*k d(:,:,1)=double(x(:,:,1))-double(muestra_negativa(i,1));

d(:,:,2)=double(x(:,:,2))-double(muestra_negativa(i,2)); d(:,:,3)=double(x(:,:,3))-double(muestra_negativa(i,3));

d=d.^2; d=sum(d,3);

distancia(:,:,i)=d;

end

distancia_clase_0=min(distancia,[],3);

u=exp(-abs(distancia_clase_1-distancia_clase_0)/10); % figure(3) % imshow(u) % figure(4)

im_u(:,:,1)=u; im_u(:,:,2)=u; im_u(:,:,3)=u; % % imshow(uint8(double(x).*im_u)) % % figure(5) % imshow(x+uint8(im_u*255))

```  accuracy(l)=sum(sum(r==gt))/(n*m);
sensitivity(l)=sum(sum(double(gt).*r))/sum(sum(gt));
specificity(l)=sum(sum(double(1-gt).*(1-r)))/sum(sum(1-gt));

```

end %%% ciclos

figure plot(accuracy) hold plot(sensitivity,'r') plot(specificity,'g')

[n m]=size(gt);

imshow(x) title('muestras positivas') coord=floor(ginput(k));

for i=1:k muestra(i,:)=squeeze(x(coord(i,2),coord(i,1),:)); end

distancia=zeros(n,m,k);

for i=1:k d(:,:,1)=double(x(:,:,1))-double(muestra(i,1));

d(:,:,2)=double(x(:,:,2))-double(muestra(i,2)); d(:,:,3)=double(x(:,:,3))-double(muestra(i,3));

d=d.^2; d=sum(d,3);

distancia(:,:,i)=d;

end

distancia_clase_1=min(distancia,[],3);

imshow(x) title('muestras negativas') coord=floor(ginput(k));

for i=1:k muestra(i,:)=squeeze(x(coord(i,2),coord(i,1),:)); end

distancia=zeros(n,m,k);

for i=1:k d(:,:,1)=double(x(:,:,1))-double(muestra(i,1));

d(:,:,2)=double(x(:,:,2))-double(muestra(i,2)); d(:,:,3)=double(x(:,:,3))-double(muestra(i,3));

d=d.^2; d=sum(d,3);

distancia(:,:,i)=d;

end

distancia_clase_0=min(distancia,[],3);

```  accuracy=sum(sum(r==gt))/(n*m)
sensitivity=sum(sum(double(gt).*r))/sum(sum(gt))
specificity=sum(sum(double(1-gt).*(1-r)))/sum(sum(1-gt))
```

base de datos de retina base de datos

```         0  1  0
distancia distancia  1 ];
```

filtro=zeros(size(x)); tform_translate = maketform('affine',xform); h1=imtransform(h,tform_translate, 'XData',[1 size(h,2)],'Ydata',[1 size(h,1)]); filtro=filtro+h1;

xform(3,1)=-distancia; tform_translate = maketform('affine',xform); h1=imtransform(h,tform_translate, 'XData',[1 size(h,2)],'Ydata',[1 size(h,1)]); filtro=filtro+h1;

xform(3,2)=-distancia; tform_translate = maketform('affine',xform); h1=imtransform(h,tform_translate, 'XData',[1 size(h,2)],'Ydata',[1 size(h,1)]); filtro=filtro+h1;

xform(3,1)=distancia; tform_translate = maketform('affine',xform); h1=imtransform(h,tform_translate, 'XData',[1 size(h,2)],'Ydata',[1 size(h,1)]); filtro=filtro+h1;

filtro=filtro/max(max(filtro));

```xr=ifft2(xtcfd);
```

xr=abs(xr); figure

```imshow(xr/max(max(xr)))
```

```xr=ifft2(xtcfd);

```

xr=abs(xr); figure

```imshow(xr)
```

```xr=ifft2(xtcfd);

```

xr=abs(xr); figure

```imshow(xr)
```

transparencias para el curso de vision [4]

Master: Intro a MNI Intro a MRI

analisis de imagenes medicas, VBM, VBM 2 sujetos de OASIS, VBM 40 sujetos de OASIS

algunos codigos matlab para vision por computador

analisis de imagenes medicas, fMRI, fMRI 1 sijeto audiivo
```% experimento de busqueda basado en corners
```

cd('coil-100') d=dir; i=floor(rand*7201); x=imread(d(i+2).name); figure imshow(x) x=rgb2gray(x); x=x.*uint8(x>45); cornersx=corner(x,'Harris'); for j=3:size(d,1);

```   if mod(j,100)==0
j
end
y=rgb2gray(y);
y=y.*uint8(y>45);
cornersy=corner(y,'Harris');
```

```   y=imread(d(indices(j)+2).name);

subplot(2,5,j)
imshow(y)

```

end cd ..

function distancia=distancia_corners_chebychev_2(p1,p2)

for i=1:size(p1,1)

```   for j=1:size(p2,1)
d(i,j)=norm(p1(i,:)-p2(j,:));
end
```

end

minimos_filas=min(d'); distancia_filas=max(minimos_filas); minimos_cols=min(d); distancia_cols=max(minimos_cols); distancia=max(distancia_filas, distancia_cols);

function distancia=distancia_corners_chebychev(p1,p2)

for i=1:size(p1,1)

```   for j=1:size(p2,1)
d(i,j)=norm(p1(i,:)-p2(j,:));
end
```

end

minimos=min(d'); distancia=max(minimos);

for i=1:size(p1,1)

```   for j=1:size(p2,1)
d(i,j)=norm(p1(i,:)-p2(j,:));
end
```

end

distancia=0; for i=1:size(p1,1)

```   [minimo indicemin]=min(d(i,:));
if minimo < inf
d(:,indicemin)=inf;
distancia=distancia+minimo;
end
```

end

distancia=distancia + abs(size(p1,1)-size(p2,1))*1000;

function y=normaliza_orientacion_3(x)

mascarax=x>45; [r,c]=find(mascarax); [autovectores, pt]=princomp([r,c]); pt(:,1)=pt(:,1)+mean(r); pt(:,2)=pt(:,2)+mean(c); pt=floor(pt); y=zeros(size(x));

for i=1:size(r,1)

```   if pt(i,1)>0 & pt(i,1)<=size(x,1) & pt(i,2)>0 & pt(i,2)<=size(x,2)
y(pt(i,1),pt(i,2))=x(r(i),c(i));
end
```

end

y=imerode(imdilate(y,ones(3)),ones(3));

function y=normaliza_orientacion_2(x)

mascarax=x>45; [r,c]=find(mascarax); [autovectores, pt]=princomp([r,c]); pt(:,1)=pt(:,1)+mean(r); pt(:,2)=pt(:,2)+mean(c); pt=floor(pt); y=zeros(size(x));

for i=1:size(r,1)

```   if pt(i,1)>0 & pt(i,1)<=size(x,1) & pt(i,2)>0 & pt(i,2)<=size(x,2)
y(pt(i,1),pt(i,2))=x(r(i),c(i));
end
```

end

for i=1:size(y,1)

```   for j=1:size(y,2)
if y(i,j)==0
iabajo=i-1;
iarriba=i+1;
jabajo=j-1;
jarriba=j+1;
if iabajo<1
iabajo=1;
end
if iarriba>size(y,1)
iarriba=size(y,1);
end
if jabajo<1
jabajo=1;
end
if jarriba>size(y,2)
jarriba=size(y,2);
end

vecinos=y(iabajo:iarriba,jabajo:jarriba);

h=imhist(vecinos,gray(256));
[maximo ind_maximo]=max(h);
y(i,j)=ind_maximo-1;
end

end
```

end

function y=normaliza_orientacion(x)

mascarax=x>45; [r,c]=find(mascarax); [autovectores, pt]=princomp([r,c]); pt(:,1)=pt(:,1)+mean(r); pt(:,2)=pt(:,2)+mean(c); pt=floor(pt); y=zeros(size(x));

for i=1:size(r,1)

```   if pt(i,1)>0 & pt(i,1)<=size(x,1) & pt(i,2)>0 & pt(i,2)<=size(x,2)
y(pt(i,1),pt(i,2))=x(r(i),c(i));
end
```

end

function dist=distancia_bordes_2(o1,o2) % objetos que son imagenes binarias de contornos

[nfilas ncols]=size(o1); dist=0; for i=1:nfilas

```   indices1=find(o1(i,:));
indices2=find(o2(i,:));
n1=size(indices1,2);
n2=size(indices2,2);

if n1>0 & n2 >0
if n1<n2
for j=1:n1
dist=dist+abs(indices1(j)-indices2(j));
end
dist=dist+ncols*(n2-n1);
else
for j=1:n2
dist=dist+abs(indices1(j)-indices2(j));
end
dist=dist+ncols*(n1-n2);
end
else
dist=dist+ncols*abs(n2-n1);
end

```

end

```%%% parece hace cosas raras.... mejor no tocar
```

function dist=distancia_bordes(o1,o2) % objetos que son imagenes binarias de contornos

[nfilas ncols]=size(o1); dist=0; for i=1:nfilas

```   ultimo_borde_o2=0;
for j=1:ncols
if o1(j)
if ultimo_borde_o2<ncols
k=ultimo_borde_o2;
while not(o2(k)) & k<=ncols
k=k+1;
end
if k==ncols
dist=dist+ncols;
else
dist=dist+abs(j-k);
end
ultimo_borde_o2=k;
else
% los bordes sin correspondencia de o1 se penalizan
dist=dist+ncols;
end
end
end
% los bordes sin correspondencia de o2 se penalizan
if ultimo_borde_o2<ncols

if sum(o2(i,ultimo_borde_o2+1:ncols))>0

dist=dist + sum(o2(i,ultimo_borde_o2+1:ncols))*ncols;
end
end

```

end

cd('coil-100') d=dir; i=floor(rand*7201); x=imread(d(i+2).name); x=rgb2gray(x); x=x.*uint8(x>45); ox=edge(x,'log',0,2); for j=3:size(d,1);

```   if mod(j,100)==0
j
end
y=rgb2gray(y);
y=y.*uint8(y>45);
oy=edge(y,'log',0,2);
dist(j-2)=distancia_bordes(ox,oy);
```

```   y=imread(d(indices(j)+2).name);

subplot(2,5,j)
imshow(yind)
colorbar
```

end cd ..

function vocabulario=crea_vocabulario_color_kmeans(ncluster) % sobre un directorio de imagenes de color % tita es el umbral de inclusion del color en el vocabulario cd('coil-100') d=dir; vocabulario=[]; pilacolores=[]; ncolores=0;

for i=3:size(d,1)

```  if mod(i,100)==0
i

end
[yind, mapay]=rgb2ind(y,16);
for k=1:16
ncolores=ncolores+1;
pilacolores(ncolores,:)=mapay(k,:);
end

```

end

cd ..

[indices vocabulario]=kmeans(pilacolores,ncluster);

% experimento busqueda en bd de color

tita=0.1; v=crea_vocabulario_color(tita);

bd=crea_bd_vocabulario(v);

i=floor(rand*7201);

for j=1:size(bd,1)

```   dist(j)=norm(bd(i,:)-bd(j,:));
```

cd('coil-100') d=dir; figure for j=1:50

```   y=imread(d(indices(j)+2).name);

subplot(10,5,j)
imshow(y)

```

end cd ..

function bd=crea_bd_vocabulario(v) % v es el vocabulario... histograma de color general % cd('coil-100') d=dir; ncolores=size(v,1); bd=[]; for i=3:size(d,1)

```  if mod(i,100)==0
i
end
yind=rgb2ind(y,v);
h=imhist(yind,v);
bd(i-2,:)=h;
```

end cd ..

function vocabulario=crea_vocabulario_color(tita) % sobre un directorio de imagenes de color % tita es el umbral de inclusion del color en el vocabulario cd('coil-100') d=dir; vocabulario=[]; ncolores=0; for i=3:size(d,1)

```  if mod(i,100)==0
i
end
[yind, mapay]=rgb2ind(y,16);
for j=1:16
incluircolor=1;
for k=1:ncolores
if norm(mapay(j,:)-vocabulario(k,:))<tita
incluircolor=0;
end
end
if incluircolor
ncolores=ncolores+1;
vocabulario(ncolores,:)=mapay(j,:);
end
end
```

end cd ..

% experimento basico de busqueda con emparejamiento greedy de mpas de color cd('coil-100') d=dir; i=floor(rand*7201); x=imread(d(i+2).name); [xind, mapax]=rgb2ind(x,16); for j=3:size(d,1);

```   if mod(j,100)==0
j
end
[yind, mapay]=rgb2ind(y,16);

dist(j-2)=distancia_colorbar_greedy(mapax,mapay);
```

```   y=imread(d(indices(j)+2).name);

subplot(2,5,j)
imshow(y)

```

end cd ..

% funcion de emparejamiento codicioso de mapas de colores

function dmap=distancia_colorbar_greedy(m1,m2)

ncolores=size(m1,1); libres=ones(ncolores,1); dmap=0; for i=1:ncolores

```   %tenemos i-1 colores asignados
dist=ones(ncolores,1)*inf;
for j=1:ncolores
if libres(j)

dist(j)=norm(m1(i,:)-m2(j,:));

end

end
[dmin jmin]=min(dist);
libres(jmin)=0;
dmap=dmap+dmin;
```

end

% experimento basico de busqueda en la bd REMOVIENDO el color mas cercano a negro cd('coil-100') d=dir; i=floor(rand*7201); x=imread(d(i+2).name); [xind, mapa]=rgb2ind(x,16); for i=1:16

```   grises(i)=norm(mapa(i,:));
```

end [minimo,negro]=min(grises); for j=3:size(d,1);

```   if mod(j,100)==0
j
end
yind=rgb2ind(y,mapa);
yr=uint8(ind2rgb(yind,mapa));
dist(j-2)=sum(sum(sum(abs(y(yind~=negro)-yr(yind~=negro)))));
```

```   y=imread(d(indices(j)+2).name);
yind=rgb2ind(y,mapa);
subplot(2,5,j)
imshow(yind,mapa)
colorbar
```

end figure for j=1:10

```   y=imread(d(indices(j)+2).name);

subplot(2,5,j)
imshow(y)

```

end cd ..

% experimento basico de busqueda en la bd cd('coil-100') d=dir; i=floor(rand*7201); x=imread(d(i+2).name); [xind, mapa]=rgb2ind(x,16); for j=3:size(d,1);

```   if mod(j,100)==0
j
end
yind=rgb2ind(y,mapa);
yr=uint8(ind2rgb(yind,mapa));
dist(j-2)=sum(sum(sum(abs(y-yr))));
```

```   y=imread(d(indices(j)+2).name);
yind=rgb2ind(y,mapa);
subplot(2,5,j)
imshow(yind,mapa)
colorbar
```

end cd ..

bizq=izq<70; bdcha=dcha<70; figure(1) proy=sum(bizq'); indices=find(proy>0); arriba=indices(1); indices=find(proy(arriba+1:size(izq,1))==0); abajo=indices(1)+arriba; subplot(2,1,1) imshow(izq(arriba:abajo,:)) izq=izq(arriba-2:abajo,:); bizq=bizq(arriba-2:abajo,:);

proy=sum(bdcha'); indices=find(proy>0); arriba=indices(1); indices=find(proy(arriba+1:size(dcha,1))==0); abajo=indices(1)+arriba; subplot(2,1,2) imshow(dcha(arriba:abajo,:)) dcha=dcha(arriba-2:abajo,:); bdcha=bdcha(arriba-2:abajo,:);

comp_izq=bwlabel(bizq); s_izq=regionprops(comp_izq,'all'); comp_dcha=bwlabel(bdcha); s_dcha=regionprops(comp_dcha,'all');

nobjetos=0; for c=1:size(s_izq,1);

```   if s_izq(c).Area>1000
nobjetos=nobjetos+1;
correlacion=[];
x=floor(s_izq(c).BoundingBox)
abajo=x(2)+x(4);
if x(2)+x(4)> size(dcha,1)
abajo=size(dcha,1);
end

c_izq=izq(x(2):abajo,x(1):x(1)+x(3));

for i=1:x(1)-1
size(dcha)

c_dcha=dcha(x(2):abajo,x(1)-i:x(1)-i+x(3));
correlacion(i)=sum(sum(abs(c_izq-c_dcha)));
end
figure
plot(correlacion)
[minimo imin]=min(correlacion);
figure
subplot(1,2,1)
imshow(c_izq)
c_dcha=dcha(x(2):abajo,x(1)-imin:x(1)-imin+x(3));
subplot(1,2,2)
imshow(c_dcha)
end
```

end

%asumo que los objetos son oscuros y el fondo blanco izq=izq<umbral; dcha=dcha<umbral; proyeccion_izq=sum(izq); proyeccion_dcha=sum(dcha);

figure(1) plot(proyeccion_izq) figure(2) plot(proyeccion_dcha)

%primer componente

for i_1=1:1000

```   if proyeccion_izq(i_1)>0
break
end
```

end for i_2=i_1:1000

```   if proyeccion_izq(i_2)==0
break
end
```

end for j_1=1:1000

```   if proyeccion_dcha(j_1)>0
break
end
```

end for j_2=j_1:1000

```   if proyeccion_dcha(j_2)==0
break
end
```

end

% calcular el centro de las proyecciones de los componentes c_izq=sum((1:i_2).*proyeccion_izq(1:i_2)/sum(proyeccion_izq(1:i_2))); c_dcha=sum((1:j_2).*proyeccion_dcha(1:j_2)/sum(proyeccion_dcha(1:j_2)));

%anulo primer componente

proyeccion_izq(1:i_2)=0; proyeccion_dcha(1:j_2)=0;

% proceso segundo componente....

figure(3) plot(proyeccion_izq) figure(4) plot(proyeccion_dcha)

%segundo componente

for i_1=1:1000

```   if proyeccion_izq(i_1)>0
break
end
```

end for i_2=i_1:1000

```   if proyeccion_izq(i_2)==0
break
end
```

end for j_1=1:1000

```   if proyeccion_dcha(j_1)>0
break
end
```

end for j_2=j_1:1000

```   if proyeccion_dcha(j_2)==0
break
end
```

end

% calcular el centro de las proyecciones de los componentes c_izq=sum((1:i_2).*proyeccion_izq(1:i_2)/sum(proyeccion_izq(1:i_2))); c_dcha=sum((1:j_2).*proyeccion_dcha(1:j_2)/sum(proyeccion_dcha(1:j_2)));

%imagenes en niveles de grises % umbral_izq=metodo_otsu(izq); % umbral_dcha=metodo_otsu(dcha);

umbral_izq=60; umbral_dcha=60;

izq=izq>umbral_izq; dcha=dcha>umbral_dcha; izq=1-izq; dcha=1-dcha; figure(1) imshow(izq) title('izquierda') figure(2) imshow(dcha) title('derecha') [comp_izq, num_comp_izq]=bwlabel(izq); [comp_dcha, num_comp_dcha]=bwlabel(dcha); for i_izq=1:num_comp_izq

```   if sum(sum(comp_izq==i_izq))>500
break
end
```

end for i_dcha=1:num_comp_dcha

```   if sum(sum(comp_dcha==i_dcha))>500
break
end
```

end figure(3) imshow(comp_izq==i_izq) title('objeto izquierda') figure(4) imshow(comp_dcha==i_dcha) title('objeto derecha') c_izq=calcula_centroide(comp_izq==i_izq); c_dcha=calcula_centroide(comp_dcha==i_dcha); disparidad=c_izq(2)-c_dcha(2);

function centroide=calcula_centroide(x) % x imagen binaria [n m]=size(x); p_filas=sum(x')/sum(sum(x));

p_cols=sum(x)/sum(sum(x));

centro_filas=sum((1:n).*p_filas); centro_cols=sum((1:m).*p_cols);

centroide=[centro_filas,centro_cols];

function umbral=metodo_otsu(x) h=imhist(x,256); size(h) for T=2:255

```   v1=var(h(1:T).*(1:T)');
v2=var(h(T+1:256).*(T+1:256)');
P1=sum(h(1:T));
P2=sum(h(T+1:256));
vintra(T)=P1*v1+P2*v2;
```

end plot(vintra) vintra(1)=inf; [minvarintra umbral]=min(vintra);

%descomposicion en planos de bits x es la imagen original

x=double(cara); plano_8=floor(x/2^7);

x=rem(x,2^7);

plano_7=floor(x/2^6);

x=rem(x,2^6);

plano_6=floor(x/2^5);

x=rem(x,2^5);

plano_5=floor(x/2^4);

x=rem(x,2^4); plano_4=floor(x/2^3);

x=rem(x,2^3); plano_3=floor(x/2^2);

x=rem(x,2^2); plano_2=floor(x/2^1);

x=rem(x,2^1); plano_1=x;

figure(1) subplot(2,4,1) imshow(plano_8) subplot(2,4,2) imshow(plano_7) subplot(2,4,3) imshow(plano_6) subplot(2,4,4) imshow(plano_5) subplot(2,4,5) imshow(plano_4) subplot(2,4,6) imshow(plano_3) subplot(2,4,7) imshow(plano_2) subplot(2,4,8) imshow(plano_1)

% reconstruccion a partir de los planos de bits

reconstruccion=zeros(size(cara));

reconstruccion=plano_1; reconstruccion=reconstruccion + plano_2*2^1; reconstruccion=reconstruccion + plano_3*2^2; reconstruccion=reconstruccion + plano_4*2^3; reconstruccion=reconstruccion + plano_5*2^4; reconstruccion=reconstruccion + plano_6*2^5; reconstruccion=reconstruccion + plano_7*2^6; reconstruccion=reconstruccion + plano_8*2^7; figure (2) imshow(reconstruccion, gray(256))

% reconstruccion con un watermark sencillo en el primer plano de bits

reconstruccion=zeros(size(cara));

reconstruccion(20:80,20:80)=fspecial('disk',30)>0;

reconstruccion=reconstruccion + plano_2*2^1; reconstruccion=reconstruccion + plano_3*2^2; reconstruccion=reconstruccion + plano_4*2^3; reconstruccion=reconstruccion + plano_5*2^4; reconstruccion=reconstruccion + plano_6*2^5; reconstruccion=reconstruccion + plano_7*2^6; reconstruccion=reconstruccion + plano_8*2^7; figure (3) imshow(reconstruccion, gray(256))

function modelo=construir_modelo(nimagen) cd orlfaces d=dir; modelo=zeros(112,92,size(d,1)-2); for i=3:size(d,1);

```   cd (d(i).name)
ds=dir;
cd ..
```

end cd ..

function modelo=construir_modelo_LOO cd orlfaces d=dir; modelo=zeros(112,92,size(d,1)-2,10); for i=3:size(d,1);

```   cd (d(i).name)
ds=dir;
for j=3:size(ds,1)
end
cd ..
```

end cd ..

cd orlfaces d=dir; nclases=size(d,1)-2; distancia=zeros(nclases,1); matriz_confusion=zeros(nclases); error_acumulado=0; for i=3:size(d,1);

```    cd(d(i).name)
ds=dir;
for j=3:size(ds,1)
if j ~= nimagen + 2
for k=1:size(d,1)-2
distancia(k)=sum(sum(abs(modelo(:,:,k)-y)));
end
```

%

```            [dmin, clase]=min(distancia);
matriz_confusion(i-2,clase)=matriz_confusion(i-2,clase)+1;
error= (i-2) ~=clase;
end
end

cd ..
```

end

```cd ..
```

function [aciertos, error_acum]=calculo_error_LOO(m) m=double(m); [filas,cols,nsujetos,nimagenes]=size(m) error_acum=0; aciertos=0; for i=1:40

```   i
for j=1:10
test=squeeze(m(:,:,i,j));
distancias=zeros(nsujetos,nimagenes);

for k=1:nsujetos
for l=1:nimagenes

distancias(k,l)=norm(test-m(:,:,k,l));
end
end
distancias(distancias==0)=inf;
[mincols rowinds]=min(distancias);
[minglobal colind]=min(mincols);
clase=rowinds(colind);
if clase==i
aciertos=aciertos+1;
else
error_acum=error_acum+1;
end
end
```

end