基于matlab的简单人脸识别程序代码
生活随笔
收集整理的這篇文章主要介紹了
基于matlab的简单人脸识别程序代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基于matlab 的簡單人臉識別實例
簡介
人臉識別特指利用分析比較人臉視覺特征信息進行身份鑒別的計算機技術。
人臉識別是一項熱門的計算機技術研究領域,在生活中許多領域都有著重要應
用。
內容
這里通過對人臉圖像打上網格,對區域塊圖像做二值分析,通過像素比例來
做處理。進而得到人臉區域。
代碼
% By lyqmath % DLUT School of Mathematical Sciences % BLOG:http://blog.csdn.net/lyqmath clc; clear all; close all; % 載入圖像 Img = imread('face.jpg'); if ndims(Img) == 3 I=rgb2gray(Img); else I = Img; end BW = im2bw(I, graythresh(I)); % 二值化 figure; subplot(2, 2, 1); imshow(Img); title('原圖像', 'FontWeight', 'Bold'); subplot(2, 2, 2); imshow(Img); 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', 3, ... 'EdgeColor', 'r'); subplot(2, 2, 3); imshow(BW); title('二值圖像', 'FontWeight', 'Bold'); [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; 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, 2, 4);imshow(I); hold on; rectangle('Position', Bd(j, :), ... 'EdgeColor', 'r', 'LineWidth', 3); title('標記圖像', 'FontWeight', 'Bold');結果:
結論
通過對人臉圖像做二值化,統計像素比例信息。得到人臉識別結果。當然,
這種方式處理并不穩定,但基于圖像網格分析做處理,進而得到分析結果也是一
種經典的處理方式。
總結
以上是生活随笔為你收集整理的基于matlab的简单人脸识别程序代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: A 完全k叉树(CCPC-Wannafl
- 下一篇: (转)matlab各类数学公式