python数字图像处理(10):图像简单滤波
来源:互联网 发布:淘宝贷款逾期怎么办 编辑:程序博客网 时间:2024/05/16 18:06
对图像进行滤波,可以有两种效果:一种是平滑滤波,用来抑制噪声;另一种是微分算子,可以用来检测边缘和特征提取。
skimage库中通过filters模块进行滤波操作。
1、sobel算子
sobel算子可用来检测边缘
函数格式为:skimage.filters.sobel(image, mask=None)
from skimage import data,filtersimport matplotlib.pyplot as pltimg = data.camera()edges = filters.sobel(img)plt.imshow(edges,plt.cm.gray)
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,featureimport matplotlib.pyplot as pltimg = data.camera()edges1 = feature.canny(img) #sigma=1edges2 = feature.canny(img,sigma=3) #sigma=3plt.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()
从结果可以看出,sigma越小,边缘线条越细小。
6、gabor滤波
gabor滤波可用来进行边缘检测和纹理特征提取。
函数调用格式:skimage.filters.gabor_filter(image, frequency)
通过修改frequency值来调整滤波效果,返回一对边缘结果,一个是用真实滤波核的滤波结果,一个是想象的滤波核的滤波结果。
from skimage import data,filtersimport matplotlib.pyplot as pltimg = 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()
以上为frequency=0.6的结果图。
以上为frequency=0.1的结果图
7、gaussian滤波
多维的滤波器,是一种平滑滤波,可以消除高斯噪声。
调用函数为:skimage.filters.gaussian_filter(image, sigma)
通过调节sigma的值来调整滤波效果
from skimage import data,filtersimport matplotlib.pyplot as pltimg = data.astronaut()edges1 = filters.gaussian_filter(img,sigma=0.4) #sigma=0.4edges2 = filters.gaussian_filter(img,sigma=5) #sigma=5plt.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()
可见sigma越大,过滤后的图像越模糊
8.median
中值滤波,一种平滑滤波,可以消除噪声。
需要用skimage.morphology模块来设置滤波器的形状。
from skimage import data,filtersimport matplotlib.pyplot as pltfrom skimage.morphology import diskimg = 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()
从结果可以看出,滤波器越大,图像越模糊。
9、水平、垂直边缘检测
上边所举的例子都是进行全部边缘检测,有些时候我们只需要检测水平边缘,或垂直边缘,就可用下面的方法。
水平边缘检测:sobel_h, prewitt_h, scharr_h
垂直边缘检测: sobel_v, prewitt_v, scharr_v
from skimage import data,filtersimport matplotlib.pyplot as pltimg = 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()
上边左图为检测出的水平边缘,右图为检测出的垂直边缘。
10、交叉边缘检测
可使用Roberts的十字交叉核来进行过滤,以达到检测交叉边缘的目的。这些交叉边缘实际上是梯度在某个方向上的一个分量。
其中一个核:
0 1-1 0
对应的函数:
roberts_neg_diag(image)
例:
from skimage import data,filtersimport matplotlib.pyplot as pltimg =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)
另外一个核:
1 00 -1
对应函数为:
roberts_pos_diag(image)
from skimage import data,filtersimport matplotlib.pyplot as pltimg =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数字图像处理(10):图像简单滤波
- python数字图像处理(10):图像简单滤波
- python数字图像处理(10):图像简单滤波
- 数字图像处理—图像滤波(中值滤波)
- python数字图像处理(14):高级滤波
- python数字图像处理(14):高级滤波
- 数字图像处理——图像平滑(均值滤波)
- 数字图像处理——图像平滑(中值滤波)
- Python图像批处理(图像滤波处理)
- [数字图像处理]图像复原--逆滤波
- 《数字图像处理》——图像滤波
- python数字图像处理(13):基本形态学滤波
- python数字图像处理(13):基本形态学滤波
- 《数字图像处理》——图像滤波之实现均值滤波
- Python学习10_图像简单滤波
- python数字图像处理(6):图像的批量处理
- python数字图像处理(6):图像的批量处理
- python数字图像处理(6):图像的批量处理
- iOS导出ipa包时四个选项的意义
- Python内部机制-PyTypeObject对象
- 【FAQ】存储基础知识 - 磁盘寻址(CHS寻址方式、LBA寻址方式)
- 汇编基础
- vnc,libvirt,virsh-manager,vnc安装汇总
- python数字图像处理(10):图像简单滤波
- 【Cocos2D-X 游戏引擎】初窥门径(1) 制作一个动态的精灵
- Android应用Loaders全面详解及源码浅析
- 【scss编译】基于Webstorm File Watch的自动编译scss文件.md
- JavaScript高级程序设计学习笔记-20160125
- 【spring-mvc】spring mvc中得/和/*的区别
- Mininet简单命令行
- Java基础之----异常处理(1.7以上)
- Android四大启动模式