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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

江苏大学数字图像处理MATLAB人脸识别,MATLAB人脸识别代码

發布時間:2024/8/1 pytorch 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 江苏大学数字图像处理MATLAB人脸识别,MATLAB人脸识别代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.色彩空間轉換

function [r,g]=rgb_RGB(Ori_Face)

R=Ori_Face(:,:,1);

G=Ori_Face(:,:,2);

B=Ori_Face(:,:,3);

R1=im2double(R);?% 將uint8型轉換成double型

G1=im2double(G);

B1=im2double(B);

row=size(Ori_Face,1);?% 行像素

column=size(Ori_Face,2);?% 列像素

for i=1:row

for j=1:column

rr(i,j)=R1(i,j)/RGB(i,j);

gg(i,j)=G1(i,j)/RGB(i,j);

end

end

rrr=mean(rr);

r=mean(rrr);

ggg=mean(gg);

g=mean(ggg);

2.均值和協方差

t1=imread('D:\matlab\皮膚庫\1.jpg');[r1,g1]=rgb_RGB(t1);

t2=imread('D:\matlab\皮膚庫\2.jpg');[r2,g2]=rgb_RGB(t2);

t3=imread('D:\matlab\皮膚庫\3.jpg');[r3,g3]=rgb_RGB(t3);

t4=imread('D:\matlab\皮膚庫\4.jpg');[r4,g4]=rgb_RGB(t4);

t5=imread('D:\matlab\皮膚庫\5.jpg');[r5,g5]=rgb_RGB(t5);

t6=imread('D:\matlab\皮膚庫\6.jpg');[r6,g6]=rgb_RGB(t6);

t7=imread('D:\matlab\皮膚庫\7.jpg');[r7,g7]=rgb_RGB(t7);

t8=imread('D:\matlab\皮膚庫\8.jpg');[r8,g8]=rgb_RGB(t8);

t9=imread('D:\matlab\皮膚庫\9.jpg');[r9,g9]=rgb_RGB(t9);

t10=imread('D:\matlab\皮膚庫\10.jpg');[r10,g10]=rgb_RGB(t10);

t11=imread('D:\matlab\皮膚庫\11.jpg');[r11,g11]=rgb_RGB(t11);

t12=imread('D:\matlab\皮膚庫\12.jpg');[r12,g12]=rgb_RGB(t12);

t13=imread('D:\matlab\皮膚庫\13.jpg');[r13,g13]=rgb_RGB(t13);

t14=imread('D:\matlab\皮膚庫\14.jpg');[r14,g14]=rgb_RGB(t14);

t15=imread('D:\matlab\皮膚庫\15.jpg');[r15,g15]=rgb_RGB(t15);

t16=imread('D:\matlab\皮膚庫\16.jpg');[r16,g16]=rgb_RGB(t16);

t17=imread('D:\matlab\皮膚庫\17.jpg');[r17,g17]=rgb_RGB(t17);

t18=imread('D:\matlab\皮膚庫\18.jpg');[r18,g18]=rgb_RGB(t18);

t19=imread('D:\matlab\皮膚庫\19.jpg');[r19,g19]=rgb_RGB(t19);

t20=imread('D:\matlab\皮膚庫\20.jpg');[r20,g20]=rgb_RGB(t20);

t21=imread('D:\matlab\皮膚庫\21.jpg');[r21,g21]=rgb_RGB(t21);

t22=imread('D:\matlab\皮膚庫\22.jpg');[r22,g22]=rgb_RGB(t22);

t23=imread('D:\matlab\皮膚庫\23.jpg');[r23,g23]=rgb_RGB(t23);

t24=imread('D:\matlab\皮膚庫\24.jpg');[r24,g24]=rgb_RGB(t24);

t25=imread('D:\matlab\皮膚庫\25.jpg');[r25,g25]=rgb_RGB(t25);

t26=imread('D:\matlab\皮膚庫\26.jpg');[r26,g26]=rgb_RGB(t26);

t27=imread('D:\matlab\皮膚庫\27.jpg');[r27,g27]=rgb_RGB(t27);

r=cat(1,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23,r24,r25,r26,r27);

g=cat(1,g1,g2,g3,g4,g5,g6,g7,g8,g9,g10,g11,g12,g13,g14,g15,g16,g17,g18,g19,g20,g21,g22,g23,g24,g25,g26,g27);

m=mean([r,g])

n=cov([r,g])

3.求質心

function [xmean, ymean] = center(bw)

bw=bwfill(bw,'holes');

area = bwarea(bw);

[m n] =size(bw);

bw=double(bw);

xmean =0; ymean = 0;

for i=1:m,

for j=1:n,

xmean = xmean + j*bw(i,j);

ymean = ymean + i*bw(i,j);

end;

end;

if(area==0)

xmean=0;

ymean=0;

else

xmean = xmean/area;

ymean = ymean/area;

xmean = round(xmean);

ymean =

round(ymean);

end

4. 求偏轉角度

function [theta] =

orient(bw,xmean,ymean)

[m n] =size(bw);

bw=double(bw);

a = 0;

b = 0;

c = 0;

for i=1:m,

for j=1:n,

a = a + (j - xmean)^2 * bw(i,j);

b = b + (j - xmean) * (i - ymean) *

bw(i,j);

c = c + (i - ymean)^2 * bw(i,j);

end;

end;

b = 2 * b;

theta = atan(b/(a-c))/2;

theta =

theta*(180/pi);?%

從幅度轉換到角度

5. 找區域邊界

function [left, right, up, down] =

bianjie(A)

[m n] = size(A);

left = -1;

right = -1;

up = -1;

down = -1;

for j=1:n,

for

i=1:m,

if (A(i,j) ~= 0)

left = j;

break;

end;

end;

if (left ~=

-1) break;

end;

end;

for j=n:-1:1,

for i=1:m,

if (A(i,j) ~= 0)

right =

j;

break;

end;

end;

if (right ~= -1) break;

end;

end;

for i=1:m,

for j=1:n,

if

(A(i,j) ~= 0)

up =

i;

break;

end;

end;

if

(up ~= -1)

break;

end;

end;

for i=m:-1:1,

for

j=1:n,

if (A(i,j) ~= 0)

down = i;

break;

end;

end;

if

(down ~= -1)

break;

end;

end;

6. 求起始坐標

function newcoord =

checklimit(coord,maxval)

newcoord = coord;

if (newcoord<1)

newcoord=1;

end;

if (newcoord>maxval)

newcoord=maxval;

end;

7.模板匹配

function [ccorr, mfit, RectCoord] =

mobanpipei(mult, frontalmodel,ly,wx,cx, cy, angle)

frontalmodel=rgb2gray(frontalmodel);

model_rot = imresize(frontalmodel,[ly

wx],'bilinear'); % 調整模板大小

model_rot =

imrotate(model_rot,angle,'bilinear');?% 旋轉模板

[l,r,u,d] =

bianjie(model_rot);?% 求邊界坐標

bwmodel_rot=imcrop(model_rot,[l u (r-l)

(d-u)]);?% 選擇模板人臉區域

[modx,mody]

=center(bwmodel_rot);?% 求質心

[morig, norig] =

size(bwmodel_rot);

% 產生一個覆蓋了人臉模板的灰度圖像

mfit = zeros(size(mult));

mfitbw = zeros(size(mult));

[limy, limx] = size(mfit);

% 計算原圖像中人臉模板的坐標

startx = cx-modx;

starty = cy-mody;

endx = startx + norig-1;

endy = starty + morig-1;

startx = checklimit(startx,limx);

starty = checklimit(starty,limy);

endx = checklimit(endx,limx);

endy = checklimit(endy,limy);

for i=starty:endy,

for j=startx:endx,

mfit(i,j) =

model_rot(i-starty+1,j-startx+1);

end;

end;

ccorr =

corr2(mfit,mult)?% 計算相關度

[l,r,u,d] = bianjie(bwmodel_rot);

sx = startx+l;

sy = starty+u;

RectCoord = [sx sy (r-1) (d-u)]; %

產生矩形坐標

8.主程序

clear;

[fname,pname]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.gif'},'Please

choose a color

picture...');?% 返回打開的圖片名與圖片路徑名

[u,v]=size(fname);

y=fname(v);?% 圖片格式代表值

switch y

case

0

errordlg('You Should Load Image File

First...','Warning...');

case{'g';'G';'p';'P';'f';'F'};?% 圖片格式若是JPG/jpg、BMP/bmp、TIF/tif或者GIF/gif,才打開

I=cat(2,pname,fname);

Ori_Face=imread(I);

subplot(2,3,1),imshow(Ori_Face);

otherwise

errordlg('You Should Load Image File

First...','Warning...');

end

R=Ori_Face(:,:,1);

G=Ori_Face(:,:,2);

B=Ori_Face(:,:,3);

R1=im2double(R);?% 將uint8型轉換成double型處理

G1=im2double(G);

B1=im2double(B);

m=[

0.4144,0.3174];?% 均值

n=[0.0031,-0.0004;-0.0004,0.0003];?% 方差

row=size(Ori_Face,1);?% 行像素數

column=size(Ori_Face,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(2,3,2);imshow(p);?% 顯示皮膚灰度圖像

low_pass=1/9*ones(3);

image_low=filter2(low_pass,

p);?% 低通濾波去噪聲

subplot(2,3,3);imshow(image_low);

% 自適應閥值程序

previousSkin2 = zeros(i,j);

changelist = [];

for threshold = 0.55:-0.1:0.05

two_value = zeros(i,j);

two_value(find(image_low>threshold)) =

1;

change = sum(sum(two_value -

previousSkin2));

changelist = [changelist change];

previousSkin2 = two_value;

end

[C, I] = min(changelist);

optimalThreshold = (7-I)*0.1

two_value = zeros(i,j);

two_value(find(image_low>optimalThreshold))

= 1;?% 二值化

subplot(2,3,4);imshow(two_value);?% 顯示二值圖像

frontalmodel=imread('E:\我的照片\人臉模板.jpg');?% 讀入人臉模板照片

FaceCoord=[];

imsourcegray=rgb2gray(Ori_Face);?% 將原照片轉換為灰度圖像

[L,N]=bwlabel(two_value,8);?% 標注二值圖像中連接的部分,L為數據矩陣,N為顆粒的個數

for i=1:N,

[x,y]=find(bwlabel(two_value)==i);?% 尋找矩陣中標號為i的行和列的下標

bwsegment =

bwselect(two_value,y,x,8);?% 選擇出第i個顆粒

numholes =

1-bweuler(bwsegment,4);?% 計算此區域的空洞數

if (numholes >=

1)?% 若此區域至少包含一個洞,則將其選出進行下一步運算

RectCoord = -1;

[m n] = size(bwsegment);

[cx,cy]=center(bwsegment);?% 求此區域的質心

bwnohole=bwfill(bwsegment,'holes');?%

將洞封住(將灰度值賦為1)

justface = uint8(double(bwnohole) .*

double(imsourcegray));

% 只在原照片的灰度圖像中保留該候選區域

angle =

orient(bwsegment,cx,cy);?% 求此區域的偏轉角度

bw = imrotate(bwsegment, angle,

'bilinear');

bw = bwfill(bw,'holes');

[l,r,u,d] =bianjie(bw);

wx = (r - l

+1);?% 寬度

ly = (d - u +

1);?% 高度

wratio =

ly/wx?% 高寬比

if

((0.8<=wratio)&(wratio<=2))

% 如果目標區域的高度/寬度比例大于0.8且小于2.0,則將其選出進行下一步運算

S=ly*wx;?% 計算包含此區域矩形的面積

A=bwarea(bwsegment);?% 計算此區域面積

if (A/S>0.35)

[ccorr,mfit, RectCoord] = mobanpipei(justface,frontalmodel,ly,wx,

cx,cy, angle);

end

if (ccorr>=0.6)

mfitbw=(mfit>=1);

invbw = xor(mfitbw,ones(size(mfitbw)));

source_with_hole = uint8(double(invbw) .*

double(imsourcegray));

final_image = uint8(double(source_with_hole) +

double(mfit));

subplot(2,3,5);imshow(final_image);?% 顯示覆蓋了模板臉的灰度圖像

imsourcegray = final_image;

subplot(2,3,6);imshow(Ori_Face);?% 顯示檢測效果圖

end;

if (RectCoord ~= -1)

FaceCoord = [FaceCoord; RectCoord];

end

end

end

end

% 在認為是人臉的區域畫矩形

[numfaces x] = size(FaceCoord);

for

i=1:numfaces,

hd = rectangle('Position',FaceCoord(i,:));

set(hd, 'edgecolor', 'y');

end

人臉檢測是人臉識別、人機交互、智能視覺監控等工作的前提。近年來,在模式識別與計算機視覺領域,人臉檢測己經成為一個受到普遍重視、研究十分活躍的方向。

本文針對復雜背景下的彩色正面人臉圖像,將膚色分割、模板匹配與候選人臉圖像塊篩選結合起來,構建了人臉檢測實驗系統,并用自制的人臉圖像數據庫在該系統下進行了一系列的實驗統計。

本文首先介紹了人臉檢測技術研究的背景和現狀,闡明人臉檢測技術發展的重要意義,對目前常用的一些檢測算法進行了總結,然后著重闡述了基于膚色分割和模板匹配驗證的人臉檢測算法。

膚色是人臉重要特征,在通過膚色采樣統計和聚類分析后,確立一種在YCbCr空間下的基于高斯模型的膚色分割方法。在YCbCr色彩空間中建立膚色分布的高斯模型,得到膚色概率似然圖像,在最佳動態閾值選取算法下完成膚色區域的分割。

采用數學形態學和一些先驗知識對所得到的膚色區域進行人臉特征篩選,進一步剔除非人臉膚色區域,減少候選人臉數量,簡化后續檢測過程的處理。

本文使用平均模板匹配方法對候選人臉進行確認,并針對圖像中的人臉通常有一定角度旋轉和尺寸大小不確定的問題,通過計算候選人臉圖像塊的偏轉角度和面積,并以此調整模板,優化模板配準,提高模板匹配的準確性,同時避免使用多尺度模板進行多次匹配運算,提高算法效率。提出利用候選人臉圖像區域和模板質心作為配準的原點,抑制人臉圖像噪聲的干擾。

最后構建了基于膚色分割和模板驗證的人臉檢測試驗系統,并對該系統采用自制人臉圖像數據庫進行測試。實驗結果表明,系統算法是有效的,具有較高的檢測性能和低的誤判率。

總結

以上是生活随笔為你收集整理的江苏大学数字图像处理MATLAB人脸识别,MATLAB人脸识别代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。