Vision.CascadeObjectDetector-VJ算法学习
VJ算法MATLAB
Vision.CascadeObjectDetector
1.描述
级联对象检测器使⽤Viola-Jones算法来检测⼈的⾯部,⿐⼦,眼睛,嘴巴或上半⾝。还可以使⽤Image Labeler训练⾃定义分类器以与此System对象⼀起使⽤。
要检测图像中的⾯部特征或上半⾝:
1. 创建vision.CascadeObjectDetector对象并设置其属性。
2. 使⽤参数调⽤对象,就好像它是⼀个函数⼀样。
2.创建
2.1 句法&描述
detector = vision.CascadeobjecDectector
使⽤Viola-Jones算法创建⼀个检测器来检测对象。
detector = vision.CascadeObjectDetector(model)
创建⼀个检测器,配置为检测由输⼊字符向量定义的对象 model。
detector = vision.CascadeObjectDetector(XMLFILE)
创建⼀个检测器并将其配置为使⽤XMLFILE输⼊指定的⾃定义分类模型。
detector = vision.CascadeObjectDetector(Name,Value)
使⽤⼀个或多个名称 - 值对设置属性。将每个属性名称括在引号中。
2.2 Properties
除⾮另有说明,否则属性是不可⽤的,这意味着在调⽤对象后⽆法更改其值。当您调⽤它们时,对象会锁定,并且该 release功能会解锁它们。
2.2.1 Classification Model-训练级联分类模型
训练的级联分类模型,指定为字符向量。该ClassificationModel属性控制要检测的对象类型。默认情况下,检测器配置为检测⾯。
可以将此字符向量设置为包含⾃定义分类模型的XML⽂件,或者下⾯列出的有效模型字符向量之⼀。
可以使⽤该trainCascadeObjectDetector功能训练⾃定义分类模型。
该函数可以使⽤类Haar特征,定向梯度直⽅图(HOG)或局部⼆元模式(LBP)来训练模型。
rectangle函数opencv分类模型⽤于训练模
型的图像尺
⼨
型号说明
‘FrontalFaceCART’(默
认)[20 20]检测直⽴和前向的⾯部。该模型由弱分类器组成,基于分类和回归树分析(CART)。这些分类器使⽤Haar
功能来编码⾯部特征。基于CART的分类器提供了模拟⾯部特征之间的⾼阶依赖性的能⼒。
‘FrontalFaceLBP’[24 24]
检测直⽴和前向的⾯部。该模型由弱分类器组成,基于决策树桩。这些分类器使⽤局部⼆进制模式(LBP)
来编码⾯部特征。LBP功能可以提供抵抗照明变化的稳健性。检测上⾝区域,定义为头肩区域。该模型使⽤Haar特征来编码头部和肩部区域的细节。因为它在头部周围使
‘UpperBody’
[18 22]检测上⾝区域,定义为头肩区域。该模型使⽤Haar特征来编码头部和肩部区域的细节。因为它在头部周围使⽤了更多的特征,所以该模型对于姿势变化(例如头部旋转/倾斜)更加鲁棒。‘EyePairBig’
‘EyePairSmall’
[11 45] [522]检测⼀双眼睛。该’EyePairSmall’模型是使⽤较⼩的图像训练。这使模型能够检测到⽐’EyePairBig’模型检测到的更⼩的眼睛。‘LeftEye’ ‘RightEye’
[12⽉18⽇]分别检测左眼和右眼。这些模型由弱分类器组成,基于决策树桩。这些分类器使⽤Haar功能来编码细节。‘LeftEyeCART’
‘RightEyeCART’[20 20]分别检测左眼和右眼。构成这些模型的弱分类器是CART树。与决策树桩相⽐,基于CART树的分类器能够更好地模拟⾼阶依赖性。
‘ProfileFace’[20 20]检测直⽴⾯部轮廓。该模型由弱分类器组成,基于决策树桩。这些分类器使⽤Haar功能对⾯部细节进⾏编
码。
‘Mouth’[15 25]检测嘴巴。该模型由弱分类器组成,基于决策树桩,使⽤Haar功能对嘴部细节进⾏编码。
‘Nose’[15 18]
该模型由弱分类器组成,基于决策树桩,使⽤Haar功能对⿐⼦细节进⾏编码。分类模型
⽤于训练模型的图像尺⼨型号说明2.22 MinSize-最⼩可检测对象的⼤⼩ | [ ] 双元素向量
最⼩可检测对象的⼤⼩,指定为双元素向量[⾼度 宽度]。为包含对象的最⼩⼤⼩区域设置此属性(以像素为单位)。该值必须⼤于或等于⽤于训练模型的图像⼤⼩。在处理图像之前知道最⼩对象⼤⼩时,使⽤此属性可缩短计算时间。如果未指定此属性的值,则检测器会将其设置为⽤于训练分类模型的图像的⼤⼩。
2.23 MaxSize-最⼤可检测对象的⼤⼩ | [ ] 双元素向量
最⼤可检测对象的⼤⼩,指定为双元素向量[ ⾼度 宽度 ]。指定要检测的最⼤对象的⼤⼩(以像素为单位)。在处理图像之前知道最⼤对象⼤⼩时,使⽤此属性可缩短计算时间。如果未指定此属性的值,则检测器会将其设置为size(I)。
2.24 ScaleFactor-缩放多尺度对象检测 | 1.1 纯量
缩放多尺度对象检测,指定为⼤于的值 1.0001。⽐例因⼦递增地缩放MinSize和之间的检测分辨率MaxSize。可以使⽤以下⽅法将⽐例因⼦设置为理想值:
size(I)/(size(I)-0.5)
检测器以两者之间的增量缩放搜索区域,MinSize并MaxSize使⽤以下关系:
搜索区域 = round((trainingsize)*(ScaleFactor^N))
N是当前增量,⼤于零的整数,训练⼤⼩是⽤于训练分类模型的图像⼤⼩。
2.25MergeThreshold-检测阈值 | 4 整数
检测阈值,指定为整数。阈值定义了在对象周围存在多个检测的区域中声明最终检测所需的标准。合并满⾜阈值的共同定位检测的组被合并以在⽬标对象周围产⽣⼀个边界框。增加该阈值可以通过要求在多尺度检测阶段期间多次检测⽬标对象来帮助抑制错误检测。将此属性设置为时 0,将返回所有检测,⽽不执⾏阈值处理或合并操作。此属性是可调的。
###UseRoI-使⽤感兴趣的区域 | false (default)
使⽤感兴趣的区域,指定为false或 false。将此属性设置true为检测输⼊图像中感兴趣的矩形区域内的对象。
3.⽤法
3.1句法bbox=detector(I)返回M -by-4矩阵,bbox定义 包含检测到的对象的M个边界框。检测器对输⼊图像执⾏多尺度物体检测I。
bbox=detector(I,roi)检测由指定的矩形搜索区域内的对象 roi。将’UseROI’属性设置 true为使⽤此语法。
3.2输⼊参数
3.2.1 I-输⼊图像 | 灰度/真彩⾊(RGB )
3.2.2 model-分类模型 | FrontalFaceCART /character string
分类模型,指定为字符向量。的 model输⼊描述对象的检测的类型。有⼏个有效的model字符向量,例如’ FrontalFaceCART’,’UpperBody’和’ ProfileFace’。
3.2.3 XMLFILE-⾃定义分类模型
⾃定义分类模型,指定为XML⽂件。在 XMLFILE可以使⽤创建trainCascadeObjectDetector函数或OpenCV的(开源计算机视觉)的训练功能。
3.2.4 ROI-矩形感兴趣区域 |四元素向量
图像中的矩形感兴趣区域I,指定为四元素⽮量,[ x y width height ]。
3.3 输出参数
3.3.1 bbox-检测 | M-by-4矩阵
检测,作为M -by-4元素矩阵返回。输出矩阵的每⼀⾏包含⼀个四元素向量,[ x y width height ],以像素为单位指定边界框的左上⾓和⼤⼩。
3.3.2对象功能
要使⽤对象函数,请将System对象指定为第⼀个输⼊参数。
step运⾏System对象算法
release释放资源并允许更改System对象属性值和输⼊特征
reset重置System对象的内部状态
4. Example
4.1 使⽤正⾯⼈脸分类模型检测图像中的⼈脸
% Create a face detector object.
`faceDetector = vision.CascadeObjectDetector;`
% Read the input image.
I = imread('visionteam.jpg');
%Detect faces.
bboxes = faceDetector(I);
%Annotate detected faces.
IFaces = insertObjectAnnotation(I,'rectangle',bboxes,'Face');
figure
imshow(IFaces)
title('Detected faces');
4.2 利⽤上体分类模型检测图像中的上体
%Create a body detector object and set properties.
bodyDetector = vision.CascadeObjectDetector('UpperBody');
bodyDetector.MinSize = [60 60];
bodyDetector.MergeThreshold = 10;
%Read input image and detect upper body.
I2 = imread('visionteam.jpg');
bboxBody = bodyDetector(I2);
Annotate detected upper bodies.
IBody = insertObjectAnnotation(I2,'rectangle',bboxBody,'Upper Body');
figure
imshow(IBody)
title('Detected upper bodies');
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论