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使用min、max函数查找二维数据矩阵中最小、最大值的方法
May 15 Python
windows下python 3.6.4安装配置图文教程
Aug 21 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
Oct 11 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
python环境路径配置以及命令行运行脚本
Apr 02 Python
在python中画正态分布图像的实例
Jul 08 Python
Python寻找路径和查找文件路径的示例
Jul 10 Python
使用Python将字符串转换为格式化的日期时间字符串
Sep 01 Python
python中从for循环延申到推导式的具体使用
Nov 29 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
Jul 13 Python
filter使用python3代码进行迭代元素的实例详解
Dec 03 Python
浅析python字符串前加r、f、u、l 的区别
Jan 24 Python
python实现一个简单的贪吃蛇游戏附代码
python数字图像处理之对比度与亮度调整示例
Jun 28 #Python
python数字图像处理实现图像的形变与缩放
在python中读取和写入CSV文件详情
Jun 28 #Python
python数字图像处理之图像的批量处理
如何利用python实现Simhash算法
Jun 28 #Python
python数字图像处理:图像的绘制
You might like
for循环连续求和、九九乘法表代码
2012/02/20 PHP
基于PHP CURL获取邮箱地址的详解
2013/06/03 PHP
浅谈php命令行用法
2015/02/04 PHP
php+redis实现多台服务器内网存储session并读取示例
2017/01/12 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
XHTML-Strict 内允许出现的标签
2006/12/11 Javascript
完整显示当前日期和时间的JS代码
2007/09/17 Javascript
JavaScript 异步方法队列链实现代码分析
2010/06/05 Javascript
jQuery层次选择器选择元素使用介绍
2013/04/18 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
2015/07/17 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
jQuery.Validate表单验证插件的使用示例详解
2017/01/04 Javascript
js提取中文拼音首字母的封装工具类
2018/03/12 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
2019/11/14 Javascript
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python重试装饰器示例
2014/02/11 Python
python求列表交集的方法汇总
2014/11/10 Python
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
python学生信息管理系统
2018/03/13 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
PyQt5+python3+pycharm开发环境配置教程
2020/03/24 Python
如何真正的了解python装饰器
2020/08/14 Python
如何编写python的daemon程序
2021/01/07 Python
为数据库创建索引都需要注意些什么
2012/07/17 面试题
国防教育标语
2014/10/08 职场文书
教师政风行风评议心得体会
2014/10/21 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书