原始 MediaWiki 页面

我知道编辑这个网站吗?

MorphoLibJ

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

MorphoLibJ 是 ImageJ 的 mathematical morphology 方法和 插件 的集合,创建于 INRA-IJPB Modeling and Digital Imaging lab

该库实现了 ImageJ 中缺少的几个功能,并且其他插件没有或仅部分覆盖了这些功能。即:

  • 形态过滤适用于 2D/3D 和二值或灰度图像:侵蚀和膨胀、闭合和打开、形态梯度和拉普拉斯算子、顶帽…

  • 形态重建,适用于 2D/3D 和二值或灰度图像,允许快速检测区域或扩展极值、去除边界、填充孔、属性过滤…

  • 分水岭分割 + GUI,可以分割(例如)细胞组织的 2D/3D 图像。

  • 2D/3D 测量:光度(强度)和形态测量,例如体积、表面积、惯性椭圆/椭圆体…

  • 二进制/标签图像实用程序用于删除或保留最大的连接组件,执行尺寸打开,填充孔,消除边界…

安装

  • ImageJ 1.x中,将latest released jar下载到plugins文件夹中。
  • ImageJ2(包括Fiji)中,您只需将 add IJPB插件站点添加到您的更新站点列表中:
    1. Select HelpUpdate… from the menu to start the updater.
    2. Click on Manage update sites. This brings up a dialog where you can activate additional update sites.
    3. Activate the IJPB-plugins update site and close the dialog. Now you should see an additional jar file for download.
    4. Click Apply changes and restart ImageJ.

      文档

每个released version of MorphoLibJ都带有一个User Manual in PDF format

主要源代码目录位于 GitHub 上的 src/main/java/inra/ijpb 下。

您可以浏览javadoc以获取有关其 API 的更多信息。

引文

请注意,MorphoLibJ 基于出版物。如果您成功地将其用于您的研究,请引用我们的工作:

doi:10.1093/bioinformatics/btw413

MorphoLibJ的代码存储库有自己的DOI

形态过滤器

形态滤波器是非常常见的滤波器,可以组合在一起以提供多种解决方案。它们是局部滤波器,从某种意义上说,它们考虑每个像素/体素的邻域。

形态过滤器是根据给定大小和形状的结构元素定义的。常见的结构元素包括正方形、离散圆盘和八边形。各种方向的线性结构元件也可用于评估结构的局部方向。

原则

最初的想法是定义一种通过使用另一种形状作为测试探针来描述形状的方法(Serra,19821)。最基本的形态过滤器是形态扩张形态侵蚀。形态膨胀的原理是测试平面上的每个点,以该点为中心的结构元素是否与感兴趣的结构相交(见下图)。它会产生比原始集合更大的集合。形态侵蚀的原理是测试平面上的每个点,以该点为中心的结构元素是否包含在原始集合内。它产生的集合比原始集合小。

principle-of-morphological-dilation-and-erosion

Principle of morphological dilation and erosion on a binary set, using a disk-shaped structuring element.

形态膨胀和侵蚀会改变尺寸和结果集。它还可能改变其拓扑:扩张后,组件可能会合并并填补空洞。侵蚀后,组件可能会消失,或者组件会分离成几个部分。

灰度形态滤波器

灰度腐蚀和膨胀

形态侵蚀和膨胀也可以应用于灰度图像。在这种情况下,形态膨胀计算每个像素的邻域内的最大值(由结构元素定义),而形态侵蚀则考虑邻域内的最小值。

/media/plugins/morpholibj-grains-dilation-erosion.png

Some examples of morphological filters on a grey level image. From left to right: original image, result of dilation with a square structuring element, and result of erosion with the same structuring element.

应用膨胀或腐蚀会改变图像中结构的尺寸:膨胀图像结果中的颗粒更大。形态侵蚀也可用于二值图像,以帮助分离接触的颗粒。

开盘和闭盘

形态学膨胀和腐蚀经常结合使用。例如,膨胀后腐蚀的结果称为“形态闭合”,并去除小于结构元素的暗结构。它还可以连接被薄薄的黑暗空间隔开的明亮结构。

以对称方式,腐蚀后膨胀的结果称为形态开口,并去除小于结构元素的明亮结构。

/media/plugins/morpholibj-grains-closing-opening.png

Some examples of composed morphological filters. From left to right: morphological closing, and morphological opening.

请注意,即使打开和关闭可以更好地保留原始图像中结构的大小,形状也会略有改变。例如,上图形态闭合的结果在颗粒之间创建了人工连接。选择结构元素的最佳尺寸通常是消除噪声和保留结构形状之间的折衷。

形态梯度

可以使用基本运算的更复杂的组合。 形态梯度,计算为形态膨胀结果与形态侵蚀结果的差异,揭示了图像内结构的边界形态拉普拉斯被定义为具有相同结构元素的形态膨胀和形态侵蚀之和的一半,减去原始图像。其结果是增强图像的边缘。

高顶礼帽

白色高帽首先计算形态开口(导致删除小于结构元素的明亮结构),并从原始图像中删除结果。当应用大型结构元素时,结果是背景均匀化,使明亮的结构更容易分割。类似地,深色礼帽可用于增强在非均匀背景上观察到的深色结构。

/media/plugins/morpholibj-grains-gradient-laplacian-whitetophat.png

More examples of composed morphological filters. From left to right: morphological gradient, morphological Laplacian, morphological white top-hat.

定向滤波器

对于包含非常薄的曲线结构(例如血管、细胞壁切片…)的图像,由于结构尺寸小,普通滤波器的应用可能很困难。即使对于小的结构元素,形态打开或关闭的应用也会让结构消失。此外,可能难以保留结构的整个厚度。

morpholibj-directional-filtering-example

Filtering of a thin structure. (a) Original image representing apple cells observed with confocal microscopy. The application of a Gaussian filter (b) or median filter (c) results in noise reduction, but also in a loss of the signal along the cell walls. The directional filtering (d) better preserves the thickness of the structure.

另一种方法是应用定向过滤。其原理是考虑一个有向的结构元素,例如给定长度的线段,并对结构元素的各种方向执行形态学操作(Soille 等人,20012;Heneghan 等人,20023;Hendriks 等人,20034)。例如,应用中值滤波器或水平方向的形态开口会导致明亮结构的水平部分的增强。类似地,使用垂直结构元素会增强结构的垂直部分。

morpholibj-directional-filtering-principle

Principle of directional filtering of a thin structure. (a) and (b): result of median filter using an horizontal and a vertical linear structuring element. (c) and (d): combination of the results obtained from two directions (horizontal and vertical) and four directions (by adding diagonal directions).

可以通过计算所有方向上的最大值来组合每个方向的定向滤波器的结果。上图显示了组合两个或四个方向时获得的结果。这里,使用了 32 个方向的长度为 25 的线。这导致图像增强,同时保留明亮结构的厚度。

通过使用形态闭滤波器或中值滤波器,并通过计算所有方向上的最小值来组合结果,可以获得类似的结果来增强暗曲线结构。

插件使用

morpholibj-mosaic-filters

MorphoLibJ filter examples: DAPI stained nuclei image and the result of applying different morphological filters with an octagon of radius 5 as structuring element.

形态过滤器的集合可在PluginsMorphoLibJ菜单中找到。滤镜适用于 2D 和 3D 图像,并且适用于二进制、灰度或彩色 (RGB) 图像。

平面图像

平面图像的形态过滤器可用于PluginsMorphoLibJMorphological filters。该对话框允许用户选择结构元素的形状、半径,并最终预览结果。可以选择以下操作列表:

  • 侵蚀 保持结构元素定义的邻域内的最小值。

  • 扩张将最大值保留在结构元素定义的邻域内。

  • 闭合包括膨胀与腐蚀的连续。形态闭合使得小于结构元素的暗结构消失。

  • 开口由侵蚀与扩张的连续性组成。形态学开放使得小于结构元素的明亮结构消失。

  • 形态梯度定义为具有相同结构元素的形态膨胀和形态侵蚀的差异,并增强原始图像的边缘。

  • 形态拉普拉斯被定义为具有相同结构元素的形态膨胀和形态侵蚀之和的一半,减去原始图像,并增强图像的边缘。

  • 黑顶帽在于从形态学闭运算的结果中减去原始图像,并导致小于结构元素的暗结构的增强。
  • 白顶帽在于从原始图像中减去形态开口的结果,并导致小于结构元素的明亮结构的增强。

以下结构元素可用于 2D 图像:

  • 磁盘
  • 正方形
  • 八角形
  • 钻石
  • 角度为 0、90、45 或 135 度的线

3D 图像

3D 图像的形态过滤器可在 PluginsMorphoLibJMorphological filters (3D) 下找到。该对话框允许用户选择结构元素的形状和半径。提供与平面图像相同的操作列表。可以使用平面结构元素(在每个切片上简单地重复该操作)以及立方体或球形结构元素。对于大多数结构元素,可以选择每个方向的尺寸。

定向滤波器

定向过滤可从 PluginsMorphoLibJDirectional Filtering 获得。它需要一个平面图像。

参数为:

  • 类型:指定如何组合每个定向过滤器的结果
  • 操作:使用每个定向结构元素应用的操作
  • 线长度:结构元素的近似长度。
  • 方向数:要考虑的定向结构元素的数量。如果线路长度较长则需增加。

连接组件运算符

上一节中介绍的“经典”形态滤波器通过使用位于由结构元素定义的紧密邻域中的像素或体素的值来变换输入图像。这样的滤波器可以被视为“局部的”,因为给定位置的结果不依赖于位于足够距离处的图像值。

连接组件算子更加通用,因为它们基于像素或体素之间的连接性在图像内传播信息。更多细节可以在 Breen et al. (1996)5 的评论中找到。连接组件运算符包含强大的运算符,例如形态重建,它允许通过将标记图像约束到掩模来重建标记图像。形态学重建的扩展是检测扩展的最小值和最大值,这可用作分割的标记检测。最后,属性开放和过滤算法可以根据大小或范围属性过滤图像,比经典过滤更好地保留边缘。

形态重建

形态重建是许多有用算法的基础,例如边界去除、孔填充或灰度图像中的区域最小值或最大值检测。

####原理

测地重建的原理是重复条件膨胀或侵蚀直到幂等。条件膨胀是膨胀的结果,与使用逻辑运算的掩模图像相结合。重复条件扩张,直到不再发生修改(幂等条件)。

下图显示了通过对一对二值图像进行膨胀进行测地线重建的几个步骤。在第一个图像上,掩模图像显示为灰色,标记图像显示为黑色。每一步的重建图像以黑色显示。标记在蒙版内传播,直到填充所选区域。

morpholibj-geodesic-reconstruction

Principle of the geodesic reconstruction algorithm. From left to right: original image in gray with marker superimposed in black, and result of conditional dilations with increasing sizes.

二值图像的应用

通过选择标记图像,可以使多个操作自动化。例如,使用边界图像计算测地线重建,并与原始图像组合将删除接触边界的粒子或区域。以类似的方式,通过使用图像补集的边界计算测地重建使得可以填充粒子中可能出现的孔

morpholibj-kill-borders-fill-holes

Some applications of geodesic reconstruction. From left to right: original image, result of kill borders, result of fill holes.

在灰度图像中的应用

测地线重建可以应用于灰度图像。通过手动选择二元标记以使其覆盖特定结构,并在通过膨胀应用测地线重建后,可以获得仅包含所选结构的灰度图像。 边界消除操作也可以应用于灰度图像,从而可以快速去除接触图像边界的结构。

morpholibj-grains-markers-reconstruction-by-dilation-border-kill

Some applications of geodesic reconstruction on grey level images. From left to right: original image with superimposed markers, result of geodesic reconstruction by dilation, result of border kill operation.

用法

测地线重建算法经常在其他算子中使用。然而,在 MorphoLibJ 中,它作为插件提供,以允许将其包含在用户设计的宏或插件中:

  • 测地线重建:使用标记图像和掩模图像以及指定的连通性通过侵蚀或膨胀来计算测地线重建。
  • 交互式测地线重建:通过侵蚀或膨胀计算测地线重建,将当前 2D 图像作为掩模图像,从用户定义的 ROI 中创建标记图像(例如使用点选择工具)并使用指定的连接。该插件允许预览结果。
  • 测地线重建 3D:通过 3D 图像上的侵蚀或膨胀来计算测地线重建。
  • 交互式测地线重建 3D:使用当前 3D 图像作为掩模并根据用户定义的点选择创建标记图像,通过侵蚀或膨胀来计算测地线重建。

消除边界和填充孔操作也作为插件提供。两者都适用于 8、16 或 32 位的 2D 和 3D 图像。

  • 消除边界:删除接触二值或灰度图像边界的粒子。
  • 填充孔 删除二值图像中粒子内部的孔,或删除灰度图像中被明亮波峰包围的黑暗区域。

区域和扩展极值

区域最小值定义为具有相同值的元素(像素或体素)的连通区域,并且其相邻元素的值都大于该区域的值。类似地,区域最大值是具有相同值的连接像素或体素的区域,其邻居都具有较小的值。

区域最小值或最大值出现的一个问题是它们对噪声非常敏感。使用所谓的扩展极值通常更方便。原理是定义一个容差值来过滤极值。例如,扩展最大值定义为包含元素的连通区域,使得该区域内每个元素的值与该区域内最大值的差值小于容差,并且使得该区域的邻居的值都小于该区域内的最大值减去容差。该定义允许识别更大的极值,从而更好地考虑图像内的噪声。 扩展最小值以类似的方式定义,并有效地用作分水岭分割的预处理步骤。

扩展的最大值和最小值都是使用测地线重建算法计算的。更多细节可以在 Soille (2003) 的书中找到。

morpholibj-grains-regional-and-extended-maxima

Regional and extended maxima on a grey-level image. Left: original image. Middle: result of regional maxima. Right: result of extended maxima.

PluginsMorphoLibJ菜单中提供以下操作:

  • 区域最小值/最大值:计算灰度或二值图像中的区域最小值或极值,具有指定的连通性。
  • 区域最小/最大 3D:计算 3D 灰度级或二值图像中的区域最小值或极值,具有指定的连通性。
  • 扩展最小值/最大值:计算灰度图像中的扩展最小值或极值,具有指定的连接性。
  • 扩展最小/最大 3D:使用指定的连接性计算 3D 灰度级或二值图像中的扩展最小值或极值。
  • 施加最小值/最大值:在灰度图像上施加最小值或最大值。
  • 施加最小/最大 3D:在 3D 灰度图像上施加最小值或最大值。

属性过滤

属性过滤器旨在根据特定的尺寸标准而不是强度来删除图像的组成部分。最常见和有用的标准是像素/体素的数量(即面积或体积)。例如,阈值为 20 的形态大小开放操作将删除包含少于 20 个体素的所有斑点。边界框对角线的长度对于区分细长和圆形组件形状也很重要。

二值图像的应用

当应用于二值图像时,属性开放包括识别每个连通分量,计算每个分量的属性测量,并仅保留测量值高于指定值的连通分量。这种处理通常用于清理分割结果。

morpholibj-binary-area-opening

Example of area opening on a binary image. Left: original binary image. Middle: identification of connected components. Right: only the connected components with a sufficient size (defined by the area), have been retained.

灰度图像的应用

当应用于灰度图像时,属性开放包括通过对图像中每个不同灰度级进行阈值化来生成一系列二值图像。然后,将上述二值属性打开独立地应用于每个二值图像,并将灰度输出计算为二值结果的并集。最终输出是灰度图像,其属性低于给定值的明亮结构已经消失。该过滤器的一大优点是,与使用结构元素打开相比,可以更好地保留结构区域的轮廓。

morpholibj-grayscale-area-opening

Example of area opening on a grayscale image. Left: original grayscale image of a leaf (image courtesy of Eric Biot, INRA Versailles). Middle: grayscale size opening making bright spots disappear. Right: comparison with morphological closing with square structuring element of radius 1: bright spots are removed, but some veins also disappear.

对于经典的形态过滤器,可以定义灰度属性闭合或顶帽。灰度属性闭合在于去除尺寸小于指定值的暗连通分量。白色[分别。 Black] 属性 Top-Hat 考虑了属性开头的差异[resp。与原始图像关闭],并且可以帮助识别明亮的[resp。尺寸较小的深色结构。

用法

到目前为止,MorphoLibJ 中提供了以下属性过滤插件(在PluginsMorphoLibJ下):

  • 灰度属性过滤:打开一个对话框,在平面(2D)灰度图像上的属性打开、关闭以及黑色或白色顶帽之间执行。可以使用两个尺寸标准:面积(像素数)或直径(边界框对角线的长度)。

  • 灰度属性过滤 3D:打开一个对话框,在 3D 灰度图像上的属性打开、关闭以及黑色或白色顶帽之间执行。尺寸标准是体素的数量。

分水岭分割

classic-watershed-lines-blur-blobs

Overlay of watershed lines on blurred blobs.

分水岭算法将灰度图像同化为数字高程模型,旨在检测不同的流域。在灰度图像中,集水盆地对应于被明亮结构(“波峰”)包围的黑暗区域。这是一种非常流行的技术,专门用于分割触摸对象。 MorphoLibJ 套件包含该算法的多种实现以及使用该算法的插件:

  • Classic Watershed,插件实现了 Pierre Soille 和 Luc M. Vincent (1990)6 的原始分水岭算法,用于分割 2D/3D 灰度图像。
  • Marker-controlled Watershed,一个插件,通过 Meyer 和 Beucher (1990)7 从特定种子点或标记进行泛洪,在 2D/3D 图像中执行分水岭。
  • Interactive Marker-controlled Watershed,一个插件,用于通过从用户交互引入的特定种子点或标记进行泛洪来在 2D/3D 图像中执行分水岭。
  • Morphological Segmentation,一个带有图形用户界面的插件,用于根据形态学操作和分水岭算法分割 2D/3D 图像。
  • Distance Transform Watershed,两个插件(2D 和 3D),适用于二值图像,并允许通过结合距离变换和分水岭方法来分离触摸对象。

测量

MorphoLibJ 包含多种工具,用于根据二进制或标签 2D 和 3D 图像量化大小、形状或空间组织。其目的是促进标签图像的管理,这与直接在灰度图像上操作的内置“分析粒子…”功能相反。

区域分析

本节介绍 MorphoLibJ 中实现的用于描述各个区域的方法,这些区域表示为标签图像(每个区域一个标签)。我们首先定义并描述已实现的功能,然后介绍集成它们的插件。

内在体积

morpholibj-euler-number

Illustration of Euler Number definition. Left: three particles with Euler numbers equal to 1, 0 and -1, respectively. Right: example of a 3D particle with an Euler number equal to -1, corresponding to the subtraction of 1 connected components minus two handles.

内在体积是一组具有有趣数学属性的特征,通常用于描述单个粒子以及二元微观结构。在平面情况下,它们对应于面积、周长和欧拉数。欧拉数是一种拓扑特征,等于连通分量的数量减去孔的数量。

对于 3D 粒子,固有体积对应于体积、表面积、平均宽度(与表面平均曲率的积分成比例的量)和欧拉数。在 3D 中,欧拉数等于连接组件的数量减去通过结构的“手柄”或“隧道”的数量,加上粒子内的气泡数量(Serra,19821)。

根据 2D 或 3D 图像进行估计

在图像分析中,估计 2D 粒子的面积3D 粒子的体积只是计算构成它的像素或体素的数量,并按单个像素的面积或单个体素的体积进行加权。 周长测量所实现的方法旨在提供比传统边界像素计数更好的周长估计。其原理是考虑一组具有不同方向的线,并计算与感兴趣区域的交点数量(见右图)。交叉点的数量与周长成正比(Serra,19821;Legland 等人,20078;Ohser 等人,20099)。通过对所有可能的方向进行平均,该估计是无偏的。

可以使用两个方向(水平和垂直)或四个方向(通过添加对角线)来估计周长。限制方向​​数量会引入估计偏差,具有已知的理论边界(Moran,196610;Legland 等人,20078),通常比边界像素计数更好(Lehmann 等人,201211)。

表面积的估计遵循相同的原理。方向的数量通常选择等于 3(图像中的三个主轴)或 13(还考虑对角线)。至于周长估计,表面积估计通常有偏差,但通常比测量从二值图像重建的多边形网格的表面积更精确(Lehmann 等人,201211)。

欧拉数

欧拉数的测量取决于连通性的选择。对于平面图像,典型的选择是 4-连通性(对应于正交邻居)和 8-连通性(也考虑对角邻居)。在 3D 中,6 连通性考虑图像内三个主要方向上的邻居,而 26 连通性还考虑对角线。其他连接已被提出,但未在 MorphoLibJ 中实现(Ohser et al., 20099)。

在 MorphoLibJ 的当前实现中,粒子与图像边界的相交不考虑欧拉数。如果感兴趣的粒子接触图像边界,这可能会导致非整数结果。

形状因素

从不同的角度来看,本征体积表征了颗粒的尺寸。有时使用多个指数来描述颗粒的形状,与其尺寸无关。

在 2D 中,等周缺陷指数(或“形状因子”或“圆度”)定义为面积与周长平方的比率,经过标准化,使得圆盘的值等于 1:

\[圆度=4\pi\frac{A}{P^{2}}\]

虽然理论上圆度值的范围在 \([0;1]\) 区间内,但周长的测量误差可能会产生高于 1 的圆度值(Lehmann 等人,201211)。 MorphoLibJ 库还考虑了圆度的倒数,称为“伸长指数”。伸长率的值范围为圆形颗粒的 1 和细长颗粒的增加。

\[伸长率 = \frac{P^{2}}{4\pi\cdot A}\]

在 3D 中,球形指数可以定义为体积的平方与表面积的立方之比,经过标准化,使得球的值等于 1:

\[球形度 = 36\pi\frac{V^{2}}{S^{3}}\]

惯性椭圆和椭球体

二元粒子可以通过其矩进行数学描述,该矩对应于其指示函数的积分,沿方向具有不同的度数。第一矩对应于粒子的面积或体积。一阶指示函数的归一化可得出粒子的 2D 或 3D 质心。二阶矩可用于计算等效惯性椭圆或椭球。

测地线测量

morpholibj-perimiter-geodesic-diameter-computation

Computation of perimeter and geodesic diameter. Left: principle of perimeter estimation by counting intersections with set of lines. Right: illustration of the geodesic diameter measured on a non convex particle.

对于具有复杂形状的颗粒,测地线直径可能很有趣。它对应于区域内两点之间的最大测地距离,测地距离是在区域内连接两点的最短路径的长度(Lantuejoul 等人,198112)。

插件

大多数 MorphoLibJ 插件将当前图像视为输入,该图像必须是二进制(仅考虑一个区域)或标签(通常是连接组件标签的结果,请参阅Utilities for binary images)。输出是一个结果表 (ImageJ Results table),其中包含图像中实际存在的每个标签的一行。所有测量均考虑图像的空间校准。所有插件都可以在PluginsMorphoLibJAnalyze菜单下找到。

全局几何

二维图像中粒子的全局几何可以使用分析区域插件(在PluginsMorphoLibJAnalyzeAnalyze Regions下)进行表征。对于 2D 粒子,实现了面积、周长和派生特征。结果表的列是:

  • 标签:当前行上测量的粒子的标签(如果原始图像中不存在某些标签,则它可以与行号不同)。
  • 面积:每个区域内的像素数乘以每个像素的面积。
  • 周长:使用Crofton formula估计周长。
  • 圆度 面积与周长平方的标准化比率:\(4\pi\cdot A/p^{2}\)。该值应介于 0(非常细长)和 1(接近圆形)之间。由于离散化效应,可能会出现大于 1 的值。
  • 伸长率:周长平方除以面积的标准化比率:\(p^{2}/\left(4\pi\cdot A\right)\),对应于圆度的倒数。值的范围从 1(圆形)开始,并随着颗粒的伸长而增加。
最大的内切圆或球

该插件为每个标签计算可以包含在相应粒子内的最大磁盘。该插件打开一个对话框,允许选择要表征的标签图像、选择计算距离的方法,以及最终可以在其上绘制重叠圆圈的图像。插件的输出包括以下信息:

  • 标签:当前行测量的粒子的标签。
  • xi:内切圆的 x 坐标。
  • yi:内切圆的 y 坐标。
  • 半径:内切圆的半径。
longest-geodesic-path-drive

Computation of the geodesic diameter on a segmented image from the DRIVE database (Staal et al., 200414). Each connected component was associated to a label, then the longest geodesic path within each connected component was computed and displayed as red overlay.

斯塔尔等人,2004年13

测地线直径

该插件计算标签图像中每个粒子的几个测地线测量值。该插件的结果包括以下功能:

  • 标签:当前行测量的粒子的标签。
  • 地质。直径:测地线直径的值。
  • 半径:最大内切圆的半径,在算法期间计算。
  • 地质。伸长率:测地线直径与最大内切圆直径的比值。对于接近圆形的颗粒,值的范围为 1;对于细长颗粒,值的范围增大。
  • xi, yi:最大内切圆的坐标。
  • x1, y1:粒子测地线末端之一的坐标。
  • x2, y2:粒子的另一个测地线末端的坐标。
3D 区域分析

计算这些测量值的插件位于PluginsMorphoLibJAnalyzeAnalyze Regions 3D下。结果在 ImageJ 结果表中提供,其名称包含原始图像的名称。

  • 标签:当前行上测量的粒子的标签(如果原始图像中不存在某些标签,则它可以与行号不同)。
  • 边界框:每个标签在每个方向上的最小和最大坐标。
  • 体积:计算构成粒子的体素数量,乘以单个体素的体积。
  • 表面积:使用 Crofton formula 的离散化版本计算的表面积,用于计算与各种方向的线网格的交点(当前为 3 或 13)。
  • 球形指数:定义为 \(36\pi V^{2}/S^{3}\)。
  • 惯性椭圆/椭圆体:返回每个粒子的质心(重心)以及惯性椭圆或椭球体的大小和方向。半径按降序排列。角度以度为单位,对应于方位角(“偏航”)、仰角(“俯仰”)和绕主轴的滚动。

强度测量

为成对的灰度和标签 2D 或 3D 图像提供其他测量(PluginsMorphoLibJAnalyzeIntensity Measurements 2D/3D)。标签图像可以对应于分段的粒子,或更通用的感兴趣区域。

该插件计算灰度图像中每个标记区域的强度值分布的均值标准差最大值最小值中值众数偏度峰度。结果也显示在 ImageJ ResultsTable 中。

标签重叠测量

给定两个标签图像,有不同的度量可以让我们评估标签之间的重叠一致性(或误差)。遵循 Tustison & Gee (2009)14,并给定源图像 \(S\) 和目标图像 \(T\),此插件(根据 PluginsMorphoLibJAnalyzeLabel Overlap Measures)在两个不同的结果表中提供以下重叠测量(一个包含所有标签的总值,另一个包含各个标签的值):

  • 每个单独标记区域 \(r\) 的目标重叠:
\[TO_{r}=\frac{|S_{r}\cap T_{r}|}{|T_{r}|}\]
  • 总重叠(所有地区):
\[TO=\frac{\sum_{r}{|S_{r}\cap T_{r}|}}{\sum_{r}{|T_{r}|}}\]
  • Jaccard index 或每个单独标记区域 \(r\) 的联合重叠:
\[UO_{r}=\frac{|S_{r}\cap T_{r}|}{|S_{r}\cup T_{r}|}\] \[UO=\frac{\sum_{r}|S_{r}\cap T_{r}|}{\sum_{r}|S_{r}\cup T_{r}|}\] \[MO_{r}=2\frac{|S_{r}\cap T_{r}|}{|S_{r}|+|T_{r}|}\] \[MO=2\frac{\sum_{r}|S_{r}\cap T_{r}|}{\sum_{r}\left(|S_{r}|+|T_{r}|\right)}\]
  • 每个单独标记区域 \(r\) 的体积相似度:
\[VS_{r}=2\frac{|S_{r}|-|T_{r}|}{|S_{r}|+|T_{r}|}\]
  • 所有地区的成交量相似度:
\[VS=2\frac{\sum_{r}\left(|S_{r}|-|T_{r}|\right)}{\sum_{r}\left(|S_{r}|+|T_{r}|\right)}\]
  • 每个单独标记区域 \(r\) 的假阴性错误:
\[FN_{r}=\frac{|T_{r}\setminus S_{r}|}{|T_{r}|}\]
  • 所有区域的假阴性错误:
\[FN=\frac{\sum_{r}|T_{r}\setminus S_{r}|}{\sum_{r}|T_{r}|}\]
  • 每个单独标记区域 \(r\) 的误报错误:
\[FP_{r}=\frac{|S_{r}\setminus T_{r}|}{|S_{r}|}\]
  • 所有区域的误报错误:
\[FP=\frac{\sum_{r}|S{}_{r}\setminus T{}_{r}|}{\sum_{r}|S_{r}|}\]

空间组织

区域邻接图插件可以访问相邻区域之间的邻域关系。这对于探索细胞组织内的细胞集合特别有用(Florindo et al., 201615)。

morpholibj-region-adjacency-graph

Computation of the Region Adjacency Graph on a microscopy image of plant tissue. Left: original image. Middle: result of watershed segmentation. Right: overlay of edges representing adjacent regions.

该插件(位于PluginsMorphoLibJAnalyzeRegion Adjacency Graph下)适用于 2D 和 3D 图像,并且需要标签图像作为输入。典型的输入是分水岭分割的结果(参见Watershed Segmentation),最终是manual edition of the labels。该插件的输出是一个结果表,其行数与相邻区域对的数量相同,其中包含两个相邻区域的标签。

二进制和标签图像实用程序

MorphoLibJ 库提供了多个用于处理和管理二进制图像和标签图像的实用函数。本节的所有方法都可以作为 PluginsMorphoLibJBinary ImagesPluginsMorphoLibJLabel Images 下的插件使用。

二值图像的距离

距离变换

分析图像时,通常需要计算到特定结构或位置的距离。二值图像的一个方便的运算符是距离变换。其原理是计算每个前景像素到最近背景像素的距离。结果通常称为距离图

morpholibj-distance-transform-on-binary-leaf

Binary image, and result of computation of the distance transform.

存在多种计算距离图的方法。 MorphoLibJ 库实现基于倒角距离的距离变换,该距离近似欧几里德距离,但计算起来更简单。

  • 倒角距离图 计算每个前景像素到最近背景像素之间的二值图像的近似距离图。
  • Chamfer Distance Map 3D 从每个前景体素到最近的背景体素之间的 3D 二值图像计算近似距离图。

测地距离变换

在某些情况下,将距离传播限制到特定区域或掩模可能很有用。例如,人们可能对脉管系统网络中两点之间的距离感兴趣,同时停留在网络内。 测地距离变换包括计算距给定二进制标记的距离,同时限制二进制掩码内距离的传播。如下图所示:

morpholibj-geodesic-distance-example

Computation of the geodesic distance map on a binary image from the DRIVE database (Staal et al., 200414). Left: original image with marker superimposed in red. Right: result of geodesic distance map, hot colors correspond to large distances, cold colors correspond to small distances.

  • 测地距离图 计算二进制蒙版图像的每个前景像素与标记图像的最近像素之间的测地距离,同时保持在蒙版图像表示的粒子内。
  • 交互式测地距离图 计算当前所选图像(视为掩模图像)的每个前景像素与用户 ROI 定义的标记图像的最近像素之间的测地距离,同时保持在掩模图像表示的粒子内。

标签图像

当图像中存在多个结构或组件时,使用标签图像可能会更方便。标签图像的每个像素或体素对应于其所属粒子的整数索引。假定值 0 对应于背景。可以表示的标签数量取决于图像类型:字节图像为 255,短图像为 65535…

标签图像可以使用灰度阴影或使用彩色图来表示,以更好地区分不同的区域。

连接组件标记

可以使用连接组件标记算法来标记二值图像内的不同结构。每个标签将对应于一组连接的像素或体素。

morpholibj-grains-binary-label-distance

Binary image, result of connected components labeling, and computation of distance map on the complement of binary image.

可以选择不同的连接。对于平面图像,最新的是 4-连通性(仅考虑给定像素的正交邻居)和 8-连通性(也考虑对角线)。对于 3D 图像,6-连通性仅考虑三个主要方向上的正交邻居,而 26-连通性考虑给定体素的所有直接邻居。

  • 连接组件标签 通过为每个连接组件分配特定的数字(标签),将二进制图像转换为标签图像。

标签图像表示

几个插件允许控制标签图像的外观。可以选择给定的颜色图,或者将标签图像转换为彩色图像。在这两种情况下,都可以指定背景颜色,并且可以打乱颜色顺序以方便区分具有相似标签的相邻区域。

morpholibj-grains-labels-assign-measure

Assign result of a measurement to a label image. In this example, the elongation is represented using a color code, between dark purple (circular) to yellow (very elongated).

  • 将测量分配给标签 将标签图像与结果表相结合,并创建一个新图像,为每个像素/体素分配与其所属标签相对应的测量值。
  • 设置标签图允许选择用于显示标签图像的颜色图。特别是,打乱颜色图和/或为背景选择特定颜色可以比仅灰度级更好的可视化。
  • Label To RGB 将标签图像转换为真正的 RGB 图像。与 ImageJ 原生转换类似,但该插件避免了背景像素和低标签区域之间的混淆。

区域和标签选择

MorphoLibJ 库提供了多种工具,用于根据大小或位置标准自动选择二进制区域或标签。

二值图像

  • 保留/删除最大区域 识别最大的连接组件,并保留或删除它。
  • Size Opening 计算每个连接组件的尺寸(2D 中的面积,3D 中的体积),并删除所有尺寸低于用户指定值的粒子。

算法适用于 2D 或 3D 图像。默认连接 4(或 6)用于 2D(或 3D)图像。

标签图像

morpholibj-grains-binary-label-remove-border-largest-size-opening

MorphoLibJ utilities for label images. From left to right: original label image, remove border labels, remove largest region, apply size opening for keeping only regions with at least 150 pixels.

  • 删除边框标签类似于“删除边框”功能,但由于不需要形态重建,因此运行速度更快。
  • 选择标签 输入一组标签,并创建仅包含所选标签的新标签图像。
  • 裁剪标签 创建一个新的二进制图像,仅包含用户指定的标签。新图像的大小适合该区域。
  • 替换/删除标签 将一个区域的值替换为另一个值。可用于通过将其值替换为 0 来“清除”标签,或合并到相邻区域。
  • 标签边界 创建一个新的二进制图像,其中包含值 255 的像素/体素,其邻居具有不同的值。
  • 保留/删除最大的标签 识别最大的标签,并保留或删除它。
  • 标签大小开口计算每个区域的大小(2D 中的面积,3D 中的体积),并删除所有大小低于用户指定值的标签。

标签版插件

label-edition-plugin

Label Edition plugin overview.

为了简化标签图像的处理,MorphoLibJ提供了Label Edition插件(在PluginsMorphoLibJLabelsLabel Edition下提供)。该插件包含一个图形用户界面(GUI),用户可以在其中执行以下一组编辑任务:

  • 使用点选择工具(2D 和 3D)选择标签后手动合并标签。
  • 以半径为 1 的正方形/立方体作为结构元素,应用形态腐蚀、膨胀、打开和关闭。
  • 按面积或体积(尺寸打开操作)、最大尺寸、手动选择或边界位置去除标签。

所有操作均“就地”执行,即直接修改输入图像。但是,可以通过单击“重置”来恢复标签图像的初始状态。

库互操作性

MorphoLibJ 的一个关键设计理念是实现的模块化,以促进其可重用性。可以识别具有不同编程抽象的三个层:

  • 对于最终用户,插件提供图形显示和直观的参数调整。这样的插件可以很容易地合并到宏中: // Calls the Regional Min/Max plugin on current ImagePlus instance run(“Regional Min & Max”, “operation=[Regional Maxima] connectivity=4”);
  • 对于插件开发人员来说,可以通过静态方法集合使用运算符,从而可以使用一行代码应用大多数操作。例子: // Computes regional maxima using the 4-connectivity ImageProcessor maxima = MinimaAndMaxima.regionalMaxima(image, 4);
  • 对于核心开发人员来说,算法是抽象接口的实现,可以选择或开发最合适的算法,并监控执行事件。例如: // choose and setup the appropriate algorithm RegionalExtremaAlgo algo = new RegionalExtremaByFlooding(); algo.setExtremaType(ExtremaType.MAXIMA); algo.setConnectivity(4); // add algorithm monitoring algo.addAlgoListener(new DefaultAlgoListener()); // compute result on a given ImageProcessor ImageProcessor result = algo.applyTo(image); 该库总共提供了近两百个类和接口。

图书馆组织

该库遵循按主题划分的文件夹逻辑结构,旨在从其他插件或脚本等中重用它们:

  • inra.ijpb.data包含用于操作2D或3D图像的通用数据结构
  • inra.ijpb.binary 包含用于处理二值图像的实用程序集(连通分量标记、距离变换、测地距离变换…)
  • inra.ijpb.label包含标签图像的实用程序(裁剪、尺寸开口、删除边框标签等)
  • inra.ijpb.measure 包含用于 2D 或 3D 图像的几何和灰度表征的工具
  • inra.ijpb.morphology包含数学形态运算符的集合
  • inra.ijpb.watershed包含实现不同版本分水岭算法的类
  • inra.ijpb.plugins包含可从 ImageJ/Fiji 插件菜单访问的一组插件

所有主要方法都有一个带有静态方法的通用类,允许以透明的方式在 2D 和 3D 图像上调用方法。

编写 MorphoLibJ 脚本

这种库的组织和公共静态方法的使用的优点之一是它允许非常容易和快速地构建形态算法和管道的原型。

分割管道原型

让我们看一个完整的 Beanshell script 中的示例,它采用活动 2D 或 3D 图像并结合一组形态操作(梯度、扩展最小值和分水岭)找到合理的分割: #@ ImagePlus(label=”Input image”,description=”Image to segment”) imp #@ Integer(label=”Gradient radius”,description=”Radius of the morphological gradient”,value=2) radius #@ Integer(label=”Tolerance”,description=”Local extrema dynamic”,value=3) tolerance #@ String(label=”Connectivity”,description=”Local connectivity”, choices={“6”,”26”}) strConn #@ Boolean(label=”Calculate dams”,description=”Flag to use dams in watershed”,value=true) dams #@OUTPUT ImagePlus resultImage

// ImageJ imports
import ij.IJ;
import ij.ImagePlus;
import ij.ImageStack;
// MorphoLibJ imports
import inra.ijpb.binary.BinaryImages;
import inra.ijpb.morphology.MinimaAndMaxima3D;
import inra.ijpb.morphology.Morphology;
import inra.ijpb.morphology.Strel3D;
import inra.ijpb.watershed.Watershed;
import inra.ijpb.data.image.Images3D;

// convert connectivity string to int
conn = Integer.parseInt( strConn );

image = null;
if( radius != 0 )
{
    // create structuring element (cube of radius 'radius')
    strel = Strel3D.Shape.CUBE.fromRadius( radius );
    // apply morphological gradient to input image
    image = Morphology.gradient( imp.getImageStack(), strel );

}
else
    image = imp.getImageStack();
// find regional minima on gradient image with dynamic value of 'tolerance' and 'conn'-connectivity
regionalMinima = MinimaAndMaxima3D.extendedMinima( image, tolerance, conn );
// impose minima on gradient image
imposedMinima = MinimaAndMaxima3D.imposeMinima( image, regionalMinima, conn );
// label minima using connected components (32-bit output)
labeledMinima = BinaryImages.componentsLabeling( regionalMinima, conn, 32 );
// apply marker-based watershed using the labeled minima on the minima-imposed 
// gradient image (the last value indicates the use of dams in the output)
resultStack = Watershed.computeWatershed( imposedMinima, labeledMinima, conn, dams );
   
// create image with watershed result
resultImage = new ImagePlus( "watershed", resultStack );
// assign right calibration
resultImage.setCalibration( imp.getCalibration() );
// optimize display range
Images3D.optimizeDisplayRange( resultImage );
// set same slice as input
resultImage.setSlice( imp.getCurrentSlice() ); #### 3D 查看器中的标签可视化

利用 MorphoLibJ 的标签方法和 ImageJ 3D Viewer 的可视化工具,创建一个脚本来将图像的每个标签显示为图像查找表提供的相应颜色的 3D 表面是非常简单的: #@ ImagePlus imp

import inra.ijpb.label.LabelImages;
import ij3d.Image3DUniverse;
import ij3d.ContentConstants;
import org.scijava.vecmath.Color3f;
import ij.IJ;
import isosurface.SmoothControl;

// set to true to display messages in log window
verbose = false;

// set display range to 0-255 so the displayed colors
// correspond to the LUT values
imp.setDisplayRange( 0, 255 );
imp.updateAndDraw();

// calculate array of all labels in image
labels = LabelImages.findAllLabels( imp );

// create 3d universe
univ = new Image3DUniverse();
univ.show();

// read LUT from input image
lut = imp.getLuts()[0];

// add all labels different from zero (background)
// to 3d universe
for( i=0; i<labels.length; i++ )
{   
    if( labels[ i ] > 0 )
    {
        labelToKeep = new int[ 1 ];
        labelToKeep[ 0 ] = labels[ i ];
        if( verbose )
            IJ.log( "Reconstructing label " + labels[ i ] + "..." );
        // create new image containing only that label
        labelImp = LabelImages.keepLabels( imp, labelToKeep );
        // convert image to 8-bit
        IJ.run( labelImp, "8-bit", "" );
        
        // use LUT label color
        color = new Color3f( new java.awt.Color( lut.getRed( labels[ i ] ),
            lut.getGreen( labels[ i ] ),
            lut.getBlue( labels[ i ] ) ) );
            
        if ( verbose )
            IJ.log( "RGB( " + lut.getRed( labels[ i ] ) +", " 
                + lut.getGreen( labels[ i ] )
                + ", " + lut.getBlue( labels[ i ] ) + ")" );

        channels = new boolean[3];
        channels[ 0 ] = false;
        channels[ 1 ] = false;
        channels[ 2 ] = false;
        
        // add label image with corresponding color as an isosurface
        univ.addContent( labelImp, color, "label-"+labels[i], 0, channels, 2, ContentConstants.SURFACE);
    }
}

// launch smooth control
sc = new SmoothControl( univ ); 脚本末尾会显示一个对话框,可以随意平滑表面。每个标签都独立添加到 3D 场景中,名称为“label-X”,其中 X 是其标签值。 
morpholibj-visualize-labels-in-3d-viewer

From left to right: input label image, script output, smoothed label surfaces and example of individually translated surfaces in the 3D viewer.

许可证

该程序是免费软件;您可以根据自由软件基金会 (http://www.gnu.org/licenses/gpl.txt) 发布的 GNU 通用公共许可证 的条款重新分发和/或修改它。

分发此程序的目的是希望它有用,但不提供任何保证;甚至没有适销性或特定用途适用性的默示保证。有关更多详细信息,请参阅 GNU 通用公共许可证。

参考文献