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,filtersimport 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,filtersimport 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,filtersimport 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,filtersimport 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,filtersimport 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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。