多阈值Otsu阈值分割#

多阈值Otsu阈值[1] 是一种阈值分割算法,用于将输入图像的像素分割成几个不同的类别,每个类别根据图像中灰度级别的强度获得。

多阈值Otsu 计算多个阈值,由所需的类别数决定。默认类别数为 3:为了获得三个类别,该算法返回两个阈值。它们在下面的直方图中用红线表示。

Original, Histogram, Multi-Otsu result
import matplotlib
import matplotlib.pyplot as plt
import numpy as np

from skimage import data
from skimage.filters import threshold_multiotsu

# Setting the font size for all plots.
matplotlib.rcParams['font.size'] = 9

# The input image.
image = data.camera()

# Applying multi-Otsu threshold for the default value, generating
# three classes.
thresholds = threshold_multiotsu(image)

# Using the threshold values, we generate the three regions.
regions = np.digitize(image, bins=thresholds)

fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(10, 3.5))

# Plotting the original image.
ax[0].imshow(image, cmap='gray')
ax[0].set_title('Original')
ax[0].axis('off')

# Plotting the histogram and the two thresholds obtained from
# multi-Otsu.
ax[1].hist(image.ravel(), bins=255)
ax[1].set_title('Histogram')
for thresh in thresholds:
    ax[1].axvline(thresh, color='r')

# Plotting the Multi Otsu result.
ax[2].imshow(regions, cmap='jet')
ax[2].set_title('Multi-Otsu result')
ax[2].axis('off')

plt.subplots_adjust()

plt.show()

脚本的总运行时间:(0 分钟 0.451 秒)

由 Sphinx-Gallery 生成的图库