精明边缘检测器

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

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

noisy image, Canny filter, $\sigma=1$, Canny filter, $\sigma=3$
import numpy as np
import matplotlib.pyplot as plt
from scipy import ndimage as ndi

from skimage import feature


# Generate noisy image of a square
im = np.zeros((128, 128))
im[32:-32, 32:-32] = 1

im = ndi.rotate(im, 15, mode='constant')
im = ndi.gaussian_filter(im, 4)
im += 0.2 * np.random.random(im.shape)

# Compute the Canny filter for two values of sigma
edges1 = feature.canny(im)
edges2 = feature.canny(im, sigma=3)

# display results
fig, (ax1, ax2, ax3) = plt.subplots(nrows=1, ncols=3, figsize=(8, 3),
                                    sharex=True, sharey=True)

ax1.imshow(im, cmap=plt.cm.gray)
ax1.axis('off')
ax1.set_title('noisy image', fontsize=20)

ax2.imshow(edges1, cmap=plt.cm.gray)
ax2.axis('off')
ax2.set_title(r'Canny filter, $\sigma=1$', fontsize=20)

ax3.imshow(edges2, cmap=plt.cm.gray)
ax3.axis('off')
ax3.set_title(r'Canny filter, $\sigma=3$', fontsize=20)

fig.tight_layout()

plt.show()

脚本的总运行时间: (0分0.146秒)

Gallery generated by Sphinx-Gallery