当前位置:   article > 正文

使用Python+OpenCV进行图像处理(二)| 视觉入门

opencv python进行图像处理的方法

640?wx_fmt=jpeg

 


【前言】图像预处理对于整个图像处理任务来讲特别重要。如果我们没有进行恰当的预处理,无论我们有多么好的数据也很难得到理想的结果。

本篇是视觉入门系列教程的第二篇。整个视觉入门系列内容如下:

  1. 理解颜色模型与在图像上绘制图形(图像处理基本操作)。

  2. 基本的图像处理与滤波技术。

  3. 从特征检测到人脸检测。

  4. 图像分割与分水岭(Watershed)算法(TBU)

在边缘和轮廓检测中,噪声对检测的精度有很大的影响。因此,去除噪声和控制像素值的大小可以帮助模型聚焦于整体特征,获得更高的精度。对应的图像处理技术包括:模糊化(Blurring)、阈值化(thresholding)和形态转换(morphological transformation)。本篇我们将详细介绍这几个常见的图像预处理技术。(本文假设读者已经熟悉卷积的概念。)

模糊化(Blurring)

模糊化的目标是实现降噪。我们必须格外注意的是:如果我们把边缘检测算法应用到高分辨率的图像上,我们就会得到很多我们不感兴趣的检测结果;

640?wx_fmt=png

相反,如果我们把图像模糊太多,我们就会丢失数据。因此,我们需要找到一个适当的模糊量,从而不失去理想的边缘。

有多种技术用于实现模糊效果,在这里我们讨论OpenCV中常用的四种技术:平均模糊(Averaging blurring)、高斯模糊(Gaussian blurring)、中值模糊(median blurring)和双边滤波(bilateral filtering)。这四种技术应用一个共同的基本原理,即使用滤波器(内核)对图像进行卷积运算。不同的是,在四种模糊方法中使用的滤波器的值是不同的。

平均模糊(Average blurring)是取给定内核(kernel)区域下所有像素值的平均值替换中心的值。例如,假设给定一个大小为5X5的内核(kernel),我们计算卷积结果的平均值,并将结果放在给定区域的中心。示例如下:

640?wx_fmt=png

如果我们增加内核的大小,像素值将更加归一化。因此图像也会变得越来越模糊。让我们用下面的代码对比处理结果。(为了便于比较,将把原始图像加到结果中,进行对比显示。)

  1. # Import the image and convert to RGB 
  2. img = cv2.imread('text.jpg')
  3. img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
  4. # Plot the image with different kernel sizes
  5. kernels = [51117]
  6. fig, axs = plt.subplots(nrows = 1, ncols = 3, figsize = (2020))
  7. for ind, s in enumerate(kernels):
  8.     img_blurred = cv2.blur(img, ksize = (s, s))
  9.     ax = axs[ind]
  10.     ax.imshow(img_blurred)
  11.     ax.axis('off')
  12. plt.show()

640?wx_fmt=png

中值模糊(Medium blurring)和平均模糊(Average blurring)是一样的,只是它使用的是中值而不是平均值。正由于这个特性,当我们需要处理图像中突然出现的噪音时(如“椒盐噪音”),使用中值模糊(medium blurring)的效果要比平均模糊(average blurring)效果好。

640?wx_fmt=png


高斯模糊(Gaussian blurringÿ

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/994305
推荐阅读
相关标签
  

闽ICP备14008679号