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实现dnspod自动更新dns解析的方法
Feb 14 Python
python结合opencv实现人脸检测与跟踪
Jun 08 Python
深入理解python对json的操作总结
Jan 05 Python
python使用arcpy.mapping模块批量出图
Mar 06 Python
Python自动发送邮件的方法实例总结
Dec 08 Python
Python爬虫文件下载图文教程
Dec 23 Python
python matplotlib库直方图绘制详解
Aug 10 Python
Python谱减法语音降噪实例
Dec 18 Python
Ranorex通过Python将报告发送到邮箱的方法
Jan 12 Python
Selenium及python实现滚动操作多种方法
Jul 21 Python
安装并免费使用Pycharm专业版(学生/教师)
Sep 24 Python
Python使用华为API为图像设置多个锚点标签
Apr 12 Python
python实现一个简单的贪吃蛇游戏附代码
python数字图像处理之对比度与亮度调整示例
Jun 28 #Python
python数字图像处理实现图像的形变与缩放
在python中读取和写入CSV文件详情
Jun 28 #Python
python数字图像处理之图像的批量处理
如何利用python实现Simhash算法
Jun 28 #Python
python数字图像处理:图像的绘制
You might like
利用PHP实现短域名互转
2013/07/05 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
JQuery live函数
2010/12/24 Javascript
HTML中的setCapture和releaseCapture使用介绍
2012/03/21 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
jQuery中复合属性选择器用法实例
2014/12/31 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
高效的jQuery代码编写技巧总结
2017/02/22 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
浅析前端路由简介以及vue-router实现原理
2018/06/01 Javascript
微信小程序实现topBar底部选择栏效果
2018/07/20 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
小程序外卖订单界面的示例代码
2019/12/30 Javascript
JavaScript实现动态留言板
2020/03/16 Javascript
[43:32]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第一场
2014/05/26 DOTA
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
python3学习笔记之多进程分布式小例子
2018/02/13 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
澳大利亚领先的优质葡萄酒拍卖会:Langton’s Fine Wines
2019/03/24 全球购物
澳大利亚和新西兰最大的在线旅行社之一:Aunt Betty
2019/08/07 全球购物
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
银行学习十八大感想
2014/01/11 职场文书
读书活动实施方案
2014/03/10 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
先进党支部事迹材料
2014/12/24 职场文书
青岛海底世界导游词
2015/02/11 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers