ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【图像识别】基于计算机视觉检测脸、眼、鼻子和嘴matlab代码

2021-11-07 12:34:19  阅读:186  来源: 互联网

标签:定位 图像识别 检测 嘴巴 区域 人脸 matlab 视觉 detector


1 简介

本文在图象中分割人脸区域,在检测出的人脸区域内定位眼睛区域和嘴巴区域,并定位相关的重要特征点,如:区域中心、眼角、嘴角等。主要研究内容如下:
(1)提出了一种新的人脸区域分割算法。当前人脸区域分割主要依赖于肤色在某些特定色彩空间的聚类特性,然而肤色很容易因为环境光照的影响而变化,而且当背景中存在近似于肤色色彩的物体或者存在多处肤色区域时,很难准确定位人脸区域。本文利用人脸轮廓信息定位候选区域,然后结合人脸特征点呈现三角分布的特性最终定位人脸,很好地避免了上述原因对于人脸区域分割的影响。
(2)提出了一种新的人眼及其特征点的定位方法。利用迭代式阈值算法对图象进行二值化处理,然后针对人脸上半区域进行检测,缩短了检测时间。利用最小外接矩形描述眼睛区域的轮廓,并依据长宽比例及位置,连贯性等约束信息区分眼睛和眉毛、头发区域;利用质心作为区域中心,更好地描述了眼睛区域的中心位置;然后利用Harris角点检测算子对眼角进行定位,结合闭合区域填充以及形态学闭运算等操作对眼睛区域进行填充,很好地避免了因为眼睛区域的不连贯导致的眼角检测不准确。
(3)提出了一种新的嘴巴区域及其特征点的定位方法。针对人脸下半区域进行二值化,完整地保留了嘴巴区域的信息,效果明显优于针对整幅人脸进行二值化的情形。然后利用最小外接矩形描述嘴巴区域的轮廓,并依据长宽比例及位置信息定位嘴巴区域,利用质心作为区域中心,最后利用Harris角点检测算子在区域填充后的嘴巴区域中定位嘴角位置。
实验表明,本文提出的算法简单易行,检测精度高。尤其人脸区域分割算法很好的弥补了单纯依据肤色聚类性进行检测的不足,采用闭合区域填充及形态学闭运算相结合的方法辅助Hams角点检测算子定位嘴角,眼角,提高了检测精度。分别针对人脸上下半区域进行眼睛和嘴巴的定位节省了检测时间,提高了检测的准确度。

2 部分代码

% buildDetector: build face parts detector object
% 
% detector = buildDetector( thresholdFace, thresholdParts, stdsize )
%
%Output parameter:
% detector: built detector object
%
%
%Input parameters:
% thresholdFace (optional): MergeThreshold for face detector (Default: 1)
% thresholdParts (optional): MergeThreshold for face parts detector (Default: 1)
% stdsize (optional): size of normalized face (Default: 176)
%
%
%Example:
% detector = buildDetector();
% img = imread('img.jpg');
% [bbbox bbimg] = detectFaceParts(detector,img);
%
%
%Version: 20120529

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Face Parts Detection:                                   %
%                                                         %
% Copyright (C) 2012 Masayuki Tanaka. All rights reserved. %
%                   mtanaka@ctrl.titech.ac.jp             %
%                                                         %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function detector = buildDetector( thresholdFace, thresholdParts, stdsize )

if( nargin < 1 )
thresholdFace = 1;
end

if( nargin < 2 )
thresholdParts = 1;
end

if( nargin < 3 )
stdsize = 176;
end

nameDetector = {'LeftEye'; 'RightEye'; 'Mouth'; 'Nose'; };
mins = [[12 18]; [12 18]; [15 25]; [15 18]; ];

detector.stdsize = stdsize;
detector.detector = cell(5,1);
for k=1:4
minSize = int32([stdsize/5 stdsize/5]);
minSize = [max(minSize(1),mins(k,1)), max(minSize(2),mins(k,2))];
detector.detector{k} = vision.CascadeObjectDetector(char(nameDetector(k)), 'MergeThreshold', thresholdParts, 'MinSize', minSize);
end

detector.detector{5} = vision.CascadeObjectDetector('FrontalFaceCART', 'MergeThreshold', thresholdFace);

3 仿真结果

4 参考文献

[1]韩乐, 何烨秋, & 高文华. (2016). 基于matlab的人脸检测实验设计. 电脑知识与技术:学术交流.​

 

标签:定位,图像识别,检测,嘴巴,区域,人脸,matlab,视觉,detector
来源: https://blog.csdn.net/m0_60703264/article/details/121189798

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有