在深度学习大量应用之前,图像的识别主要是利用特征检测。包括边缘检测、特征检测等,这写方法很依赖科学家的经验和个人能力。

边缘检测

什么是边缘
视觉上:就是区分2个物体之间的边界
二值化的图片上:就是图像上灰度或者颜色变化比较剧烈的地方

如何评估变化剧烈
一般使用导数或者微分去表达数据变化的程度。其中导数存在一个问题是当角度为90°时,导数过大,不方便计算。因此用微分来判断变化率,也即用dy/dx近似导数,当固定dx时,只需比较dy就可以表达边界的强弱。这也叫梯度。

梯度怎么计算呢
梯度其实也是一个点与周围点的变化程度,我们希望得到变化率大的地方,这个和滤波有点相似。乘以特定的核函数得到核函数相似的波形。

常见的算子(滤波核)
Prewitt算子、Sobel算子、canny算子、Laplacian算子等等

Sobel算子

用2个3*3卷积(横向Gx和纵向Gy),分别和图片进行卷积,得到纵向和横向的亮度微分近似值。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Canny算子

步骤:
1)高斯滤波去噪
2)计算梯度幅值和方向
3)非极大值抑制
在每一点上,邻域中心与沿着其对应梯度方向的2个像素比较,如果中心像素是最大值,保留,否则置0
4)应用双阈值确定真实和可能的边缘
a)当前点的边缘梯度值≥maxVal:强边缘
b)minVal≤当前点的边缘梯度值≤maxVal:虚边缘
c)当前点的边缘梯度值≤minVal:虚边缘

LOG斑点检测

一个图形和二维函数进行卷积的物理意义是,看这个图形和二维函数模板的相似程度。
拉普拉斯函数对噪声很铭感,在卷积之前用一个高斯低通滤波对图像卷积去噪

角点检测

基础知识:
什么是角点
对于一个图形,一般分为2种区域,平坦区域和边缘特征
平坦区域的特点:窗口各个方向平移,窗口像素变化很小
边缘特点:如竖线,水平平移窗口时,像素变化很大,而垂直移动时变化很小
角点(更加特殊的边缘):无论怎么移动像素变化都很大
图像梯度
像素变化的大小可以用梯度进行评估
梯度的计算比较复杂,常用差分近似表示(卷积模板)
常用的卷积模板
sobel:梯度近似计算
在这里插入图片描述

laplacian:二阶导数(有梯度不变性)
在这里插入图片描述

scharr:结构较小时计算量比sobel小、
在这里插入图片描述

Moravec角点

这是一种基于灰度方差的角点检测方法,该算法计算图像中某个像素点沿着水平、垂直方向的灰度差异,确定角点位置

Harris角点

考察所有方向上的灰度差异,且有旋转不变形和对部分放射变换的稳定性
基本思想:
1)局部窗口左右上下移动计算像素变化
2)对每个窗口计算角点相应函数R
3)阈值处理:当R>阈值,是角点
算法步骤:
1)通过计算梯度的协方差矩阵M,得到灰度值变化大小
2)R取决于M的特征值(角点R值很大,平坦R值小,边缘的R是负数)
3)角点判定使用非极大抑制

Shi-Tomasi角点

通过考察自相关矩阵M的两个特征值中的较小值确定角点。

Fast角点

快!

SIFT

该算法对图像缩放、旋转、甚至仿射变换保持不变性
该算法主要思路:
a)构造图像的尺度空间表示(DOG金字塔),
b)在尺度空间中搜索图像的极值点,
c)由极值点建立特征描述向量,
d)用特征描述向量进行相似度匹配。
检测:
1)初步查探:通过每一个像素点与相邻所有点进行比较,求局部极值
2)精确定位:通过曲线拟合得到特征点精确位置(因为金字塔导致不同scale的位置可能不一样),去除不稳定的错误检测的极值点
3)关键点方向:通过求每个极值点的梯度确定(梯度直方图)
描述:
对关键点周围分块,计算每一块的梯度直方图。
如下图所示,中心点为要计算的像素,先获取周围8X8的图像梯度,然后分块计算每4X4区域内的梯度直方图,最后得到的关键点算子为2X2X8=32维。
在这里插入图片描述
匹配:
通过计算2组特征点的128维关键点的欧式距离判断是否匹配。

SUFT

ORB

包括2个部分:特征点提取和特征点描述
特征点提取是由FAST发展来的
特征点描述是根据BRIEF特征描述算子改进
brief算出来是一个二进制串的特征描述符,减少内存

总体而言
SUFT基本可以完全替代SIFT,在要求计算时间的情况下,选用ORB

Haar/SVM

Haar常用于人脸(反映灰度变化)
边缘特征
线性特征
中心特征
对角特征
特征模板
检测:平移
快速:积分图
有效:AdaBoost

HOG/DPM

HOG
区别于Canny只检测边缘,Hog需要知道边缘及其梯度和方向
计算流程:
预处理:resize(64*128)
计算:梯度、幅值、方向直方图
梯度标准化:减小亮度影响
DPM
在HOG基础上加上SVM滑窗+尺度金字塔

更多推荐