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. Linux虚拟化学习笔记&lt;一&gt;

    关于虚拟化,原理的东西是非常复杂的,要想完全理解,没有足够的耐心是不不能完全学透这部分内容的.那下面我主要以资源汇总的形式把一些资料罗列出来,帮助大家快速理解虚拟化,快速使用和配置. 为什么要虚拟化: ...

  2. Vertica 分区表设计(续)

    在上篇Vertica 分区表设计中,已经提过了Vertica的分区表创建和分区删除,但举例上并不系统, 本篇文章将系统的对分区表设计及后续的删除分区进行讲解. 概述:Vertica分区表(天和月)创建 ...

  3. poj 3735 Training little cats 矩阵快速幂+稀疏矩阵乘法优化

    题目链接 题意:有n个猫,开始的时候每个猫都没有坚果,进行k次操作,g x表示给第x个猫一个坚果,e x表示第x个猫吃掉所有坚果,s x y表示第x个猫和第y个猫交换所有坚果,将k次操作重复进行m轮, ...

  4. documentElement和ownerDocument和ownerElement

    1.document.documentElement是指文档根节点----HTML元素 2.element.ownerDocument是指当前元素所在的文档对象----document 3.attrO ...

  5. jquery中关于append()的用法笔记---append()节点移动与复制之说

    jquery中关于append()的用法笔记---append()节点移动与复制之说 今天看一本关于jquery的基础教程,看到其中一段代码关于append()的一行,总是百思不得其解.于是查了查官方 ...

  6. SSL使用windows证书库中证书实现双向认证

    前一段时间对OpenSSL库中的SSL通讯稍微琢磨了一下,在百度文库中找了个示例程序,然后在机器上跑,哇塞,运行成功!那时那个惊喜啊,SSL蛮简单的嘛.前几天,老板要我整一个SSL通讯,要使用wind ...

  7. 【LeetCode】233. Number of Digit One

    题目: Given an integer n, count the total number of digit 1 appearing in all non-negative integers les ...

  8. js弹窗登录效果(源码)--web前端

    1.JS弹窗登录效果 <!DOCTYPE html><html lang="en"><head> <meta charset=" ...

  9. CSS3 鲜为人知的属性-webkit-tap-highlight-color的理解

    (一)-webkit-tap-highlight-color         这个属性只用于iOS (iPhone和iPad).当你点击一个链接或者通过Javascript定义的可点击元素的时候,它就 ...

  10. 2017-2018-1 20179202《Linux内核原理与分析》第九周作业

    进程的切换和系统的一般执行过程 1.知识总结 (1)进程调度的时机: 中断处理过程直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule(). 内核线程是一 ...