Python数字图像处理,图像处理Python

  Python数字图像处理,图像处理Python

  本文主要介绍python数字图像处理中图像简单滤波的一个实例。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。

  00-1010简介1、sobel算子2、roberts算子3、scharr算子4、prewitt算子5、canny算子6、gabor滤波器7、高斯滤波器8、median9、水平和垂直边缘检测10、交叉边缘检测

  

目录

  对图像进行滤波可以有两个作用:一是平滑滤波,抑制噪声;另一种是微分算子,可用于边缘检测和特征提取。

  过滤器模块用于过滤浏览库。

  

引言

  Sobel算子可以用来检测边缘。

  函数格式为skimage.filters.sobel (image,mask=none)

  从skimage导入数据,过滤器

  将matplotlib.pyplot作为plt导入

  img=data.camera()

  edges=filters.sobel(img)

  plt.imshow(边缘,plt.cm.gray)

  

1、sobel算子

  Roberts算子与sobel算子一样,用于检测边缘。

  呼叫格式也是一样的:

  edges=filters.roberts

  

2、roberts算子

  与sobel功能相同,调用格式:

  edges=filters.scharr(img)

  

3、scharr算子

  与sobel功能相同,调用格式:

  edges=filters.prewitt(img)

  

4、prewitt算子

  Canny算子也用于提取边缘特征,但它不是放在滤波器模块中,而是放在特征模块中。

  函数格式:skimage.feature.canny(image,sigma=1.0)

  您可以修改sigma的值来调整效果。

  从skimage导入数据、过滤器、特征

  将matplotlib.pyplot作为plt导入

  img=data.camera()

  edges 1=feature . canny(img)# sigma=1

  edges2=feature.canny(img,sigma=3) #sigma=3

  plt.figure(canny ,figsize=(8,8))

  plt.subplot(121)

  plt.imshow(edges1,plt.cm.gray)

  plt.subplot(122)

  plt.imshow(edges2,plt.cm.gray)

  plt.show()

  从结果可以看出,越小,边缘线越小。

  

5、canny算子

  Gabor滤波可用于边缘检测和纹理特征提取。

  函数调用格式:skim age . filters . Gabor _ filter(image,frequency)

  通过修改频率值来调整滤波效果,返回一对边缘结果,一个是实滤波核的滤波结果,一个是虚滤波核的滤波结果。

  从skimage导入数据,过滤器

  将matplotlib.pyplot作为plt导入

  img=data.camera()

  滤波器

  _real, filt_imag = filters.gabor_filter(img,frequency=0.6)

  plt.figure(gabor,figsize=(8,8))

  plt.subplot(121)

  plt.title(filt_real)

  plt.imshow(filt_real,plt.cm.gray)

  plt.subplot(122)

  plt.title(filt-imag)

  plt.imshow(filt_imag,plt.cm.gray)

  plt.show()

  

  以上为frequency=0.6的结果图。

  

  以上为frequency=0.1的结果图

  

  

7、gaussian滤波

  多维的滤波器,是一种平滑滤波,可以消除高斯噪声。

  

调用函数为:skimage.filters.gaussian_filter(image,sigma)

  

  通过调节sigma的值来调整滤波效果

  

from skimage import data,filters

  import matplotlib.pyplot as plt

  img = data.astronaut()

  edges1 = filters.gaussian_filter(img,sigma=0.4) #sigma=0.4

  edges2 = filters.gaussian_filter(img,sigma=5) #sigma=5

  plt.figure(gaussian,figsize=(8,8))

  plt.subplot(121)

  plt.imshow(edges1,plt.cm.gray)

  plt.subplot(122)

  plt.imshow(edges2,plt.cm.gray)

  plt.show()

  

  可见sigma越大,过滤后的图像越模糊

  

  

8、median

  中值滤波,一种平滑滤波,可以消除噪声。

  需要用skimage.morphology模块来设置滤波器的形状。

  

from skimage import data,filters

  import matplotlib.pyplot as plt

  from skimage.morphology import disk

  img = data.camera()

  edges1 = filters.median(img,disk(5))

  edges2= filters.median(img,disk(9))

  plt.figure(median,figsize=(8,8))

  plt.subplot(121)

  plt.imshow(edges1,plt.cm.gray)

  plt.subplot(122)

  plt.imshow(edges2,plt.cm.gray)

  plt.show()

  

  从结果可以看出,滤波器越大,图像越模糊。

  

  

9、水平、垂直边缘检测

  上边所举的例子都是进行全部边缘检测,有些时候我们只需要检测水平边缘,或垂直边缘,就可用下面的方法。

  

水平边缘检测:sobel_h, prewitt_h, scharr_h

  垂直边缘检测: sobel_v, prewitt_v, scharr_v

  

  

from skimage import data,filters

  import matplotlib.pyplot as plt

  img = data.camera()

  edges1 = filters.sobel_h(img)

  edges2 = filters.sobel_v(img)

  plt.figure(sobel_v_h,figsize=(8,8))

  plt.subplot(121)

  plt.imshow(edges1,plt.cm.gray)

  plt.subplot(122)

  plt.imshow(edges2,plt.cm.gray)

  plt.show()

  

  上边左图为检测出的水平边缘,右图为检测出的垂直边缘。

  

  

10、交叉边缘检测

  可使用Roberts的十字交叉核来进行过滤,以达到检测交叉边缘的目的。这些交叉边缘实际上是梯度在某个方向上的一个分量。

  其中一个核:

  

0 1
-1 0

  

  对应的函数:

  

roberts_neg_diag(image)

  

  例:

  

from skimage import data,filters

  import matplotlib.pyplot as plt

  img =data.camera()

  dst =filters.roberts_neg_diag(img)

  plt.figure(filters,figsize=(8,8))

  plt.subplot(121)

  plt.title(origin image)

  plt.imshow(img,plt.cm.gray)

  plt.subplot(122)

  plt.title(filted image)

  plt.imshow(dst,plt.cm.gray)

  

  另外一个核:

  

1 0
0 -1

  

  对应函数为:

  

roberts_pos_diag(image)

  

  

from skimage import data,filters

  import matplotlib.pyplot as plt

  img =data.camera()

  dst =filters.roberts_pos_diag(img)

  plt.figure(filters,figsize=(8,8))

  plt.subplot(121)

  plt.title(origin image)

  plt.imshow(img,plt.cm.gray)

  plt.subplot(122)

  plt.title(filted image)

  plt.imshow(dst,plt.cm.gray)

  

  以上就是python数字图像处理之图像简单滤波实现的详细内容,更多关于python数字图像处理简单滤波的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: