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 相关文章推荐
python3.5仿微软计算器程序
Mar 30 Python
python 字符串转列表 list 出现\ufeff的解决方法
Jun 22 Python
python字典DICT类型合并详解
Aug 17 Python
Java与Python两大幸存者谁更胜一筹呢
Apr 12 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
Oct 14 Python
对python中数组的del,remove,pop区别详解
Nov 07 Python
Django管理员账号和密码忘记的完美解决方法
Dec 06 Python
基于django传递数据到后端的例子
Aug 16 Python
pycharm部署、配置anaconda环境的教程
Mar 24 Python
基于python实现计算两组数据P值
Jul 10 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
Dec 08 Python
python解析json数据
Apr 29 Python
python实现一个简单的贪吃蛇游戏附代码
python数字图像处理之对比度与亮度调整示例
Jun 28 #Python
python数字图像处理实现图像的形变与缩放
在python中读取和写入CSV文件详情
Jun 28 #Python
python数字图像处理之图像的批量处理
如何利用python实现Simhash算法
Jun 28 #Python
python数字图像处理:图像的绘制
You might like
discuz7 phpMysql操作类
2009/06/21 PHP
php实现文章置顶功能的方法
2016/10/20 PHP
JavaScript关于select的相关操作说明
2010/01/13 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
2012/06/18 Javascript
ie下$.getJSON出现问题的解决方法
2014/02/12 Javascript
动态显示可输入的字数提示还可以输入的字数
2014/04/01 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
jquery动态导航插件dynamicNav用法实例分析
2015/09/06 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
Javascript日期格式化format函数的使用方法
2016/08/30 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
javascript中mouseenter与mouseover的异同
2017/06/06 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
简述vue状态管理模式之vuex
2018/08/29 Javascript
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
2019/03/13 Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
2020/09/22 Javascript
JS中箭头函数与this的写法和理解
2021/01/14 Javascript
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
2018/10/22 Python
python微信好友数据分析详解
2018/11/19 Python
python psutil模块使用方法解析
2019/08/01 Python
使用Django清空数据库并重新生成
2020/04/03 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
房产销售经理职责
2013/12/20 职场文书
初中生期末评语大全
2014/04/24 职场文书
团委书记的竞聘演讲稿
2014/04/24 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书
600字作文之感受大自然
2019/11/27 职场文书
通过Qt连接OpenGauss数据库的详细教程
2021/06/23 PostgreSQL