【VTK学习笔记-09】图像边缘检测(梯度算子、Canny算子、拉普拉斯算子)

学习教程:《VTK图形图像开发进阶》张晓东,罗火灵
特别感谢:东灵工作室

5.4 边缘检测

图像中不连续的灰度值会产生边缘,图像的边缘检测是基于边界的图像分割方法的基础。梯度实际上是反映图像的边缘信息。图像边缘常用图像一阶导数和二阶导数来检测。

5.4.1 梯度算子

梯度算子 对应图像一阶导数。图像一阶导数一般是通过差分运算来近似的。由于梯度图像是一个矢量,不能直接显示,因此需要计算图像中每个像素点的梯度大小,2-范数,即矢量的模。

计算梯度时,采用的是中间差分法,即像素在每个方向的差分都是利用前后两个像素值之差。vtkImageGradient类的内部定义了一个HandleBoundaries变量,会对是否计算边界像素梯度进行判断。

注意:彩色图像不能直接用来计算梯度,需要先转换为灰度图像。

索贝尔(Sobel)算子 也是一种常用的梯度算子。它采用3×3的模板在图像上移动,并在每个位置上计算对应中心像素的梯度值。

流程:
1.利用Sobel算子计算图像的梯度图像
2.提取X方向的梯度分量和Y方向的梯度分量
3.由于计算Sobel算子的值可能为负值,便对各分量图像计算绝对值
4.由vtkImageShiftScale将图像的数值范围调节到[0,255]再显示。

5.4.2 Canny算子

计算步骤:
1.消除原图像噪声(高斯平滑)
2.计算图像中每个像素的梯度,并计算模值和方向(差分法)
3.对梯度进行“非极大值抑制”。图像边缘点梯度值通常在梯度方向是极大值,因此检测边缘需要将非极大值赋值0来抑制非边缘点。
4.双阈值法检测边缘和连接边缘。取两个梯度阈值high和low。
将梯度图像中小于high的像素赋0得到边缘图像L1,该图像能够接近图像边缘但是可能会存在间断点。
将梯度图像中低于low的像素赋0得到边缘图像L2,该图像受噪声影响比较大,但是边缘信息更多。
连接边缘时,以L1为基础,对非零点进行边缘追踪,如果追踪过程中出现中断,则从L2对应像素点及其邻域来寻找可以连接的边缘,直至结束。

5.4.3 拉普拉斯算子

拉普拉斯算子是一个二阶边缘算子,即梯度的散度。其也是通过模板实现的。

拉普拉斯算子计算图像的二阶导数,对图像噪声比较敏感。拉普拉斯算子的结果为标量,表示边缘的宽度。但是它常产生双像素宽边缘,而且不能提供方向信息,因此较少直接用于边缘检测。

猜你喜欢

转载自blog.csdn.net/m0_51141265/article/details/132915549