用于分割 3D 对象的斐济插件。
Enable the LimeSeg update site得到它。
出版
Video tutorials
Probably the fastest to learn how to use LimeSeg at a basic level. You can find here a playlist containing all the tutorials. This playlist contains tutorials for:
- Single object segmentation
- Multiple objects segmentation
- Segmentation refinement
- Single object segmentation with multiple seeds
- An example of a C. Elegans embryo segmentation (one time point)
- Single object segmentation with a pre-defined shape
- Computing and displaying surface curvature
Presentation
Test LimeSeg is a modular 3D segmentation plugin. It is a particle-based active contour method. It can segment objects from 3D images where 3D objects are labelled on their outline, like cells labeled on their membrane, as shown in the image below (source of the image : dub).

LimeSeg can be used with simple commands provided by the plugin (under Plugins › LimeSeg in ImageJ menu), or on a more advanced manner with scripting capabilities of ImageJ (macro commands of ImageJ 1.x or preferentially with groovy scripts).
命令:基本用法
单个对象分割
球体分段命令
命令Plugins>LimeSeg>Sphere Seg是使用 LimeSeg 的最简单方法。它允许从球形种子开始分割 3D 对象。这是一个展示如何使用它的示例:
1.打开示例囊泡图像。为此,请执行File>Import>URL..并输入地址https://raw.githubusercontent.com/NicoKiaru/TestImages/master/Vesicles/Vesicles.tif
2.绘制囊泡内包含的圆形 ROI 并使用 t 键或使用 Edit>Selection>Add To Manager 将其保存在 ROI 管理器中(只有该 ROI 应包含在 ROI 管理器中)。

3.执行 Sphere Seg 命令:Plugins>LimeSeg>Sphere Seg
4.您需要提供四个最重要的参数:
D_0:此参数以像素数表示(可以是实际值,如 1.2 像素),是您希望 LimeSeg 检测的最小特征尺寸。较低的值(约 1 像素)将导致检测到精细细节,但代价是速度。太高的值会导致错过重要的细节。该值通常介于 1 和 >20 像素之间。 (更准确地说,D_0是 LimeSeg 用于描绘 3D 形状的粒子之间的平衡间距。)F_pressure:是施加在表面上的“默认压力”(在相关活动轮廓方法中也称为气球力)。默认情况下,正值将导致曲面扩展,而负值将导致曲面收缩。其典型范围是[-0.03..0.03]。Z_Scale:是切片之间的间距(Z 间距)与像素之间的间距(X 或 Y 间距)的物理比率。囊泡的成像像素为 133 nm,z 间距为 340 nm。因此该参数应设置为 340/133 ~ 2.54。Range in d0 units:是每个粒子寻找局部最大值的大小。值为 2 且D_0为 2 意味着将在表面周围 2*2 = [-4..+4] 像素的层内寻找局部最大值。典型值为 0.5 至 >10。
5.其他参数:
show 3D:如果选中,则显示分段对象的 3D 视图。有关更多选项,请参阅#ref 3D 查看器 (TODO)。same cell:在这种情况下该参数并不重要,因为只提供了一个 ROI。当需要多个种子时它将变得有用,请参阅#ref多个对象(TODO)和#单个大对象。Optimisation steps:优化步骤数。如果设置为 -1,将进行优化直至满足收敛。real size XY:物理单位中 XY 像素的大小。这里一个像素是 133 nm。要获得以微米平方和微米立方为单位的体积和表面积,请将此参数设置为 0.133。
要分割此演示图像,请选择此图像中的参数:

收敛后,您可以浏览 2D 图像,您应该看到沿着对象的一些点,如下所示:

3D 查看器还应提供囊泡的 3D 视图:

其他输出以 ImageJ 表形式提供:
Cell_Name:LimeSeg 生成的每个 3D 对象都是一个“Cell”对象。默认情况下,这些对象有一个字符串标识符:Cell_0、Cell_1、Cell_2…Number of Surfels:生成的 3D 对象中的表面元素数量。该数字也是 3D 网格内的顶点数。Center X,Y,Z:对象顶点质心的位置,对于 XY 以像素表示,对于 Z 以切片编号表示(使用 IJ1 编号)Frame:对象被分割的框架Channel:对象被分割的通道Mesh?:指示从对象面元重建网格的位置Euler characteristic:重构网格的Euler characteristic。对于简单闭合曲面,该值需要为 2,对于环面,需要为 0,等等。如果它的值与您的预期不符,则曲面和体积值将是错误的。Free edges:3D 重建网格的自由边数。应等于零以信任给定的表面积和体积。Surface:以(XY_pixels)^2单位表示的物体表面Volume:以(XY_pixels)^3为单位的物体表面Real Surface:物体的物理表面Real Volume:物体的物理体积
故障排除
- 如果圆形 ROI 太小,球体将立即消失 → 制作更大的圆形 ROI。
- 如果圆形 ROI 太大或未完全包含在囊泡中,则表面可能会泄漏到外部 → 使 ROI 居中。
- “分割变得疯狂,我想阻止它”。您可以执行命令
Plugins>LimeSeg>Stop Optimisation,也可以在优化步骤数参数中设置一个不同于 -1 的值(对于本演示案例,10000 步就足够了)。
细化分割结果
在找到第一个粗略定义的形状后,可以通过减少 D_0 来细化分割。在高 D_0 处进行第一次分割,然后通过细化来降低它通常比在低 D_0 值处开始分割要快。这可以在第一次分段后使用 Plugins>LimeSeg>Coarsen/Refine 命令来完成。
例如,在囊泡示例中:
- 在达到
D_0 = 4收敛后,立即使用以下参数启动Plugins>LimeSeg>Coarsen/Refine命令: 选择以下参数:D_0_ini = 4;D_0_end = 2;range_in_D_O_units=2。 - 命令执行完毕后,需要重新开始分割,直到重新收敛。为此,请执行命令
Plugins>LimeSeg>Resume Seg。您可以将F_pressure保留为零,因为不再需要偏差,并像以前一样设置像素的实际大小 (0.133)。
形状现在更加精确,正如您在 2D 视图和 3D 视图中看到的那样:

分割单个对象的替代方法:多个球体和骨架
如果要分割的对象是曲折的或大的,从单个球形开始可能不会产生良好的结果。以下是分割单个对象的两种替代方法。
从多个球形种子开始
此处的示例图像https://raw.githubusercontent.com/NicoKiaru/TestImages/master/ER/ER-FIB-SEM-Small.tif(使用File>Import>URL)是一块内质网,非常曲折。虽然您可以使用一个圆形 ROI 作为种子并使用 Sphere Seg 命令(D_0 = 2 和 F_pressure=0.02 给出良好的结果)获得正确的结果,但也可以在 ER 片段的不同位置的 ROI 管理器中存储多个圆形 ROI。启动Sphere Seg命令并选中same Cell复选框将导致更快的分割。当不同的种子相遇时,它们会合并成一个表面。
例如对于三个球形种子:

最终结果:

从 ROI 骨架开始
可以更精确地定义用于分割图像的种子。例如,这对于预定义要分段的结构很有用。让我们通过一个例子来展示这是如何工作的,比如 CElegans 胚胎轮廓的分割:
1.从 here 下载 3D C. 线虫胚胎图像 File>Import>URL..,这是从完整的 dub dataset 中提取的时间点。
2.使用一些 ROI 大致定义某些切片处胚胎的轮廓,如上图所示:

您需要以单点 ROI 开始和结束,否则形状将不会闭合。此外,ROI 需要顺时针绘制,并且应始终以相同的角度开始(例如从顶部开始)。
3.启动 Plugins>LimeSeg>Skeleton Seg 命令,ROI 管理器中没有其他任何内容。使用参数 D_0=10、F_pressure = 0、range_in _d0_units=2 和 Z_scale=3.5 应该给出正确的结果,如下所示:

多个对象分割
可以使用 LimeSeg 分割多个不重叠的对象。最基本的方法是通过 Sphere Seg 命令来执行此操作。作为示例,您可以使用 File>Import>URL 打开 c.elegans 的测试图像。这是从this dataset中提取的时间点。
与以前一样,您可以在 ROI 管理器中存储单个圆形 ROI 并启动 Sphere Seg 命令。这组参数效果很好:
D_0 = 4F_Pressure = 0.015Range_in_D0_units = 1.5ZScale=3.5
在这种图像中,您可能想要分割多个细胞。您可以一次执行此操作,但有时一个分段表面会泄漏到另一个分段表面上,因为边界有时没有明确定义。避免这种情况的一种方法是并行分割多个细胞并避免表面重叠。 LimeSeg 可以做到这一点:您可以定义多个种子来定义多个对象。在这种情况下,表面将相互排斥,在这方面有点类似于分水岭方法。 您只需在 ROI 管理器中存储多个圆形 ROI 即可定义多个种子(每个单元一个)。就像这张图片中一样:

当然,种子可以位于不同的平面。
然后,您可以使用之前定义的参数启动 Plugins>LimeSeg>Sphere Seg 命令,但请务必取消选中 sameCell 复选框(否则曲面将合并):

您应该获得与此类似的图像:

如果您想分割整个胚胎,您需要提供细胞中心的位置,然后启动命令。以下脚本将使用简单的方法对演示图像进行分割,以识别细胞核通道中的细胞:
C. Elegans segmentation
单元格的颜色是随机选择的,您应该能够以 2D 和 3D 方式可视化结果,类似于:

输出表还显示分段细胞的表面积和体积。
其他命令
取消分割结果
要取消上次启动的分段命令,您可以启动命令:Plugins>LimeSeg>Cancel Last Optimisation
在应用此命令之前需要停止分段。
清除所有分段对象
- 启动命令:
Plugins>LimeSeg>Clear all
应谨慎使用:这会擦除到目前为止由 LimeSeg 分割的所有对象。
停止正在进行的分段
- 命令
Plugins>LimeSeg>Stop optimization
LimeSeg 3D 查看器(基本)
到目前为止,LimeSeg 提供了自己的 3D vizualizer。 3D 查看器查看 3D 中的特定点。箭头键盘允许移动该中心点。鼠标拖动允许围绕该点旋转。可以使用鼠标滚轮进行缩放/缩小。
高级用法
图形用户界面
命令Plugins>LimeSeg>Show GUI显示LimeSeg GUI。这个图形界面允许在 LimeSeg 中执行几乎所有操作。如果您打开了Plugins>Macro>Record记录器,则每个操作(即您单击的按钮)都是可记录的。
要以 ImageJ 1.x 宏语言执行脚本,只需添加 run("Show GUI"); 作为脚本的第一行。
要在 Groovy 中执行脚本,请将 Ext. 替换为 LimeSeg.,并将 import eu.kiaru.limeseg.LimeSeg; 放在脚本的开头。
LimeSeg 结构
LimeSeg 由多个部分组成。它可以:
- 管理 3D 对象(创建、删除、复制、粘贴、保存、打开…),
- 优化与图像数据集相关的 3D 对象形状
- 使用 Roi 点以 2D 形式显示这些 3D 对象,并使用其自己的可视化器以 3D 形式显示这些 3D 对象
LimeSeg 3D 对象管理
为了帮助了解 LimeSeg 如何做到这一点,请下载此示例数据集输出(解压缩文件https://raw.githubusercontent.com/NicoKiaru/TestImages/master/LimeSegOutput/DubSeg.zip)。
打开 Fiji,然后启动 LimeSeg GUI Plugins>LimeSeg>Show GUI。弹出 LimeSeg 图形用户界面(在警告消息上单击“确定”)。 GUI 由一个上部面板组成,可以在 LimeSeg 上应用不同的操作。选项卡分隔了可以应用操作的不同类型的对象。下半部分包含有关 LimeSeg 状态的信息。

要将示例数据集加载到 LimeSeg 上,请执行以下操作:
-
解压zip数据集样本
-
在 LimeSeg GUI I/O 选项卡中,单击
-
选择您已解压的
DubSeg文件夹。单击“确定”。请注意,选择该文件夹并不打开它。要打开数据,您需要执行步骤4。 -
单击 LimeSeg GUI 中的
loadStateFromXmlPly按钮
现在单击STATE选项卡中的showTable。这将创建一个 Cells explorer 表,其中显示由 LimeSeg 分割的所有 3D 对象以及它们的组织方式。每列代表一个 Cell 对象,其名称位于选项卡顶部,如 cell_2。行是时间点。一个cell对象可能包含许多CellT对象,它代表特定T时间点的Cell。例如,Cell cell_56 包含 10 个 CellT 对象,时间点为 12 到 22。

可视化 3D 对象
在 LimeSeg GUI 中,转到 3D 视图,单击 make3DViewVisible,然后点击 putAllCellsTo3DDisplay。这显示了线虫胚胎,但仅在第一个时间点(按照 ImageJ 1.x 中的约定,时间点 1)。然而,如表中所示,还存在更多对象。为了能够看到胚胎随时间的演变,LimeSeg 必须链接到 ImageJ 图像 (ImagePlus)。要将 LimeSeg 与正确的图像链接,请下载图像示例 https://raw.githubusercontent.com/NicoKiaru/TestImages/master/CElegans/dub-0.5xy-TP1-22.tif 并在斐济打开它。
现在您需要将图像与 LimeSeg 链接:
-
单击 LimeSeg GUI 的 STATE 选项卡中的
Img:,然后选择图像。单击“确定”。 这对此步骤没有影响。 -
选择图像后,单击
setWorkingImage
请注意,图像名称出现在 LimeSeg GUI 下面板中。您现在可以浏览时间点,并注意到 3D 查看器已与当前显示的时间点同步。 3D 查看器还与 z 切片同步,z 切片在 3D 查看器中显示为下照式。
创建一个新单元
在 LimeSeg GUI 中,单击“状态”选项卡中的 newCell。您可以看到单元格资源管理器表格的末尾出现了cell_0。
####“填充”单元格 对特定单元格进行操作的先决条件是确保它是当前单元格(或活动单元格)。当前或活动的单元名称显示在 LimeSeg 状态面板中(单元:当前 =…),并且其列在单元资源管理器窗口中以蓝色突出显示。要更改 LimeSeg 的当前单元格,您可以:
- 在单元格资源管理器表格中双击它
- 使用STATE窗格中的按钮(在点击之前填写右侧的字符串id参数(如
cell_10)) - 使用“状态”窗格中的按钮(单击前填写右侧的数字参数)
确保当前单元格为cell_0. 它应该是空的。您可以在 Cells 资源管理器窗口中检查这一点。可以使用两种方法来填充单元格。两者都意味着使用 Clipped Dots“缓冲区”对象,该对象将包含简单形状或现有 CellT 对象的副本。
- 创建一个球体
Go to the
Clipped Dotstab. At the right of the makeSphere button, fill in the 4 white boxes. They correspond to the center of the sphere (x,y,z, radius). All units are in pixel except for z which is in number of slice. Enter 180, 130, 19, 100 for instance. Then click the button. A sphere object has been created in the clipped dots buffer objects. This can be vizualized in the lower panel of LimeSeg GUI (Clipped dots: #dots=). - 将球体粘贴到单元对象中
To put the sphere into the current Cell, go to the Current CellT tab, and click
pasteDotsToCellT. Notice that the Cells explorer now displays C(7906) for the currentCell at the TimePoint 1. And the 3D viewer is updated. Now this sphere was pasted at the TimePoint 1, why ? Because LimeSeg has an active or a current frame parameter which is 1 by default. The current frame is another parameter that can be set within LimeSeg. Its current value is displayed in the lower panel of LimeSeg GUI. To change this parameter, go to the STATE tab and in front of the setCurrentFrame button, type 10 for instance. Now click the button. The active frame is now 10. If you now click again onpasteDotsToCellT, the clipped dots (i.e. the sphere) are pasted are the timepoint 10 of the current Cell. -
删除单元时间点(CellT 对象) Set properly the active Cell (see above how to select the active cell) and the active timepoint (STATE > setCurrentFrame).
Click
Current CellT>clearDotsFromCellT删除单元格
例如,我们将删除新创建的单元格cell_0。首先,您需要将要删除的单元格设置为LimeSeg的currentCell。
单击选项卡 当前单元格 按钮 。
LimeSeg 优化器的使用
为了正确使用 LimeSeg 优化器,它的运行方式是模块化的。要使其无需命令即可工作,应遵循以下步骤:
- 选择要使用的 3D 图像:
- STATE tab > Select the image with the Img: button then click on setWorkingImage
- Choose the correct Timepoint with setCurrentFrame button
- Choose the correct Channel with the setCurrentChannel button
- 设置 Z 间距与 XY 间距的比率。 (例如 5 表示每个像素 200 nm,每个切片 1 um)。
- Goto the Otimizer tab.
- In the first right box next to setOptimizerParameter, put
Z_scale - In the second, put the correct numeric parameter (1 for isotropic acquisition)
- Click the setOptimizerParameter button (compulsory) 我们现在假设您已经创建了要优化的 3D 对象。 3D 对象操作部分简要解释了对象创建。
- 现在优化器知道应该使用哪个图像,但其中没有 3D 对象。 3D 对象在 LimeSeg 中称为 CellT 对象(用于单元时间点)。要将此类对象添加到优化器中,您需要对于要放入的每个对象:
- Set the current or active Cell as the one you want to use
- Set the current Frame parameter you are working
- Go to the Current CellT tab, and click ‘putCurrentCellTToOptimizer
- Notice in the GUI down panel, the number of dots in Optimizer #dots: should increase
- 设置优化器参数。
- Similarly to
Z_scale,you can set various parameters for the Optimizer f_pressured_0(this should be done before)- and many others… (needs full documentation)
- Similarly to
- 您现在需要运行优化器
- In the Optimizer tab, set the number of optimization step you want to perform (-1 means until convergence), then click
runOptimisationLimeSeg I/O
- In the Optimizer tab, set the number of optimization step you want to perform (-1 means until convergence), then click
LimeSeg 生成的 3D 对象可以保存和检索。结构选择是根据 LimeSeg 使用的几个约定来完成的,以简化斐济以外的对象操作。
如果您下载并解压示例文件https://raw.githubusercontent.com/NicoKiaru/TestImages/master/LimeSegOutput/DubSeg.zip,,您将看到该文件夹包含一个 xml 文件,其中包含最后的分段参数 (LimeSegParams.xml) 和每个 Cell 对象一个文件夹。在每个文件夹中,根据 Cell id 对象命名,CellParams.xml 文件包含特定于 Cell 对象和 CellT 对象(特定时间点的 Cell)的参数,由文件 T_x.ply 组成,其中 x 是时间点编号,ply 是使用的标准 3D 格式。 PLY (file format) 文件格式是标准的,可用于许多其他 3D 软件。
要保存 LimeSeg 的当前对象,请使用按钮 在 LimeSeg GUI I/O 选项卡 (Plugins › LimeSeg › Show GUI) 中选择一个空文件夹,然后单击 按钮。
要打开以前保存的数据,请使用 LoadFrom: 按钮选择文件夹,然后单击 loadStateFromXmlPly 按钮。这会删除 LimeSeg 中包含的所有先前数据。
LimeSeg 3D 查看器(高级)
- 图像同步
LimeSeg 3D 查看器与 LimeSeg 状态的工作图像同步。该图像是在命令启动期间由用户选择自动设置的。但是,也可以在 LimeSeg GUI 中进行设置。要选择此图像,请转到“状态”选项卡,然后通过单击“img”选择正确的图像,然后单击“setWorkingImage”按钮(不要忘记这一点,否则图像选择无效)。
由于当前切片在 3D 视图中与 2D 视图中选定的切片同步突出显示(下照…),因此会发生同步。此外,更改帧还将更改多帧图像中显示的 3D 对象。
- 其他 3D 视图参数。
其他参数可以在 3D 视图面板中修改。在 LimeSeg GUI 中,一旦用户单击最左侧的按钮,就会执行该命令。另一个文本区域是单击命令按钮之前应指定的参数。
–set3DViewMode 如果参数为0,则显示所有3D对象的体积,如下所示:
1:物体在zposition位置被裁剪(上面裁剪)
2:(下切)
3:仅显示当前切片(上下剪切)。
8:如果正在进行优化,则显示优化后的点(绿色,已收敛的点,红色,未收敛的点)。
脚本示例
示例脚本(ImageJ 1.x 和 groovy)可在此处获取:
They are also accessible as templates in the ImageJ script editor, if the LimeSeg update site is enabled.