skimage.exposure
#
对输入图像执行伽马校正。 |
|
对输入图像执行对数校正。 |
|
对输入图像执行S型校正。 |
|
返回给定图像的累积分布函数 (cdf)。 |
|
对比度受限自适应直方图均衡 (CLAHE)。 |
|
直方图均衡后返回图像。 |
|
返回图像的直方图。 |
|
确定图像是否对比度低。 |
|
调整图像,使其累积直方图与另一个图像的累积直方图匹配。 |
|
在拉伸或收缩其强度级别后返回图像。 |
- skimage.exposure.adjust_gamma(image, gamma=1, gain=1)[source]#
对输入图像执行伽马校正。
也称为幂律变换。此函数根据等式
O = I**gamma
对输入图像进行逐像素变换,并在将每个像素缩放至 0 到 1 的范围内。- 参数:
- imagendarray
输入图像。
- gammafloat,可选
非负实数。默认值为 1。
- gainfloat,可选
常数乘数。默认值为 1。
- 返回值:
- outndarray
伽马校正后的输出图像。
另请参阅
备注
对于大于 1 的 gamma,直方图将向左移动,输出图像将比输入图像更暗。
对于小于 1 的 gamma,直方图将向右移动,输出图像将比输入图像更亮。
参考文献
示例
>>> 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)[source]#
对输入图像执行对数校正。
此函数根据等式
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)[source]#
对输入图像执行S型校正。
也称为对比度调整。此函数根据等式
O = 1/(1 + exp*(gain*(cutoff - I)))
对输入图像进行逐像素变换,并在将每个像素缩放至 0 到 1 的范围内。- 参数:
- imagendarray
输入图像。
- cutofffloat,可选
S型函数的截止值,用于在水平方向上移动特征曲线。默认值为 0.5。
- gainfloat,可选
S型函数指数幂中的常数乘数。默认值为 10。
- invbool,可选
如果为 True,则返回负 S 型校正。默认为 False。
- 返回值:
- outndarray
S型校正后的输出图像。
另请参阅
参考文献
[1]Gustav J. Braun,“使用 S 型对比度增强函数的图像亮度重新缩放”,http://markfairchild.org/PDFs/PAP07.pdf
- skimage.exposure.cumulative_distribution(image, nbins=256)[source]#
返回给定图像的累积分布函数 (cdf)。
- 参数:
- image数组
图像数组。
- nbinsint,可选
图像直方图的 bin 数。
- 返回值:
- img_cdf数组
累积分布函数的值。
- bin_centers数组
bin 的中心。
另请参阅
参考文献
示例
>>> 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)[source]#
对比度受限自适应直方图均衡 (CLAHE)。
一种用于局部对比度增强的算法,该算法使用在图像的不同平铺区域上计算的直方图。因此,即使在比图像大部分区域更暗或更亮的区域,也可以增强局部细节。
- 参数:
- image(M[, …][, C]) ndarray
输入图像。
- kernel_sizeint 或 array_like,可选
定义算法中使用的上下文区域的形状。如果传递迭代器,则它必须与
image.ndim
(无颜色通道)具有相同的元素数量。如果为整数,则将其广播到每个 image 维度。默认情况下,kernel_size
为image
高度的 1/8 乘以其宽度的 1/8。- clip_limitfloat,可选
裁剪限制,在 0 和 1 之间归一化(较高的值提供更多的对比度)。
- nbinsint,可选
直方图的灰度 bin 数(“数据范围”)。
- 返回值:
- out(M[, …][, C]) ndarray
具有 float64 数据类型的均衡图像。
备注
- 对于彩色图像,将执行以下步骤
图像转换为 HSV 颜色空间
CLAHE 算法在 V(值)通道上运行
图像转换回 RGB 空间并返回
对于 RGBA 图像,将删除原始 alpha 通道。
0.17 版中的更改: 由于内部舍入行为的更改,此函数返回的值略微向上移动。
参考文献
直方图均衡3D 自适应直方图均衡
- skimage.exposure.equalize_hist(image, nbins=256, mask=None)[source]#
直方图均衡后返回图像。
- 参数:
- image数组
图像数组。
- nbinsint,可选
图像直方图的 bin 数。注意:此参数对于整数图像被忽略,对于整数图像,每个整数都是其自己的 bin。
- maskbool 或 0 和 1 的 ndarray,可选
与 image 形状相同的数组。仅在 mask == True 的点用于均衡,均衡应用于整个图像。
- 返回值:
- outfloat 数组
直方图均衡化后的图像数组。
备注
此函数在作者的许可下改编自 [1]。
参考文献
直方图均衡局部直方图均衡3D 自适应直方图均衡视觉图像比较探索 3D 图像(细胞)排序滤波器
- skimage.exposure.histogram(image, nbins=256, source_range='image', normalize=False, *, channel_axis=None)[source]#
返回图像的直方图。
与
numpy.histogram
不同,此函数返回bin的中心,并且不重新bin整数数组。对于整数数组,每个整数值都有自己的bin,这提高了速度和强度分辨率。如果未设置channel_axis,则在扁平化的图像上计算直方图。对于彩色或多通道图像,设置
channel_axis
以对所有通道使用公共binning。或者,可以分别对每个通道应用该函数,以获得每个颜色通道的具有单独binning的直方图。- 参数:
- image数组
输入图像。
- nbinsint,可选
用于计算直方图的bin数。此值对于整数数组将被忽略。
- source_range字符串,可选
‘image’(默认)根据输入图像确定范围。‘dtype’根据该数据类型图像的预期范围确定范围。
- normalize布尔值,可选
如果为True,则通过其值的总和对直方图进行归一化。
- channel_axis整数或None,可选
如果为None,则假定图像为灰度(单通道)图像。否则,此参数指示数组的哪个轴对应于通道。
- 返回值:
- hist数组
直方图的值。当
channel_axis
不为None时,hist将是一个二维数组,其中第一个轴对应于通道。- bin_centers数组
bin中心的数值。
另请参阅
示例
>>> 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')[source]#
确定图像是否对比度低。
- 参数:
- 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)[source]#
调整图像,使其累积直方图与另一个图像的累积直方图匹配。
对于每个通道,都会单独应用调整。
- 参数:
- imagendarray
输入图像。可以是灰度或彩色。
- referencendarray
要匹配直方图的图像。必须与图像具有相同的通道数。
- channel_axis整数或None,可选
如果为None,则假定图像为灰度(单通道)图像。否则,此参数指示数组的哪个轴对应于通道。
- 返回值:
- matchedndarray
变换后的输入图像。
- 引发:
- ValueError
当输入图像和参考图像的通道数不同时抛出。
参考文献
直方图匹配
- skimage.exposure.rescale_intensity(image, in_range='image', out_range='dtype')[source]#
在拉伸或收缩其强度级别后返回图像。
输入和输出所需的强度范围,分别为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 图像(细胞)排序滤波器