Mahotas - 图像阈值处理
图像阈值处理是一种基于像素强度将感兴趣区域与背景分离的技术。它涉及设置阈值,将图像划分为前景和背景。
强度高于阈值的像素被归类为前景,而强度低于阈值的像素被归类为背景。
这种二元分离允许进一步分析,例如对象检测、分割或特征提取。图像阈值处理可应用于各种类型的图像,包括灰度图像和彩色图像,以简化后续处理和分析任务。
使用图像阈值处理涉及选择适当的阈值并将其应用于图像。可以使用各种阈值处理技术计算阈值。
阈值处理方法的选择取决于图像属性、噪声水平和期望结果等因素。
在这里,我们简要讨论了每种技术。后面的章节将讨论更深入的信息。
让我们看看在 mahotas − 中可以实现的每种阈值技术
Bernsen 阈值
Bernsen 阈值是一种阈值技术,用于将灰度图像中的前景与背景分开。它根据每个像素周围邻域内的最大和最小像素强度计算局部阈值。
如果像素的强度更接近最大值,则将其视为前景的一部分;否则,将其视为背景的一部分。
让我们看看下面的 Bernsen 阈值图像 −

广义 Bernsen 阈值
广义 Bernsen 阈值是 Bernsen 阈值方法的改进。它考虑邻域内更广泛的像素强度,而不仅仅是最大和最小强度值。
以下图像显示广义 Bernsen 阈值图像 −

Otsu 阈值
Otsu 阈值技术自动确定最佳阈值以将前景与背景分开。
Otsu 的方法迭代检查所有可能的阈值,并选择最大化类间方差的阈值。
让我们看看下面的 Otsu 阈值图像 −

Riddler-Calvard 阈值
Riddler−Calvard 阈值还会自动确定最佳阈值。它基于前景和背景方差的加权和的最小化。
让我们看看下面的 Riddler−Calvard 阈值图像 −

软阈值
软阈值是一种用于图像去噪的技术。它将强度值小于某个阈值的像素设置为零。软阈值在降低噪声的同时保留了图像的重要结构信息。
下图显示了软阈值 −

示例
在下面的示例中,我们尝试执行上述所有阈值技术 −
import mahotas as mh import numpy as np import matplotlib.pyplot as mtplt image = mh.imread('sea.bmp', as_grey=True) # Bernsen 阈值 bernsen = mh.thresholding.bernsen(image, 5, 5) mtplt.imshow(bernsen) mtplt.title('Bernsen Thresholding') mtplt.axis('off') mtplt.show() # 广义伯恩森阈值 gbernsen = mh.thresholding.gbernsen(image, mh.disk(3), 10, 109) mtplt.imshow(gbernsen) mtplt.title('Generalized Bernsen Thresholding') mtplt.axis('off') mtplt.show() # Otsu 阈值 int_image_otsu = image.astype(np.uint8) otsu = mh.otsu(int_image_otsu) result_image = image > otsu mtplt.imshow(result_image) mtplt.title('Otsu Thresholding') mtplt.axis('off') mtplt.show() # Riddler-Calvard 阈值 int_image_rc = image.astype(np.uint8) rc = mh.thresholding.rc(int_image_rc) final_image = image > rc mtplt.imshow(final_image) mtplt.title('RC Thresholding') mtplt.axis('off') mtplt.show() # 软阈值 soft = mh.thresholding.soft_threshold(image, np.mean(image)) mtplt.imshow(soft) mtplt.title('Soft Thresholding') mtplt.axis('off') mtplt.show()
输出
得到的输出如下所示 −
Bernsen 阈值:

广义 Bernsen 阈值:

Otsu 阈值:

Riddler−Calvard 阈值:

软阈值:

我们将在其余章节中详细讨论所有阈值技术。