本文提供许多的滤波方法,这些方法放在filters.rank子模块内。
这些方法需要用户自己设定滤波器的形状和大小,因此需要导入morphology模块来设定。
1、autolevel
这个词在photoshop里面翻译成自动色阶,用局部直方图来对图片进行滤波分级。
该滤波器局部地拉伸灰度像素值的直方图,以覆盖整个像素值范围。
格式:skimage.filters.rank.autolevel(image, selem)
selem表示结构化元素,用于设定滤波器。
from skimage import data,color import matplotlib.pyplot as plt from skimage.morphology import disk import skimage.filters.rank as sfr img =color.rgb2gray(data.lena()) auto =sfr.autolevel(img, disk(5)) #半径为5的圆形滤波器 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(auto,plt.cm.gray)
2、bottomhat 与 tophat
bottomhat: 此滤波器先计算图像的形态学闭运算,然后用原图像减去运算的结果值,有点像黑帽操作。
bottomhat: 此滤波器先计算图像的形态学开运算,然后用原图像减去运算的结果值,有点像白帽操作。
格式:
skimage.filters.rank.bottomhat(image, selem)
skimage.filters.rank.tophat(image, selem)
selem表示结构化元素,用于设定滤波器。
下面是bottomhat滤波的例子:
from skimage import data,color import matplotlib.pyplot as plt from skimage.morphology import disk import skimage.filters.rank as sfr img =color.rgb2gray(data.lena()) auto =sfr.bottomhat(img, disk(5)) #半径为5的圆形滤波器 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(auto,plt.cm.gray)
3、enhance_contrast
对比度增强。求出局部区域的最大值和最小值,然后看当前点像素值最接近最大值还是最小值,然后替换为最大值或最小值。
函数: enhance_contrast(image, selem)
selem表示结构化元素,用于设定滤波器。
from skimage import data,color import matplotlib.pyplot as plt from skimage.morphology import disk import skimage.filters.rank as sfr img =color.rgb2gray(data.lena()) auto =sfr.enhance_contrast(img, disk(5)) #半径为5的圆形滤波器 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(auto,plt.cm.gray)
4、entropy
求局部熵,熵是使用基为2的对数运算出来的。该函数将局部区域的灰度值分布进行二进制编码,返回编码的最小值。
函数格式:entropy(image, selem)
selem表示结构化元素,用于设定滤波器。
from skimage import data,color import matplotlib.pyplot as plt from skimage.morphology import disk import skimage.filters.rank as sfr img =color.rgb2gray(data.lena()) dst =sfr.entropy(img, disk(5)) #半径为5的圆形滤波器 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)
5、equalize
均衡化滤波。利用局部直方图对图像进行均衡化滤波。
函数格式:equalize(image, selem)
selem表示结构化元素,用于设定滤波器。
from skimage import data,color import matplotlib.pyplot as plt from skimage.morphology import disk import skimage.filters.rank as sfr img =color.rgb2gray(data.lena()) dst =sfr.equalize(img, disk(5)) #半径为5的圆形滤波器 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)
6、gradient
返回图像的局部梯度值(如:最大值-最小值),用此梯度值代替区域内所有像素值。
函数格式:gradient(image, selem)
selem表示结构化元素,用于设定滤波器。
from skimage import data,color import matplotlib.pyplot as plt from skimage.morphology import disk import skimage.filters.rank as sfr img =color.rgb2gray(data.lena()) dst =sfr.gradient(img, disk(5)) #半径为5的圆形滤波器 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)
7、其它滤波器
滤波方式很多,下面不再一一详细讲解,仅给出核心代码,所有的函数调用方式都是一样的。
最大值滤波器(maximum):返回图像局部区域的最大值,用此最大值代替该区域内所有像素值。
dst =sfr.maximum(img, disk(5))
最小值滤波器(minimum):返回图像局部区域内的最小值,用此最小值取代该区域内所有像素值。
dst =sfr.minimum(img, disk(5))
均值滤波器(mean) : 返回图像局部区域内的均值,用此均值取代该区域内所有像素值。
dst =sfr.mean(img, disk(5))
中值滤波器(median): 返回图像局部区域内的中值,用此中值取代该区域内所有像素值。
dst =sfr.median(img, disk(5))
莫代尔滤波器(modal) : 返回图像局部区域内的modal值,用此值取代该区域内所有像素值。
dst =sfr.modal(img, disk(5))
otsu阈值滤波(otsu): 返回图像局部区域内的otsu阈值,用此值取代该区域内所有像素值。
dst =sfr.otsu(img, disk(5))
阈值滤波(threshhold): 将图像局部区域中的每个像素值与均值比较,大于则赋值为1,小于赋值为0,得到一个二值图像。
dst =sfr.threshold(img, disk(5))
减均值滤波(subtract_mean): 将局部区域中的每一个像素,减去该区域中的均值。
dst =sfr.subtract_mean(img, disk(5))
求和滤波(sum) :求局部区域的像素总和,用此值取代该区域内所有像素值。
dst =sfr.sum(img, disk(5))
总结
以上就是本文关于python数字图像处理之高级滤波代码详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:
Python中turtle作图示例
python通过opencv实现批量剪切图片
python好玩的项目—色情图片识别代码分享
如有不足之处,欢迎留言指出。
本文向大家介绍Python Opencv图像处理基本操作代码详解,包括了Python Opencv图像处理基本操作代码详解的使用技巧和注意事项,需要的朋友参考一下 1.图像读取 使用cv2.imread(filepath,flags)读入图像 filepath: 读入图像完整路径(绝对路径,相对路径) flags: 读入图像标志 cv2.IMREAD_COLOR:默认参数,读入一副彩色图,忽略al
本文向大家介绍Python图像滤波处理操作示例【基于ImageFilter类】,包括了Python图像滤波处理操作示例【基于ImageFilter类】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python图像滤波处理操作。分享给大家供大家参考,具体如下: 在图像处理中,经常需要对图像进行平滑、锐化、边界增强等滤波处理。在使用PIL图像处理库时,我们通过Image类中的成员函数filt
我在试着读书。tiff图像。我知道我不能阅读ImageIO提供的tiff文件。阅读并了解JAI API的支持。tiff图片,但我不会使用JAI API。那么JAI API还有其他选择吗?我在哪里可以买到JAI API?
本文向大家介绍C#数字图像处理之图像缩放的方法,包括了C#数字图像处理之图像缩放的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#数字图像处理之图像缩放的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。
本文向大家介绍Python OpenCV处理图像之图像像素点操作,包括了Python OpenCV处理图像之图像像素点操作的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Python OpenCV图像像素点操作的具体代码,供大家参考,具体内容如下 0x01. 像素 有两种直接操作图片像素点的方法: 第一种办法就是将一张图片看成一个多维的list,例如对于一张图片im,想要操作第四行第
本文向大家介绍Android图像处理之霓虹滤镜效果,包括了Android图像处理之霓虹滤镜效果的使用技巧和注意事项,需要的朋友参考一下 霓虹是用来描绘图像的轮廓,勾画出颜色变化的边缘,加强其过度效果,使图像产生轮廓发光的效果。 主要步骤为 1、根据当前像素与其右方和下方像素的梯度运算; 2、然后将结果值作为当前像素值,即将原图当前下像素的RGB分量与其右方和下方像素做梯度 运算(差的平方和平方根)