Segmentacion de caras basada en piel usando Matlab


%SEGMENTACION DE CARAS BASADA EN COLOR DE PIEL
%MTI JAIRO AVENDAÑO MALVAEZ
%PROFESOR EN EL TECNOLOGICO DE ZACATEPC
%E-MAIL:jairomarvin@hotmail.com
%MATERIA: HERRAMIENTAS COMPUTACIONALES
%LIBRE DE USARSE Y MODIFICARSE, SOLO MENCIONA LA FUENTE.. :)

%limpiando pantalla y variables
clc;clear;
I=imread('images.jpg');
imshow(I);
pause(3)
[m,n,c]=size(I);%calculando tamaño de imagen en m y n
I=image(I);
arrayname = get(I, 'CData');

%barrido de toda la imagen pixel por pixel
for x=1 : m
    for y=1 : n
       %recupera valores rgb para cada pixel de imagen
       R=arrayname(x,y,1);
       G=arrayname(x,y,2);
       B=arrayname(x,y,3);
       %detetecta piel  y sustituye por negro
       if (R>100&&R<232)&& (G>68&&G<182)&& (B>38&&B<155)%rangos rgb de piel
          arrayname(x,y,:)=0;
          mascara(x,y,:)=255;
       end
       %sustituye por negro colores obscuros
     if (R<150&&G<150&&B<150)
          arrayname(x,y,:)=0;
         mascara(x,y,:)=0;
       end
         
    end
end
set(I, 'CData', arrayname);
imshow(mascara)
pause(2)



I = bwareaopen(mascara, 200);
imshow(I);hold on
pause(2)
[L Ne]=bwlabel(double(I),8);%etiqueta objetos
%recupera propiedades de objetos etiquetados
prop=regionprops(L,'Area','Centroid', 'BoundingBox','Extent');
total=0;
for n=1:size(prop,1) %Dibuja marco verde alrededor de caras
    boundingBox = prop(n).BoundingBox;
    x1 = boundingBox(1);%recupera limites por cada objeto
    y1 = boundingBox(2);
    x2 = x1 + boundingBox(3) - 1;
    y2 = y1 + boundingBox(4) - 1;
        verticesX = [x1 x2 x2 x1 x1];
        verticesY = [y1 y1 y2 y2 y1];
        xtotal=abs(x1-x2);
        ytotal=abs(y1-y2);
    cent=prop(n).Centroid;
    X=cent(1);Y=cent(2);
    if prop(n).Extent>.4 %llenado del bounding box
        %discrimina rectangulos muy grandes
       if ((xtotal-ytotal)<(4*ytotal))&&((ytotal-xtotal)<(3*xtotal))
                plot(verticesX, verticesY, 'g-', 'LineWidth', 2);
        total=total+1; % cuenta el total de caras
       end
    end
end
------------------------------------------------------------------------------------------------------------
Esta es la imagen de prueba ;)










Comentarios