python图像滤波器_教你如何用python数字图像处理做图像滤波效果!

本文主要介绍python数字图像处理,图像简单滤波,图文并茂介绍skimage库中通过filters模块进行滤波操作,希望对您的学习有所帮助。

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

skimage库中通过filters模块进行滤波操作。

1、sobel算子

sobel算子可用来检测边缘

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

20200929135612379.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

70fdaaa0b7a2d68bcd4b094f2f85903b.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

2、roberts算子

roberts算子和sobel算子一样,用于检测边缘

调用格式也是一样的:

edges = filters.roberts(img)

3、scharr算子

功能同sobel,调用格式:

edges = filters.scharr(img)

4、prewitt算子

功能同sobel,调用格式:

edges = filters.prewitt(img)

5、canny算子

canny算子也是用于提取边缘特征,但它不是放在filters模块,而是放在feature模块

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

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k0NTQ0MTU5,size_16,color_FFFFFF,t_70wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

ee29c9d69077e2c84ca0416e6b66b06a.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

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

6、gabor滤波

gabor滤波可用来进行边缘检测和纹理特征提取。

函数调用格式:skimage.filters.gabor_filter(image, frequency)

通过修改frequency值来调整滤波效果,返回一对边缘结果,一个是用真实滤波核的滤波结果,一个是想象的滤波核的滤波结果。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k0NTQ0MTU5,size_16,color_FFFFFF,t_70wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

3f73cc42e8ba58e5e5dd1de8f06cc0e9.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

以上为frequency=0.6的结果图。

36571a6407ebd39b524367c69c70af39.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

以上为frequency=0.1的结果图

7、gaussian滤波

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

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

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k0NTQ0MTU5,size_16,color_FFFFFF,t_70wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

8b98500da09cf4b0497383666b65c95b.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

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

8.median

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

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k0NTQ0MTU5,size_16,color_FFFFFF,t_70wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

342ea51292cc7ccd676024fcd4fd3fce.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

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

9、水平、垂直边缘检测

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

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

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

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k0NTQ0MTU5,size_16,color_FFFFFF,t_70wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

f0881545a7bbc5920635ca82bcf0a277.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

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

10、交叉边缘检测

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

其中一个核:

0 1

-1 0

对应的函数:

roberts_neg_diag(image)

例:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k0NTQ0MTU5,size_16,color_FFFFFF,t_70wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

54ba74e9b1c291cef45ec2e975a23f2d.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

另外一个核:

1 0

0 -1

对应函数为:

roberts_pos_diag(image)

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k0NTQ0MTU5,size_16,color_FFFFFF,t_70wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

d517c287d634b0637e8416239a17ef24.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

此文转载文,著作权归作者所有,如有侵权联系小编删除!

需要源代码的或者想了解更多的(点击这里下载)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值