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

如何为 TrackMate 编写自己的查看器

简介

TrackMate开发自定义视图是“困难”和痛苦的。当然,它必须是模型的图形表示:所有中间步骤的跟踪结果。如果您想构建真正有用的东西,它必须是湿的并且应该允许修改模型。请注意,修改可能会发生在其他地方。性能也很关键:它位于用户界面,所以它必须具有响应能力,并且可以处理大型模型(数百万次检测)。

老实说,我认为扩展 TrackMate 的关键之一是已经有了一些可用的观点。

尽管如此,在不满足所有这些要求的情况下构建有用的东西是完全有可能的。我仍然希望有一天有人能贡献一个视图,在斐济的切片机中显示模型。

本教程介绍了 TrackMate 的视图接口,由于它们处理用户交互,我们返回了TrackMate 事件系统

自定义 TrackMate 视图

spot feature analyzers一样,TrackMate视图分为两个部分,每个部分都扩展了不同的接口:

  • ViewFactory,即模型的实际视图。所有的露营工作都在这里完成。
  • TrackMateModelView 是负责实例化视图并在 TrackMate 中集成我们的工厂。该接口扩展了ViewFactory接口,因此希望在那里找到我们之前讨论过的一些方法,以及SciJava注释。

在本教程中,我们将构建一些简单的东西。我们将限制自己开发一个视图,每当 TrackMate 中某些时候,都会向用户发送简单的消息。例如,当检测到浮标时,有多少个;如果他选择了点和边缘,有多少个;等等。因此我们将重用斐济日志窗口,这使得我们免于完全开发模型的图形视图。

但这有点有限,我们选择不会让用户在检测步骤之后将此视图作为主要视图。 SciJava参数将用于在视图菜单中选择不可见。为了充分利用它,我们仍然需要某种方式来启动此视图,但这将是下一个教程的主题。

现在,我们只专注于构建视图。

TrackMateModule

工厂本身没有什么特别的。在 TrackMateModule 方法之上,它只有一个方法来实例化它控制的视图:

@Override
public TrackMateModelView create( final Model model, final Settings settings, final SelectionModel selectionModel, final DisplaySettings displaySettings );

您可以看到我们可以将 4 个参数传递给视图本身的构造函数:

  • 当然是模型,
  • 还有设置对象,方便我们找到图像对象的链接。 DisplaySettings用它来检索用于显示TrackMate数据的ImagePlus。
  • 还提供了选择模型,并且提交的实例是GUI中常用的实例,因此用户所做的可以在所有视图之间共享进行选择。
  • 最后,HyperStackDisplayer,其中包含用户在 GUI 中配置的显示设置,并且您的视图应该使用(如果可以的话)。

ModelChangeEvent界面

###方法

这就是实习工作发生的地方,有很多话要说。但是,您很少在这里找到接口中的方法,并且仅与一般用途相关,并且其中大多数不是其余的:

  • public void render(); 这是视图的初始化方法。视图在实例化时不必向您用户显示,而仅在调用此方法时才显示。这使得 TrackMate 能够正确管理渲染。

  • public void refresh(); 只要合理,此方法就应该负责更新视图。注意:模型更改时不会自动调用。您必须自己监听模型更改,如果您希望视图同步,请手动调用此方法。但是,只要用户更改显示设置,它就会自动调用(因为视图不会监听GUI更改)。但下面有更多内容。

  • public void clear(); 这一点是比较明确的。它确保了一种清晰视图的方法,视图与模型更改不保持同步。

  • public void centerViewOn( final Spot spot ); 这是一个非附加的便利工具,允许将视图(无论其含义)集中在特定点上。例如,当用户在 GUI 中选择一个点时,就会调用它:实现此方法的所有视图都会移动和平移到显示该点。

  • public Model getModel(); 公开此视图呈现的模型。

  • public String getKey(); 返回标志该视图的唯一键。注意:此键必须与可以实例化此视图的ViewFactory的键相同。这用于保存和恢复TrackMate会话中存在的视图。

模型变化

您不一定必须使您的视图与模型保持同步。您可以制作一些有用的东西,只捕获模型的快照,就像您启动视图时一样,并为此感到高兴。但是,TrackMate 允许自动和手动注释图像数据,因此非常有用的视图很可能会反映对模型所做的更改。理想情况下,它甚至可以“启用”这些更改。但超出了本教程的范围。

如果您想对监听模型进行更改,则必须注册为它的监听器。这是通过

Model.addModelChangeListener( YourViewInstance );

那么你会得到一个新方法:

public void modelChanged( final ModelChangeEvent event )

事件本身可以报告5种类型的变化:

  • 立即检测完成。在 GUI 中,该信息是在检测步骤之后、发送之前的最终过滤步骤。
  • 即时被可逆地过滤。每当您在点过滤面板上更改任何内容(新过滤器、阈值等)时都会发送此信息。
  • 跟踪步骤完成。这符合 GUI 中的跟踪步骤。
  • 曲目被过滤。就像溶液一样。
  • 模型已修改**。我们所说的修改是指对模型进行增量、手动修改。用户可能删除了一个点,或在空间中移动了它,或更改了其大小,或在两个点之间添加了边缘等…在这种情况下,可以询问§§0§§§实例来了解更改、删除、添加的内容等…

监听选择的变化

TrackMate GUI 共享一个 TrackMateModelView 的公共实例,用于存储用户做出的选择。这在探索跟踪结果时非常方便。

通过实现SelectionModel界面,您的视图可以选择更改保持同步。它添加了一个方法:

public void selectionChanged(SelectionChangeEvent event);

一个简单的事件记录器

让我们保持自定义视图简单:我们将只构建一个事件记录器,它返回 IJ 记录器以回显模型发生的情况。那么我们当然要实现上面提到的两个监听器接口。但代码仍然非常简单:查看 SelectionChangeListener 了解详细信息。

对于工厂来说,没什么特别的:

package plugin.trackmate.examples.view;

import ij.ImageJ;
import ij.ImagePlus;

import javax.swing.ImageIcon;

import org.scijava.plugin.Plugin;

import fiji.plugin.trackmate.Model;
import fiji.plugin.trackmate.SelectionModel;
import fiji.plugin.trackmate.Settings;
import fiji.plugin.trackmate.TrackMatePlugIn_;
import fiji.plugin.trackmate.visualization.TrackMateModelView;
import fiji.plugin.trackmate.visualization.ViewFactory;

@Plugin( type = ViewFactory.class )
public class EventLoggerViewFactory implements ViewFactory
{

	private static final String INFO_TEXT = "<html>This factory instantiates an event logger view for TrackMate, that uses the IJ log window to just echo all the event sent by the model.</html>";

	public static final String KEY = "EVENT_LOGGER_VIEW";

	@Override
	public String getInfoText()
	{
		return INFO_TEXT;
	}

	@Override
	public ImageIcon getIcon()
	{
		return null;
	}

	@Override
	public String getKey()
	{
		return KEY;
	}

	@Override
	public String getName()
	{
		return "Event logger view";
	}

	@Override
	public TrackMateModelView create( final Model model, final Settings settings, final SelectionModel selectionModel )
	{
		return new EventLoggerView( model, selectionModel );
	}

	/*
	 * MAIN METHOD
	 */

	public static void main( final String[] args )
	{
		ImageJ.main( args );
		new ImagePlus( "../fiji/samples/FakeTracks.tif" ).show();
		new TrackMatePlugIn_().run( "" );
	}

}

视图必须在其他地方启动

从版本 7 开始,自定义视图不会自动安装到 TrackMate GUI 中。这意味着即使在构建它们之后,您还需要为用户提供一种从 TrackMate 内启动它的方法。这也是我们对 TrackMate 中的其他视图所做的操作。现在,您可以在 TrackMate 中找到以下内置视图:

  • HyperStackDisplayer。这是主要观点。它在 ImageJ 窗口上显示跟踪结果并允许您编辑跟踪结果。
  • TrackScheme,血统视图。
  • 表视图。

TrackScheme 和表格视图通过 GUI 显示配置面板中的按钮启动。对于自定义视图,显示它们的最佳方法是使用自定义操作,这是下一个教程的主题。

快进其结果,以下是经过操作后得到的结果: /media/plugins/trackmate/trackmate-customview-1.png

Jean-Yves Tinevez 17 March 2014 - 23 July 2021