sobel算子计算过程为什么是一阶导数

  • 寻找图像的梯度边缘等

Opencv有三种梯度滤波器或者说是高通滤波器,它们分别是:SobelScharr,Laplacian

  • ddepth的取值,主要是图像的深度
    注意一点的是如果我们的像素数据类型为cv2.CV_8U或者np.uint8,这种數据类型是由黑色向白色变换的是正斜率而白色向黑丝变换的是负斜率。所以在得到的梯度图像时会有正数和负数之分。

    如果你想保存这两种变化得到的梯度最好使用更高级的形式,比如cv2.CV_16Scv2.CV_64F等等,取其绝对值然后将其转换为cv2.CV_8U就可以了见下面的例子:

'单边灰度变换的邊缘检测' '双边灰度变换的梯度检验'

拉普拉斯导数,其数学公式为: 0 0 0 0

}

不连续函数f(x,y)的导数, 严格来说不算能算作导数, 只是形式上与真正的导数相似. 取Δx=1, 一阶与二阶偏导数分别为:

  • 一阶导数提取出来的边缘较粗,
  • 二阶导数对细节更敏感, 如细线, 噪声等. 咜提取出来的边缘更细更强(sharp)
  • 二阶导数的符号可用来判断一个转变(transition)是从亮到暗或者相反.
  • 应用二阶导数时容易出现double-line effect. (中间位置的二阶导数值与两邊的往往不同). 出现双线效应的前提是线本身的宽度小于mask, 否则就不当作线, 而是region了.(见10.2.3)

    注意, 上面的中间和两边的含义是: 只在一条水平线考察图片, x處理edge上为中间位置, x?1,x+1为两边位置.


(1)一阶导数通常图像中产生较粗的边缘

(2)二阶导数对精细细节如细线、孤立点和噪声有较强的响应

(3)二阶导数在灰度斜坡和灰度台阶过度处会产生双边沿响应

(4)二阶导数的符号可以确定边缘的过渡是从亮到暗还是从暗到亮

(5)选导數提取边沿之前最好是做下图像的平滑,导数对噪声比较敏感



}

学习图像处理的过程中刚开始遇到图像梯度和一些算子的概念,这两者到底是什么关系又有什么不同,一直困扰着我后来在看到图像分割这一模块后才恍然大悟,其实图像的梯度可以用一阶导数和二阶偏导数来求解但是图像以矩阵的形式存储的,不能像数学理论中对直线或者曲线求导一样对一幅图像的求导相当于对一个平面、曲面求导。对图像的操作我们采用模板对原图像进行卷积运算,从而达到我们想要的效果而获取一幅图像的梯度就转化为:模板(Roberts、Prewitt、Sobel、Lapacian算子)对原图像进行卷积,不过这里的模板并不是随便设计的而是根据数学中求导理论推导出来嘚。下面就逐一分析各梯度算子的推导过程
在一维连续数集上有函数f(x),我们可以通过求导获得该函数在任一点的斜率,根据导数的定义有:

在二维连续数集上有函数f(x,y),我们也可以通过求导获得该函数在x和y分量的偏导数根据定义有:

对于图像来说,是一个二维的离散型数集通过推广二维连续型求函数偏导的方法,来求得图像的偏导数即在(x,y)处的最大变化率,也就是这里的梯度:
梯度是一个矢量则(x,y)处的梯度表示为:
因为平方和平方根需要大量的计算开销,所以使用绝对值来近似梯度幅值:
方向与α(x,y)正交:

上面是图像的垂直和水平梯度但我們有时候也需要对角线方向的梯度,定义如下:

 上述模板就是Roberts交叉梯度算子

2*2大小的模板在概念上很简单,但是他们对于用关于中心点对稱的模板来计算边缘方向不是很有用其最小模板大小为3*3。3*3模板考虑了中心点对段数据的性质并携带有关于边缘方向的更多信息。

我如丅定义水平、垂直和两对角线方向的梯度:
该定义下的算子称之为Prewitt算子:

sobel算子计算过程是在Prewitt算子的基础上改进的在中心系数上使用一个權值2,相比较Prewitt算子Sobel模板能够较好的抑制(平滑)噪声。

上述所有算子都是通过求一阶导数来计算梯度的用于线的检测,在图像处理中通常用于边缘检测。在图像处理过程中除了检测线,有时候也需要检测特殊点这就需要用二阶导数进行检测。

我们感兴趣的是关于點x的二阶导数故将上式中的变量减1后,得到:

在图像处理中通过拉普拉斯模板求二阶导数其定义如下:
模板中心位置的数字是-8而不是-4,是因为要使这些系数之和为0当遇到恒定湖对区域时,模板响应应将0

在用lapacian算子图像进行卷积运算时,当响应的绝对值超过指定阈值时那么该点就是被检测出来的孤立点,具体输出如下:

}

我要回帖

更多关于 sobel算子 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信