首页 > 编程知识 正文

边缘检测算法的基本原理,数字图像处理边缘检测算法

时间:2023-05-06 07:40:29 阅读:12491 作者:195

简要介绍了边缘检测的集中方法,并有matlab结果演示。

什么是边缘?

一般来说,边缘是指在某个局部图像强度急剧变化的区域。 强度的变化一般有两种情况。

1 .步进变化

灰度的变化图像如下图所示。 横轴表示空间变化,纵轴表示灰度变化,虚线表示边。

此图对应于向明亮方向渐变的过程。

2 .屋顶变化

灰度的变化图像如下图所示。 横轴表示空间变化,纵轴表示灰度变化,虚线表示边。

此图对应于实际从暗到亮到暗的过程。

边缘检测任务:

找到具有步长或屋顶变化的像素点集合。

边缘检测的基本原理:

既然边缘是灰度变化最剧烈的位置,最直观的想法就是求微分。

关于第一种情况,1阶微分的峰是边缘点,2阶微分的零点是边缘点。

关于第二种情况,1阶微分的零点是边缘点,2阶微分的峰值是边缘点。

采用一阶微分的方法,定义了表示图像灰度变化最剧烈方向的矢量——梯度算子。

坡度大小:

坡度方向:

在实际的图像处理中,可以使用差分法进行计算。 但是,要用差分的方法进行边缘检测,差分的方向和边缘的方向必须垂直,必须对图像的不同方向分别进行差分运算,运算量增加。 通常将边分为水平边、垂直边和对角线边。

1. Reberts算子

Roberts梯度算子以对角方向相邻的两个像素值之差为度量标准,其计算方法如下。

写成卷积运算的形式后,每个卷积内核如下所示。

2 .预写操作符

prewitt算子结合了差分运算和邻域平均的方法。 卷积模板如下:

3.sobel操作员

sobel运算符与prewitt运算符相似,但考虑到相邻不同像素点的影响度不同,采用加权平均。 卷积模板如下:

4.laplacian操作员

laplacian算子是使用二阶微分算子,实际上是梯度的分散度:

二阶微分:

然后,那个

写为卷积模板是:

这就是laplacian运算符。

5.canny操作员

canny算子是一系列求最佳边缘检测的方法。 这是先光滑后寻求指引的方法。

第一步:

用高斯滤波器对图像进行平滑处理。

高斯滤波器用于在图像中去除噪声,并采用邻域加权平均的方法来计算各个像素点的值。

第二步:

利用一阶差分计算边缘的方向和振幅。

卷积模板如下所示:

该方法已在上方一阶微分边缘检测方法中有介绍,求解方法相同。 是为了得到边缘的大小和方向。

第三步:

不是极大值抑制。

仅靠求出全局梯度方向无法确定边缘的位置。 所以,有必要抑制坡度值不最大的商店,强调真正的边缘。

在步骤2中,所确定的梯度的方向可以是360。 如下图所示,将该360的区域分割为4个空间。

对应于图像,一个像素点和与其相邻的八个像素点也可以被划分为四个区域。

现在需要的是判断沿着梯度方向的3个像素点(中心像素点和其他2个梯度方向区域内的像素点),如果中心像素点的梯度值不大于其他2个像素点的梯度值,则将该像素点的灰度值设为0。

步骤4 :

双阈值检测。

使两个阈值th1和th2作用于通过前一处理完成的图像,满足th1=0.4 th2。 将梯度值小于阈值的点的灰度值保持为0,获得两个新图像并且如图1和图2所示。 由于图2的操作的阈值大,因此在去除大部分噪声的同时,还可能去除有用的边缘信息。 图1保留了很多边缘信息,所以用图1补充图2。

补充方法:

扫描图2,当遇到第一个非零灰度的像素点p(x,y )时,从p点向周边一个接一个地扫描连续的非零灰度的像素点(得到边缘的轮廓线)。 在发现了轮廓线的终点、即不能扫描连续的非0灰度像素点的点记为QOV )的情况下,每当发现这样的QOV时,在图1中找到相同位置的像素点,检查其附近的8个像素点是否有非0灰度像素点在某些情况下,在图2中将该点的灰度设为0以外,作为p点重复整个扫描过程。

当整个过程不能再继续下去的时候,我们认为我们已经找到了边缘的轮廓线。 重复此过程,直到找到所有边的轮廓线。

最后是测试的matlab代码和实验结果。

I=imread(Lena.png ); a=特殊(高斯); I=过滤器2 (a,I )/255; 图形; imshow(I ); imwrite(I,' lena_0.jpg ); a=edge(I,' prewitt ' ); 图形; imshow(a; imwrite(a,' lena_1.jpg ); a=edge(I,' sobel '; 图形; imshow(a; imwrite(a,' lena_2.jpg ); a=edge(I,' log ); 图形; imshow(a; imwrite(a,' lena_3.jpg ); a=edge(I,' canny ' ); 图形; imshow(a; imwrite(a,' lena_4.jpg );

测试结果:

原图:

prewitt运算符:

sobel运算符:

laplacian操作员:

canny运算符:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。