日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab人脸和非人脸分割,人脸检测与分割

發(fā)布時間:2024/9/30 循环神经网络 85 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab人脸和非人脸分割,人脸检测与分割 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

clear all

close all

clc

%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 讀入待檢測圖像

x= imread('22.jpg');

xx=x;

figure,

imshow(x);

fR=xx(:,:,1);

fG=xx(:,:,2);

fB=xx(:,:,3);

f=1/9*ones(3);%低通濾波器,濾除高頻噪聲

filtered_fR=imfilter(fR,f);

filtered_fG=imfilter(fG,f);

filtered_fB=imfilter(fB,f);

x_filtered=cat(3,filtered_fR,filtered_fG,filtered_fB);

figure,

imshow(x_filtered);

I=rgb2ycbcr(x);? ?? ???%顏色空間轉(zhuǎn)換

gray=rgb2gray(x);

figure,

imshow(gray);

[a,b,c]=size(I); %得到圖像的像素點個數(shù)

cb=double(I(:,:,2));

cr=double(I(:,:,3));

for i=1:a

for j=1:b

w=[cb(i,j),cr(i,j)];

m=[117.4316 148.5599];

n=[260.1301 12.1430;12.1430 150.4574];

p(i,j)=exp((-0.5)*(w-m)*inv(n)*(w-m)');%算某象素點的概率

if (p(i,j)<0.5)

p(i,j)=0;

else

p(i,j)=1;

end

end

end

fenge=p;

figure,

imshow(fenge);

SE = strel('square',3);

imf=imopen(p,SE);? ?? ?? ?%開運算(即先腐蝕再膨脹),消除雜散點

xingtai=imf;

figure,

imshow(xingtai);

%figure,imshow(Ibwopen);

%Ibwoc=imclose(Ibwopen,SE);? ?? ?%閉運算,去掉由于開運算引入的許多缺口

%figure,imshow(Ibwoc);

%imf=imfill(Ibwoc,'holes');? ?? ?%填充孔洞

%%%%%%%%%%%%%%%%%%%%%%%根據(jù)填充率去除手腳、胳膊等非人臉區(qū)域%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

[L,num]=bwlabel(imf,8);? ???%連通區(qū)域標(biāo)記

B=zeros(size(imf));

for i=1:num

Area(i)=bwarea(L==i);%計算每個皮膚區(qū)域的面積

end

for i=1:num

[r,c] = find(L==i) ;

left(i)=min(c);

right(i)=max(c);

up(i)=min(r);

down(i)=max(r);

end

for i=1:num

%計算各矩形區(qū)域面積

Rect_Area(i)=(down(i)-up(i))*(right(i)-left(i));

end

%計算各區(qū)域的填充率

Ratio=Area./Rect_Area;

for i=1:num

if Ratio(i)>=0.5%若相應(yīng)區(qū)域的填充率大于0.5則保留該區(qū)域

[x,y]=find(L==i);%第i塊區(qū)域的坐標(biāo)值

B=B+bwselect(imf,y,x,8);%把填充率大于0.5皮膚區(qū)域疊加起來

end

end

%%%%%%%%%%%%%%%%%%%%%%%%%%根據(jù)面積比來進(jìn)一步除去一些較小的非人臉區(qū)域%%%%%%%%%%%%%%%%%%%%%%%%%%

[L1,num1]=bwlabel(B,8);? ???%連通區(qū)域標(biāo)記

B1=zeros(size(B));

for i=1:num1

Area(i)=bwarea(L1==i);%計算每個皮膚區(qū)域的面積

end

maxarea=max(Area);%取最大值

q=Area/maxarea;%每塊區(qū)域的面積與最大區(qū)域面積的比值

for i=1:num1

if q(i)>=0.3%若相應(yīng)區(qū)域的面積比值大于0.3則保留該區(qū)域

[x,y]=find(L1==i);%第i塊區(qū)域的坐標(biāo)值

B1=B1+bwselect(B,y,x,8);%把面積比值大于0.3皮膚區(qū)域疊加起來

end

end

%%%%%%%%%%%%%%%%%%%%%%%%%%根據(jù)膚色區(qū)域的長寬比來除去一些非人臉區(qū)域%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

[L2,num2]=bwlabel(B1,8);? ???%連通區(qū)域標(biāo)記

B2=zeros(size(B1));

for i=1:num2

[r,c] = find(L2==i);

left(i)=min(c);

right(i)=max(c);

up(i)=min(r);

down(i)=max(r);

end

for i=1:num2

if ((down(i)-up(i))/(right(i)-left(i)))>0.8&((down(i)-up(i))/(right(i)-left(i)))<2

[x,y]=find(L2==i);

B2=B2+bwselect(B1,y,x,8);%%%把滿足長寬比在0.8到2的區(qū)域留下

end

end

figure,

imshow(xx);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%把人臉框出來%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

[L3 num3]=bwlabel(B2,8);? ???%連通區(qū)域標(biāo)記

for i=1:num3

[r,c] = find(L3==i);

left(i)=min(c);

right(i)=max(c);

up(i)=min(r);

down(i)=max(r);

end

hold on;

for i=1:num3

if(down(i)>(up(i)+(right(i)-left(i))*1.2))? ???%人臉長寬比限制

down(i)=up(i)+(right(i)-left(i))*1.2;

end

x=[left(i);left(i);right(i);right(i);left(i)];

y=[up(i);down(i);down(i);up(i);up(i)];

plot(x,y);? ?? ?%畫框

end

hold off;

總結(jié)

以上是生活随笔為你收集整理的matlab人脸和非人脸分割,人脸检测与分割的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。