基于Matlab实现 CAMShift算法 进行人脸检测和跟踪
一、介绍
对象检测和跟踪在许多计算机视觉应用中都很重要,包括活动识别、汽车安全和监控。 在此示例中,将通过将跟踪问题分为三个独立的问题来开发一个简单的人脸跟踪系统:检测要跟踪的人脸、
识别要跟踪的面部特征、跟踪面部。
二、检测要跟踪的人脸
在开始跟踪人脸之前,需要先对其进行检测。 使用 vision.CascadeObjectDetector 检测视频帧中人脸的位置。 级联对象检测器使用 Viola-Jones 检测算法和经过训练的分类模型进行检测。 默认情况下,检测器配置为检测人脸,但也可以配置为检测其他对象类型。
% Create a cascade detector object.
faceDetector = vision.CascadeObjectDetector();% Read a video frame and run the detector.
videoFileReader = VideoReader('visionface.avi');
videoFrame = readFrame(videoFileReader);
bbox = step(faceDetector, videoFrame);% Draw the returned bounding box around the detected face.
videoOut = insertObjectAnnotation(videoFrame,'rectangle',bbox,'Face');
figure, imshow(videoOut), title('Detected face');
可以使用级联对象检测器跨连续视频帧跟踪人脸。 但是,当脸部倾斜或人转头时,可能会失去跟踪。 这种限制是由于用于检测的训练分类模型的类型。 为了避免这个问题,并且因为对每个视频帧执行面部检测是计算密集型的,本示例使用简单的面部特征进行跟踪。
三、识别要跟踪的面部特征
在视频中找到人脸后,下一步就是识别有助于跟踪人脸的特征。 例如,可以使用形状、纹理或颜色。 选择一个对象独有的特征,即使在对象移动时也保持不变。
在此示例中,您使用肤色作为要跟踪的特征。 肤色在面部和背景之间提供了很好的对比,并且不会随着面部的旋转或移动而改变。通过从转换为 HSV 颜色空间的视频帧中提取 Hue 来获取肤色信息。
[hueChannel,~,~] = rgb2hsv(videoFrame);% Display the Hue Channel data and draw the bounding box around the face.
figure, imshow(hueChannel), title('Hue channel data');
rectangle('Position',bbox(1,:),'LineWidth',2,'EdgeColor',[1 1 0])
四、跟踪面部
选择肤色作为要跟踪的特征后,现在可以使用 vision.HistogramBasedTracker 进行跟踪。 基于直方图的跟踪器使用 CAMShift 算法,该算法提供了使用像素值直方图跟踪对象的能力。 在这个例子中,色调通道像素是从检测到的人脸的鼻子区域中提取的。 这些像素用于初始化跟踪器的直方图。 该示例使用此直方图在连续视频帧上跟踪对象。检测面部区域内的鼻子。 鼻子提供了更准确的肤色测量,因为它不包含任何背景像素。
noseDetector = vision.CascadeObjectDetector('Nose', 'UseROI', true);
noseBBox = step(noseDetector, videoFrame, bbox(1,:));% Create a tracker object.
tracker = vision.HistogramBasedTracker;% Initialize the tracker histogram using the Hue channel pixels from the
% nose.
initializeObject(tracker, hueChannel, noseBBox(1,:));% Create a video player object for displaying video frames.
videoPlayer = vision.VideoPlayer;% Track the face over successive video frames until the video is finished.
while hasFrame(videoFileReader)% Extract the next video framevideoFrame = readFrame(videoFileReader);% RGB -> HSV[hueChannel,~,~] = rgb2hsv(videoFrame);% Track using the Hue channel databbox = step(tracker, hueChannel);% Insert a bounding box around the object being trackedvideoOut = insertObjectAnnotation(videoFrame,'rectangle',bbox,'Face');% Display the annotated video frame using the video player objectstep(videoPlayer, videoOut);end% Release resources
release(videoPlayer);
五、总结
在此示例中,创建了一个简单的人脸跟踪系统,该系统可以自动检测和跟踪单个人脸。 尝试更改输入视频,看看是否能够跟踪面部。 如果发现跟踪结果不佳,请检查色调通道数据以查看面部区域和背景之间是否有足够的对比度。
基于Matlab实现 CAMShift算法 进行人脸检测和跟踪相关推荐
- 光流 | 基于KLT(Kanade-Lucas-Tomasi)算法的人脸检测与跟踪
===================================================== github:https://github.com/MichaelBeechan CSDN: ...
- 基于MTCNN和FaceNet的实时人脸检测识别系统
文章目录 模型介绍 MTCNN FaceNet 基于MTCNN和FaceNet的实时人脸检测识别系统 在LFW数据集上测试 参考文献 GitHub项目地址:https://github.com/Har ...
- 基于matlab的数字图像边缘检测算法研究,基于MATLAB数字图像边缘检测算法的研究与对比分析...
·161· 居 舍 研究探讨 2017年10月(中) 1 绪论 图像边缘中通常包含着重要的边界信息,这些边界信息便于分析和研究图像.另外,边缘检测可以大大降低图像处 理的工作量,将提高图像分析的效率. ...
- 基于MATLAB的数字水印算法研究实现
基于MATLAB的数字水印算法研究实现 一.课题背景 随着图像.音频.视频等多媒体信息以及Internet的迅速发展,多媒体信息在互联 网上的广泛传播变得及其便利,数据的交换和传输过程变得相对简单.多 ...
- matlab中提取裂缝图像,基于Matlab图像处理的水泥路面裂缝检测研究
路面裂缝检测是计算公路状况指数的重要依据[1],传统的检测方法主要是靠人工检测,测量精度差.检测效率低.同时检测人员会有安全隐患[2-3].现在多采自动检测的方法对路面裂缝的损害进行检测,其中使用数字 ...
- 照片美妆---基于Haar特征的Adaboost级联人脸检测分类器
本文转载自张雨石http://blog.csdn.net/stdcoutzyx/article/details/34842233 基于Haar特征的Adaboost级联人脸检测分类器 基于Haar特征 ...
- 使用 OpenCV与 HAAR 级联算法进行人脸检测和人脸识别
AI人脸识别是一种从数字图像或视频帧中识别或验证人脸的技术.人类可以毫不费力地快速识别面部.这对我们来说是一项轻松的任务,但对计算机来说却是一项艰巨的任务.因为存在各种复杂性,例如低分辨率.遮挡.光照 ...
- 【大作业】基于MATLAB的PRM算法的路径规划设计(随机地图+GUI+源码+报告)
基于MATLAB的PRM算法的路径规划设计 下载链接: [Matlab期末大作业]基于MATLAB的PRM算法的路径规划设计(大报告+源代码+注释) 课题内容和要求 学会运用MATLAB 解决实际优化 ...
- 图像去噪算法 matlab,基于Matlab的图像去噪算法的研究与实现
2009 年第 12 期 福 建 电 脑 (下转第 131 页) 基于 Matlab 的图像去噪算法的研究与实现 胡 鹏 1, 徐会艳 2 (1.淮安信息职业技术学院江苏淮安 223003 2.淮阴师 ...
最新文章
- java和C#面向对象的区别
- Python基础:一起来面向对象 (二) 之搜索引擎
- 常见排序算法详解 (收藏!)
- Android安全与逆向之Java虚拟机和Dalvik虚拟机的区别
- 学习vim的正确姿势!
- 双11终于来了,你盖楼了吗?
- 晶圆产能紧缺,成就华为的“无厂模式”反成败笔
- 贪吃蛇大作战游戏攻略
- 零基础学python用哪本书好-零基础想要学习Python编程 ,不知道看哪本书?
- java贪吃蛇代码_java贪吃蛇游戏实现代码
- web 压力测试工具
- 图片在手机上怎么修改格式?怎么改变图片格式?
- IDEA查看历史记录
- onedrive php接口,关于 onedrive 的 api 调用
- 360安全备份 android,360安全卫士号码备份如何还原到另一个手机上
- 成都理工大学计算机组成原理考试,计算机组成原理试题.doc
- 19 《黑石头的爱与恨:煤的故事》 -豆瓣评分7.4
- 页脚html模板,怎样用Photoshop设计漂亮的网页页脚模板实例教程
- error An unexpected error occurred “httpsregistry.npmjs.orgd3-geo-proje
- 水果忍者(数学 叉积)
热门文章
- aes128 cmac java,C语言实现AES-128 CMAC算法
- 社交网站需管理 网络监控软件有备无患
- 注册表中注销mysql服务器,彻底删除mysql服务(清理注册表)
- 什么前浪后浪,我们只不过是时代大潮中的一朵小浪花
- 。net Core Minimal API
- go程序的入门脚本-helloworld
- 2、KML对象转JSON
- 央视多方视频连线演播厅系统
- 运筹学动态规划逆序解法,对于一个动态规划问题,应用顺序解法或者逆序解法可能会得出不同的最优解。...
- php pdo 判断数据条数据,php pdo 查询记录条数据库