原始 MediaWiki 页面

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

可训练的 Weka 分割

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

tws-pipeline

可训练:可以训练该插件从用户输入中学习,并稍后在未知(测试)数据中执行相同的任务。

Weka:它利用最新版本Weka中的所有强大工具和分类器。

分割:它根据所选分类器的训练提供标记结果。

简介

Trainable Weka Segmentation 是一个斐济插件,它将一系列机器学习算法与一组选定的图像特征相结合,以生成基于像素的分割。 Weka(怀卡托知识分析环境)本身可以从插件中调用。它包含一系列用于数据分析和预测建模的可视化工具和算法,以及可轻松访问此功能的图形用户界面。正如其维基百科网站上所述,Weka 的优点包括:

  • 根据GNU General Public License免费提供
  • 可移植性,因为它完全用 Java 编程语言实现,因此可以在几乎任何现代计算平台上运行
  • 数据预处理和建模技术的全面集合
  • 图形用户界面易于使用

Weka支持多种标准data mining任务,更具体地说,是数据预处理、clusteringclassificationregression、可视化和feature selection

该插件的主要目标是充当机器学习和图像处理领域之间的桥梁。它提供了使用的框架,更重要的是,比较**任何可用的分类器来执行基于像素分类的图像分割。

图形用户界面

Example of the first look of the plugin window when using it on a TEM image Example of the first look of the plugin window when using it on a TEM image

Trainable Weka Segmentation 可在任何 2D 或 3D 图像(灰度或彩色)上运行。要使用 2D 功能,您需要选择菜单命令PluginsSegmentationTrainable Weka Segmentation。对于 3D 功能,请调用第 PluginsSegmentationTrainable Weka Segmentation 3D 下的插件。这两个命令将使用相同的 GUI,但在其设置中提供不同的功能选项。

默认情况下,该插件以两个类开始,即它将生成二进制像素分类。用户可以使用斐济提供的整套 tools for ROI(感兴趣区域)绘图向这两个类添加轨迹。其中包括矩形、圆角矩形、椭圆形、椭圆形、画笔多边形和徒手选择。默认情况下,会自动选择徒手选择工具(1 像素宽度)。

用户可以在主画布中平移、放大和缩小或在切片之间滚动(如果输入图像是堆栈),就像任何其他斐济窗口一样。画布的左侧有两个按钮面板,一个用于培训,一个用于常规选项。在图像画布的右侧,我们有一个面板,其中包含每个类的跟踪列表,以及一个用于将当前 ROI 添加到该特定类的按钮。所有按钮都包含其功能的简短说明,当光标悬停在按钮上时会显示该说明。

培训小组

Example of the aspect of the plugin window after training on a TEM image Example of the aspect of the plugin window after training on a TEM image

训练分类器

该按钮激活训练过程。两个类的一次跟踪是开始训练所需的最低要求。第一次按下此按钮时,将提取输入图像的特征并将其转换为一组浮点值向量,这是 Weka 分类器期望的格式。此步骤可能需要一些时间,具体取决于图像的大小、功能数量以及运行 Fiji 的计算机的核心数量。特征计算以完全多线程的方式完成。仅在启动插件或更改任何功能选项后第一次训练时才会计算功能。

如果训练正确结束,则显示的图像将被完全分割,并且结果将用相应的类别颜色覆盖。请注意,所有按钮现在都已启用,因为它们的所有功能在训练后都可以使用。

训练时,此按钮将显示标签“STOP”。单击它,整个训练过程将被中断,并且插件将重置为训练之前的状态。

切换覆盖

Example of resulting probability map displayed as a hyperstack Example of resulting probability map displayed as a hyperstack

此按钮可激活和停用结果图像的叠加。覆盖图像的透明度可以在Settings dialog中调整。

创建结果

它创建并显示结果图像。该图像相当于当前叠加(具有相同类别颜色的 8 位颜色)。每个像素都设置为最可能的类别(0、1、2…)的索引值。

获取概率

基于当前分类器,每个像素属于每个类别的概率显示在 32 位超堆栈上。

绘图结果

该按钮调用Weka核心,根据训练数据生成模型性能图表,即ROCprecision/recall等曲线。

这些曲线允许基于可应用于概率图的不同阈值来可视化分类器的性能。

选项面板

应用分类器

通过单击此按钮,我们可以将当前分类器应用于文件系统中的任何图像或图像堆栈。将弹出两个对话框,首先询问用户输入图像或堆栈,其次询问结果是否应该显示作为概率图或分割(最终类别)。然后,该插件将根据当前分类器和所选特征执行图像分割。这可能需要一段时间,具体取决于输入图像的数量和大小以及机器的核心数量。完成后,将显示输入图像(或堆栈)及其相应的分割。

要将 概率图 转换为分段,您可以使用 github 中的以下 Beanshell 脚本:

负载分类器

在这里我们可以加载任何以前保存的分类器。该插件将使用这个新分类器的属性检查和调整所选功能。分类器文件格式是 Weka (.model) 中使用的格式。

保存分类器

它将当前分类器保存到标准 Weka 格式 (.model) 下的文件中。这允许我们存储分类器并稍后在不同的会话中应用它们。

加载数据

在这里,我们可以从同一或其他图像或堆栈上的先前轨迹加载数据(采用 Weka 格式)。同样,该插件将检查并强制加载的数据与当前图像、功能和类之间的一致性。输入文件格式为标准Weka格式:ARFF

保存数据

使用此按钮,我们可以将当前跟踪信息保存到数据文件中,以便稍后使用插件或 Weka Explorer 本身进行处理。该插件将从属于每条轨迹的像素派生的特征向量保存到用户选择的位置的 ARFF 文件中。请注意,轨迹(用户选择的感兴趣区域)不会被保存,而只会保存其相应的特征向量。要保存 ROI,您只需使用[https://imagej.net/ij/docs/guide/146-30.html#sub:ROI-Manager… ROI 管理器]。

创建新类

插件的默认类数是两个,但是通过这个按钮我们可以增加到任意数量。新类别的名称可以在Settings dialog上更改。

设置

Settings dialog of the Trainable Weka Segmentation plugin (2D features) Settings dialog of the Trainable Weka Segmentation plugin (2D features)

插件的其余可调参数可以在“设置”对话框中更改,单击此按钮时会显示该对话框。

训练特征(2D)

在这里我们可以选择和取消选择训练特征,这是学习过程的关键。该插件创建一堆图像——每个功能一个图像。例如,如果仅选择 Gaussian blur 作为特征,则分类器将在原始图像和一些模糊版本上进行训练,并使用不同的 \(\sigma\) 高斯参数。 \(\sigma\) 通常等于 \(\sigma_\mathrm{min}, 2\sigma_\mathrm{min}, 4\sigma_\mathrm{min},..., 2^{n-1}\sigma_\mathrm{min}\),其中 \(2^{n-1}\sigma_\mathrm{min}\le \sigma_\mathrm{max}\)。默认情况下\(\sigma_\mathrm{min}=1,\sigma_\mathrm{max}=16\),因此\(n=5\)。

如果输入图像是灰度图像,则将使用双精度(32 位图像)计算特征。对于 RGB 输入图像,特征也将为 RGB。

不同的可用 2D 图像特征包括:

  • 高斯模糊:使用高斯内核执行 \(n\) 单独卷积,并具有 \(\sigma\) 的正常 \(n\) 变化。半径越大,图像变得越模糊,直到像素均匀。
  • Sobel 滤波器:计算每个像素的 approximation of the gradient of the image intensityGaussian blurs \(\sigma\) 像往常一样变化,在过滤器之前执行。
  • Hessian:计算每个像素处的 Hessian matrix \(H\)。在应用任何过滤器之前,将执行具有不同\(\sigma\) 的Gaussian blur。用于像素分类的最终特征,给定 Hessian 矩阵 $$\left(\begin{array}{cc}

a & b\\ c & d\end{array}\right)$$ 计算如下:

    • 模块:\(\sqrt{a^{2}+bc+d^{2}}\)。
      • Trace: \(a+d\).
      • Determinant: \(ad-cb\).
      • First eigenvalue: \(\frac{a+d}{2}+\sqrt{\frac{4b^{2}+(a-d)^{2}}{2}}\).
      • Second eigenvalue: \(\frac{a+d}{2}-\sqrt{\frac{4b^{2}+(a-d)^{2}}{2}}\).
      • Orientation: \(\frac{1}{2}\arccos\left(4b^{2}+(a-d)^{2}\right)\) This operation returns the orientation for which the second derivative is maximal. It is an angle returned in radians in the range \(\left[-\frac{\pi}{2},\frac{\pi}{2}\right]\) and corresponds to an orientation without direction. The orientation for the minimal second derivative can be obtained by adding (or subtracting) \(\frac{\pi}{2}\).
      • Gamma-normalized square eigenvalue difference: \(t^{4}(a-d)^{2}\left((a-d)^{2}+4b^{2}\right)\), where \(t=1^{3/4}\).
      • Square of Gamma-normalized eigenvalue difference: \(t^{2}\left((a-d)^{2}+4b^{2}\right)\), where \(t=1^{3/4}\).
  • 高斯差异:从原始图像中计算两个 Gaussian blur 图像,并从另一个图像中减去一个图像。 \(\sigma\) 值像往常一样变化,因此 \(\frac{n(n-1)}{2}\) 特征图像被添加到堆栈中。

  • 膜投影:通过定向过滤增强图像的膜状结构。此操作的初始内核被硬编码为 \(19\times19\) 零矩阵,中间列条目设置为 1。通过将原始内核旋转 6 度直至总旋转 180 度来创建多个内核,得到 30 个内核。每个内核与图像进行卷积,然后通过 6 种方法将 30 个图像集 Z 投影为单个图像:
    • sum of the pixels in each image
    • mean of the pixels in each image
    • standard deviation of the pixels in each image
    • median of the pixels in each image
    • maximum of the pixels in each image
    • minimum of the pixels in each image 6 个结果图像中的每一个都是一个特征。因此,图像中与平均图像强度不同的类似值像素行中的像素将在 Z 投影中脱颖而出。
  • 平均值、方差、中值、最小值、最大值:距目标像素 \(\sigma\) 像素半径内的像素进行相关操作(平均值/最小值等),并将目标像素设置为该值。
  • 各向异性扩散:斐济的 anisotropic diffusion filtering,迭代次数为 \(20\),每次迭代进行 \(\sigma\) 平滑,\(a_{1}=0.10、0.35\)、\(a_{2}=0.9\),边缘阈值设置为膜尺寸。
  • 双边滤波器:与均值滤波器非常相似,但在平均/模糊图像的其他部分时更好地保留边缘。过滤器仅通过对当前像素周围颜色值接近当前像素的值进行平均来完成此任务。其他邻域像素与当前像素的“接近度”由指定的阈值确定。 IE。对于值 10,对当前平均值有贡献的每个像素必须在当前像素的 10 个值之内。在我们的例子中,我们将空间半径 \(5\) 和 \(10\) 结合起来,范围半径为 \(50\) 和 \(100\)。
  • Lipschitz 过滤器:来自 Mikulas Stencel plugin。该插件实现了图像的 Lipschitz 覆盖,相当于圆锥体的灰度开口。 Lipschitz 盖可用于通过减去下部 Lipschitz 盖(顶帽程序)来消除缓慢变化的图像背景。使用顺序双扫描算法。我们使用大礼帽和大礼帽的组合,斜率 \(s = 5, 10, 15, 20, 25\)。
  • Kuwahara 滤波器:另一种保留边缘的降噪滤波器。这是 Kuwahara filter that uses linear kernels 的版本,而不是方形版本。我们使用膜片大小作为内核大小、30 个角度和三个不同的标准(方差、方差/平均值和方差/平均值^2)。
  • Gabor 过滤器:目前此选项可能需要一些时间和内存,因为它会生成非常多样化的 Gabor filters (22) 范围。 ‘这将来可能会发生变化‘。实施细节包含在本script中。 Gabor 滤波器是一种边缘检测和纹理滤波器,它将多个内核以不同角度与图像进行卷积。核中的每个点的计算公式为 \(\frac{\cos \left(2\pi f \frac{x_p}{s_x}+\psi \right) e^{-0.5 \left( \frac{x_p^2}{\sigma_x^2} + \frac{y_p^2}{\sigma_y^2} \right)} }{ 2\pi \sigma_x \sigma_y }\)。 Gabor 滤波器是带通滤波器,因此实现频率变换。
  • 导数过滤器:使用FeatureJ(需要在更新程序)。
  • 拉普拉斯滤波器:使用FeatureJ计算输入图像的拉普拉斯算子(它需要在更新程序中启用ImageScience更新站点)。它使用平滑尺度\(\sigma\)。
  • 结构过滤器:使用FeatureJ计算输入图像中的所有元素,即所谓的结构张量的特征值(最小和最大)(它需要在更新程序中启用ImageScience更新站点)。它使用平滑尺度 \(\sigma\) 和积分尺度 1 和 3。
  • :围绕每个像素绘制一个半径为 \(r\) 的圆;获取该圆分割为 numBins 块的直方图;然后将熵计算为 \(\sum_{p~\mathrm{in}~\mathrm{histogram}} -p*\mathrm{log}_2(p)\),其中 \(p\) 是直方图中每个块的概率。 numBins 等于 \(32, 64, 128, 256\)。 \(r\) 等于\(\sigma\)。
  • 邻居:将图像向 8 个方向移动一定数量的像素 \(\sigma\)。因此创建 \(8n\) 特征图像。

当使用灰度图像时,输入图像也将作为特征包含在内。对于彩色 (RGB) 图像,色调、饱和度和亮度也将成为特征的一部分。

这些 2D 滤波器的详细实现可以在 source code 中找到。

**注意*:名为DerivativesLaplacian* 和Structure 的功能属于ImageScience 套件,需要激活by enabling the ImageScience update site in the updater

训练特征(3D)
Settings dialog for the Trainable Weka Segmentation 3D plugin. Settings dialog for the Trainable Weka Segmentation 3D plugin.

从菜单命令PluginsSegmentationTrainable Weka Segmentation 3D调用插件时,可用图像功能集如下:

  • 高斯模糊:使用高斯内核执行 \(n\) 单独的 3D 卷积,并具有 \(\sigma\) 的正常 \(n\) 变化。半径越大,图像变得越模糊,直到像素均匀。
  • Hessian:使用FeatureJ计算每个图像元素(体素)的 Hessian 特征值,例如可用于局部区分板状、线状和斑点状图像结构。更具体地说,它计算 Hessian 张量的最大、中间和最小特征值的大小。它需要在更新程序中启用ImageScience更新站点。它使用平滑尺度\(\sigma\)。
  • 导数:使用 FeatureJ(它需要在更新程序中启用ImageScience更新站点)。
  • 拉普拉斯算子:使用FeatureJ计算输入图像的拉普拉斯算子(它需要在更新程序中启用ImageScience更新站点)。它使用平滑尺度\(\sigma\)。
  • 结构:使用FeatureJ计算输入图像中的所有元素,即所谓的结构张量的特征值(最小和最大)(它需要在更新程序中启用ImageScience更新站点)。它使用平滑尺度 \(\sigma\) 和积分尺度 1 和 3。
  • 边缘:使用 Canny 边缘检测来检测边缘,其中涉及梯度幅度的计算、局部非最大梯度幅度的抑制以及(滞后)阈值处理。同样,此功能使用FeatureJ,因此需要在更新程序中启用ImageScience更新站点。它使用平滑尺度\(\sigma\)。
  • 高斯差分:从原始图像中计算两个 Gaussian blur 图像,并从另一个图像中减去一个图像。 \(\sigma\) 值像往常一样变化,因此 \(\frac{n(n-1)}{2}\) 特征图像被添加到堆栈中。
  • 最小值、最大值、平均值、方差、中值:距目标像素 \(\sigma\) 体素半径内的体素进行相关操作(平均值/最小值等),并将目标体素设置为该值。

西格玛单位:所有 3D 特征都使用以体素单位表示的通用西格玛。然而,由于体素可能是各向异性的,西格玛大小将相应地调整以解决它。因此,调用插件时需要确保输入图像校准正确。

功能选项
  • 膜厚度:膜厚度的期望值,默认1像素。越准确,过滤器就越精确。仅适用于 2D 特征。
  • 膜片尺寸:这表示膜投影滤光片视场的尺寸 \(n \times n\)。仅适用于 2D 特征。
  • 最小西格玛:用于创建特征的各向同性滤波器的最小半径。默认为 1 像素。
  • 最大西格玛:用于创建特征的各向同性滤波器的最大半径。默认情况下,2D 为 16 像素,3D 为 8 像素。
分类器选项
Classifier selection in the Trainable Weka Segmentation [Settings dialog](/plugins/tws#settings). Classifier selection in the Trainable Weka Segmentation Settings dialog.

默认分类器是FastRandomForest,是random forest多线程版本,由Fran Supek初始化,每个节点有200棵树和2个随机特征。但是,用户可以通过单击“选择”按钮来选择第 Weka 中的任何可用分类器。通过左键单击分类器文本,我们还可以编辑分类器选项。

如果您没有找到所需的分类器,您可能需要安装包含它的 Weka 软件包。为此,您需要启动 Weka GUI 选择器(通过单击插件 GUI 左侧面板的 Weka 按钮)并使用 Weka Package Manager(在ToolsPackage manager下)。有关如何安装新软件包的分步说明,请查看此tutorial

类名

可以使用这些文本框重命名这些类。

平衡课程

分类器默认使用所有用户轨迹进行训练。通过单击此选项,我们首先过滤类别,以提供样本的平衡分布。这意味着数量较少的类将重复其一些样本,而人口较多的类将为了均匀分布而丢失一些样本。如果我们想对所有类别给予相同的重要性,则强烈建议使用此选项。另一种方法是使用Weka CostSensitiveClassifier并设置相应的成本矩阵。

保存特征堆栈

我们可以通过单击此按钮将特征保存为图像堆栈。它将使用最后可用的功能配置。

结果叠加不透明度

该滑块设置生成的叠加图像的不透明度。根据输入图像的图像对比度,我们可能有兴趣调整该值。

威卡

Weka 按钮启动 Weka GUI 选择器,我们可以在其中启动第 Weka 中可用的所有应用程序:

  • Explorer:使用 Weka 探索数据的环境。
  • 实验器:在学习方案之间进行实验和统计测试的环境。
  • KnowledgeFlow:此环境支持与资源管理器基本相同的功能,但具有拖放界面。优点之一是它支持增量学习。
  • SimpleCLI:提供简单的命令行界面,允许为不提供自己的命令行界面的操作系统直接执行Weka命令。

有关如何使用 Weka Explorer 比较图像分割分类器的完整分步说明,请参阅Trainable Weka Segmentation - How to compare classifiers 教程。

标签面板

在 GUI 的右侧,我们为用户定义的每个类提供了一个按钮和一个跟踪列表(默认情况下有两个:类 1 和类 2)。

添加到班级按钮

Dialog displayed by right-clicking on the *Add to class* buttons to select a new color for that class Dialog displayed by right-clicking on the Add to class buttons to select a new color for that class

通过 左键单击 添加到 […] 按钮之一,当前选择 (ROI) 将添加到该按钮定义的类中。请注意,可以在“设置”对话框中修改按钮的文本,如前所述。

通过右键单击这些按钮中的任何一个,将显示一个新对话框来更改与该类关联的颜色(以及覆盖层和结果查找表)。

跟踪列表

每个添加到[…]按钮下方都有其相应的添加跟踪列表(默认为空)。通过左键单击其中一条迹线,它将在主图像中突出显示。相反,双击它将从列表中删除跟踪

宏语言兼容性

Trainable Weka Segmentation与流行的ImageJ macro language完全兼容。 GUI 中的每个按钮都是可宏录制的,并且稍后可以从简单的宏文件中再现它们的命令。 <div class="thumbnail" > Example of macro recording of the Trainable Weka Segmentation tools. Example of macro recording of the Trainable Weka Segmentation tools. </div>

完整的命令列表如下:

  • 启动插件:
      run("Trainable Weka Segmentation"); 
    
  • 将轨迹(当前 ROI)添加到类中:

格式:addTrace( class index, slice number )

例如,要将第一个切片的选定 ROI 添加到第一类,我们输入: call("trainableSegmentation.Weka_Segmentation.addTrace", "0", "1");

  • 训练分类器:
      call("trainableSegmentation.Weka_Segmentation.trainClassifier");
    
  • 切换叠加:
      call("trainableSegmentation.Weka_Segmentation.toggleOverlay");
    
  • 获取结果标签图像:
      call("trainableSegmentation.Weka_Segmentation.getResult");
    
  • 获取概率图:
      call("trainableSegmentation.Weka_Segmentation.getProbability");
    
  • 绘制模型性能曲线:
      call("trainableSegmentation.Weka_Segmentation.plotResultGraphs");
    
  • 将当前分类器应用于图像或堆栈:

格式:applyClassifier( input directory, input image or stack, show results flag, store results flag, probability maps flag, store folder)

示例: call("trainableSegmentation.Weka_Segmentation.applyClassifier", "/home/iarganda/data/", "input-image.tif", "showResults=true", "storeResults=false", "probabilityMaps=false", "");

  • 从文件加载分类器:
      call("trainableSegmentation.Weka_Segmentation.loadClassifier",
       "/home/iarganda/classifier.model");
    
  • 将当前分类器保存到文件中:
      call("trainableSegmentation.Weka_Segmentation.saveClassifier",
       "/home/iarganda/classifier.model");
    
  • 从 ARFF 文件加载以前保存的跟踪数据:
      call("trainableSegmentation.Weka_Segmentation.loadData", "/home/iarganda/data.arff");
    
  • 将当前跟踪数据(跟踪和类的特征向量)保存到文件中:
      call("trainableSegmentation.Weka_Segmentation.saveData", "/home/iarganda/data.arff");
    
  • 创建新班级:
      call("trainableSegmentation.Weka_Segmentation.createNewClass", "new-class-name");
    
  • 启动Weka:
      call("trainableSegmentation.Weka_Segmentation.launchWeka");
    
  • 启用/禁用特定功能:

格式:setFeature( "feature name=true or false" )

示例(启用方差过滤器): call("trainableSegmentation.Weka_Segmentation.setFeature", "Variance=true");

  • 更改类名:

格式:changeClassName( class index, class new name )

示例(将第一类名称更改为“background”): call("trainableSegmentation.Weka_Segmentation.changeClassName", "0", "background");

  • 设置选项来平衡班级分布:
      call("trainableSegmentation.Weka_Segmentation.setClassBalance", "true");
    
  • 设置膜厚度(以像素为单位):
      call("trainableSegmentation.Weka_Segmentation.setMembraneThickness", "2");
    
  • 设置膜片大小(以像素为单位,NxN):
      call("trainableSegmentation.Weka_Segmentation.setMembranePatchSize", "16");
    
  • 设置最小内核半径(以像素为单位):
      call("trainableSegmentation.Weka_Segmentation.setMinimumSigma", "2.0");
    
  • 设置最大内核半径(以像素为单位):
      call("trainableSegmentation.Weka_Segmentation.setMaximumSigma", "8.0");
    
  • 设置新的分类器:

格式:setClassifier( classifier class, classifier options )

示例(将分类器更改为 NaiveBayes): call("trainableSegmentation.Weka_Segmentation.setClassifier", "weka.classifiers.bayes.NaiveBayes", "");

  • 设置结果叠加不透明度:
      call("trainableSegmentation.Weka_Segmentation.setOpacity", "50");
    

    完整的宏示例

    ```javascript // Open Leaf sample run(“Leaf (36K)”);

// start plugin run(“Trainable Weka Segmentation”);

// wait for the plugin to load wait(3000); selectWindow(“Trainable Weka Segmentation v3.2.33”);

// add one region of interest to each class makeRectangle(367, 0, 26, 94); call(“trainableSegmentation.Weka_Segmentation.addTrace”, “0”, “1”); makeRectangle(186, 132, 23, 166); call(“trainableSegmentation.Weka_Segmentation.addTrace”, “1”, “1”);

// enable some extra features call(“trainableSegmentation.Weka_Segmentation.setFeature”, “Variance=true”); call(“trainableSegmentation.Weka_Segmentation.setFeature”, “Mean=true”); call(“trainableSegmentation.Weka_Segmentation.setFeature”, “Minimum=true”); call(“trainableSegmentation.Weka_Segmentation.setFeature”, “Maximum=true”); call(“trainableSegmentation.Weka_Segmentation.setFeature”, “Median=true”);

// change class names call(“trainableSegmentation.Weka_Segmentation.changeClassName”, “0”, “background”); call(“trainableSegmentation.Weka_Segmentation.changeClassName”, “1”, “leaf”);

// balance class distributions call(“trainableSegmentation.Weka_Segmentation.setClassBalance”, “true”);

// train current classifier call(“trainableSegmentation.Weka_Segmentation.trainClassifier”);

// display probability maps call(“trainableSegmentation.Weka_Segmentation.getProbability”); ```

库的使用

插件 GUI 独立于插件方法。这些方法以库风格的方式在单独的文件中实现,因此可以从任何其他斐济插件调用它们,而无需与 GUI 交互。这有利于它与其他插件的集成,并允许轻松编写脚本。

有关如何从脚本使用插件方法的示例,请查看 Trainable Weka Segmentation scripting 页面。

WekaSegmentation** 库的 **API 已在 here 中可用。

多功能性

**Examples of application of Trainable Weka Segmentation**. From left to right and from top to bottom: original image of the [Berkeley Segmentation Dataset (Test Image \#42049 (color)](https://www2.eecs.berkeley.edu/Research/Projects/CS/vision/bsds/BSDS300/html/dataset/images/color/42049.html)), probability of boundaries after training, semantic segmentation into 3 classes (sky, tree, eagle), and detected object using the probability maps of the semantic segmentation and some post-processing ([Level Sets](/plugins/level-sets) from maximum and bounding box selection). Examples of application of Trainable Weka Segmentation. From left to right and from top to bottom: original image of the Berkeley Segmentation Dataset (Test Image #42049 (color)), probability of boundaries after training, semantic segmentation into 3 classes (sky, tree, eagle), and detected object using the probability maps of the semantic segmentation and some post-processing (Level Sets from maximum and bounding box selection).

作为像素分类器,可训练的 Weka 分割具有广泛的应用,例如Edge detection、语义分割或Object detection 和本地化。所有这些都只需在插件 GUI 上点击几下即可完成,有时还需要与其他斐济工具或插件结合使用。

要了解谁在使用可训练 Weka 分割及其多种应用程序,您可以查看these publications

与现有 Weka 安装一起使用

Weka 将自动加载 ~/wekafiles 中安装的插件。如果您已经使用 Java 1.7 安装了 weka,并且看到有关 "java.lang.UnsupportedClassVersionError: weka/filters/unsupervised/attribute/IndependentComponents: Unsupported major.minor version 51.0" 的错误,那么您应该在运行 Fiji 之前删除/重命名 ~/wekafiles 文件夹。

Weka核心版本

由于3.2.0 releaseTrainable Weka Segmentation使用Weka 3.9.0+ - 开发版本。如果您从以前版本的插件/库加载模型时遇到问题,很可能您需要使用新版本重新创建模型(请参阅note 1 of the Weka official release)。

如果您确实需要重用旧模型,则可以通过 Weka 开发人员提供的 model migrator tool 将其转换为新版本。有关更多信息,请查看此post in the ImageJ forum

故障排除

对于与可训练 Weka 分割插件或库相关的所有疑问、建议、错误报告和问题,请使用 ImageJ forum 并确保可能已完成涵盖同一主题的check previous posts

引文

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

doi:10.1093/bioinformatics/btx180

Trainable Weka Segmentation代码有其自己的可引用DOI

## 执照

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

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