图像目标检测与跟踪学习笔记(三)
来源:互联网 发布:装饰工程造价软件 编辑:程序博客网 时间:2024/04/30 05:13
这一周主要是三个小组的汇报展示,分别是:直方图&haar like feature、PCA&LBP与HOG,在准备汇报的过程中,查阅相关资料,对概念有了比较深的理解,通过听其他组的汇报,也在短时间内了解到了算法的基本思想,受益颇丰。
1. 直方图&haar like feature
a. 直方图
直方图分为灰度直方图与颜色直方图,它是单个像素灰度分布的一阶统计量。纹理是灰度在空间以一定的形式变换产生的图案,直方图是描述图像中像素灰度级分布的工具,可以用直方图或其统计特征作为图像的纹理特征。
有公式:
matlab中可用 imhist()命令提取图像中的灰度直方图信息,colorhist()命令提取图像中的颜色直方图信息,用bar()命令画直方图,结果如下图所示:
b.haar like
haar like特征能更好地描述图片的明暗变化,一般选取具有某种特性的特征模板,在图像子窗口中扩展(平移伸缩)得到的特征称为矩形特征,其值称为特征值。通过改变特征模板的大小和位置,可在图像子窗口中穷举出大量的特征。常用的特征模板有:
检测窗口内矩形特征的数量非常多,为了实现快速计算如此多的特征,我们引入积分图这一概念:
积分图:是一个数据结构,可以用于快速计算子区域的像素和。定义为:
表示为在(x,y)位置上,对应的积分图中的像素为其左上角所有像素之和。编程时可以利用递归实现:
,
当求图中矩阵D的像素和时,可由D的四个顶点A、B、C、D点的像素积分进行线性运算得到(由面积的恒等式):
2. PCA&LBP
a. PCA(Principal Component Analysis)主成因分析
是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。PCA是人脸识别的主流方法之一。其核心思想是:重整高维数据,提取其中的重要部分,忽略其中无关紧要的部分。其降维的流程大致如下:图像集合{f(m,n)}中,每张图像可以用堆叠的方式表示成一个维列向量(令H=M*N):
依次将每一个图像列向量构成一个人脸样本矩阵,该样本矩阵即图像集合:可计算得到训练样本的协方差矩阵为:[Cf]阵为实对称方阵,则其一定存在H个相互正交的属于各个特征值的特征向量,即:
将特征向量按列组成一个矩阵(特征值从大到小排列):
按照此方法将训练集与测试集均进行降维。P矩阵也就构成PCA人脸识别需要的投影特征空间:
b. LBP (Local Binary Pattern)局部二值模式
是一种用来描述图像局部特征的算子,LBP特征具有灰度不变性和旋转不变性等显著优点。LBP特征比较出名的应用是用在人脸识别和目标检测中。 LBP分为原始LBP特征描述,改进版本,常用的有圆形LBP特征描述以及旋转不变LBP特征描述。
原始的LBP算子定义在像素3*3的邻域内,以邻域中心像素为阈值,相邻的8个像素的灰度值与邻域中心的像素值进行比较,若周围像素大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,3*3邻域内的8个点经过比较可产生8位二进制数,将这8位二进制数依次排列形成一个二进制数字,这个二进制数字就是中心像素的LBP值:
用公式表示为:
,
其中, (xc,yc) 是中心像素, 亮度为 Ic, 而 Ip(p=0,1,⋯,P−1) 是相邻像素的亮度. s(⋅) 是一个符号函数。
原始LBP特征使用的是固定邻域内的灰度值,当图像的尺度发生变化时,LBP特征的编码将会发生错误,将不能正确的反映像素点周围的纹理信息,因此研究人员对其进行了改进。为了适应不同尺度的纹理特征,并达到灰度和旋转不变性的要求,并用圆形邻域代替了正方形邻域,改进后的 LBP 算子允许在半径为 R 的圆形邻域内有任意多个像素点。从而得到了诸如半径为R的圆形区域内含有P个采样点的LBP算子:
2. HOG(Histogram of Oriented Gradient)
方向梯度直方图(HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在运动目标(特别是行人)的检测中获得了极大的成功。
具体的实现方法是:
首先将图像分成小的连通区域,我们把它叫细胞单元。然后采集细胞单元中各像素点的梯度的或边缘的方向直方图。最后把这些直方图中包含的特征组合起来就可以构成特征描述器。
具体实现步骤:
1.对图片做灰度化处理以及伽马矫正
%% 灰度化img=imread('D:\lena1.jpg');img=rgb2gray(img);img=double(img);figure;imshow(img,[]);[m1 ,n1]=size(img);%改变图像尺寸为step的最近整数倍,要不然后面就会发生错误img=imresize(img,[floor(m1/step)*step,floor(n1/step)*step],'nearest');[m,n]=size(img);%伽马校正figure;img=sqrt(img); imshow(img,[]);
fy=[-1 0 1]; %定义竖直模板fx=fy'; %定义水平模板Iy=imfilter(img,fy,'replicate'); %竖直边缘Ix=imfilter(img,fx,'replicate'); %水平边缘Ied=sqrt(Ix.^2+Iy.^2); %边缘强度、即梯度的长度Iphase=Iy./Ix; %边缘斜率,有些为inf,-inf,nan,其中nan需要再处理一下figure;imshow(Ied,[]);
3.取8*8像素为一个cell大小,求一个cell里面的梯度直方图特征(feature)
orient=9;%方向直方图的方向个数angular=360/orient; Cell=cell(1,1); %获取orient个方向的特征向量step=8; %step*step个像素作为一个cellii=1; jj=1;for i=1:step:m-step ii=1; for j=1:step:n tmpx=Ix(i:i+step-1,j:j+step-1); tmped=Ied(i:i+step-1,j:j+step-1); % 局部边缘强度归一化 tmped=tmped/sum(sum(tmped)); % 边缘斜率局部提取 tmpphase=Iphase(i:i+step-1,j:j+step-1); Hist=zeros(1,orient); %统计一个块里面的梯度信息 for p=1:step for q=1:step % 判断是不是一个数字True for Not-a-Number.如果不是一个数字,就归零(处理除数为0的情况) if isnan(tmpphase(p,q))==1 tmpphase(p,q)=0; end % 进行象限修正 ang=atan(tmpphase(p,q)); %atan求的是[-90 90]度之间 ang=mod(ang*180/pi,360); %全部变正,-90变270 if tmpx(p,q)<0 if ang<90 ang=ang+180; end if ang>270 ang=ang-180; end end ang=ang+0.0000001; %防止ang为0 Hist(ceil(ang/angular)) = Hist(ceil(ang/angular))+tmped(p,q); %ceil向上取整,使用边缘强度加权 end end %方向直方图归一化 Hist=Hist/sum(Hist); Cell{ii,jj}=Hist; ii=ii+1; end jj=jj+1; end
%求feature,2*2个cell合成一个block,没有显式的求block[m2, n2]=size(Cell);feature=cell(1,(m2-1)*(n2-1));for i=1:m2-1 for j=1:n2-1 f=[]; f=[f Cell{i,j}(:)' Cell{i,j+1}(:)' Cell{i+1,j}(:)' Cell{i+1,j+1}(:)']; feature{(i-1)*(n2-1)+j}=f; endendl=length(feature);f=[];for i=1:l f=[f;feature{i}(:)']; end figuremesh(f)
图片处理前后的效果如下所示:
对于hog算法的理解:
由于Hog算法提取的是梯度特征,而边缘处梯度较明显,所以能有效显示出图像的轮廓与形状,忽略了轮廓内的细节,所以当物体运动时,也能有效地被检测到。
- 图像目标检测与跟踪学习笔记(三)
- 图像目标检测与跟踪学习笔记(一)
- 图像目标检测与跟踪学习笔记(二)
- 图像目标检测与跟踪学习笔记(四)
- 图像目标检测与跟踪学习笔记(五)
- 运动图像目标检测与跟踪简述
- 基于深度学习的视频检测(三) 目标跟踪
- 运动目标检测与跟踪笔记
- 目标检测与跟踪
- 目标检测与跟踪
- 图像目标检测(Object Detection)原理与实现(三)
- Matlab图像序列中的运动目标检测与跟踪
- 运动目标检测与跟踪
- 对视频序列的 运动检测 目标跟踪(运动目标的检测与跟踪)
- 目标检测、跟踪和图像检索 数据库
- Opencv学习笔记(十一)目标跟踪
- 目标检测、目标跟踪的测试用图像序列
- 运动目标跟踪与检测的源代码(CAMSHIFT 算法)
- 暴雪公司经典的字符串的hash公式
- firewall
- SpringBoot非官方教程 | 第十六篇:用restTemplate消费服务
- ELF与BIN文件区别
- IDEA 使用Spring-boot-devTools无需重启Tomcat就可以更新页面
- 图像目标检测与跟踪学习笔记(三)
- gethostbyname() 函数说明
- C语言:近期学习整理
- 顶级Java多线程面试题及回答
- C++生成AI以及AI默认Animation,AI播放Montage,AIController控制移动的实现
- Promise 对象的使用方法
- RabbitMQ消息队列-Centos7下安装RabbitMQ3.6.1
- python 用列表递归创建二叉树
- synergy工具常见错误处理方式