python彩色边缘检测_基于python的边缘检测的几种方法的效果对比及分析

本文详细介绍了Python中Sobel、Scharr、Laplace和Canny四种边缘检测方法,并通过实例展示了它们的效果。在对比中,Laplace算子在去除噪声后接近单像素边缘,而Canny算子虽然也是单像素,但边缘未完全闭合。建议根据应用场景选择合适的边缘检测算法。
摘要由CSDN通过智能技术生成

边缘检测是图像处理和计算机视觉的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点,图像属性中的显著变化通常反映了属性的重要事件和变化。这些包括:深度上的不连续,表面方向的不连续,物质属性变化和场景照明变化。边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。图像边缘检测大幅度的减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。

在图像中,边缘可以看做是位于一阶导数较大的像素处,因此,我们可以求图像的一阶导数来确定图像的边缘,像sobel算子等一系列算子都是基于这个思想的。如下图a表示函数在边沿的时候关系,求导得b图,可知边沿可就是函数的极值点,对应二阶导数为0处,如图c的二阶导图。

0a256f6909a2

图a

0a256f6909a2

图b

0a256f6909a2

图c

在实际的图像分割中,往往只用到一阶和二阶导数,虽然原理上,可以用更高阶的导数,但是因为噪声的影响,在纯粹二阶的导数操作中就会出现对噪声的敏感现象,三阶以上的导数信息往往失去了应用价值。二阶导数还可以说明灰度突变的类型。在某些情况下,如灰度变化均匀的图像,只利用一阶导数可能找不到边界,此时二阶导数就能提供很有用的信息。二阶导数对噪声也比较敏感,解决的方法是先对图像进行平滑滤波,消除部分噪声,再进行边缘检测。不过,利用二阶导数信息的算法是基于过零检测的,因此得到的边缘点数比较少,有利于后继的处理和识别工作。

在OpenCV中,边缘检测的方法有以下几种:Sobel、Scharr、Laplace以及Canny,其中前三种方法是带方向的。

测试方法,将一张200*200的图片,在进行二值化之后再分别使用这几种方法进行边缘检测;生成一个1000*1000的矩阵,并且画出网格线,网格大小为5*5,每个网格图上测试图片的相应的像素颜色,以此更方便的观察集中边缘检测的效果。

下图为原图未经边缘检测生成的对比图片。由于该图片为专门生成的图片,没有噪点,所以不用进行降噪操作。

0a256f6909a2

原始图片

0a256f6909a2

原始图片映射

之所以要做一个映射的原因是,这里的评判标准为,尽可能得到单像素边缘。直接将图片放大,得到的图片不够清晰,而映射之后,能够足够清晰的显示边缘宽度。

1.Sobel算子

其主要用于边缘检测,在技术上它是以离散型的差分算子,用来运算图像亮度函数的梯度的近似值,Sobel算子是典型的基于一阶导数的边缘检测算子,由于该算子中引入了类似局部平均的运算,因此对噪声具有平滑作用,能很好的消除噪声的影响。

Sobel算子包含两组3x3的矩阵,分别为横向及纵向模板,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。实际使用中,常用如下两个模板来检测图像边缘。

0a256f6909a2

0a256f6909a2

图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。

0a256f6909a2

然后可用以下公式计算梯度方向。

0a256f6909a2

如果

math?formula=%5Cvartheta%20等于零,即代表图像该处拥有纵向边缘,左方较右方暗。

在opencv中,Sobel的函数原型为:

dst = cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, del

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值