原始 MediaWiki 页面

我知道编辑这个网站吗?
the Fiji distribution of ImageJ本页介绍与 the Fiji distribution of ImageJ 相关的内容。点击徽标查看详情。

自动阈值

自迁移出 MediaWiki 以来,本页内容尚未经过审查。如果您愿意帮忙,请查看帮助指南

该插件使用各种全局(直方图派生)阈值方法对 8 位和 16 位图像进行二值化。分段相始终显示为白色 (255)。

对于本地阈值而不是全局阈值,请参阅Auto Local Threshold插件。

安装

ImageJ:需要 v1.42m 或更高版本。下载Auto_Threshold-X.Y.Z.jar并将其复制到 ImageJ/plugins 文件夹中,然后重新启动 ImageJ 或运行ImageAdjustAuto Threshold命令。此后,新命令应出现在HelpUpdate Menus中。

Fiji:该插件是Fiji发行版的一部分,无需下载。

使用

方法 选择要应用的算法(详细信息如下)。

忽略黑色忽略白色选项分别将 [0] 和 [255] 灰度级的图像直方图箱设置为 0。如果数字化图像具有曝光不足或曝光过度的像素,这可能很有用。

黑色背景上的白色对象 将值高于阈值的像素设置为白色(否则,将值小于或等于阈值的像素设置为白色)。

设置阈值而不是阈值(单个图像) 设置阈值 LUT,而不更改像素数据。这仅适用于单个图像。

如果您正在处理堆栈,则可以使用两个附加选项: 堆栈 可用于处理所有切片(每个切片的阈值将单独计算)。如果未选中此选项,则仅处理当前切片。 使用堆栈直方图 首先计算整个堆栈的直方图,然后根据该直方图计算阈值,最后使用该单个值对所有切片进行二值化。选择此选项也会自动选择上面的 Stack 选项。

重要说明:

1. 该插件可通过 ImageAdjustThreshold… 菜单条目访问,但是阈值方法也在 ImageJ 的阈值小程序中部分实现,可通过 ImageAuto Threshold 菜单条目访问。虽然自动阈值插件可以使用或忽略图像直方图的极值(忽略黑色、忽略白色),但小程序不能:“默认”方法会忽略直方图极值,但其他方法不会。这意味着将两个命令应用于同一图像可能会产生明显不同的结果。本质上,自动阈值插件,通过正确的设置,可以重现小程序的结果,但不能反过来。

2. 从版本 1.12 开始,该插件支持 16 位图像的阈值处理。由于自动阈值插件处理完整的灰度空间,因此在处理 16 位图像时可能会很慢。请注意,ImageJ 阈值小程序也处理 16 位图像,但实际上 ImageJ 首先计算具有 256 个 bin 的直方图。因此,使用小程序时在 16 位图像上获得的结果与使用此插件获得的真实 16 位结果可能存在差异。请注意,为了加快速度,直方图被括起来以仅包括包含数据的箱的范围(并避免在两个极端处处理空直方图箱)。

3. 16 位图像和堆栈(处理所有切片时)的结果是一个 8 位容器,以白色 [255] 显示结果,以符合“二进制图像”的概念(即具有 0 和 255 值的 8 位)。然而,对于仅对 1 个切片进行阈值化的堆栈,结果仍然是 16 位容器,阈值化相位显示为白色 [65535]。这是为了保持剩余切片中的数据不变。 “全部尝试”选项保留 16 位格式,以便仍然使用可能无法获得阈值的方法显示图像。无法设置阈值的图像和堆栈保持不变。

4. 8 位和 16 位的相同图像(没有缩放)返回相同的阈值,但是当图像数据偏移时(例如,当向所有像素添加固定值时),Li 的方法最初会返回不同的值。当前的实现避免了这种与偏移相关的问题。

5. 对于除 Huang、Li 和 Triangle 之外的所有方法,按固定值 缩放 的同一图像(例如,将所有像素乘以固定值时)都会返回类似的阈值结果(在原始未缩放图像的 2 个灰度级别内),因为这些算法的工作方式不同。例如。应用于 8 位图像和转换为 16 位使用缩放的同一图像的三角形方法可能会导致不同的阈值。这是因为从 8 位缩放到 16 位会在缩放的灰度值之间创建空箱。三角形方法(基于几何方法)在新的 16 位直方图中找到满足方法约束但在原始 8 位图像中不存在的那些人工间隙。这是无法避免的(例如通过检测空的直方图箱),因为当图像中存在真正的空箱(与人工的空箱相反)时,它会干扰分析。 6. 添加了双层图像阈值。感谢韦恩·拉斯班德和威廉·伯格。当图像仅包含 2 个不同的像素值(任意两个强度)时,插件会自动将其阈值设置为值 0 和 255,同时忽略所选的阈值方法。这是因为大多数期望双峰直方图的方法都会失败,因为双层图像有时可以解释为单峰(例如,由直方图中两个连续值组成的图像)​​。

可用方法

全部尝试

哪种方法可以最好地分割您的数据?人们可以尝试使用 全部尝试 选项来回答这个问题。这会生成包含所有方法结果的蒙太奇,允许探索不同算法在特定图像或堆栈上的执行情况。使用堆栈时,在某些情况下,单独分割每个切片可能不是一个好主意,而不是对所有切片使用单个阈值(尝试示例图像中的 mri-stack.tif 以更好地理解此问题)。

Lymp

原始图像

Lympm2

尝试所有方法。

当处理具有多个切片的堆栈时,蒙太奇可能会变得非常大(约原始堆栈大小的 16 倍),并且存在耗尽 RAM 的风险。将出现一个弹出窗口(当堆栈超过 25 个切片时)以确认该过程是否应显示蒙太奇结果。选择来计算阈值并将其显示在日志窗口中。

默认

这是 ImageJ 中可用的原始自动阈值方法,它是 IsoData 算法的变体(如下所述)。当选择忽略黑色忽略白色时,默认选项应返回与ImageAdjustThresholdAuto相同的值。要指示所需相的分段,请使用 黑色背景上的白色对象 选项。 IsoData 方法也称为“迭代中间方法”。

实现Huang的模糊阈值方法。这使用了 Shannon 的熵函数(也可以使用 Yager 的熵函数)。

doi:10.1016/0031-3203(94)E0043-K (PDF)

移植自 ME Celebi 的 fourier_0.8 例程 12

黄2

这是 J. Schindelin 提出的 Huang 方法的替代实现,在 16 位图像上具有令人印象深刻的速度优势。然而,在某些图像上,该方法返回的值与上面的原始 Huang 方法不同。

互模

这假设有双峰直方图。使用大小为 3 的运行平均值迭代平滑直方图,直到只有两个局部最大值:j 和 k。然后阈值 t 计算为 (j+k)/2。直方图具有极不均匀的峰或宽而平坦的谷的图像不适合此方法。方法

doi:10.1111/j.1749-6632.1965.tb11715.x

移植自 Antti Niemistö 的 MATLAB 代码。请参阅here 的精彩幻灯片演示和他的原始MATLAB 代码。

隔离数据

基于 isodata 算法的迭代过程:

doi:10.1109/TSMC.1978.4310039

该过程通过取初始阈值将图像分为对象和背景,然后计算等于或低于阈值的像素以及高于阈值的像素的平均值。计算这两个值的平均值,增加阈值并重复该过程,直到阈值大于复合平均值。那是,

threshold = (average background + average objects)/2.

该方法存在多种实现方式。请参阅源代码以获取更多注释。

###李

基于算法的迭代版本(下面的第二个参考)实现Li的最小交叉熵阈值方法。

doi:10.1016/0031-3203(93)90115-D

doi:10.1016/S0167-8655(98)00057-9 (PDF)

doi:10.1117/1.1631315

移植自 ME Celebi 的 fourier_0.8 例程 34

最大熵

实现Kapur-Sahoo-Wong(最大熵)阈值方法:

doi:10.1016/0734-189X(85)90125-2

移植自 ME Celebi 的 fourier_0.8 例程 56

###的意思是

使用等级等级的阈值。它被一些其他方法用作第一猜测阈值。

doi:10.1006/cgip.1993.1040

最小尺寸(I)

Kittler 和 Illingworth 最小阈值的迭代实现。

实现这个似乎比原来的更裂缝地收敛。然而,有时该算法不会收敛到解决方案。在这种情况下,将向日志窗口报告警告,并且结果默认为使用扫荡方法计算的阈值的最终估计值。忽略黑色忽略白色选项可能有助于避免此问题。

doi:10.1016/0031-3203(86)90030-0

移植自 Antti Niemistö 的 MATLAB 代码。请参阅here,了解优秀的幻灯片演示和原始MATLAB代码。

###最低限度

与 Intermodes 方法类似,该方法假定双峰直方图。使用大小为 3 的移动消除平滑直方图,直到只有两个局部峰值。阈值 t 满足 yt−1 > yt <= yt+1。

直方图具有极不均匀的峰或宽而隔壁的谷的图像不适合此方法。

doi:10.1111/j.1749-6632.1965.tb11715.x

移植自 Antti Niemistö 的 MATLAB 代码。请参阅here,了解优秀的幻灯片演示和原始MATLAB代码。

###精彩瞬间

Tsai的方法试图在阈值化结果中保留原始图像的矩。

doi:10.1016/0734-189X(85)90133-1

移植自 ME Celebi 的 fourier_0.8 例程 78

大津

大津的阈值算法搜索使类内天线最小化的阈值,类内天线定义为两类天线的加权和。

doi:10.1109/TSMC.1979.4310076

另请参阅Wikipedia article on Otsu’s method

由 Jordan Bevik 从 C++ 代码移植而来。

百分位

假设前景像素的比例为0.5。

doi:10.1145/321119.321123

移植自 Antti Niemistö 的 MATLAB 代码。请参阅here,了解优秀的幻灯片演示和原始MATLAB代码。

RenyiEntropy

MaxEntropy 方法类似,但使用 Renyi 的熵代替。

doi:10.1016/0734-189X(85)90125-2

移植自 ME Celebi 的 fourier_0.8 例程 910

尚巴格

doi:10.1006/cgip.1994.1037

移植自 ME Celebi 的 fourier_0.8 例程 1112

###三角形

这是三角形方法的实现:

doi:10.1177/25.7.70454

修改自 Johannes Schindelin 的插件 Triangle_Algorithm

另请参阅:http://www.ph.tn.tudelft.nl/Courses/FIP/noframes/fip-Segmenta.html#Heading118

三角算法是一种几何方法,无法判断数据是否偏向一侧或另一侧,而是假设直方图一端有最大极值(众数),从而得到另一端搜索。在缺乏处理的图像类型的信息情况下,或者当顶点不接近直方图极值之一时(导致在该顶点和极值之间存在两个可能的阈值区域),这会导致问题。这里,算法被扩展以查找数据在最大邻近的哪一端走得最远,并在该最大范围内搜索求值。

日元

实现 Yen 的阈值方法: doi:10.1109/83.366472

doi:10.1117/1.1631315

移植自 ME Celebi 的 fourier_0.8 例程 1314