图像滤波和特征检测

图像卷积滤波

卷积滤波基本原理

  • 卷积核/掩膜:一个m*n大小的加权矩阵

  • 卷积滤波:先将掩膜旋转180度,再依次滑过图像上每个像素,相应滑动区域与掩膜对应元素乘积之和作为像素的新值
    图像滤波和特征检测

平滑滤波

压制、弱化或消除图像中的细节、突变、边缘和噪声,就是图像平滑化。图像平滑是对图像作低通滤波,可在空间域或频率域实现。空间域图像平滑方法主要用低通卷积滤波、中值滤波等;频域图像平滑常用的低通滤波器有低通梯形滤波器、低通高斯滤波器、低通指数滤波器、巴特沃思低通滤波器等

均值滤波

  • 使用如下掩膜进行卷积
    图像滤波和特征检测
  • 优点:使用简单,计算方便
  • 特点:核中区域贡献率相同
  • 函数: cv2.blur(InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DE)

中值滤波

  • 使用如下掩膜进行卷积
    图像滤波和特征检测
  • 优点:对于椒盐噪声有效
  • 特点:中心点的像素值被核中的中位数的像素代替
  • 函数: cv2.medianBlur(InputArray src, OutputArray dst, int ksize)

高斯滤波

  • 使用如下掩膜进行卷积
    图像滤波和特征检测
  • 优点:对于服从正太分布的噪声非常有效
  • 特点:核中区域贡献率与距离中心成正比,权重与高斯分布相关
  • 函数: cv2.GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT )

边缘检测基本原理

图像滤波和特征检测

  • 图象的边缘是指图象局部区域亮度变化显著的部分,该区域的灰度剖面一般可以看作是一个阶跃,即从一个灰度值在很小的缓冲区域内急剧变化到另一个灰度相差较大的灰度值。
  • 图象的边缘部分集中了图象的大部分信息,图象边缘的确定与提取对于整个图象场景的识别与理解是非常重要的,同时也是图象分割所依赖的重要特征,边缘检测主要是图象的灰度变化的度量、检测和定位。
  • 边缘检测的基本原理: 边缘检测的本质是微分,当相邻两个像素点的灰度值差异越大时,也就是其斜率越陡,也就是微分值越大,进而通过这个来判断边缘,实际中常用差分,x方向和y方向。

Sobel算子

图像滤波和特征检测

  • 原理:算子使用两个3X3的矩阵(图1)算子使用两个3X3的矩阵(图1)去和原始图片作卷积,分别得到横向G(x)和纵向G(y)的梯度值,如果梯度值大于某一个阈值,则认为该点为边缘点

LoG算子

图像滤波和特征检测

  • 原理:首先对图像做高斯滤波,然后再求其拉普拉斯(Laplacian)二阶导数。即图像与 Laplacian of the Gaussian function 进行滤波运算。最后,通过检测滤波结果的零交叉(Zero crossings)可以获得图像或物体的边缘。因而,也被业界简称为Laplacian-of-Gaussian (LoG)算子

Canny算子

  1. 对原始图像进行灰度化、对图像进行高斯滤波
    Canny算法通常处理的图像为灰度图,因此如果摄像机获取的是彩色图像,那首先就得进行灰度化。对一幅彩色图进行灰度化,就是根据图像各个通道的采样值进行加权平均。图像高斯滤波的实现可以用两个一维高斯核分别两次加权实现,也可以通过一个二维高斯核一次卷积实现。
  2. 用一阶偏导的有限差分来计算梯度的幅值方向
    关于图像灰度值得梯度可使用一阶有限差分来进行近似,这样就可以得图像在x和y方向上偏导数的两个矩阵。
  3. 对梯度幅值进行非极大值抑制
    图像梯度幅值矩阵中的元素值越大,说明图像中该点的梯度值越大,但这不不能说明该点就是边缘(这仅仅是属于图像增强的过程)。
  4. 用双阈值算法检测和连接边缘
    Canny算法中减少假边缘数量的方法是采用双阈值法。选择两个阈值,根据高阈值得到一个边缘图像,这样一个图像含有很少的假边缘,但是由于阈值较高,产生的图像边缘可能不闭合,为解决这样一个问题采用了另外一个低阈值。在高阈值图像中把边缘链接成轮廓,当到达轮廓的端点时,该算法会在断点的8邻域点中寻找满足低阈值的点,再根据此点收集新的边缘,直到整个图像边缘闭合。

图像直方图

直方图概念

  • 统计各个灰度级别在图像中的出现次数或概率,并用直方图显示出来
  • 具有图像平移、旋转、缩放不变性等众多优点
  • 直方图在进行图像计算处理时代价较小,所以经常用于图像处理

大津算法

遍历灰度取值,确定最佳阈值,使背景和目标之间的类间方差最大 (因为二者差异最大);

  • 记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;
  • 背景点数占图像比例为w1,平均灰度为u1。则图像的总平均灰度为:u=w0u0+w1u1。
  • 前景和背景图象的方差:g=w0*(u0-u)(u0-u)+w1(u1-u)(u1-u)=w0w1*(u0-u1)*(u0-u1),此公式为方差公式。
  • 可参照概率论课本上面的g的公式也就是下面程序中的sb的表达式。当方差g最大时,可以认为此时前景和背景差异最大,此时的灰度t是最佳阈值sb = w0w1(u1-u0)*(u0-u1)

Harris算子

进行角点检测的基本原理,并说明引入角点响应函数的意义
图像滤波和特征检测

定义和基本原理

  • Harris算子是Harris和Stephens在1998年提出的一种基于信号的点特征提取算子。其前身是Moravec算子。
  • 在图像中设计一个局部检测窗口,当该窗口沿各个方向做微小移动时,考察窗口的平均能量变化,当该能量变化超过设定的阈值时,就将窗口的中心像素点提取为角点
  • 在角点处,任意方向移动,窗口灰度值均剧烈变化

角点函数的意义

  • 角点响应值:R=detM−α(traceM)2
  • 当R接近于零时,处于灰度变化平缓区域;
  • 当R<0时,点为边界像素;
  • 当R>0时,点为角点。
    所以,引入角点响应函数的意义是由于λ1、λ2的大小是相对而言的,无法量化进行判断,所以引入角点响应函数,方便判断该点是否是角点

Hough变换

参数空间变换

  • 在原始图像坐标系下的一个点对应了参数坐标系中的一条直线
  • 同样参数坐标系的一条直线对应了原始坐标系下的一个点
  • 原始坐标系下呈现直线的所有点,它们的斜率和截距是相同的,所以它们在参数坐标系下对应于同一个点
  • 这样在将原始坐标系下的各个点投影到参数坐标系下之后,看参数坐标系下有没有聚集点,这样的聚集点就对应了原始坐标系下的直线。
  • 在实际应用中,y=kx+b形式的直线方程没有办法表示x=c形式的直线(这时候,直线的斜率为无穷大)
  • 所以实际应用中,是采用参数方程p=xcos(theta)+y*sin(theta)
  • 图像平面上的一个点就对应到参数p—theta平面上的一条曲线上

空间划分网格统计

  • 为了检测出直角坐标X-Y中由点所构成的直线,可以将极坐标a-p量化成许多小格
  • 根据直角坐标中每个点的坐标(x,y),在a = 0-180°内以小格的步长计算各个p值,所得值落在某个小格内,便使该小格的累加记数器加1
  • 当直角坐标中全部的点都变换后,对小格进行检验,计数值最大的小格,其(a,p)值对应于直角坐标中所求直线

简述SIFT原理

sift原理

  1. 尺度空间极值检测
  • 在图像信息处理模型中引入一个被视为尺度的参数
  • 通过连续变化尺度参数获得多尺度下的尺度空间表示序列
  • 尺度空间中各尺度图像的模糊程度逐渐变大,能够模拟人在距离目标由近到远时目标在视网膜上的形成过程
  • 搜索所有尺度上的图像位置,通过高斯微分函数来识别潜在的对于尺度和旋转不变的兴趣点。
  1. 关键点定位
    在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。关键点的选择依据于它们的稳定程度。
  2. 方向确定
  • 基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。
  • 使用图像梯度的方法求取局部结构的稳定方向
  • 对于在DOG金字塔中检测出的关键点点,采集其所在高斯金字塔图像3σ邻域窗口内像素的梯度和方向分布特征。
  • 所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。
  1. 关键点描述
  • 在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度。
  • 这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变形和光照变化。

orb算子原理

OFAST提取特征点

oFAST是一类快速角点检测算法,并具备旋转不变性

  • 从图像中选取一点P,以P为圆心画一个半径为3像素的圆。圆周上如果有连续N个像素点的灰度值比P点的灰度值大或小,则认为P为特征点。这就是大家经常说的FAST-N。有FAST-9、FAST-10、FAST-11、FAST-12,大家使用比较多的是FAST-9和FAST-12
  • 为了加快特征点的提取,快速排出非特征点,首先检测1、5、9、13位置上的灰度值,如果P是特征点,那么这四个位置上有3个或3个以上的的像素值都大于或者小于P点的灰度值。如果不满足,则直接排出此点
  • 机器学习的方法筛选最优特征点,使用ID3算法训练一个决策树,将特征点圆周上的16个像素输入决策树中,以此来筛选出最优的FAST特征点
  • 使用非极大值抑制算法去除临近位置多个特征点。计算特征点出的FAST得分值s(像素点与周围16个像素点差值的绝对值之和)。以特征点p为中心的一个邻域(如3x3或5x5)内,若有多个特征点,则判断每个特征点的s值。若p是邻域所有特征点中响应值最大的,则保留;否则,抑制。若邻域内只有一个特征点,则保留。
  • 建立金字塔以实现特征点多尺度不变性。设置一个比例因子scaleFactor(opencv默认为1.2)和金字塔的层数nlevels(Opencv默认为8)。将原图像按比例因子缩小成nlevels幅图像。缩放后的图像为:I’= I/scaleFactork(k=1,2,…, nlevels)。nlevels幅不同比例的图像提取特征点总和作为这幅图像的oFAST特征点
  • 通过矩来计算特征点以r为半径范围内的质心,特征点坐标到质心形成一个向量作为该特征点的方向。

rBRIEF特征描述

图像滤波和特征检测

rBRIEF是一类角点描述(编码算法),并且编码具有良好的可区分性

  • BRIEF算法计算出来的是一个二进制串的特征描述符。它是在一个特征点的邻域内,选择n对像素点pi、qi(i=1,2,…,n)。
    比较每个点对的灰度值的大小,如果I(pi)> I(qi),则生成二进制串中的1,否则为0。所有的点对都进行比较,则生成长度为n的二进制串。一般n取128、256或512,opencv默认为256
  • 在300k特征点的每个31x31邻域内按M种方法取点对,比较点对大小,形成一个300kxM的二进制矩阵Q。矩阵的每一列代表300k个点按某种取法得到的二进制数。对Q矩阵的每一列求取平均值,按照平均值到0.5的距离重新对Q矩阵的列向量排序,形成矩阵T。取T的下一列向量和R中的所有列向量计算相关性,如果相关系数小于设定的阈值,则将T中的该列向量移至R中