在数字图像处理中,filters.rank
子模块(属于 scikit-image
库)
提供了一系列基于局部邻域排序或形态学运算的非线性滤波方法。
与传统线性滤波(如高斯滤波、均值滤波)不同,
这些方法需要用户自定义设定滤波器的形状和大小,
因此需要导入 morphology
模块来设定。
autolevel
autolevel
这个词在 Photoshop
里面翻译成自动色阶,用局部直方图来对图片进行滤波分级。
该滤波器局部地拉伸灰度像素值的直方图,以覆盖整个像素值范围。
格式:
skimage.filters.rank.autolevel(image,selem)
selem
表示结构化元素,用于设定滤波器。
%matplotlib inline
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.coffee())
半径为5的圆形滤波器:
auto =sfr.autolevel(img, disk(5))
/opt/conda/lib/python3.12/site-packages/IPython/core/interactiveshell.py:3579: UserWarning: Possible precision loss converting image of type float64 to uint8 as required by rank filters. Convert manually using skimage.util.img_as_ubyte to silence this warning. exec(code_obj, self.user_global_ns, self.user_ns)
plt.figure('filters',figsize=(8,8))
plt.subplot(121)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)
<matplotlib.image.AxesImage at 0x7f62d664b6e0>
plt.subplot(122)
plt.title('filted image')
plt.imshow(auto,plt.cm.gray)
<matplotlib.image.AxesImage at 0x7f62cc077980>
from skimage import data,color
import matplotlib.pyplot as plt
from skimage.morphology import disk
from skimage.morphology import black_tophat, white_tophat
img =color.rgb2gray(data.coffee())
半径为5的圆形滤波器:
auto = black_tophat(img, disk(5))
plt.figure('filters',figsize=(8,8))
plt.subplot(121)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)
<matplotlib.image.AxesImage at 0x7f6315466150>
plt.subplot(122)
plt.title('filted image')
plt.imshow(auto,plt.cm.gray)
<matplotlib.image.AxesImage at 0x7f62cbf023c0>
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.coffee())
半径为5的圆形滤波器:
auto =sfr.enhance_contrast(img, disk(5))
/opt/conda/lib/python3.12/site-packages/IPython/core/interactiveshell.py:3579: UserWarning: Possible precision loss converting image of type float64 to uint8 as required by rank filters. Convert manually using skimage.util.img_as_ubyte to silence this warning. exec(code_obj, self.user_global_ns, self.user_ns)
plt.figure('filters',figsize=(8,8))
plt.subplot(121)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)
<matplotlib.image.AxesImage at 0x7f62cbf78a10>
plt.subplot(122)
plt.title('filted image')
plt.imshow(auto,plt.cm.gray)
<matplotlib.image.AxesImage at 0x7f62cbf1a1b0>
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.coffee())
半径为5的圆形滤波器:
dst =sfr.entropy(img, disk(5))
/opt/conda/lib/python3.12/site-packages/IPython/core/interactiveshell.py:3579: UserWarning: Possible precision loss converting image of type float64 to uint8 as required by rank filters. Convert manually using skimage.util.img_as_ubyte to silence this warning. exec(code_obj, self.user_global_ns, self.user_ns)
plt.figure('filters',figsize=(8,8))
plt.subplot(121)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)
<matplotlib.image.AxesImage at 0x7f62cc09db50>
plt.subplot(122)
plt.title('filted image')
plt.imshow(dst,plt.cm.gray)
<matplotlib.image.AxesImage at 0x7f62cbef2090>
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.coffee())
半径为5的圆形滤波器:
dst =sfr.equalize(img, disk(5))
/opt/conda/lib/python3.12/site-packages/IPython/core/interactiveshell.py:3579: UserWarning: Possible precision loss converting image of type float64 to uint8 as required by rank filters. Convert manually using skimage.util.img_as_ubyte to silence this warning. exec(code_obj, self.user_global_ns, self.user_ns)
plt.figure('filters',figsize=(8,8))
plt.subplot(121)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)
<matplotlib.image.AxesImage at 0x7f62cbd48fb0>
plt.subplot(122)
plt.title('filted image')
plt.imshow(dst,plt.cm.gray)
<matplotlib.image.AxesImage at 0x7f62cbdae0f0>
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.coffee())
半径为5的圆形滤波器:
dst =sfr.gradient(img, disk(5))
/opt/conda/lib/python3.12/site-packages/IPython/core/interactiveshell.py:3579: UserWarning: Possible precision loss converting image of type float64 to uint8 as required by rank filters. Convert manually using skimage.util.img_as_ubyte to silence this warning. exec(code_obj, self.user_global_ns, self.user_ns)
plt.figure('filters',figsize=(8,8))
plt.subplot(121)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)
<matplotlib.image.AxesImage at 0x7f62cbf4fd40>
plt.subplot(122)
plt.title('filted image')
plt.imshow(dst,plt.cm.gray)
<matplotlib.image.AxesImage at 0x7f62cbc36150>
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))