python数字图像处理:图像简单滤波


Posted in Python onJune 28, 2022

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

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

1、sobel算子

sobel算子可用来检测边缘

函数格式为:skimage.filters.sobel(imagemask=None)

from skimage import data,filters
import matplotlib.pyplot as plt
img = data.camera()
edges = filters.sobel(img)
plt.imshow(edges,plt.cm.gray)

python数字图像处理:图像简单滤波

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的值来调整效果

from skimage import data,filters,feature
import matplotlib.pyplot as plt
img = data.camera()
edges1 = 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()

python数字图像处理:图像简单滤波

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

6、gabor滤波

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

函数调用格式:skimage.filters.gabor_filter(imagefrequency)

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

from skimage import data,filters
import matplotlib.pyplot as plt
img = data.camera()
filt_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()

python数字图像处理:图像简单滤波

以上为frequency=0.6的结果图。

python数字图像处理:图像简单滤波

以上为frequency=0.1的结果图

7、gaussian滤波

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

调用函数为:skimage.filters.gaussian_filter(imagesigma)

通过调节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()

python数字图像处理:图像简单滤波

可见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()

python数字图像处理:图像简单滤波

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

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()

python数字图像处理:图像简单滤波

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

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)

python数字图像处理:图像简单滤波

另外一个核:

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 相关文章推荐
使用Python的PEAK来适配协议的教程
Apr 14 Python
Python批量创建迅雷任务及创建多个文件
Feb 13 Python
Python实现基于PIL和tesseract的验证码识别功能示例
Jul 11 Python
对numpy中二进制格式的数据存储与读取方法详解
Nov 01 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
Nov 14 Python
浅谈Python中eval的强大与危害
Mar 13 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
Aug 05 Python
python创建ArcGIS shape文件的实现
Dec 06 Python
pytorch 常用线性函数详解
Jan 15 Python
Python调用Windows命令打印文件
Feb 07 Python
Python count函数使用方法实例解析
Mar 23 Python
Django filter动态过滤与排序实现过程解析
Nov 26 Python
python实现一个简单的贪吃蛇游戏附代码
python数字图像处理之对比度与亮度调整示例
Jun 28 #Python
python数字图像处理实现图像的形变与缩放
在python中读取和写入CSV文件详情
Jun 28 #Python
python数字图像处理之图像的批量处理
如何利用python实现Simhash算法
Jun 28 #Python
python数字图像处理:图像的绘制
You might like
PHP邮件专题
2006/10/09 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
2014/04/01 PHP
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
PHP验证码类ValidateCode解析
2017/01/07 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
客户端js性能优化小技巧整理
2013/11/05 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
JS通过分析userAgent属性来判断浏览器的类型及版本
2014/03/28 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
localStorage实现便签小程序
2016/11/28 Javascript
BootStrap selectpicker后台动态绑定数据
2017/06/01 Javascript
jQuery图片查看插件Magnify开发详解
2017/12/25 jQuery
vue路由--网站导航功能详解
2019/03/29 Javascript
vue实现短信验证码登录功能(流程详解)
2019/12/10 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
[01:09:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第一场 6.2
2018/06/04 DOTA
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
2018/02/21 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
2018/04/26 Python
解决Django migrate No changes detected 不能创建表的问题
2018/05/27 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
2020/02/11 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
2019/01/18 HTML / CSS
澳大利亚宠物食品和药物在线:Jumbo Pets
2018/03/24 全球购物
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
德国价格合理的品牌商品购物网站:averdo
2019/03/21 全球购物
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
咖啡店创业计划书范文
2014/09/15 职场文书
新闻发布会活动策划方案
2014/09/15 职场文书
学生意外伤害赔偿协议书
2014/09/17 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书
python周期任务调度工具Schedule使用详解
2021/11/23 Python
关于mysql中时间日期类型和字符串类型的选择
2021/11/27 MySQL