【图像识别】基于计算机视觉检测脸、眼、鼻子和嘴matlab代码
作者:互联网
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