Diferencia entre revisiones de «Cosas temporales para cursos»
Sin resumen de edición |
Sin resumen de edición |
||
Línea 5: | Línea 5: | ||
[[Imagen:Girasol.png|200px|thumb|]] | [[Imagen:Girasol.png|200px|thumb|]] | ||
************************* | |||
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) | function umbral=metodo_otsu(x) |
Revisión del 11:58 17 oct 2011
transparencias para el curso de vision [1]
algunos codigos matlab para vision por computador
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