skimage.exposure#

图像强度调整,例如,直方图均衡化等。

adjust_gamma

对输入图像执行伽马校正。

adjust_log

对输入图像执行对数校正。

adjust_sigmoid

对输入图像执行 Sigmoid 校正。

cumulative_distribution

返回给定图像的累积分布函数 (cdf)。

equalize_adapthist

对比度受限的自适应直方图均衡化 (CLAHE)。

equalize_hist

返回直方图均衡化后的图像。

histogram

返回图像的直方图。

is_low_contrast

确定图像是否为低对比度。

match_histograms

调整图像,使其累积直方图与另一图像的累积直方图匹配。

rescale_intensity

返回拉伸或收缩其强度级别后的图像。


skimage.exposure.adjust_gamma(image, gamma=1, gain=1)[源代码]#

对输入图像执行伽马校正。

也称为幂律变换。此函数根据方程 O = I**gamma 对输入图像进行逐像素变换,并将每个像素缩放到 0 到 1 的范围。

参数:
imagendarray

输入图像。

gammafloat,可选

非负实数。默认值为 1。

gainfloat,可选

常数乘数。默认值为 1。

返回:
outndarray

伽马校正后的输出图像。

另请参阅

adjust_log

备注

对于大于 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

伽马和对数对比度调整

伽马和对数对比度调整

探索 3D 图像(细胞)

探索 3D 图像(细胞)

skimage.exposure.adjust_log(image, gain=1, inv=False)[源代码]#

对输入图像执行对数校正。

此函数根据方程 O = gain*log(1 + I) 对输入图像进行逐像素变换,并将每个像素缩放到 0 到 1 的范围。对于逆对数校正,方程为 O = gain*(2**I - 1)

参数:
imagendarray

输入图像。

gainfloat,可选

常数乘数。默认值为 1。

invfloat,可选

如果为 True,则执行逆对数校正,否则校正将是对数校正。默认为 False。

返回:
outndarray

对数校正后的输出图像。

另请参阅

adjust_gamma

参考文献

伽马和对数对比度调整

伽马和对数对比度调整

skimage.exposure.adjust_sigmoid(image, cutoff=0.5, gain=10, inv=False)[源代码]#

对输入图像执行 Sigmoid 校正。

也称为对比度调整。此函数根据方程 O = 1/(1 + exp*(gain*(cutoff - I))) 对输入图像进行逐像素变换,并将每个像素缩放到 0 到 1 的范围。

参数:
imagendarray

输入图像。

cutofffloat,可选

Sigmoid 函数的截止值,该截止值在水平方向上移动特征曲线。默认值为 0.5。

gainfloat,可选

Sigmoid 函数指数幂中的常数乘数。默认值为 10。

invbool,可选

如果为 True,则返回负 Sigmoid 校正。默认为 False。

返回:
outndarray

Sigmoid 校正后的输出图像。

另请参阅

adjust_gamma

参考文献

[1]

Gustav J. Braun,“使用 Sigmoidal 对比度增强函数重新缩放图像亮度”,http://markfairchild.org/PDFs/PAP07.pdf


skimage.exposure.cumulative_distribution(image, nbins=256)[源代码]#

返回给定图像的累积分布函数 (cdf)。

参数:
image数组

图像数组。

nbinsint,可选

图像直方图的箱数。

返回:
img_cdf数组

累积分布函数的值。

bin_centers数组

箱的中心。

另请参阅

histogram

参考文献

示例

>>> 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

直方图匹配

直方图匹配

伽马和对数对比度调整

伽马和对数对比度调整

直方图均衡化

直方图均衡化

局部直方图均衡化

局部直方图均衡化

探索 3D 图像(细胞)

探索 3D 图像(细胞)

skimage.exposure.equalize_adapthist(image, kernel_size=None, clip_limit=0.01, nbins=256)[源代码]#

对比度受限的自适应直方图均衡化 (CLAHE)。

一种局部对比度增强算法,它使用在图像的不同瓦片区域上计算的直方图。因此,即使在比图像大部分区域更暗或更亮的区域中,也可以增强局部细节。

参数:
image(M[, …][, C]) ndarray

输入图像。

kernel_sizeint 或 array_like,可选

定义算法中使用的上下文区域的形状。如果传递了可迭代对象,则它必须具有与 image.ndim (没有颜色通道)相同的元素数。如果是整数,则将其广播到每个 image 维度。默认情况下,kernel_sizeimage 高度的 1/8 和其宽度的 1/8。

clip_limitfloat,可选

剪切限制,在 0 到 1 之间标准化(值越高,对比度越高)。

nbinsint,可选

用于直方图的灰度箱数(“数据范围”)。

返回:
out(M[, …][, C]) ndarray

均衡化的图像,数据类型为 float64。

备注

  • 对于彩色图像,执行以下步骤
    • 图像转换为 HSV 颜色空间

    • CLAHE 算法在 V(值)通道上运行

    • 图像转换回 RGB 空间并返回

  • 对于 RGBA 图像,原始 alpha 通道将被删除。

在 0.17 版本中更改: 由于内部舍入行为的更改,此函数返回的值略微向上移动。

参考文献

直方图均衡化

直方图均衡化

3D 自适应直方图均衡化

3D 自适应直方图均衡化

skimage.exposure.equalize_hist(image, nbins=256, mask=None)[源代码]#

返回直方图均衡化后的图像。

参数:
image数组

图像数组。

nbinsint,可选

图像直方图的箱数。注意:对于整数图像,此参数将被忽略,对于整数图像,每个整数都是其自己的箱。

mask布尔值或 0 和 1 的 ndarray,可选

image 形状相同的数组。仅当 mask == True 时的点才用于均衡化,该均衡化应用于整个图像。

返回:
out浮点数组

直方图均衡化后的图像数组。

备注

此函数改编自 [1],并获得了作者的许可。

参考文献

直方图均衡化

直方图均衡化

局部直方图均衡化

局部直方图均衡化

3D 自适应直方图均衡化

3D 自适应直方图均衡化

视觉图像比较

视觉图像比较

探索 3D 图像(细胞)

探索 3D 图像(细胞)

秩滤波器

秩滤波器

skimage.exposure.histogram(image, nbins=256, source_range='image', normalize=False, *, channel_axis=None)[源代码]#

返回图像的直方图。

numpy.histogram 不同,此函数返回箱的中心,并且不重新划分整数数组的箱。对于整数数组,每个整数值都有其自己的箱,这提高了速度和强度分辨率。

如果未设置 channel_axis,则在展平的图像上计算直方图。对于彩色或多通道图像,设置 channel_axis 以对所有通道使用公共箱。或者,可以单独在每个通道上应用该函数,以获得每个颜色通道的直方图,并使用单独的箱。

参数:
image数组

输入图像。

nbinsint,可选

用于计算直方图的箱数。此值对于整数数组将被忽略。

source_range字符串,可选

‘image’(默认)从输入图像确定范围。 ‘dtype’ 从该数据类型图像的预期范围确定范围。

normalize布尔值,可选

如果为 True,则将直方图的值之和归一化。

channel_axis整数或 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]))

直方图匹配

直方图匹配

比较基于边缘和基于区域的分割

比较基于边缘和基于区域的分割

秩滤波器

秩滤波器

skimage.exposure.is_low_contrast(image, fraction_threshold=0.05, lower_percentile=1, upper_percentile=99, method='linear')[源代码]#

确定图像是否为低对比度。

参数:
image类数组

被测试的图像。

fraction_threshold浮点数,可选

低对比度分数阈值。当图像的亮度范围小于其数据类型完整范围的此分数时,该图像被认为是低对比度的。[1]

lower_percentile浮点数,可选

计算图像对比度时,忽略低于此百分位的值。

upper_percentile浮点数,可选

计算图像对比度时,忽略高于此百分位的值。

method字符串,可选

对比度确定方法。目前唯一可用的选项是“linear”。

返回:
out布尔值

当图像被确定为低对比度时,为 True。

备注

对于布尔图像,仅当所有值都相同时,此函数才会返回 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)[源代码]#

调整图像,使其累积直方图与另一图像的累积直方图匹配。

该调整分别应用于每个通道。

参数:
imagendarray

输入图像。可以是灰度或彩色。

referencendarray

要匹配直方图的图像。必须与图像具有相同数量的通道。

channel_axis整数或 None,可选

如果为 None,则假定图像为灰度(单通道)图像。否则,此参数指示数组的哪个轴对应于通道。

返回:
matchedndarray

转换后的输入图像。

引发:
ValueError

当输入图像和参考图像中的通道数不同时抛出。

参考文献

直方图匹配

直方图匹配

skimage.exposure.rescale_intensity(image, in_range='image', out_range='dtype')[源代码]#

返回拉伸或收缩其强度级别后的图像。

输入和输出的所需强度范围,即 in_rangeout_range 分别用于拉伸或缩小输入图像的强度范围。请参见下面的示例。

参数:
image数组

图像数组。

in_range,out_range字符串或 2 元组,可选

输入和输出图像的最小和最大强度值。此参数的可能值在下面枚举。

‘image’

使用图像的最小/最大值作为强度范围。

‘dtype’

使用图像的 dtype 的最小/最大值作为强度范围。

dtype-name

使用基于所需 dtype 的强度范围。必须是 DTYPE_RANGE 中的有效键。

2 元组

使用 range_values 作为显式的最小/最大强度。

返回:
out数组

调整强度后的图像数组。此图像与输入图像的 dtype 相同。

另请参阅

equalize_hist

备注

在 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 重新缩放到 float dtype 的正确范围。

>>> 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 参数。在这种情况下,输出 dtype 将为 float。

>>> image = np.array([-10, 0, 10], dtype=np.int8)
>>> rescale_intensity(image, out_range=(0, 127))
array([  0. ,  63.5, 127. ])

要使用特定 dtype 获取所需的范围,请使用 .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)

将灰度滤波器应用于 RGB 图像

将灰度滤波器应用于 RGB 图像

免疫组织化学染色中的单独颜色

免疫组织化学染色中的单独颜色

直方图均衡化

直方图均衡化

使用 RANSAC 进行稳健匹配

使用 RANSAC 进行稳健匹配

相位解包裹

相位解包裹

定向梯度直方图

定向梯度直方图

填充孔洞和查找峰值

填充孔洞和查找峰值

随机游走分割

随机游走分割

极值

极值

探索 3D 图像(细胞)

探索 3D 图像(细胞)

秩滤波器

秩滤波器