-
Notifications
You must be signed in to change notification settings - Fork 0
polepo/matlabimagenes
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
clear all
close all
im_RGB=imread('imagen3.jpg')
im_RGB=im2double(im_RGB);
im_ycbcr=rgb2ycbcr(im_RGB);
%obtengo la crominancia b y r con las que juego para poder detectar los
%ojos de la persona. Para ello represento dichas componentes con valores
%entre 0 y 255 y posteriormente con la componente cr detecto la cara ya que
%esta la obtiene como el minimo color de la imagen.
im_1=histeq(im_ycbcr(:,:,2));
im_2=histeq(im_ycbcr(:,:,3));
im_21=histeq(im_ycbcr(:,:,1));
im_222=histeq(im_ycbcr(:,:,2));
figure(1), imshow(im_1);
figure(2), imshow(im_2);
%analisis de im_2
cara2=im_2;
for isaias=1:1
clear longitud
clear posicion_inicial
clear posicion_final
clear cara
clear im_341
if isaias~=1
im_222=contraste2;
im_21=contraste1;
end
im_34=histeq(cara2);
im_341=histeq(im_222);
im_342=histeq(im_21);
for i=0.2:0.1:0.6
contraste1=imadjust(im_341,[],[],i);% incremento de contraste con valor i
end
for i=0.2:0.1:0.6
contraste2=imadjust(im_342,[],[],i);% incremento de contraste con valor i
end
for i=0.2:0.1:0.6
contraste=imadjust(im_34,[],[],i);% incremento de contraste con valor i
figure(3),imshow(contraste),title(['Ajuste de constraste #',int2str(i)],'Color','b');
disp(i);
end
clear im_34
clear im_2
clear cara2
clear acierto
clear inicio_y
clear altura
clear minimos
im_2=contraste;
clear contraste
%detecta la cara en la figura
for i=floor(length(im_2(:,1))/100):length(im_2(:,1))-floor(length(im_2(:,1))/100)
longitud(i)=0;
posicion_inicial(i)=0;
posicion_final(i)=0;
for j=floor(length(im_2(1,:))/100):length(im_2(1,:))-floor(length(im_2(1,:))/100);
if im_2(i,j)>=0.7 && longitud(i)==0
posicion_inicial(i)=j;
longitud(i)=longitud(i)+1;
posicion_final(i)=j;
elseif im_2(i,j)>=0.7
posicion_final(i)=j;
end
end
longitud(i)=posicion_final(i)-posicion_inicial(i);
end
longitud3=longitud/2+posicion_inicial;
longitud2=mean(longitud3);
varianza=mean(longitud);
%calculo de altura y posicion inicial del eje y para recortar
acierto=0;
for i=floor(length(im_2(:,1))/100):length(im_2(:,1))-floor(length(im_2(:,1))/100)
inicio_y=0;
if acierto==0 && posicion_inicial(i)~=0
acierto=1;
inicio_y=i;
end
end
%detector de longitud para altura
for i=floor(length(im_2(:,1))/100):length(im_2(:,1))-floor(length(im_2(:,1))/100)-3
altura=0;
if posicion_inicial(i)~=0
altura=i;
end
end
for i=floor(length(im_2(:,1))/100):length(im_2(:,1))-floor(length(im_2(:,1))/100)
if posicion_inicial(i)~=0
minimos=posicion_inicial(i);
end
end
for i=floor(length(im_2(:,1))/100):length(im_2(:,1))-floor(length(im_2(:,1))/100)
if posicion_inicial(i)~=0 && posicion_inicial(i)<minimos
minimos=posicion_inicial(i);
end
end
cara2=imcrop(im_2,[(longitud2-varianza/2) inicio_y varianza altura]);
cara21=imcrop(contraste1,[(longitud2-varianza/2) inicio_y varianza altura]);
cara222=imcrop(contraste2,[(longitud2-varianza/2) inicio_y varianza altura]);
figure(4), imshow(cara2);
for i=0.2:0.1:0.6
contraste1=imadjust(cara21,[],[],i);% incremento de contraste con valor i
end
for i=0.2:0.1:0.6
contraste2=imadjust(cara222,[],[],i);% incremento de contraste con valor i
end
for i=0.2:0.1:0.6
contraste=imadjust(cara2,[],[],i);% incremento de contraste con valor i
figure(5),imshow(contraste),title(['Ajuste de constraste #',int2str(i)],'Color','b');
disp(i);
end
end
im_ycrcb2(:,:,1)=contraste1;
im_ycrcb2(:,:,2)=contraste2;
im_ycrcb2(:,:,3)=contraste;
im_rgbb=ycbcr2rgb(im_ycrcb2);
figure(6),imshow(im_rgbb)
figure(7),imshow(im_ycrcb2(:,:,1))
figure(8),imshow(im_ycrcb2(:,:,2))
figure(9),imshow(im_ycrcb2(:,:,3))
im_grayy=im_ycrcb2(:,:,2);
A=[1 1 1;1 0 1;1 1 1];
filtro=1./9.*A;
filtro_bajo=filter2(filtro,double(im_grayy));
im_edge=edge(filtro_bajo,'canny');
figure(10),imshow(filtro_bajo);
figure(11),imshow(im_edge);
for j=1:3
imag2=bwareaopen(im_edge,j);%N=1,2,5,10,15,20
figure(12),subplot(3,1,j),imshow(imag2),title(['obj removidos menores a: ',int2str(j)],'color','b');
disp(j);
end
for k=1:1:5
disp(k);
se=strel('disk',k); %incremento de la figura disk(circulo)con N=1,2,3,4,5,6,7,8,9
imag3=imclose(imag2,se);
figure(13),subplot(5,1,k),imshow(imag3),title(['incremento de disk en ',int2str(k)],'color','b');
end
imag4=imfill(imag3,'holes');
figure(14),imshow(imag4),title('imagen con obj removidos');
%%
[B,L] = bwboundaries(imag4,'noholes');
stats = regionprops(L,'all');
a = regionprops(L, 'area');
areas = cat(1, a.Area);
area_max=max(areas);
indice_area_max=find(areas==area_max);
boundary_area_max = B{indice_area_max};
[filas,columnas]=size(boundary_area_max);
max_x=max(boundary_area_max(:,2));
min_x=min(boundary_area_max(:,2));
max_y=max(boundary_area_max(:,1));
min_y=min(boundary_area_max(:,1));
imagen_area_max=zeros(max_x,max_y);
for i=1:filas
imagen_area_max(boundary_area_max(i,1),boundary_area_max(i,2))=1;
end
x= boundary_area_max(:,2);
y= boundary_area_max(:,1);
x_media= round((max_x-min_x)/2);
x_inicial= (min_x + x_media);
indices = find(x==x_inicial);
y_correspondientes= y(indices);
y_inicial = min(y_correspondientes);
i=1;
while(x_inicial ~= min_x)
x_inicial= x_inicial-1;
x_vector(i)=x_inicial;
indices = find(x==x_inicial); % bien
y_correspondientes= y(indices);
y_inicial = min(y_correspondientes);
y_vector(i)=y_inicial;
i=i+1;
end
BW = imagen_area_max;
se = strel('disk',3);
BW = imclose(BW,se);
BW = imfill(BW,'holes');
BW=~BW;
[filas,columnas] = size(imagen_area_max);
col = round(columnas/2)-10;
javi=find(imagen_area_max(:,col));
row = min(javi);
figure,
imshow(im_ycrcb2(:,:,3));
hold on;
plot(x_vector,y_vector,'g*','LineWidth',2);
x = x_vector;
y = y_vector;
longitud_x=length(x);
longitud_y=length(y);
abc=[x' y' ones(length(x'),1)]\[-(x'.^2+y'.^2)];
a = abc(1); b = abc(2); c = abc(3);
xc = -a/2;
yc = -b/2;
radio = sqrt((xc^2+yc^2)-c);
plot(xc,yc,'gx','LineWidth',2);
theta = 0:0.001:2*pi;
Xfit = radio*cos(theta) + xc;
Yfit = radio*sin(theta) + yc;
plot(Xfit, Yfit);
centro_y=yc;
media_y=mean(y_vector);
if centro_y <= media_y
disp('IMAGEN 1: OJOS cerrados')
message = sprintf('Ojos Cerrados');
text(15,15,message,'Color','y','FontWeight','bold');
else
disp('IMAGEN 1: OJOS abiertos')
message = sprintf('Ojos Abiertos');
text(15,15,message,'Color','y','FontWeight','bold');
end
About
Matlab
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published