边缘检测的理解可以结合前面的内核,说到内核在图像中的应用还真是多,到现在为止学的对图像的 *** 作都是核的 *** 作,下面还有更神奇的!
想把边缘检测出来,从图像像素的角度去想,那就是像素值差别很大,比如X1=20和X2=200,这两个像素差值180,在图像的显示就非常明显,这样图像的边缘不就体现出来了?但是问题来了,一幅图像给你,如果一个像素一个像素对比,
边缘检测原理及步骤在之前的博文中,作者从一维函数的跃变检测开始,循序渐进的对二维图像边缘检测的基本原理进行了通俗化的描述。结论是:实现图像的边缘检测,就是要用离散化梯度逼近函数根据二维灰度矩阵梯度向量来寻找图像灰度矩阵的灰度跃变位置,然后在图像中将这些位置的点连起来就构成了所谓的图像边缘(图像边缘在这里是一个统称,包括了二维图像上的边缘、角点、纹理等基元图)。
在实际情况中理想的灰度阶跃及其线条边缘图像是很少见到的,同时大多数的传感器件具有低频滤波特性,这样会使得阶跃边缘变为斜坡性边缘,看起来其中的强度变化不是瞬间的,而是跨越了一定的距离。这就使得在边缘检测中首先要进行的工作是滤波。
1)滤波:边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能。常见的滤波方法主要有高斯滤波,即采用离散化的高斯函数产生一组归一化的高斯核(具体见“高斯滤波原理及其编程离散化实现方法”一文),然后基于高斯核函数对图像灰度矩阵的每一点进行加权求和(具体程序实现见下文)。
2)增强:增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将图像灰度点邻域强度值有显著变化的点凸显出来。在具体编程实现时,可通过计算梯度幅值来确定。
3)检测:经过增强的图像,往往邻域中有很多点的梯度值比较大,而在特定的应用中,这些点并不是我们要找的边缘点,所以应该采用某种方法来对这些点进行取舍。实际工程中,常用的方法是通过阈值化方法来检测。
边缘检测算法1、Sobel边缘检测算法为例。
Sobel卷积核模板为:
偏导公式为:
2、Robert算子检测边缘:
x和y方向的算子
观察上诉的算子,可以发现和我们刚开始设想的一个一个比较差不多,比如本来比如X1=20和X2=40,这两个像素差值20,但是20体现不出来,所以用1,-1来增大这种差值,这其实解决了我们上诉遇到的第一点问题了,但是后面的两点依然没有解决。
具体的例子我们可以用opencv自带的API,addwight进行试验,把核改一下就行了。。。
Roberts算子检测方法对具有陡峭的低噪声的图像处理效果较好,但是利用roberts算子提取边缘的结果是边缘比较粗,因此边缘的定位不是很准确。
X和Y方向
对X\Y两个方向的梯度进行合并
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)