matlab 簡單的人臉識別

2021-07-12 07:41:19 字數 1951 閱讀 6323

**如下

clc; clear all; close all;

% 載入影象

endbw = im2bw(i, graythresh(i)); % 二值化

figure;

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

title('原影象', 'fontweight', 'bold');

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

title('灰度化', 'fontweight', 'bold');

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

title('二值影象', 'fontweight', 'bold');

subplot(2, 3, 4); imshow(bw);

title('網格標記影象', 'fontweight', 'bold');

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', 1, ...

'edgecolor', 'r');

[n1, n2] = size(bw);

r = floor(n1/10); % 分成10塊,行

c = floor(n2/10); % 分成10塊,列

x1 = 1; x2 = r; % 對應行初始化

s = r*c; % 塊面積

fori = 1:11

y1 = 1; y2 = c; % 對應列初始化

forj = 1:11

if (y2<=c || y2>=9*c) || (x1==1 || x2==r*10)

% 如果是在四周區域

bw(x1:x2, y1:y2) = 0;

endy1 = y1+c; % 列跳躍

y2 = y2+c; % 列跳躍

end x1 = x1+r; % 行跳躍

x2 = x2+r; % 行跳躍

endsubplot(2, 3, 5);imshow(bw);

title('識別人臉', 'fontweight', 'bold');

[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;

endendsubplot(2, 3, 6);imshow(img); hold on;

rectangle('position', bd(j, :), ...

'edgecolor', 'w', 'linewidth', 1);

title('標記影象', 'fontweight', 'bold');

最後結果

Matlab實現簡單的人臉識別程式

f rgb2gray f 將影象轉化為灰度圖 level graythresh f bw im2bw f,level 將影象二值化 n1 n2 size bw h floor n1 10 將影象分割成10個快 w floor n2 10 h1 1 h2 h s h w 求得塊的面積 h i h w ...

android opencv 簡單的人臉識別

很簡單的人臉識別功能,識別人臉後用矩形圈出來 實現人臉識別需要模型檔案,opencv再帶的模型檔案在opencv android sdk sdk etc內 我使用haarcascade frontalface alt.xml來做人臉識別 把haarcascade frontalface alt.xm...

最簡單的人臉識別

來了來了 貼出 網路上的其他版本bug很模糊,這份筆記貼進軟體就能實現 介紹啊!這一步是解決資料讀取問題,將資料匯入 檔案1 function imgdata imgdata 用法 imgdata imgdata 分別匯入 pic1 rgb2gray imread d 個人檔案 指令碼檔案 matl...