Diferencia entre revisiones de «Cosas temporales para cursos»

De Grupo de Inteligencia Computacional (GIC)
Sin resumen de edición
Sin resumen de edición
 
(No se muestra una edición intermedia del mismo usuario)
Línea 301: Línea 301:


transparencias para el curso de vision [http://www.sc.ehu.es/ccwgrrom/transparencias/]
transparencias para el curso de vision [http://www.sc.ehu.es/ccwgrrom/transparencias/]
Master: Intro a MNI [https://www.dropbox.com/s/qkxvj487iz3ycgz/IntroMRI.pdf?dl=0 Intro a MRI]
: analisis de imagenes medicas, VBM, [https://www.dropbox.com/s/50l35la77rsn0p4/OASIS-2subj.zip VBM 2 sujetos de OASIS], [https://www.dropbox.com/s/xwhyplwwm8w6qjp/OASIS-40sujetos.zip VBM 40 sujetos de OASIS]
: analisis de imagenes medicas, VBM, [https://www.dropbox.com/s/50l35la77rsn0p4/OASIS-2subj.zip VBM 2 sujetos de OASIS], [https://www.dropbox.com/s/xwhyplwwm8w6qjp/OASIS-40sujetos.zip VBM 40 sujetos de OASIS]
algunos codigos matlab para vision por computador
algunos codigos matlab para vision por computador

Revisión actual - 14:45 9 dic 2014

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


sesion de trabajo de vision por computador sobre Trans. Image Processing Nov-Dic 2013

function r=segmentar_active_two_class(x,gt,mask,k,n_ciclos)

mask=mask>0; gt=gt>0;

[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);

r=distancia_clase_1<=distancia_clase_0; r=r.*mask;

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')



function r=segmentar_knn_two_class(x,gt,mask,k)

mask=mask>0; gt=gt>0;

[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);

r=distancia_clase_1<=distancia_clase_0; r=r.*mask;

  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

function xr=filtro_frec_gauss_pasabanda_2(x,distancia,radio) % radio 1 > radio 2 h=fspecial('gauss',size(x),radio); xform = [ 1 0 0

         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));

figure imshow(filtro) xt=fft2(x); xtc=fftshift(xt); xtcf=xtc.*filtro; figure imshow(log(abs(xtcf)),gray(10)) title('transformada filtrada') xtcfd=ifftshift(xtcf);

xr=ifft2(xtcfd);

xr=abs(xr); figure

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



function xr=filtro_frec_gauss(x,radio) filtro=zeros(size(x)); tamano=radio*9; radio_masc=int16(floor(tamano/2));

h=fspecial('gauss',tamano,radio); h=h/max(max(h)); [m n]=size(x); arribam=int16(m/2+radio_masc); abajom=int16(m/2-radio_masc); arriban=int16(n/2+radio_masc); abajon=int16(n/2-radio_masc); filtro(abajom:arribam,abajon:arriban)=h; figure imshow(filtro) xt=fft2(x); xtc=fftshift(xt); figure imshow(log(abs(xtc)),gray(10)) title('transformada centrada') xtcf=xtc.*filtro; figure imshow(log(abs(xtcf)),gray(10)) title('transformada filtrada') xtcfd=ifftshift(xtcf);

xr=ifft2(xtcfd);

xr=abs(xr); figure

imshow(xr)


function xr=filtro_frec_gauss_pasaalta(x,radio) filtro=zeros(size(x)); tamano=radio*9; radio_masc=int16(floor(tamano/2));

h=fspecial('gauss',tamano,radio); h=h/max(max(h));

[m n]=size(x); arribam=int16(m/2+radio_masc); abajom=int16(m/2-radio_masc); arriban=int16(n/2+radio_masc); abajon=int16(n/2-radio_masc); filtro(abajom:arribam,abajon:arriban)=h; filtro=1-filtro; figure imshow(filtro) xt=fft2(x); xtc=fftshift(xt); figure imshow(log(abs(xtc)),gray(10)) title('transformada centrada') xtcf=xtc.*filtro; figure imshow(log(abs(xtcf)),gray(10)) title('transformada filtrada') xtcfd=ifftshift(xtcf);

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
Girasol.png
% 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=imread(d(j).name);
   y=rgb2gray(y);
   y=y.*uint8(y>45);
   cornersy=corner(y,'Harris');
   distancias(j-2)=distancia_euclidea_regularizada(cornersx,cornersy);

end [d_ordenadas,indices]=sort(distancias); figure for j=1:10

   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);

function distancia=distancia_euclidea_regularizada(p1,p2)

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=imread(d(j).name);
   y=rgb2gray(y);
   y=y.*uint8(y>45);
   oy=edge(y,'log',0,2);
   dist(j-2)=distancia_bordes(ox,oy);

end [d_ordenadas,indices]=sort(dist); figure for j=1:10

   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
   y=imread(d(i).name);
   [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,:));

end [d_ordenadas,indices]=sort(dist);

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
   y=imread(d(i).name);
   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
   y=imread(d(i).name);
   [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
   y=imread(d(j).name);
   [yind, mapay]=rgb2ind(y,16);
   
   dist(j-2)=distancia_colorbar_greedy(mapax,mapay);

end [d_ordenadas,indices]=sort(dist); figure for j=1:10

   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
   y=imread(d(j).name);
   yind=rgb2ind(y,mapa);
   yr=uint8(ind2rgb(yind,mapa));
   dist(j-2)=sum(sum(sum(abs(y(yind~=negro)-yr(yind~=negro)))));

end [d_ordenadas,indices]=sort(dist); figure for j=1:10

   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
   y=imread(d(j).name);
   yind=rgb2ind(y,mapa);
   yr=uint8(ind2rgb(yind,mapa));
   dist(j-2)=sum(sum(sum(abs(y-yr))));

end [d_ordenadas,indices]=sort(dist); figure for j=1:10

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

end cd ..

function disparidades=calculo_disparidad_correlacion(izq,dcha)

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);
       disparidades(nobjetos)=imin;
       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


function disparidad=calculo_disparidad_proyecciones(izq,dcha,umbral)

%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)));

disparidad(1)= c_izq-c_dcha;

%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)));

disparidad(2)= c_izq-c_dcha;

function disparidad=calculo_disparidad_estereo_naive(izq,dcha)

%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;
   modelo(:,:,i-2)=imread(ds(nimagen+2).name);
   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)
       modelo(:,:,i-2,j-2)=imread(ds(j).name);
   end
   cd ..

end cd ..

function [error_acumulado, matriz_confusion]=calcular_error_test(modelo,nimagen)

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
            y=double(imread(ds(j).name));
            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;
            error_acumulado= error_acumulado + error;
        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