Advertisement

局部图像特征

阅读量:

一、检测边缘
通过何种手段确定边缘点?
有很大梯度幅值的像素点!边缘点确定边缘!

从下图可以发现,边缘就是图像像素发生剧烈变化的地方,通过对图像求导找极值(极大值或极小值),就可以找到边缘。
在这里插入图片描述在这里插入图片描述现实很残酷啊,获得的图像可能含有噪声,于是有了下图,有了噪声求到的结果出现了无数多个极值,干扰我们获取边缘,有了噪声就去噪呗,使用高斯核先平滑再求导(二步),这个操作可以被(一步代替)将图像与查分高斯滤波器直接卷积。
在这里插入图片描述在这里插入图片描述高斯滤波的导数的相貌,那我们是不是可以认为高斯导数滤波可以帮我们找出边缘呢?!不同方向的高斯导数找到不同方向的边缘(图像对不同的滤波的产生的强烈强烈响应位置不同),对于每个像素计算两个方向上的梯度,最终对每个像素求总的梯度幅值和方向。
在这里插入图片描述!
通用的思想!
通过找同一梯度方向上最大(梯度是正的,所以只要极大值)的极值点来确定边缘点(体现了非极大值抑制),在确定了一个极大值点后,下一个极值点可能在垂直于当前极值点的梯度方向上,不断地迭代吧,最终找到的边缘点可以确定边缘。
左图利用了线性插值进行非极大值抑制,右图利用确定的边缘点寻找下一个边缘点。
在这里插入图片描述
结合具体算法!
canny边缘检测流程:
1.图像的每个像素点与差分高斯滤波做卷积(xy两个方向,计算幅值和方向)
2.非极大值抑制,对于像素点比较在其梯度方向上,该点的梯度幅值是否为最大值,若不是则抑制。
3.双阈值检测,设定两个阈值,将在上一步中保留的像素点点分为强边缘点、弱边缘点、舍弃的边缘点。
4.抑制孤立的弱边缘点,查看弱边缘点及其周围8个像素点是否含有强边缘点,若有则保留该弱边缘点,形成边缘。

二、检测角点(获取具有辨别力的patch)

计算角点的大致思路:对像素点形成的一个patch,求出该patch内各个像素点的x,y方向梯度来构成一个M矩阵,求其特征值,计算响应值R。每个像素点都有一个响应,可以设定阈值,保留一部分像素点,在保留的像素点邻近区域内进行极大值抑制,最终可以获得图像的所有角点。

为什么进行极大值抑制?
对每个像素点计算一个角点响应,并不是角点仅由一个像素点决定,而是利用以该像素点为中心的patch求解梯度矩阵来计算特征值 、响应,所以极大值响应必不可少,每个像素点肯定会有重叠的地方。在近邻区域中保留一个响应值最大的像素点的位置就好啦。

通过求矩阵M的特征值判别像素点是角点、边缘点、flat点。(计算Ix和Iy,也是利用高斯导数滤波),两个特征值都很大则是角点,有一个远大于另一个特征值则是边缘点,两个特征值都很小则是flat 点。
在这里插入图片描述在这里插入图片描述为了更简单的检测各种点,把上式表达利用一个公式转化为一个数值,响应值大于0则是角点、小于0则是边缘点、绝对值很小是flat 点:
在这里插入图片描述在这里插入图片描述
回顾上面的两种方法,无论是基于梯度的边缘检测还是角点检测,都有一个最大的bug!使用的是图像的梯度值,太不稳定了,光照环境一旦变了,梯度值跟着变!对于角点来说,两张图像在匹配角点时,一张图像可能就无法检测出这个角点。我们不仅仅是要找特别 的patch,更要找到一种方法来使得不同环境下同一图像上同一patch尽可能的被找到,永远在寻找好的特征点的道路中探索着!!!大佬们提出,梯度赋值会受光照的影响,但是梯度的方向不会受光照的影响。于是乎,有了下面要说的HOG(Histograms of Oriented Gradients) 和 SIFT(scale invariant feature transform )。

三、HOG特征描述子(描述patch ,而不是去提取特征点)
利用了梯度方向(对光照不敏感)和分块(追踪的时候,想得到一个patch的描述子,仅仅直到下一帧目标可能出现的位置,这个时候采用分块就能比较好的描述patch,也能解决部分遮挡,部分遮挡的地方的cell偏差大,但其他cell处是正常的,这样的向量表示有可能在分类器中被正确分类)。
block分块后,关注每个cell的描述。小的局部描述拼接得到patch描述。
要死死的记住!每个bin对应的是梯度幅值和,而不是使用传统的直方图概念,即单纯的累加某方向出现次数。一个cell一个梯度直方图,最终的block是多个cell直方图表示的拼接。
基本单位:cell,计算cell的梯度方向直方图。
多个cell 的梯度方向直方图拼接成block的梯度方向直方图,称为HOG特征描述子。

基本流程:
1.灰度化
2.采用Gamma校正法对输入图像进行颜色空间的标准化
3.对每个像素点计算梯度大小和方向
4.设定直方图的bin个数(通常为9),确定cell大小后计算cell内像素点的梯度方向直方图,此时累加的是梯度幅值。
5.根据block和cell关系,拼接cell特征表示确定block的梯度方向直方图,再做归一化,可得到最终特征描述子。

四、SIFT(关注在多幅图像上找同一特征点)
分为两步:提取关键点、描述关键点。找特征点的时候不用没考虑梯度,但在确定特征点的主方向、特征点描述的时候,分别取patch构造了梯度方向直方图。
在这里插入图片描述1.尺度空间的极值检测(找特征点)

尺度空间所包含的寓意:图像尺寸大小、图像的模糊程度。
建立尺度空间是为了检测出在不同尺度下都存在的特征点!
用差分高斯(DOG)找极值
图像金字塔->高斯金字塔->差分高斯金字塔,比较某一像素点与同尺度和相邻尺度26个像素点值的大小,大于(或小于)所有的像素点就是候选的特征点。
去除对比度低的点
去除边缘点

2.计算主方向
利用高斯滤波后的图像选定合适的邻域来计算各个像素点的梯度幅值和方向,生成梯度方向直方图,直方图中幅值最大的方向就是特征点主方向。

3,构建特征点描述(特征点存在于一个patch里,希望得到特征点描述,肯定要构造patch,计算patch中每个像素点的梯度幅值和方向)
确定特征点的一个邻域,对邻域内所有像素点校准主方向
将邻域划分为多个子窗口,每个子窗口计算一个梯度方向直方图,拼接多个子窗口的梯度方向直方图得到特征点描述。
归一化处理

全部评论 (0)

还没有任何评论哟~