Viola-Jones 人眼检测算法+meanshift跟踪算法

这次的代码是对视频中的人眼部分进行检测加跟踪,检测用的是matlab自带的人眼检测工具箱

下面是matlab官网介绍这个算法的一些东西:

http://cn.mathworks.com/help/vision/examples/face-detection-and-tracking-using-camshift.html?searchHighlight=Viola-Jones

http://cn.mathworks.com/help/vision/ref/vision.cascadeobjectdetector-class.html?searchHighlight=Viola-Jones

Viola-Jones是人眼、人脸检测非常常用的算法,使用的特征是haar-like特征,分类器是级联adaboost分类器;

Viola Jones Face Detector是Paul viola 和 Michael J Jones共同提出的一种人脸检测框架。它极大的提高了人脸检测的速度和准确率。

  • 速度提升方面:利用积分图像来提取图像特征值,所以非常快。同时,利用adaboost分类器的特征筛选特性,保留最有用特征,这也减少了检测时的运算复杂度。
  • 准确率提升方面:将adaboost分类器进行改造,变成级联adaboost分类器,提高了人脸检测的准确率(降低漏检率和误检率)。

这个算法的具体介绍可以参考链接:

http://www.cnblogs.com/hrlnw/archive/2013/10/23/3374707.html

然后,跟踪方面是最普通的meanshift跟踪算法

meanShift,均值漂移,在聚类、图像平滑、分割、跟踪等方面有着广泛的应用。meanShift这个概念最早是由Fukunage在1975年提出的,其最初的含义正如其名:偏移的均值向量;但随着理论的发展,meanShift的含义已经发生了很多变化。如今,我们说的meanShift算法,一般是指一个迭代的步骤,即先算出当前点的偏移均值,然后以此为新的起始点,继续移动,直到满足一定的结束条件。

MeanShift算法正是属于核密度估计法,它不需要任何先验知识而完全依靠特征空间中样本点的计算其密度函数值。对于一组采样数据,直方图法通常把数据的值域分成若干相等的区间,数据按区间分成若干组,每组数据的个数与总参数个数的比率就是每个单元的概率值;核密度估计法的原理相似于直方图法,只是多了一个用于平滑数据的核函数。采用核函数估计法,在采样充分的情况下,能够渐进地收敛于任意的密度函数,即可以对服从任何分布的数据进行密度估计。这个算法的精髓,一张图片就可以解释,注意下图,即为均值漂移,非常形象。

图片及meanshift算法的进一步解释都可以参考链接:

http://blog.csdn.net/jinshengtao/article/details/30258833

下面贴出代码:

clc; clear all;close all;clf reset;
%%
%%%%%%%%%%%%%%%%%%%%%%%%--------人眼检测部分开始---------------------%%%%%%%%%%%%%%%%%%%%%% videoObj = VideoReader('eye.mp4');%读视频文件
nframes = get(videoObj, 'NumberOfFrames');%获取视频文件帧个数 img = read(videoObj, );%读取第1帧,用于人脸检测 Eye_Detect = vision.CascadeObjectDetector('EyePairBig');%使用 Viola-Jones 算法,人脸检测工具箱中的人眼部分 Eyes=step(Eye_Detect,img);%从第一张照片中检测出人眼,函数返回的是人眼的位置
hold on;
imshow(img);%显示第一张照片
for i = :size(Eyes,)
rectangle('Position',Eyes(i,:),'LineWidth',,'LineStyle','-','EdgeColor','r');%将上面人眼的位置,用一个矩形框框起来,显示
end title('Eyes Detection');%标注眼睛检测
hold off;
pause(0.000001)%暂停一小会,休息一下,马上回来 rect=Eyes(,:);%保存rect检测到的位置
temp=img(rect():rect()+rect(),rect():rect()+rect(),:);%将检测到的眼睛部分的图片提取出来
[a,b,c]=size(temp); %返回图片的维数
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%计算目标图像的权值矩阵%%%%%%%%%%%%%%%%%%%%%%%
y()=a/;
y()=b/;
tic_x=rect()+rect()/;
tic_y=rect()+rect()/;
m_wei=zeros(a,b);%权值矩阵
h=y()^+y()^ ;%带宽 for i=:a
for j=:b
dist=(i-y())^+(j-y())^;
m_wei(i,j)=-dist/h; %epanechnikov profile 核函数
end
end
C=/sum(sum(m_wei));%归一化系数 %计算目标权值直方图qu
%hist1=C*wei_hist(temp,m_wei,a,b);%target model
hist1=zeros(,);
for i=:a
for j=:b
%rgb颜色空间量化为16** bins
q_r=fix(double(temp(i,j,))/); %fix为趋近0取整函数,红色
q_g=fix(double(temp(i,j,))/); %绿色
q_b=fix(double(temp(i,j,))/); %蓝色
q_temp=q_r*+q_g*+q_b; %设置每个像素点红色、绿色、蓝色分量所占比重
hist1(q_temp+)= hist1(q_temp+)+m_wei(i,j); %计算直方图统计中每个像素点占的权重
end
end
hist1=hist1*C;
rect()=ceil(rect());
rect()=ceil(rect()); %%
%%%%%%%%%%%%%%%%%%%%%%%%%读取序列图像%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for l=:nframes
Im= read(videoObj, l);%读取第i帧
num=;
Y=[,]; %%%%%%%mean shift迭代
while((Y()^+Y()^>0.5)&num<) %迭代条件
num=num+;
temp1=imcrop(Im,rect);
%计算侯选区域直方图
%hist2=C*wei_hist(temp1,m_wei,a,b);%target candidates pu
hist2=zeros(,);
for i=:a
for j=:b
q_r=fix(double(temp1(i,j,))/);
q_g=fix(double(temp1(i,j,))/);
q_b=fix(double(temp1(i,j,))/);
q_temp1(i,j)=q_r*+q_g*+q_b;
hist2(q_temp1(i,j)+)= hist2(q_temp1(i,j)+)+m_wei(i,j);
end
end
hist2=hist2*C;
%figure();
%subplot(,,);
%plot(hist2);
% hold on; w=zeros(,);
for i=:
if(hist2(i)~=) %不等于
w(i)=sqrt(hist1(i)/hist2(i));
else
w(i)=;
end
end %变量初始化
sum_w=;
xw=[,];
for i=:a;
for j=:b
sum_w=sum_w+w(uint32(q_temp1(i,j))+);
xw=xw+w(uint32(q_temp1(i,j))+)*[i-y()-0.5,j-y()-0.5];
end
end
Y=xw/sum_w;
%中心点位置更新
rect()=rect()+Y();
rect()=rect()+Y();
end %%%跟踪轨迹矩阵%%%
tic_x=[tic_x;rect()+rect()/];
tic_y=[tic_y;rect()+rect()/]; v1=rect();
v2=rect();
v3=rect();
v4=rect();
%%
%%%显示跟踪结果%%%
%subplot(,,);
imshow(uint8(Im));
title('目标跟踪结果及其运动轨迹');
hold on;
plot([v1,v1+v3],[v2,v2],[v1,v1],[v2,v2+v4],[v1,v1+v3],[v2+v4,v2+v4],[v1+v3,v1+v3],[v2,v2+v4],'LineWidth',,'Color','r');
plot(tic_x,tic_y,'LineWidth',,'Color','b');
hold off;
pause(0.000001)
end

最后盗一张matlab官网效果图

meanShift

matlab工具箱之人眼检测+meanshift跟踪算法--人眼跟踪的更多相关文章

  1. 比微软kinect更强的视频跟踪算法--TLD跟踪算法介绍

    转自:http://blog.csdn.net/carson2005/article/details/7647500 TLD(Tracking-Learning-Detection)是英国萨里大学的一 ...

  2. TLD目标跟踪算法

    1. 简介 TLD目标跟踪算法是Tracking-Learning-Detection算法的简称.这个视频跟踪算法框架由英国萨里大学的一个捷克籍博士生Zdenek Kalal提出.TLD将传统的视频跟 ...

  3. TLD视觉跟踪算法(转)

    源:TLD视觉跟踪算法 TLD算法好牛逼一个,这里有个视频,是作者展示算法的效果,http://www.56.com/u83/v_NTk3Mzc1NTI.html.下面这个csdn博客里有人做的相关总 ...

  4. TLD(Tracking-Learning-Detection)一种目标跟踪算法

    原文:http://blog.csdn.net/mysniper11/article/details/8726649 视频介绍网址:http://www.cvchina.info/2011/04/05 ...

  5. TLD视觉跟踪算法

    TLD算法好牛逼一个,这里有个视频,是作者展示算法的效果,http://www.56.com/u83/v_NTk3Mzc1NTI.html.下面这个csdn博客里有人做的相关总结,感觉挺好的,收藏了! ...

  6. paper 140:TLD视觉跟踪算法(超棒)

    我是看了这样的一个视频:http://www.56.com/u83/v_NTk3Mzc1NTI.html 然后在准备针对TLD视觉跟踪算法来个小的总结. 以下博文转自:http://blog.csdn ...

  7. 挑战目标跟踪算法极限,SiamRPN系列算法解读

    商汤科技智能视频团队首次开源其目标跟踪研究平台 PySOT.PySOT 包含了商汤科技 SiamRPN 系列算法,以及刚被 CVPR2019 收录为 Oral 的 SiamRPN++.此篇文章将解读目 ...

  8. 基于MeanShift的目标跟踪算法及实现

    这次将介绍基于MeanShift的目标跟踪算法,首先谈谈简介,然后给出算法实现流程,最后实现了一个单目标跟踪的MeanShift算法[matlab/c两个版本] csdn贴公式比较烦,原谅我直接截图了 ...

  9. 目标跟踪算法meanshift优缺点

    原博主:http://blog.csdn.net/carson2005/article/details/7341051 meanShift算法用于视频目标跟踪时,采用目标的颜色直方图作为搜索特征,通过 ...

随机推荐

  1. Mercurial笔记(hg命令)

    两个站点: http://z42.readthedocs.org/zh/latest/devtools/hg.html http://bucunzai.net/hginit/ 添加用户名 在.hg目录 ...

  2. http学习 1-3 chapter3-报文

    如果说HTTP是因特网的信使,那么HTTP报文就是它用来搬东西的包裹了. 报文是如何流动的. HTTP报文的三个组成部分(起始行.首部和实体的主体部分) 请求和响应报文之间的区别 请求报文支持的各种功 ...

  3. 0-Spark高级数据分析-读书笔记

    学完了<Spark快速大数据分析>,对Spark有了一些了解,计划更近一步,开始学习<Spark高级数据分析>.这本书是用Scala写的,在学习的过程中想把其中的代码转换成Ja ...

  4. HTML编码规范

    HTML编码规范 1 前言 HTML作为描述网页结构的超文本标记语言,在百度一直有着广泛的应用.本文档的目标是使HTML代码风格保持一致,容易被理解和被维护. 2 代码风格 2.1 缩进与换行 [强制 ...

  5. 关于CSS初步入门简述1

    关于CSS的简介可以自行百度,本篇只考虑内容 首先关于CSS会由浅入深,写在前面的有很多不严谨,只是为了引出后文所写.不过如果谬误较大,敬请指正! 1.大部分的代码要写在之中 简单的例子: <b ...

  6. 处理 Oracle SQL in 超过1000 的解决方案

    处理oracle sql 语句in子句中(where id in (1, 2, ..., 1000, 1001)),如果子句中超过1000项就会报错.这主要是oracle考虑性能问题做的限制.如果要解 ...

  7. 【python】jiraAPI使用教程 自动创建jira问题单并置状态为OPEN

    环境依赖 : python库 redis jira  安装命令:pip install redis pip install jira redis服务安装命令: $sudo apt-get update ...

  8. NewQuant正式在Github发布

    Github上的NewQuant https://github.com/xuruilong100/NewQuant NewQuant简介: NewQuant是一个小型开源C++库,可以解决数据分析.金 ...

  9. php获取文件名称和扩展名

    1.basename()-返回路径的文件名请看下面php代码: <?php $path = "/usr/www/html/index.php"; echo basename( ...

  10. SQL NOT EXISTS

    看了一篇文章,虽然知识点很简单,但是还是帮我理解了一些以前没想到的东西 一共三个表student,class,score create table student(sno varchar(50) no ...