logo资料库

基于肤色的简易人脸检测.pdf

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
基于肤色的简易人脸检测(matlab版) clc; clear all; close all; % ÔØÈëͼÏñ Img = imread('D:\renlian\6.jpg'); R=Img(:,:,1); G=Img(:,:,2); B=Img(:,:,3); R1=im2double(R); % ½«uint8ÐÍת»»³ÉdoubleÐÍ´¦Àí G1=im2double(G); B1=im2double(B); RGB=R1+G1+B1; m=[ 0.4144,0.3174]; % ¾ùÖµ n=[0.0031,-0.0004;-0.0004,0.0003]; % ·½²î [x1,y1]=meshgrid(0:0.01:1,0:0.01:1); a1=sqrt(n(4));a2=sqrt(n(1));r=(-n(2))/(a1*a2); middle1=1./(2.*pi.*a1.*a2.*sqrt(1-r.^2)); middle2=((-1)./(2.*(1-r.^2))).*(((x1-m(1))).^2./a1.^2-2.*r.*(x1-m(1)).* (y1-m(2))./(a1.*a2)+(y1-m(2)).^2./a2.^2); z1=middle1.*exp(middle2); figure; subplot(1, 2, 1);mesh(x1,y1,z1);title('ÀíÏëµÄ·ôÉ«·Ö²¼'); row=size(Img,1); % ÐÐÏñËØÊý column=size(Img,2); % ÁÐÏñËØÊý for i=1:row for j=1:column if RGB(i,j)==0 rr(i,j)=0;gg(i,j)=0; else rr(i,j)=R1(i,j)/RGB(i,j); % rgb¹éÒ»»¯ gg(i,j)=G1(i,j)/RGB(i,j); x=[rr(i,j),gg(i,j)]; p(i,j)=exp((-0.5)*(x-m)*inv(n)*(x-m)'); % Ƥ·ô¸ÅÂÊ·þ´Ó¸ß˹·Ö²¼ end end end subplot(1, 2, 2);mesh(p);title('ʵ¼Ê·ôÉ«·Ö²¼'); if ndims(Img) == 3 I=rgb2gray(Img); else I = Img; end J=imnoise(I,'salt & pepper',0.01); I1=filter2(fspecial('average',3),J,'full')/255; BW = im2bw(I1, graythresh(I1)); % ¶þÖµ»¯ figure; subplot(2, 4, 1); imshow(Img,[0 1]);title('Ô-ͼÏñ'); subplot(2, 4, 2); imshow(Img,[0 1]);title('Íø¸ñ±ê¼ÇͼÏñ'); hold on; [xt, yt] = meshgrid(round(linspace(1, size(I, 1), 10)), ... round(linspace(1, size(I, 2), 10))); mesh(yt, xt, zeros(size(xt)), 'FaceColor', ... 'None', 'LineWidth', 3, ... 'EdgeColor', 'r'); subplot(2, 4, 3); imshow(p);title('»ùÓÚ·ôÉ«¸ÅÂÊ·Ö²¼µÄ»Ò¶ÈͼÏñ');
subplot(2, 4, 4); imshow(I1);title('ÁÚÓòƽ¾ù·¨Â˲¨ºóͼÏñ'); subplot(2, 4, 5); imshow(BW);title('¶þÖµ»¯ºóͼÏñ'); [n1, n2] = size(BW); r = floor(n1/10); % ·Ö³É10¿é£¬ÐÐ c = floor(n2/10); % ·Ö³É10¿é£¬ÁÐ x1 = 1; x2 = r; % ¶ÔÓ¦Ðгõʼ»¯ s = r*c; % ¿éÃæ»ý for i = 1:10 y1 = 1; y2 = c; % ¶ÔÓ¦Áгõʼ»¯ for j = 1:10 if (y2<=c || y2>=9*c) || (x1==1 || x2==r*10) % Èç¹ûÊÇÔÚËÄÖÜÇøÓò loc = find(BW(x1:x2, y1:y2)==0); [p, q] = size(loc); pr = p/s*100; % ºÚÉ«ÏñËØËùÕ¼µÄ±ÈÀýÊý if pr<= 100 BW(x1:x2, y1:y2) = 0; r1=x1;r2=x2;s1=y1;s2=y2; pr1=0; end end y1 = y1+c; % ÁÐÌøÔ¾ y2 = y2+c; % ÁÐÌøÔ¾ end x1 = x1+r; % ÐÐÌøÔ¾ x2 = x2+r; % ÐÐÌøÔ¾ end [L, num] = bwlabel(BW, 8); % ÇøÓò±ê¼Ç stats = regionprops(L, 'BoundingBox'); % µÃµ½°üΧ¾ØÐοò Bd = cat(1, stats.BoundingBox); [s1, s2] = size(Bd); mx = 0; for k = 1:s1 p = Bd(k, 3)*Bd(k, 4); % ¿í*¸ß if p>mx && (Bd(k, 3)/Bd(k, 4))<1.8 % Èç¹ûÂú×ãÃæ»ý¿é´ó£¬¶øÇÒ¿í/¸ß<1.8 mx = p; j = k; end end subplot(2, 4, 6);imshow(I); hold on; rectangle('Position', Bd(j, :), ... 'EdgeColor', 'r', 'LineWidth', 3); title('±ê¼ÇͼÏñ'); subplot(2, 4, 7);imshow(Img); hold on; rectangle('Position', Bd(j, :), ... 'EdgeColor', 'r', 'LineWidth', 3); title('±ê¼ÇͼÏñ');
分享到:
收藏