梯度与Roberts、Prewitt、Sobel、Lapacian算子

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

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

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

上面是图像的垂直和水平梯度,但我们有时候也需要对角线方向的梯度,定义如下:
这里写图片描述
对应模板为:这里写图片描述

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

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

3、Prewitt和Sobel算子:
在3*3模板中:这里写图片描述

我如下定义水平、垂直和两对角线方向的梯度:
这里写图片描述
该定义下的算子称之为Prewitt算子:
这里写图片描述

Sobel算子是在Prewitt算子的基础上改进的,在中心系数上使用一个权值2,相比较Prewitt算子,Sobel模板能够较好的抑制(平滑)噪声。
计算公式为:这里写图片描述
Sobel算子:这里写图片描述

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

4、Lapacian算子:
一阶导数:这里写图片描述

二阶导数:这里写图片描述

我们感兴趣的是关于点x的二阶导数,故将上式中的变量减1后,得到:
这里写图片描述

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

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


读取图像"barbara.nmp"通常需要使用计算机视觉或图像处理库,比如Python的OpenCV或者MATLAB等。图像锐化边缘处理涉及到对图像进行增强边缘特征的操作,主要有以下几种滤波器: 1. **拉普拉斯算子** (Laplacian): 这是一种二阶微分算子,通过计算图像像素点周围梯度的平方和,可以突出图像的边缘和变化区域。在OpenCV中,`cv2.Laplacian(image, cv2.CV_64F)`可以用于应用此操作。 2. **罗伯特算子** (Roberts Cross): 由两个互相垂直的1x1的核组成,分别检测水平和垂直方向的变化,简单易计算,常用于初学者教程中。 3. **Prewitt算子**: 类似于罗伯茨算子,也是由两个小的1x1矩阵构成,但是它们的方向更倾斜,对于检测斜向边缘更有优势。 4. **Sobel算子**: 是一种二维卷积算子,包括水平、垂直以及两个对角线方向的一阶导数估计,因此能较好地捕捉边缘信息。在OpenCV中,`cv2.Sobel(image, cv2.CV_64F, dx=1, dy=0)`用于计算水平 Sobel,`dy=1`用于垂直方向。 要实际应用这些算法,你需要按照以下步骤操作: 1. 导入必要的库函数和图像数据。 2. 加载图像 `image = cv2.imread('barbara.nmp', 0)` (假设为灰度图像)。 3. 应用滤波器并保存结果到新的变量。 4. 可选地,可以调整阈值来增强边缘效果,并进行非极大值抑制等后续处理。 ```python import cv2 # 读取图像 img = cv2.imread('barbara.nmp', cv2.IMREAD_GRAYSCALE) # 拉普拉斯算子 laplacian_img = cv2.Laplacian(img, cv2.CV_64F) # 罗伯特算子 kernel = [[1, -1], [-1, 1]] roberts_img = cv2.filter2D(img, -1, kernel) # Prewitt算子 prewitt_horizontal = cv2.Prewitt(img, cv2.CV_64F) prewitt_vertical = cv2.Prewitt(img, cv2.CV_64F, dx=0, dy=1) prewitt_img = prewitt_horizontal + prewitt_vertical # Sobel算子 sobel_x = cv2.Sobel(img, cv2.CV_64F, 1, 0) sobel_y = cv2.Sobel(img, cv2.CV_64F, 0, 1) sobel_img = sobel_x + sobel_y # 后续处理和显示结果 # ... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值