python开发实践Canny边缘检测器

如果是从事图像处理的朋友,对于边缘检测应该或多或少都会有所接触,这是一个很基础性的应用,在我们之前的项目中大都是基于opencv内置的cv2.findContours()函数实现的,后续的处理各自应用需求不同也会有所不同,这里主要是想使用其他的边缘检测器来尝试对图像进行边缘检测处理,首先看下效果图:

可以直接生成噪声图像如下:

image = np.zeros((128, 128), dtype=float)
image[32:-32, 32:-32] = 1
image = ndi.rotate(image, 15, mode='constant')
image = ndi.gaussian_filter(image, 4)
image = random_noise(image, mode='speckle', mean=0.1)

之后借助于canny方法实现边缘检测,如下:

edges = canny(image, sigma=3)

Canny边缘检测器是一种多级边缘检测器。它使用基于高斯导数的滤波器来计算梯度的强度。高斯降低了图像中存在的噪声的影响。然后,通过去除梯度大小的非最大像素,将潜在边缘细化为1像素曲线。最后,使用梯度幅度上的滞后阈值来保持或去除边缘像素。

Canny有三个可调参数:高斯宽度(图像噪声越大,宽度越大),以及滞后阈值的低阈值和高阈值。

我们这里主要就是调整了sigma值,可以实现不同的效果,如下:

感兴趣的话可以试试。

猜你喜欢

转载自blog.csdn.net/Together_CZ/article/details/129401953