skimage.exposure
#
图像强度调整,例如,直方图均衡化等。
对输入图像执行伽马校正。 |
|
对输入图像执行对数校正。 |
|
对输入图像执行 Sigmoid 校正。 |
|
返回给定图像的累积分布函数 (cdf)。 |
|
对比度受限的自适应直方图均衡化 (CLAHE)。 |
|
返回直方图均衡化后的图像。 |
|
返回图像的直方图。 |
|
确定图像是否为低对比度。 |
|
调整图像,使其累积直方图与另一图像的累积直方图匹配。 |
|
返回拉伸或收缩其强度级别后的图像。 |
- skimage.exposure.adjust_gamma(image, gamma=1, gain=1)[源代码]#
对输入图像执行伽马校正。
也称为幂律变换。此函数根据方程
O = I**gamma
对输入图像进行逐像素变换,并将每个像素缩放到 0 到 1 的范围。- 参数:
- imagendarray
输入图像。
- gammafloat,可选
非负实数。默认值为 1。
- gainfloat,可选
常数乘数。默认值为 1。
- 返回:
- outndarray
伽马校正后的输出图像。
另请参阅
备注
对于大于 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 图像(细胞)
- 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
对数校正后的输出图像。
另请参阅
参考文献
伽马和对数对比度调整
- 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 校正后的输出图像。
另请参阅
参考文献
[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数组
箱的中心。
另请参阅
参考文献
示例
>>> 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
- 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_size
是image
高度的 1/8 和其宽度的 1/8。- clip_limitfloat,可选
剪切限制,在 0 到 1 之间标准化(值越高,对比度越高)。
- nbinsint,可选
用于直方图的灰度箱数(“数据范围”)。
- 返回:
- out(M[, …][, C]) ndarray
均衡化的图像,数据类型为 float64。
备注
- 对于彩色图像,执行以下步骤
图像转换为 HSV 颜色空间
CLAHE 算法在 V(值)通道上运行
图像转换回 RGB 空间并返回
对于 RGBA 图像,原始 alpha 通道将被删除。
在 0.17 版本中更改: 由于内部舍入行为的更改,此函数返回的值略微向上移动。
参考文献
直方图均衡化3D 自适应直方图均衡化
- skimage.exposure.equalize_hist(image, nbins=256, mask=None)[源代码]#
返回直方图均衡化后的图像。
- 参数:
- image数组
图像数组。
- nbinsint,可选
图像直方图的箱数。注意:对于整数图像,此参数将被忽略,对于整数图像,每个整数都是其自己的箱。
- mask布尔值或 0 和 1 的 ndarray,可选
与
image
形状相同的数组。仅当 mask == True 时的点才用于均衡化,该均衡化应用于整个图像。
- 返回:
- out浮点数组
直方图均衡化后的图像数组。
备注
此函数改编自 [1],并获得了作者的许可。
参考文献
直方图均衡化局部直方图均衡化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_range
和out_range
分别用于拉伸或缩小输入图像的强度范围。请参见下面的示例。- 参数:
- image数组
图像数组。
- in_range,out_range字符串或 2 元组,可选
输入和输出图像的最小和最大强度值。此参数的可能值在下面枚举。
- ‘image’
使用图像的最小/最大值作为强度范围。
- ‘dtype’
使用图像的 dtype 的最小/最大值作为强度范围。
- dtype-name
使用基于所需
dtype
的强度范围。必须是DTYPE_RANGE
中的有效键。- 2 元组
使用
range_values
作为显式的最小/最大强度。
- 返回:
- out数组
调整强度后的图像数组。此图像与输入图像的 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
重新缩放到 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 图像免疫组织化学染色中的单独颜色直方图均衡化使用 RANSAC 进行稳健匹配相位解包裹定向梯度直方图填充孔洞和查找峰值随机游走分割极值探索 3D 图像(细胞)秩滤波器