DEJO EL CODIGO PARA QUE LO CORRAN
CUALQUIER DUDA ESTARE DISPUETO A RESPONDER.
ESPERO LES GUSTE
% DETECTAR OJOS CERRADOS/ABIERTOS
clc,close all, clear all;
fprintf('\n');disp('*****MENU*****');display('-----MENU-----');fprintf('\n')
op=input('1=TOMAR FOTO \n2=LEER UNA IMAGEN DE OJOS CERRADOS\n3=LEER UNA IMAGEN DE OJOS ABIERTOS \n ');
disp(op);
switch op
case 1
% TOMAR FOTO
imaqreset;
vid=videoinput('winvideo',1);
preview(vid);
pause(5);
foto=getsnapshot(vid);
sav=input('quieres guardar la imagen (s/n)?: ','s');
if (sav=='s')
%imwrite(foto,'foto.jpg');
fprintf('\n escogiste guardar la imagen resultado')
naming = input('\n tipo y nombre de la imagen (filename.ext) : ','s');
fprintf('\n guardando ...')
imwrite(foto,naming);
fprintf('\n el archivo se llama %s y esta guardado en el directorio de trabajo de matlab',naming)
else
fprintf('\n escogiste no guardar la imagen de resultados');
end
im=foto;
stop(vid);
delete(vid);
%break;
case 2
%LEER FOTO cerrada
im=imread('cerrado_02.jpg');
case 3
im=imread('abierto_02.jpg');
end
gris=rgb2gray(im);
dou=im2double(gris);
figure, imshow(dou);
% RECORTE de la imagen
recorte=imcrop;
figure, imshow(recorte), title('imagen recortada original');
% normalizado de imagen mejor visual
hist=histeq(recorte);
pause(2),figure,imshow(hist),title('imagen procesada con histograma');
%ajuste de CONTRASTE
for i=0.2:0.1:0.6
contraste=imadjust(recorte,[],[],i);% incremento de contraste con valor i
pause(2),figure(4),imshow(contraste),title(['Ajuste de constraste #',int2str(i)],'Color','b');
disp(i);
end
zoom on;zoom(.90);
%BORDES
beep;beep;beep;
disp('SELECCIONE UN METODO PARA DETERMINAR EL CONTORNO');
a=input('\n1=sobel\n2=canny\n3=prewitt\n4=roberts\n5=log\n6=zero-cros\n');
disp(a);
switch a
case 1
contorno=edge(contraste,'sobel'); %canny, sobel, prewitt,roberts,laplacian&gausian(log),zeros-cross
pause(2),figure(5), imshow(contorno),title('METODO SOBEL');
imwrite(contorno,'sobel.jpg');
case 2
contorno=edge(contraste,'canny'); %canny, sobel, prewitt,roberts,laplacian&gausian(log),zeros-cross
pause(2),figure(5), imshow(contorno),title('METODO CANNY');
imwrite(contorno,'canny.jpg');
case 3
contorno=edge(contraste,'prewitt'); %canny, sobel, prewitt,roberts,laplacian&gausian(log),zeros-cross
pause(2),figure(5), imshow(contorno),title('METODO PREWITT');
imwrite(contorno,'prewitt.jpg');
case 4
contorno=edge(contraste,'roberts'); %canny, sobel, prewitt,roberts,laplacian&gausian(log),zeros-cross
pause(2),figure(5), imshow(contorno),title('METODO ROBERTS');
imwrite(contorno,'roberts.jpg');
case 5
contorno=edge(contraste,'log'); %canny, sobel, prewitt,roberts,laplacian&gausian(log),zeros-cross
pause(2),figure(5), imshow(contorno),title('METODO LAGRANGE&GAUS');
imwrite(contorno,'lagrange_gaus.jpg');
case 6
contorno=edge(contraste,'zerocros'); %canny, sobel, prewitt,roberts,laplacian&gausian(log),zeros-cross
pause(2),figure(5), imshow(contorno),title('METODO ZERO-CROS');
imwrite(contorno,'zero_cros.jpg');
end
%pause(3),figure(6),
%subplot(3,2,1),imshow('sobel.jpg'),title('BOBEL');subplot(3,2,2),imshow('canny.jpg'),title('CANNY');
%subplot(3,2,3),imshow('prewitt.jpg'),title('PREWITT');subplot(3,2,4),imshow('roberts.jpg'),title('ROBERTS');
%subplot(3,2,5),imshow('lagrange_gaus.jpg'),title('LAGRANGE');subplot(3,2,6),imshow('zero_cros.jpg'),title('ZEROCROS');
%REMOVER objeto menor a N pixeles
disp('REMOVER objeto menor a N pixeles');
for j=1:1:3
imag2=bwareaopen(contorno,j);%N=1,2,5,10,15,20
pause(2),figure(7),subplot(3,1,j),imshow(imag2),title(['obj removidos menores a: ',int2str(j)],'color','b');
disp(j);
end
disp('incremento de la figura disk(circulo)con N=1,2,3,4,5,6,7,8,9');
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);
pause(2),figure(8),subplot(5,1,k),imshow(imag3),title(['incremento de disk en ',int2str(k)],'color','b');
end
imag4=imfill(imag3,'holes'); %rellena los agujeros de la imagen
pause(2),figure(9),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(recorte);
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;
radius = sqrt((xc^2+yc^2)-c);
plot(xc,yc,'gx','LineWidth',2); %grafica el centro de la imagen
theta = 0:0.01:2*pi;
Xfit = radius*cos(theta) + xc;
Yfit = radius*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
msgbox('....FIN DEL PROGRAMA....');
pause(5), clc,close all;
En el primer menú cambia esto y pide el nombre de la imagen:
ResponderEliminarcase 2
%LEER FOTO cerrada
im=imread('cerrado_02.jpg');
case 3
im=imread('abierto_02.jpg');
Estoy probando el programa, de momento se me queda colgado, gracias por el aporte.
DISCULPA QUE NO SEPA MUCHO.PERO ME PARECE MUY IMPORTANTE.COMO LO TRASPASO A MATLAB??COMO EMPIESO..BUENO SI ME AYUDARAS TARIA MUY AGRADECIDO XQ LO NECESITO PARA UN EXAMEN
ResponderEliminarno pasa nada que no sepas, siempre por algo se empieza..Bueno es muy simple solo necesitas copiarlo y pegarlo en un script nuevo de matlab. eso lo consigues oprimiendo en el icono de la hoja en blanco o tambien ir al menu"barra de herramientas"
EliminarAlgo si te recomiendo es que si te lo pidieron para un examen es por que ya te lo habran explicado entonces pues pide ayuda con tu maestro tambien o algun compañero
Nota: espero no sea demasiado tarde mi respuesta
Hola como puedo detectar 3 colores (R G B) y pasarlos a simulink para fuzzificarlos ?
ResponderEliminarPara poder desfuzzificarlos en un Arduino
Estamos en proyecto de titulo necesito ayuda gracias
Buen dia, gracias por tu aporte... Me podrias ayudar dandome un consejo de como podria hacer este mismo proceso pero en tiempo real?, osea directamente con la web cam.. gracias
ResponderEliminarte aconsejo que le quites la parte donde pide guardar la imagen y desde ahi utilices algun ciclo como el for, y vallas guardando cada imagen con un nombre distinto y trabajes sobre cada una de ellas
Eliminarhola necesito saber en qué formato guardo la foto ya que me sale este error del if ,
ResponderEliminarif (isempty(format))
format = get_format_from_filename(filename);
if (isempty(format))
error('MATLAB:imwrite:fileFormat', 'Unable to determine the file format from the filename.');
estoy viendo tu algoritmo ya que necesito cojer una camara y poder detectar los ojos de la persona para hacer un sistema para el proyecto final de ingeniería. estoy aprendiendo mucho de tu algoritmo para poder hacer el propio mio, si puedes ayudarme te lo agradeceria, yo estaré usando el controlador de arduino para trabajar con la camara. gracias....
creo necesitas dar el nombre y la extension cuando te lo pida ejemplo: imagen1.jpg
Eliminaren el programa aparece esta linea de codigo revisala
naming = input('\n tipo y nombre de la imagen (filename.ext) : ','s');
suerte
salió todo bien, el unico problema que tengo es que cuando quiero tomar la foto desde un video en matlab no me sale la foto en los diagramas para ver si el programa sabe si están los ojos abiertos o cerrados, gracias por contestar....
Eliminarsalio todo bien, el problema es con el video, cuando hago el snapshot se tarda mucho en salir la imagen para saber si estan los ojos cerrados o abiertos, yo puedo hacer este proceso directo? sin tener que preguntar por cual metodo determino el contorno? y cual de los metodos es mas eficiente y rapido? te pregunto para asi saber si de esta forma el algoritmo es más veloz, ya que necesito comparar fotos en milisegundos, gracias por ayudarme, (estoy estudiando sistemas de potencia, pero el proyecto al ser de ingenieria no tenía que ser obligatorio de sistemas de potencia y como a todos nos enseñan a usar matlab nos dieron este problema para resolver y por eso necesito aprender mucho de tu algoritmo) muchas gracias
Eliminarhola amigoo buen dia me gustaria saber si puedes explicarme en si el codigo como funciona o si tienes algun documento que me puedas facilitar para esto muchas gracias mi correo es sfrengifo@unicauca.edu.co
ResponderEliminar