Diferencia entre revisiones de «Cosas temporales para cursos»
Sin resumen de edición |
Sin resumen de edición |
||
Línea 4: | Línea 4: | ||
[[Imagen:Girasol.png|200px|thumb|]] | [[Imagen:Girasol.png|200px|thumb|]] | ||
******** abraham tena | |||
function disparidadt = calculo_disparidad_proyeccionest(izda, dcha, umbral) | |||
%asumo que los objetos son oscuros y el fondo blanco | |||
izda = izda < umbral; | |||
dcha = dcha < umbral; | |||
proyeccion_izda = sum(izda); %Suma vertical de 1's | |||
proyeccion_dcha = sum(dcha); %Suma vertical de 1's | |||
proyeccion_izdat = sum(izda'); %Suma horizontal de 1's | |||
proyeccion_dchat = sum(dcha'); %Suma horizontal de 1's | |||
figure(1) | |||
plot(proyeccion_izda); | |||
figure(2) | |||
plot(proyeccion_dcha); | |||
figure(3) | |||
plot(proyeccion_izdat); | |||
figure(4) | |||
plot(proyeccion_dchat); | |||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |||
%primer componente, limite inferior de la proyecciÛn izda | |||
for i_1=1:1000 | |||
if proyeccion_izda(i_1) > 0 | |||
break; | |||
end | |||
end | |||
%primer componente, limite superior de la proyecciÛn izda | |||
for i_2=i_1:1000 | |||
if proyeccion_izda(i_2) == 0 | |||
break; | |||
end | |||
end | |||
%primer componente, limite inferior de la proyecciÛn derecha | |||
for j_1=1:1000 | |||
if proyeccion_dcha(j_1) > 0 | |||
break; | |||
end | |||
end | |||
%primer componente, limite superior de la proyecciÛn derecha | |||
for j_2=j_1:1000 | |||
if proyeccion_dcha(j_2) == 0 | |||
break; | |||
end | |||
end | |||
%%% | |||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |||
%%% | |||
%primer componente, limite inferior de la proyecciÛn izda | |||
for it_1=1:1000 | |||
if proyeccion_izdat(it_1) > 0 | |||
break; | |||
end | |||
end | |||
%primer componente, limite superior de la proyecciÛn izda | |||
for it_2=it_1:1000 | |||
if proyeccion_izdat(it_2) == 0 | |||
break; | |||
end | |||
end | |||
%primer componente, limite inferior de la proyecciÛn derecha | |||
for jt_1=1:1000 | |||
if proyeccion_dchat(jt_1) > 0 | |||
break; | |||
end | |||
end | |||
%primer componente, limite superior de la proyecciÛn derecha | |||
for jt_2=jt_1:1000 | |||
if proyeccion_dchat(jt_2)2 == 0 | |||
break; | |||
end | |||
end | |||
%Calcular el centro de las proyecciones de los componentes | |||
centro_izda = sum((1:i_2).*proyeccion_izda(1:i_2)/sum(proyeccion_izda(1:i_2))); | |||
centro_dcha = sum((1:j_2).*proyeccion_dcha(1:j_2)/sum(proyeccion_dcha(1:j_2))); | |||
centro_izdat = sum((1:it_2).*proyeccion_izdat(1:it_2)/sum(proyeccion_izdat(1:it_2))); | |||
centro_dchat = sum((1:jt_2).*proyeccion_dchat(1:jt_2)/sum(proyeccion_dchat(1:jt_2))); | |||
disparidadt(1) = centro_izda - centro_dcha; | |||
disparidadt(3) = centro_izdat - centro_dchat; | |||
%anulo el primer componente | |||
proyeccion_izda(1:i_2) = 0; | |||
proyeccion_dcha(1:j_2) = 0; | |||
proyeccion_izdat(1:it_2) = 0; | |||
proyeccion_dchat(1:jt_2) = 0; | |||
%proceso para el segundo componente | |||
figure(5) | |||
plot(proyeccion_izda); | |||
figure(6) | |||
plot(proyeccion_dcha); | |||
figure(7) | |||
plot(proyeccion_izdat); | |||
figure(8) | |||
plot(proyeccion_dchat); | |||
for i_1=1:1000 | |||
if proyeccion_izda(i_1) > 0 | |||
break; | |||
end | |||
end | |||
for i_2=i_1:1000 | |||
if proyeccion_izda(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 | |||
%%% | |||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |||
%%% | |||
for i_1t=1:1000 | |||
if proyeccion_izdat(it_1) > 0 | |||
break; | |||
end | |||
end | |||
for it_2=it_1:1000 | |||
if proyeccion_izdat(it_2) == 0 | |||
break; | |||
end | |||
end | |||
for jt_1=1:1000 | |||
if proyeccion_dchat(jt_1) > 0 | |||
break; | |||
end | |||
end | |||
for jt_2=jt_1:1000 | |||
if proyeccion_dchat(jt_2) == 0 | |||
break; | |||
end | |||
end | |||
%Calcular el centro de las proyecciones de los componentes | |||
centro_izda = sum((1:i_2).*proyeccion_izda(1:i_2)/sum(proyeccion_izda(1:i_2))); | |||
centro_dcha = sum((1:j_2).*proyeccion_dcha(1:j_2)/sum(proyeccion_dcha(1:j_2))); | |||
centro_izdat = sum((1:it_2).*proyeccion_izdat(1:it_2)/sum(proyeccion_izdat(1:it_2))); | |||
centro_dchat = sum((1:jt_2).*proyeccion_dchat(1:jt_2)/sum(proyeccion_dchat(1:jt_2))); | |||
disparidadt(2) = centro_izda - centro_dcha; | |||
disparidadt(4) = centro_izdat - centro_dchat; | |||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |||
end | |||
********** lara regidor | ********** lara regidor | ||
Revisión del 09:28 28 oct 2011
transparencias para el curso de vision [1]
algunos codigos matlab para vision por computador
- abraham tena
function disparidadt = calculo_disparidad_proyeccionest(izda, dcha, umbral)
%asumo que los objetos son oscuros y el fondo blanco izda = izda < umbral; dcha = dcha < umbral;
proyeccion_izda = sum(izda); %Suma vertical de 1's proyeccion_dcha = sum(dcha); %Suma vertical de 1's proyeccion_izdat = sum(izda'); %Suma horizontal de 1's proyeccion_dchat = sum(dcha'); %Suma horizontal de 1's
figure(1) plot(proyeccion_izda); figure(2) plot(proyeccion_dcha); figure(3) plot(proyeccion_izdat); figure(4) plot(proyeccion_dchat);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %primer componente, limite inferior de la proyecciÛn izda for i_1=1:1000
if proyeccion_izda(i_1) > 0 break; end
end %primer componente, limite superior de la proyecciÛn izda for i_2=i_1:1000
if proyeccion_izda(i_2) == 0 break; end
end
%primer componente, limite inferior de la proyecciÛn derecha for j_1=1:1000
if proyeccion_dcha(j_1) > 0 break; end
end %primer componente, limite superior de la proyecciÛn derecha for j_2=j_1:1000
if proyeccion_dcha(j_2) == 0 break; end
end %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% %primer componente, limite inferior de la proyecciÛn izda for it_1=1:1000
if proyeccion_izdat(it_1) > 0 break; end
end %primer componente, limite superior de la proyecciÛn izda for it_2=it_1:1000
if proyeccion_izdat(it_2) == 0 break; end
end
%primer componente, limite inferior de la proyecciÛn derecha for jt_1=1:1000
if proyeccion_dchat(jt_1) > 0 break; end
end %primer componente, limite superior de la proyecciÛn derecha for jt_2=jt_1:1000
if proyeccion_dchat(jt_2)2 == 0 break; end
end
%Calcular el centro de las proyecciones de los componentes centro_izda = sum((1:i_2).*proyeccion_izda(1:i_2)/sum(proyeccion_izda(1:i_2))); centro_dcha = sum((1:j_2).*proyeccion_dcha(1:j_2)/sum(proyeccion_dcha(1:j_2))); centro_izdat = sum((1:it_2).*proyeccion_izdat(1:it_2)/sum(proyeccion_izdat(1:it_2))); centro_dchat = sum((1:jt_2).*proyeccion_dchat(1:jt_2)/sum(proyeccion_dchat(1:jt_2)));
disparidadt(1) = centro_izda - centro_dcha; disparidadt(3) = centro_izdat - centro_dchat;
%anulo el primer componente proyeccion_izda(1:i_2) = 0; proyeccion_dcha(1:j_2) = 0; proyeccion_izdat(1:it_2) = 0; proyeccion_dchat(1:jt_2) = 0;
%proceso para el segundo componente
figure(5) plot(proyeccion_izda); figure(6) plot(proyeccion_dcha); figure(7) plot(proyeccion_izdat); figure(8) plot(proyeccion_dchat);
for i_1=1:1000
if proyeccion_izda(i_1) > 0 break; end
end for i_2=i_1:1000
if proyeccion_izda(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
%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% for i_1t=1:1000
if proyeccion_izdat(it_1) > 0 break; end
end for it_2=it_1:1000
if proyeccion_izdat(it_2) == 0 break; end
end
for jt_1=1:1000
if proyeccion_dchat(jt_1) > 0 break; end
end
for jt_2=jt_1:1000
if proyeccion_dchat(jt_2) == 0 break; end
end
%Calcular el centro de las proyecciones de los componentes centro_izda = sum((1:i_2).*proyeccion_izda(1:i_2)/sum(proyeccion_izda(1:i_2))); centro_dcha = sum((1:j_2).*proyeccion_dcha(1:j_2)/sum(proyeccion_dcha(1:j_2))); centro_izdat = sum((1:it_2).*proyeccion_izdat(1:it_2)/sum(proyeccion_izdat(1:it_2))); centro_dchat = sum((1:jt_2).*proyeccion_dchat(1:jt_2)/sum(proyeccion_dchat(1:jt_2)));
disparidadt(2) = centro_izda - centro_dcha; disparidadt(4) = centro_izdat - centro_dchat; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
- lara regidor
identificacion_objetos.m
function disparidad=identificacion_objetos(izq, dcha, umbralbin,tamanomin)
% Recorto las im�genes para quitar la parte inferior negra izq=izq(1:600,1:1024); dcha=dcha(1:600,1:1024); % Binarizo las im�genes izq=izq<umbralbin; dcha=dcha<umbralbin; % Calculo las proyecciones de cada imagen y las muestr proyeccion_izq=sum(izq); proyeccion_dcha=sum(dcha); %figure(1) plot(proyeccion_izq) %figure(2) %plot(proyeccion_dcha) % Calcular los limites de la imagen izquierda (por columnas) % Primer y �ltimo punto del primer componente de la imagen izquierda [i_1,f_1] = calcular_limites(1,proyeccion_izq); % Primer punto del segundo componente de la imagen izquierda [i_2,f_2] = calcular_limites(f_1,proyeccion_izq); % 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)
end
obtener_componentes.m
function [comp1,comp2] = obtener_componentes(componentes, num_componentes, tamanomin)
cont = 0; for i= 1: num_componentes if sum(sum(componentes == i)) > tamanomin if(cont == 0) comp1 = i; cont = cont + 1; else comp2 = i; break; end end end
end
calcular_limites.m
%Funci�n que devuelve el punto inicial y final de la proyeccion de un %componente de una imagen function [i_1,i_2] = calcular_limites(pinicial,proyeccion)
for i_1=pinicial:1000 if proyeccion(i_1)> 5 break end end for i_2=i_1:1000 if proyeccion(i_2)==0 break end end
end
- kepa moreno ******
function disparidad=calculo_disparidad_proyecciones(izq,dcha,umbral)
% 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 proyeccion_izq_fil=sum(izq'); proyeccion_dcha_fil=sum(dcha');
figure(1) plot(proyeccion_izq_col) figure(2) plot(proyeccion_dcha_col)
figure(3) plot(proyeccion_izq_fil) figure(4) plot(proyeccion_dcha_fil)
%primer componente por filas en una imagen (no necesito mirar la otra imagen porque no hay desplazamiento de filas asÌ que
%en la otra estar· en la misma fila)
for i_1a=1:1000
if proyeccion_izq_fil(i_1a)>0 break end
end for i_2a=i_1a:1000
if proyeccion_izq_fil(i_2a)==0 break end
end
%continuo mirando por filas apartir de donde termina el primer objeto hasta %encontrar el final del segundo objeto for j_a=i_2a:1000
if proyeccion_dcha_fil(j_a)==0 break end
end
%recorto la zona donde est·n mis objetos
izq=izq(1:i_1a,:); %inicio de primer objeto izq=izq((j_a-i_1a),:);%final del ultimo objeto teniendo en cuenta que ya hemos hecho un primer recorte a la imagen
%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);
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