skimage.exposure#

影像強度調整,例如直方圖均衡化等。

adjust_gamma

對輸入影像執行 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)[原始碼]#

對輸入影像執行 Gamma 校正。

也稱為冪律轉換。此函數根據公式 O = I**gamma,在將每個像素縮放到 0 到 1 的範圍後,逐像素轉換輸入影像。

參數:
imagendarray

輸入影像。

gammafloat,選填

非負實數。預設值為 1。

gainfloat,選填

常數乘數。預設值為 1。

傳回:
outndarray

經過 Gamma 校正的輸出影像。

另請參閱

adjust_log

注意事項

對於大於 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

Gamma 和對數對比調整

Gamma 和對數對比調整

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

參考資料

Gamma 和對數對比調整

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, “Image Lightness Rescaling Using Sigmoidal Contrast Enhancement Functions”, http://markfairchild.org/PDFs/PAP07.pdf


skimage.exposure.cumulative_distribution(image, nbins=256)[原始碼]#

傳回給定影像的累積分布函數 (cdf)。

參數:
image陣列

影像陣列。

nbinsint,選填

影像直方圖的 bin 數量。

傳回:
img_cdf陣列

累積分布函數的值。

bin_centers陣列

bin 的中心。

另請參閱

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

直方圖匹配

直方圖匹配

Gamma 和對數對比調整

Gamma 和對數對比調整

直方圖均衡化

直方圖均衡化

局部直方圖均衡化

局部直方圖均衡化

探索 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,選填

直方圖(「資料範圍」)的灰階 bin 數量。

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

經過均衡化的影像,具有 float64 dtype。

注意事項

  • 對於彩色影像,會執行下列步驟
    • 影像會轉換為 HSV 色彩空間

    • CLAHE 演算法會在 V (值) 通道上執行

    • 影像會轉換回 RGB 空間並傳回

  • 對於 RGBA 影像,原始 alpha 通道會被移除。

版本 0.17 中的變更:此函數傳回的值會稍微向上移動,因為捨入行為的內部變更。

參考資料

直方圖均衡化

直方圖均衡化

3D 自適應直方圖均衡化

3D 自適應直方圖均衡化

skimage.exposure.equalize_hist(image, nbins=256, mask=None)[原始碼]#

傳回直方圖均衡化後的影像。

參數:
image陣列

影像陣列。

nbinsint,選填

影像直方圖的 bin 數量。注意:此引數會針對整數影像忽略,因為每個整數都是自己的 bin。

maskndarray (布林值或 0 和 1),選填

image 具有相同形狀的陣列。只有 mask == True 的點會用於均衡化,而均衡化會套用至整個影像。

傳回:
outfloat 陣列

直方圖均衡化後的影像陣列。

注意事項

此函數改編自 [1],並經作者許可。

參考資料

直方圖均衡化

直方圖均衡化

局部直方圖均衡化

局部直方圖均衡化

3D 自適應直方圖均衡化

3D 自適應直方圖均衡化

視覺影像比較

視覺影像比較

探索 3D 影像(細胞)

探索 3D 影像(細胞)

秩濾波器

秩濾波器

skimage.exposure.histogram(image, nbins=256, source_range='image', normalize=False, *, channel_axis=None)[原始碼]#

傳回影像的直方圖。

numpy.histogram 不同,此函數會返回 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')[原始碼]#

判斷影像是否為低對比。

參數:
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 相符,如果輸出範圍是由一對值指定,則為浮點數。

範例

預設情況下,輸入影像的最小/最大強度會延展至影像的 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 轉換為浮點數

>>> 1.0 * image
array([ 51., 102., 153.])

使用 rescale_intensity 重新調整為浮點數 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 將為浮點數

>>> 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 影像(細胞)

秩濾波器

秩濾波器