skimage.exposure
#
对输入图像执行伽马校正。 |
|
对输入图像执行对数校正。 |
|
对输入图像执行 Sigmoid 校正。 |
|
返回给定图像的累积分布函数(cdf)。 |
|
对比度受限的自适应直方图均衡化 (CLAHE)。 |
|
返回直方图均衡化后的图像。 |
|
返回图像的直方图。 |
|
确定图像是否为低对比度。 |
|
调整一张图片,使其累积直方图与另一张图片的匹配。 |
|
在拉伸或收缩其强度级别后返回图像。 |
- skimage.exposure.adjust_gamma(image, gamma=1, gain=1)[源代码][源代码]#
对输入图像执行伽马校正。
也称为幂律变换。此函数根据方程
O = I**gamma
对输入图像逐像素进行变换,在将每个像素缩放到 0 到 1 的范围之后。- 参数:
- 图像ndarray
输入图像。
- gammafloat, 可选
非负实数。默认值为 1。
- 增益float, 可选
常数乘数。默认值为1。
- 返回:
- 出ndarray
伽马校正后的输出图像。
参见
注释
对于大于1的伽马值,直方图将向左偏移,输出图像将比输入图像更暗。
对于伽马值小于1的情况,直方图将向右偏移,输出图像将比输入图像更亮。
参考文献
示例
>>> from skimage import data, exposure, img_as_float >>> image = img_as_float(data.moon()) >>> gamma_corrected = exposure.adjust_gamma(image, 2) >>> # Output is darker for gamma > 1 >>> image.mean() > gamma_corrected.mean() True
Gamma and log contrast adjustmentExplore 3D images (of cells)
- skimage.exposure.adjust_log(image, gain=1, inv=False)[源代码][源代码]#
对输入图像执行对数校正。
此函数根据方程
O = gain*log(1 + I)
逐像素转换输入图像,在将每个像素缩放到 0 到 1 的范围后。对于反向对数校正,方程为O = gain*(2**I - 1)
。- 参数:
- 图像ndarray
输入图像。
- 增益float, 可选
常数乘数。默认值为1。
- invfloat, 可选
如果为 True,则执行反向对数校正,否则校正将为对数校正。默认为 False。
- 返回:
- 出ndarray
对数校正后的输出图像。
参见
参考文献
Gamma and log contrast adjustment
- skimage.exposure.adjust_sigmoid(image, cutoff=0.5, gain=10, inv=False)[源代码][源代码]#
对输入图像执行 Sigmoid 校正。
也称为对比度调整。此功能根据方程
O = 1/(1 + exp*(gain*(cutoff - I)))
对输入图像进行逐像素变换,在将每个像素缩放到0到1的范围后。- 参数:
- 图像ndarray
输入图像。
- 截止float, 可选
sigmoid 函数的截止点,用于在水平方向上移动特征曲线。默认值为 0.5。
- 增益float, 可选
sigmoid 函数指数幂中的常数乘数。默认值为 10。
- invbool, 可选
如果为 True,则返回负的 sigmoid 修正。默认为 False。
- 返回:
- 出ndarray
Sigmoid 校正输出图像。
参见
参考文献
[1]Gustav J. Braun, “使用Sigmoidal对比度增强函数的图像亮度重缩放”, http://markfairchild.org/PDFs/PAP07.pdf
- skimage.exposure.cumulative_distribution(image, nbins=256)[源代码][源代码]#
返回给定图像的累积分布函数(cdf)。
- 参数:
- 图像数组
图像数组。
- nbinsint, 可选
图像直方图的箱数。
- 返回:
- img_cdf数组
累积分布函数的值。
- bin_centers数组
箱子的中心。
参见
参考文献
[1]示例
>>> from skimage import data, exposure, img_as_float >>> image = img_as_float(data.camera()) >>> hi = exposure.histogram(image) >>> cdf = exposure.cumulative_distribution(image) >>> all(cdf[0] == np.cumsum(hi[0])/float(image.size)) True
Histogram matchingGamma and log contrast adjustmentHistogram EqualizationLocal Histogram EqualizationExplore 3D images (of cells)
- skimage.exposure.equalize_adapthist(image, kernel_size=None, clip_limit=0.01, nbins=256)[源代码][源代码]#
对比度受限的自适应直方图均衡化 (CLAHE)。
一种用于局部对比度增强的算法,该算法使用在图像的不同瓦片区域上计算的直方图。因此,即使在比图像大部分区域更暗或更亮的区域中,局部细节也可以得到增强。
- 参数:
- 图像(M[, …][, C]) ndarray
输入图像。
- kernel_sizeint 或 array_like, 可选
定义算法中使用的上下文区域的形状。如果传递了可迭代对象,则它必须具有与
image.ndim
(不包括颜色通道)相同数量的元素。如果是整数,则它会被广播到每个 image 维度。默认情况下,kernel_size
是image
高度的 1/8 乘以其宽度的 1/8。- clip_limitfloat, 可选
剪切限制,在0到1之间归一化(较高的值提供更多对比度)。
- nbinsint, 可选
直方图的灰度箱数量(“数据范围”)。
- 返回:
- 出(M[, …][, C]) ndarray
类型为 float64 的均衡化图像。
注释
- 对于彩色图像,执行以下步骤:
图像被转换为 HSV 色彩空间
CLAHE 算法在 V(Value)通道上运行
图像被转换回RGB空间并返回
对于RGBA图像,原始的alpha通道将被移除。
在 0.17 版本发生变更: 由于内部舍入行为的改变,此函数返回的值略有上移。
参考文献
Histogram Equalization3D adaptive histogram equalization
- skimage.exposure.equalize_hist(image, nbins=256, mask=None)[源代码][源代码]#
返回直方图均衡化后的图像。
- 参数:
- 图像数组
图像数组。
- nbinsint, 可选
图像直方图的箱数。注意:此参数对于整数图像将被忽略,因为每个整数本身就是自己的箱。
- 掩码布尔值或0和1的ndarray,可选
与 image 形状相同的数组。只有在 mask == True 的点才会用于均衡化,均衡化应用于整个图像。
- 返回:
- 出浮点数数组
直方图均衡化后的图像数组。
注释
此函数改编自 [1] ,并获得了作者的许可。
参考文献
Histogram EqualizationLocal Histogram Equalization3D adaptive histogram equalizationVisual image comparisonExplore 3D images (of cells)Rank filters
- skimage.exposure.histogram(image, nbins=256, source_range='image', normalize=False, *, channel_axis=None)[源代码][源代码]#
返回图像的直方图。
与
numpy.histogram
不同,此函数返回箱子的中心,并且不对整数数组重新分箱。对于整数数组,每个整数值都有自己的箱子,这提高了速度和强度分辨率。如果 channel_axis 未设置,直方图将在展平的图像上计算。对于彩色或多通道图像,设置
channel_axis
以对所有通道使用共同的区间。或者,可以分别对每个通道应用该函数,以获得每个颜色通道的直方图,并使用单独的区间。- 参数:
- 图像数组
输入图像。
- nbinsint, 可选
用于计算直方图的箱数。此值对整数数组忽略。
- source_range字符串,可选
‘image’(默认)确定从输入图像的范围。’dtype’ 根据该数据类型的图像的预期范围确定范围。
- 规范化bool, 可选
如果为真,则通过直方图值的总和对其进行归一化。
- channel_axisint 或 None, 可选
如果为 None,则假定图像是灰度图像(单通道)。否则,此参数指示数组的哪个轴对应于通道。
- 返回:
- hist数组
直方图的值。当
channel_axis
不是 None 时,hist 将是一个二维数组,其中第一个轴对应于通道。- bin_centers数组
各箱子中心的值。
示例
>>> from skimage import data, exposure, img_as_float >>> image = img_as_float(data.camera()) >>> np.histogram(image, bins=2) (array([ 93585, 168559]), array([0. , 0.5, 1. ])) >>> exposure.histogram(image, nbins=2) (array([ 93585, 168559]), array([0.25, 0.75]))
Histogram matchingComparing edge-based and region-based segmentationRank filters
- skimage.exposure.is_low_contrast(image, fraction_threshold=0.05, lower_percentile=1, upper_percentile=99, method='linear')[源代码][源代码]#
确定图像是否为低对比度。
- 参数:
- 图像类似数组
被测试的图像。
- fraction_thresholdfloat, 可选
低对比度分数阈值。当图像的亮度范围小于其数据类型全范围的这一部分时,该图像被认为是低对比度的。[1]
- lower_percentilefloat, 可选
在计算图像对比度时忽略低于此百分位的值。
- upper_percentilefloat, 可选
计算图像对比度时忽略高于此百分位的值。
- 方法str, 可选
对比度确定方法。目前唯一可用的选项是“线性”。
- 返回:
- 出布尔
当图像被判定为低对比度时为真。
注释
对于布尔图像,此函数仅在所有值相同时返回 False(方法、阈值和百分位参数被忽略)。
参考文献
示例
>>> image = np.linspace(0, 0.04, 100) >>> is_low_contrast(image) True >>> image[-1] = 1 >>> is_low_contrast(image) True >>> is_low_contrast(image, upper_percentile=100) False
- skimage.exposure.match_histograms(image, reference, *, channel_axis=None)[源代码][源代码]#
调整一张图片,使其累积直方图与另一张图片的匹配。
调整是分别应用于每个通道的。
- 参数:
- 图像ndarray
输入图像。可以是灰度图像或彩色图像。
- 参考ndarray
要匹配直方图的图像。必须与图像具有相同数量的通道。
- channel_axisint 或 None, 可选
如果为 None,则假定图像是灰度图像(单通道)。否则,此参数指示数组的哪个轴对应于通道。
- 返回:
- 匹配的ndarray
转换后的输入图像。
- Raises:
- ValueError
当输入图像和参考图像的通道数不同时抛出。
参考文献
Histogram matching
- skimage.exposure.rescale_intensity(image, in_range='image', out_range='dtype')[源代码][源代码]#
在拉伸或收缩其强度级别后返回图像。
输入和输出的期望强度范围,分别是 in_range 和 out_range,用于拉伸或压缩输入图像的强度范围。请参见下面的示例。
- 参数:
- 图像数组
图像数组。
- in_range, out_rangestr 或 2-元组,可选
输入和输出图像的最小和最大强度值。此参数的可能值如下所列。
- ‘图像’
使用图像的最小/最大值作为强度范围。
- ‘dtype’
使用图像的dtype的最小值/最大值作为强度范围。
- dtype-名称
使用基于所需 dtype 的强度范围。必须是 DTYPE_RANGE 中的有效键。
- 2元组
使用 range_values 作为显式的最小/最大强度。
- 返回:
- 出数组
重缩放强度后的图像数组。此图像与输入图像具有相同的 dtype。
注释
在 0.17 版本发生变更: 输出数组的 dtype 已更改为与输入 dtype 匹配,或者如果输出范围由一对值指定,则为 float。
示例
默认情况下,输入图像的最小/最大强度会被拉伸到图像的dtype所允许的极限,因为 in_range 默认设置为 ‘image’,而 out_range 默认设置为 ‘dtype’:
>>> image = np.array([51, 102, 153], dtype=np.uint8) >>> rescale_intensity(image) array([ 0, 127, 255], dtype=uint8)
不小心将图像的 dtype 从 uint8 转换为 float 很容易:
>>> 1.0 * image array([ 51., 102., 153.])
使用
rescale_intensity
来调整浮点型数据类型的适当范围:>>> image_float = 1.0 * image >>> rescale_intensity(image_float) array([0. , 0.5, 1. ])
为了保持原始的低对比度,使用 in_range 参数:
>>> rescale_intensity(image_float, in_range=(0, 255)) array([0.2, 0.4, 0.6])
如果 in_range 的最小/最大值大于/小于图像的最小/最大强度值,那么强度级别将被裁剪:
>>> rescale_intensity(image_float, in_range=(0, 102)) array([0.5, 1. , 1. ])
如果你有一张带有符号整数的图像,但想将其缩放到仅正数范围,请使用 out_range 参数。在这种情况下,输出数据类型将是浮点数:
>>> image = np.array([-10, 0, 10], dtype=np.int8) >>> rescale_intensity(image, out_range=(0, 127)) array([ 0. , 63.5, 127. ])
要获取具有特定数据类型的所需范围,请使用
.astype()
:>>> rescale_intensity(image, out_range=(0, 127)).astype(np.int8) array([ 0, 63, 127], dtype=int8)
如果输入图像是恒定的,输出将直接被裁剪到输出范围: >>> image = np.array([130, 130, 130], dtype=np.int32) >>> rescale_intensity(image, out_range=(0, 127)).astype(np.int32) array([127, 127, 127], dtype=int32)
Adapting gray-scale filters to RGB imagesSeparate colors in immunohistochemical stainingHistogram EqualizationRobust matching using RANSACPhase UnwrappingHistogram of Oriented GradientsFilling holes and finding peaksRandom walker segmentationExtremaExplore 3D images (of cells)Rank filters