赞
踩
【前言】图像预处理对于整个图像处理任务来讲特别重要。如果我们没有进行恰当的预处理,无论我们有多么好的数据也很难得到理想的结果。
本篇是视觉入门系列教程的第二篇。整个视觉入门系列内容如下:
基本的图像处理与滤波技术。
从特征检测到人脸检测。
图像分割与分水岭(Watershed)算法(TBU)
在边缘和轮廓检测中,噪声对检测的精度有很大的影响。因此,去除噪声和控制像素值的大小可以帮助模型聚焦于整体特征,获得更高的精度。对应的图像处理技术包括:模糊化(Blurring)、阈值化(thresholding)和形态转换(morphological transformation)。本篇我们将详细介绍这几个常见的图像预处理技术。(本文假设读者已经熟悉卷积的概念。)
模糊化的目标是实现降噪。我们必须格外注意的是:如果我们把边缘检测算法应用到高分辨率的图像上,我们就会得到很多我们不感兴趣的检测结果;
相反,如果我们把图像模糊太多,我们就会丢失数据。因此,我们需要找到一个适当的模糊量,从而不失去理想的边缘。
有多种技术用于实现模糊效果,在这里我们讨论OpenCV中常用的四种技术:平均模糊(Averaging blurring)、高斯模糊(Gaussian blurring)、中值模糊(median blurring)和双边滤波(bilateral filtering)。这四种技术应用一个共同的基本原理,即使用滤波器(内核)对图像进行卷积运算。不同的是,在四种模糊方法中使用的滤波器的值是不同的。
平均模糊(Average blurring)是取给定内核(kernel)区域下所有像素值的平均值替换中心的值。例如,假设给定一个大小为5X5的内核(kernel),我们计算卷积结果的平均值,并将结果放在给定区域的中心。示例如下:
如果我们增加内核的大小,像素值将更加归一化。因此图像也会变得越来越模糊。让我们用下面的代码对比处理结果。(为了便于比较,将把原始图像加到结果中,进行对比显示。)
- # Import the image and convert to RGB
- img = cv2.imread('text.jpg')
- img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
- # Plot the image with different kernel sizes
- kernels = [5, 11, 17]
- fig, axs = plt.subplots(nrows = 1, ncols = 3, figsize = (20, 20))
- for ind, s in enumerate(kernels):
- img_blurred = cv2.blur(img, ksize = (s, s))
- ax = axs[ind]
- ax.imshow(img_blurred)
- ax.axis('off')
- plt.show()
中值模糊(Medium blurring)和平均模糊(Average blurring)是一样的,只是它使用的是中值而不是平均值。正由于这个特性,当我们需要处理图像中突然出现的噪音时(如“椒盐噪音”),使用中值模糊(medium blurring)的效果要比平均模糊(average blurring)效果好。
高斯模糊(Gaussian blurringÿ
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。