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 muestran 34 ediciones intermedias de 2 usuarios)
Línea 1: Línea 1:
sobre image annotation [http://people.csail.mit.edu/brussell/research/AIM-2005-025-new.pdf]
acceso a la toolbox de matlab [http://labelme.csail.mit.edu/Release3.0/browserTools/php/matlab_toolbox.php] dentro del sitio [http://labelme2.csail.mit.edu/Release3.0/index.php]
*********************************
[[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 [[media:DRIVE.zip| 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 [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]
algunos codigos matlab para vision por computador
algunos codigos matlab para vision por computador
: analisis de imagenes medicas, fMRI, [https://www.dropbox.com/s/gp5bl43qivvz83x/fMRI_SPM.zip?m fMRI 1 sijeto audiivo]


[[Imagen:Girasol.png|200px|thumb|]]
[[Imagen:Girasol.png|200px|thumb|]]
********** lara regidor
**************************************


identificacion_objetos.m
% experimento de busqueda basado en corners


function disparidad=identificacion_objetos(izq, dcha, umbralbin,tamanomin)
cd('coil-100')
   
d=dir;
    % Recorto las im�genes para quitar la parte inferior negra
i=floor(rand*7201);
    izq=izq(1:600,1:1024);
x=imread(d(i+2).name);
    dcha=dcha(1:600,1:1024);
figure
   
imshow(x)
    % Binarizo las im�genes
x=rgb2gray(x);
    izq=izq<umbralbin;
x=x.*uint8(x>45);
    dcha=dcha<umbralbin;
cornersx=corner(x,'Harris');
   
for j=3:size(d,1);
    % Calculo las proyecciones de cada imagen y las muestr
     if mod(j,100)==0
    proyeccion_izq=sum(izq);
        j
    proyeccion_dcha=sum(dcha);
     end
    %figure(1)
     y=imread(d(j).name);
    plot(proyeccion_izq)
     y=rgb2gray(y);
    %figure(2)
     y=y.*uint8(y>45);
    %plot(proyeccion_dcha)
     cornersy=corner(y,'Harris');
   
     distancias(j-2)=distancia_euclidea_regularizada(cornersx,cornersy);
    % Calcular los limites de la imagen izquierda (por columnas)
end
    % Primer y �ltimo punto del primer componente de la imagen izquierda
[d_ordenadas,indices]=sort(distancias);
    [i_1,f_1] = calcular_limites(1,proyeccion_izq);
figure
    % Primer punto del segundo componente de la imagen izquierda
for j=1:10
    [i_2,f_2] = calcular_limites(f_1,proyeccion_izq);
     y=imread(d(indices(j)+2).name);
   
   
    % Calcular los limites de la imagen derecha (por columnas)
    % Primer y �ltimo punto del primer componente de la imagen izquierda
    [i_3,f_3] = calcular_limites(1,proyeccion_dcha);
    % Primer punto del segundo componente de la imagen izquierda
    [i_4,f_4] = calcular_limites(f_3,proyeccion_dcha);
   
    % Buscamos los componentes de mayor tama�o
    [comp_izq, num_comp_izq] = bwlabel(izq);
    [comp_dch, num_comp_dch] = bwlabel(dcha);
   
    % Los dos componentes de la imagen izquierda
    [comp1izq, comp2izq]  = obtener_componentes(comp_izq, num_comp_izq,tamanomin);
    %figure(3);
    %title('Objeto izquierdo 1');
    %imshow(comp_izq == comp1izq);
    %figure(4);
    %title('Objeto izquierdo 2');
    %imshow(comp_izq == comp2izq);
   
    % Los dos componentes de la imagen derecha
    [comp1dcha, comp2dcha] = obtener_componentes(comp_dch, num_comp_dch, tamanomin);
    %figure(5);
    %title('Objeto derecho 1');
    %imshow(comp_dch == comp1dcha);
    %figure(6);
    %title('Objeto derecho 2');
    %imshow(comp_dch == comp2dcha);
   
    % Calcular los limites de la imagen izquierda (por filas)
    % Componente 1
    proy_filas_izq_1 = sum((comp_izq == comp1izq)');
    %plot(proy_filas_izq_1);
    [j_1, e_1] = calcular_limites(1, proy_filas_izq_1);
    % Componente 2
    proy_filas_izq_2 = sum((comp_izq == comp2izq)');
    %plot(proy_filas_izq_2);
    [j_2, e_2] = calcular_limites(1, proy_filas_izq_2);
   
    % Calcular los limites de la imagen derecha (por filas)
    % Componente 1
    proy_filas_dcha_1 = sum((comp_dch == comp1dcha)');
    %plot(proy_filas_dcha_1);
    [j_3, e_3] = calcular_limites(1, proy_filas_dcha_1);
    % Componente 2
    proy_filas_dcha_2 = sum((comp_dch == comp2dcha)');
    %plot(proy_filas_dcha_2);
    [j_4, e_4] = calcular_limites(1, proy_filas_dcha_2);
      
   
    %Recortar las imagenes para obtener solo los objetos
    obj1izq = izq(j_1:e_1,i_1:f_1);
    %figure,imshow(obj1izq);
   
    obj2izq = izq(j_2:e_2,i_2:f_2);
    %figure,imshow(obj2izq);
   
    obj1dch = dcha(j_3:e_3,i_3:f_3);
    %figure,imshow(obj1dch);
      
     obj2dch = dcha(j_4:e_4,i_4:f_4);
    %figure,imshow(obj2dch);
   
    so1i = size(obj1izq);
     so1d = size(obj1dch);
     minh = min([so1i(1),so1d(1)]);
     mina = min([so1i(2),so1d(2)]);
   
    % Recortamos las dos objetos 1 con el tama�o del  mas peque�o:
    obj1izqr = obj1izq(1:minh,1:mina);
    obj1dchr = obj1dch(1:minh,1:mina);
    dif = sum(sum(abs(obj1izqr - obj1dchr)));
    tot = sum(sum(obj1izqr));
    r1 = (dif/tot)*100;
    disp('El porcentaje de error en el objeto 1 es:');
     disp(r1)  
   
    so2i = size(obj2izq);
    so2d = size(obj2dch);
    minh = min([so2i(1),so2d(1)]);
    mina = min([so2i(2),so2d(2)]);
   
    % Recortamos las dos objetos 2 con el tama�o del  mas peque�o:
    obj2izqr = obj2izq(1:minh,1:mina);
     obj2dchr = obj2dch(1:minh,1:mina);
    dif = sum(sum(abs(obj2izqr - obj2dchr)));
    tot = sum(sum(obj2izqr));
    r2 = (dif/tot) * 100;
    disp('El porcentaje de error en el componente 1 es:')
    disp(r2)
      
      
    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
end


***************************************


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


function [comp1,comp2] = obtener_componentes(componentes, num_componentes, tamanomin)
[nfilas ncols]=size(o1);
    cont = 0;
dist=0;
    for i= 1: num_componentes
for i=1:nfilas
        if sum(sum(componentes == i)) > tamanomin
    indices1=find(o1(i,:));
             if(cont == 0)
    indices2=find(o2(i,:));
                 comp1 = i;  
    n1=size(indices1,2);
                cont = cont + 1;
    n2=size(indices2,2);
            else
   
                comp2 = i;
    if n1>0 & n2 >0
                 break;
        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
             end
          dist=dist+ncols*(n1-n2);
         end
         end
    else
        dist=dist+ncols*abs(n2-n1);
     end
     end
       
end
end


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


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


%Funci�n que devuelve el punto inicial y final de la proyeccion de un
[nfilas ncols]=size(o1);
%componente de una imagen
dist=0;
function [i_1,i_2] = calcular_limites(pinicial,proyeccion)
for i=1:nfilas
     for i_1=pinicial:1000
    ultimo_borde_o2=0;
         if proyeccion(i_1)> 5
     for j=1:ncols
              break
         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
     end
     end
     for i_2=i_1:1000
     % los bordes sin correspondencia de o2 se penalizan
         if proyeccion(i_2)==0
    if ultimo_borde_o2<ncols
              break
       
         if sum(o2(i,ultimo_borde_o2+1:ncols))>0
           
            dist=dist + sum(o2(i,ultimo_borde_o2+1:ncols))*ncols;
         end
         end
     end
     end
   
end
end


********** kepa moreno ******
************************************


function disparidad=calculo_disparidad_proyecciones(izq,dcha,umbral)
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 ..


% asumo que los objetos son oscuros y el fondo blanco
************************************
izq=izq<umbral;
dcha=dcha<umbral;


%proyecciones por columnas
proyeccion_izq_col=sum(izq);
proyeccion_dcha_col=sum(dcha);


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


figure(1)
for i=3:size(d,1)
plot(proyeccion_izq_col)
  if mod(i,100)==0
figure(2)
        i
plot(proyeccion_dcha_col)
       
    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);


figure(3)
bd=crea_bd_vocabulario(v);
plot(proyeccion_izq_fil)
figure(4)
plot(proyeccion_dcha_fil)


i=floor(rand*7201);


%primer componente por filas en una imagen (no necesito mirar la otra imagen porque no hay desplazamiento de filas asÌ que
for j=1:size(bd,1)
%en la otra estar· en la misma fila)
    dist(j)=norm(bd(i,:)-bd(j,:));
end
[d_ordenadas,indices]=sort(dist);


for i_1a=1:1000
cd('coil-100')
     if proyeccion_izq_fil(i_1a)>0  
d=dir;
         break
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
     end
    y=imread(d(i).name);
    yind=rgb2ind(y,v);
    h=imhist(yind,v);
    bd(i-2,:)=h;
end
end
for i_2a=i_1a:1000
cd ..
     if proyeccion_izq_fil(i_2a)==0
 
         break
************************
 
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
end
end
cd ..
       


%continuo mirando por filas apartir de donde termina el primer objeto hasta
************************
%encontrar el final del segundo objeto
% experimento basico de busqueda con emparejamiento greedy de mpas de color
for j_a=i_2a:1000
cd('coil-100')
     if proyeccion_dcha_fil(j_a)==0  
d=dir;
         break
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
     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
end
cd ..
***************************
% funcion de emparejamiento codicioso de mapas de colores


%recorto la zona donde est·n mis objetos
function dmap=distancia_colorbar_greedy(m1,m2)


izq=izq(1:i_1a,:); %inicio de primer objeto
ncolores=size(m1,1);
izq=izq((j_a-i_1a),:);%final del ultimo objeto teniendo en cuenta que ya hemos hecho un primer recorte a la imagen
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


%mismo corte para la imagen derecha
dcha=dcha(1:i_1a,:);
dcha=dcha((j_a-i_1a),:);


figure(5)
***************************
imshow(izq);
figure(6)
imshow(dcha);


% 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 ..
*************************
*************************



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