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解析nginx日志文件
May 11 Python
python简单实现基于SSL的IRC bot实例
Jun 15 Python
python使用mysql数据库示例代码
May 21 Python
Python numpy实现数组合并实例(vstack,hstack)
Jan 09 Python
Python 反转字符串(reverse)的方法小结
Feb 20 Python
使用Python进行目录的对比方法
Nov 01 Python
python 判断字符串中是否含有汉字或非汉字的实例
Jul 15 Python
详解pycharm连接不上mysql数据库的解决办法
Jan 10 Python
Django用户登录与注册系统的实现示例
Jun 03 Python
如何基于python实现年会抽奖工具
Oct 20 Python
python drf各类组件的用法和作用
Jan 12 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
Feb 24 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
php 按指定元素值去除数组元素的实现方法
2011/11/04 PHP
PHP通过session id 实现session共享和登录验证的代码
2012/06/03 PHP
ThinkPHP实现支付宝接口功能实例
2014/12/02 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
Codeigniter的dom类用法实例
2015/06/26 PHP
PHP 9 大缓存技术总结
2015/09/17 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
PHP实现的函数重载功能示例
2018/08/03 PHP
Javascript MD4
2006/12/20 Javascript
Javascript学习笔记1 数据类型
2010/01/11 Javascript
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
javascript获得当前的信息的一些常用命令
2015/02/25 Javascript
JS实现登录页面记住密码和enter键登录方法推荐
2016/05/10 Javascript
深入理解javascript的getTime()方法
2017/02/16 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
2019/03/06 jQuery
vue指令做滚动加载和监听等
2019/05/26 Javascript
小程序实现投票进度条
2019/11/20 Javascript
Python使用re模块实现信息筛选的方法
2018/04/29 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2019/03/30 Python
pyqt5移动鼠标显示坐标的方法
2019/06/21 Python
关于PyTorch源码解读之torchvision.models
2019/08/17 Python
django 做 migrate 时 表已存在的处理方法
2019/08/31 Python
余弦相似性计算及python代码实现过程解析
2019/09/18 Python
python二元表达式用法
2019/12/04 Python
python定义具名元组实例操作
2021/02/28 Python
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
制衣厂各岗位职责
2013/12/02 职场文书
文秘个人求职信范文
2014/04/22 职场文书
六查六看心得体会
2014/10/14 职场文书
健康状况证明书
2014/11/26 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
老公保证书怎么写
2015/02/26 职场文书