前置知识
边缘检测:图像边缘的强度(边缘线的清晰度)由图像的梯度的强度决定,因为梯度值越强,说明x轴、y轴的像素点变化越快,所以该点处越可能是边缘。边缘和梯度方向是垂直的。举个例子,下图就是用的y方向的偏导核,留下来的就是x方向的边缘
散度:散度看是某一点是流入还是流出,所以照样是求三个方向的导数。啊,你这不和梯度一样了么?不一样,梯度计算对象是标量(具体来说是对标量求导,结果是有方向的数),散度计算对象是矢量(具体来说是各分量的求导,结果是一个没有方向的数)。散度计算结果的正负,如果大于零,表示该是发散的即出去的矢量多,如果等于零,表示流过而已,如果小于零,表示该点有吸收汇聚即进来的矢量多;
下面散度的计算公式可以看作哈密顿算子和F向量的点乘:
梯度:梯度的方向是函数值增加最快的方向
拉普拉斯算子
拉普拉斯算子是对图像的二阶微分,是用来求取边缘的, Laplace算子是各项同性的,即具有旋转不变性,在一阶微分里,我们是用|dx|+|dy|来近似一个点的梯度的,当图像旋转一个角度时,这个值就变化了,但对于Laplace算子来说不管图像怎么旋转,得到的响应是一样的。然后就是拉普拉斯算子关心的是图像灰度的突变而不强调灰度缓慢变化的区域,对边缘的定位能力更强。
边缘点对应的位置应该是在过零点处,如下图所示,图中的第一幅小图为图像信号,第二幅小图为图像的一阶微分,第三幅小图为对图像的二阶微分:
然而真正在代码实现时,用拉普拉斯核卷积图像求取边缘时,是直接对图像用拉普拉斯模板卷积后得到响应值,然后对输出的响应值取绝对值就是边缘,这里可以看下图来理解,在连续强度不变的区域响应值为0,在边的一侧响应为正,在边的另一侧响应为负,在边中间的某一点响应值为0。直接对输出的响应值取绝对值得到的边缘其实是在真正边缘的一侧,这样求取的结果只是近似的,想要得到最真正的边缘还是应该求取过零点,但是这样方便编写代码:
下面是关于拉普拉斯算子的推导:
高斯二阶导算子/拉普拉斯高斯算子(LOG)
高斯拉普拉斯(LOG)算子也称高斯二阶导核d2g/dx2,g为高斯平滑核,如下图所示:
高斯二阶导核只有一个需要调整的参数就是σ,因为窗宽可以由3σ的经验公式得到。这个核相当于可以拆分成两个步骤:首先对原始信号进行高斯平滑,然后对得到的信号求二阶导。由于卷积存在交换律结合律,所以这两个步骤其实也可以先等同于对高斯核求二阶导后再对信号进行卷积。即使原来的边缘是从0到255突变的信号,在过了一遍高斯核后也会存在拐点。边缘就对应二阶导数过零点,二阶过零点代表突变的地方,也就是拐点(二阶导为0的点,且该点的左右邻域是异号。
LOG算子是怎么被构想出来的呢? 在进行Laplacian操作之前通常需要先用高斯平滑滤波器对图像进行平滑处理,以降低Laplacian操作对于噪声的敏感性。事实上由于卷积操作具有结合律,因此我们先将高斯平滑滤波器与拉普拉斯滤波器进行卷积便是LOG算子,然后利用得到的混合滤波器去对图片进行卷积以得到所需的结果。
值得注意的是高斯二阶导模板/LOG算子不仅有提取图像边缘的功能,还具有尺度选择特性。为什么叫做尺度选择特性呢?举个例子,就是你对着同一个物体拍一张图,对于一些点,不管你图片初始尺寸是多少,我都能调整Blob的半径使这个点在作用后达到级值,在达到极值的尺度下所框出的信息量是一样的。有了尺度选择特性我们便可做到尺度不变性,即对于不同尺度的同一物体,我们有匹配的一个极值点能把它给检测出来。举个反例,对于Harris角点检测算法来说,如下图,右边尺度的图的角点能被检测出来,而将尺度放大后,左边尺度的图的角点不会被检测出来,这样就说明Harris角点检测算法不具有尺度不变性,即随着尺度的变化对同一个东西的检测结果可能会不同。所以我们想要算法具有尺度的不变性!选择尺度可以这样理解:去选择什么半径的圆画上去是和当前这个图像像素点是最匹配的,如下图2所示,而这个圆的半径就是等于更号2倍的σ,而σ就是我们所说的尺度。
图1
图2
LOG算子用于选择尺度的时候,在不同的尺度空间上查找关键点,其实就是查找的Blob特征(Blob斑点特征通常和关键点(keypoint),兴趣点(intrestpoint)以及特征点(featurepoint)表示同一个概念,通常指与周围有着颜色和灰度区别的区域。Blob特征画出来如上图所示。),对关键点建立尺度空间,检测出不同的尺度,近看远看都能把这个东西找出来。怎么检测呢?对于某一尺度的信号,我们可以通过不断改变高斯二阶导的σ值(相当于窗宽也在变),当某一个σ的高斯二阶导模板能和这一尺度的信号能匹配时,卷积后会产生一个极大值(指绝对值)。
对于高斯二阶导核选择尺度特征来说,因为高斯二阶导直接用会有信号衰减,原因是由于σ的增大会衰减卷积后的信号。所以我们要对高斯二阶导乘σ的平方把衰减的东西去掉,然后再去比较不同的方差的高斯二阶导核对于信号的响应值,响应的最大值就是匹配上的。高斯偏导核和信号尺度直接的关系就是被测量的信号的半径是等于更号2倍的σ ,就相当于在图上画一个半径为更号2倍σ 的圆就代表这个尺度信号,所以后续的改进就是由于σ越来越大,窗宽也越来越大,卷积操作做起来就会变慢,所以就引出了sift特征,sift算法是用DOG (Difference of Guassian高斯差分核)来代替高斯二阶导核(LOG算子)提速。因为DOG模板可以利用高斯核的可分解的性质,高斯核的勾股弦定理来做,使得模板窗宽变小
SIFT算法
Sift算法解读直接参见这两个链接:
1./u014485485/article/details/78681086
2./ronny/p/4028776.html
如果觉得《拉普拉斯Laplace算子和高斯二阶导核(LOG算子)和SIFT算法》对你有帮助,请点赞、收藏,并留下你的观点哦!