原始 MediaWiki 页面

我知道编辑这个网站吗?

3D 查看器 › 显示堆栈

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

如何创建宇宙图像堆栈显示为体积渲染、正交切片、等值面或矩形图

您可以下载本指南 here 的示例来源代码。

创建虚拟世界并在其中显示图像堆栈只需几个步骤。

首先要做的是打开图片库:

// Open an image
String path = "/home/bene/PhD/brains/template.tif";
ImagePlus imp = IJ.openImage(path);
new StackConverter(imp).convertToGray8();

然后创建一个虚拟宇宙并将其显示在窗口中:

// Create a universe and show it
Image3DUniverse univ = new Image3DUniverse();
univ.show();

通过以下代码行创建 3D 对象(=内容)并将其添加到 Universe:

// Add the image as a volume rendering
Content c = univ.addVoltex(imp);

在这种情况下,堆栈显示为体渲染。这里通过将堆栈的2D切片一个接一个地放置来创建体积渲染。从而根据图像的像素尺寸来分离不同的平面。根据其强度,为每个体素分配一个透明度值。因此,黑色体素是完全透明的,而白色体素是完全不透明的。

存在4种类型的内容:体积渲染、立体切片、值面和曲面图等。从ImagePlus创建的内容可以从一种显示类型转移到另一种显示类型:

// Display the image as orthslices
c.displayAs(Content.ORTHO);

正交切片是一片面的三个正交切片。

内容可以来自Universe中删除,并通过其名称进行标识:

// Remove the Content
univ.removeContent(c.getName());

这里我们将堆栈添加为等值面:

// Add an isosurface
c = univ.addMesh(imp);

等值面是通过应用移动立方体算法生成的表面。该算法假设堆栈中一个将3D物体与背景不同的强度值。因此,生成的表面理论在所有物体上都具有相同的(等)值。该值也称为表面阈值,是可调整的,稍后会看到。

最后,内容可以显示为曲面图。曲面图是 2D 形成幻灯片的 3D 表示,其中第 3 维由图像强度;

c = univ.addSurfacePlot(imp);

可以将宇宙的所有内容一起删除并关闭宇宙:

// remove all contents
univ.removeAllContents();

// close
univ.close();

Universe类处理内容的重要方法

添加新内容有以下方法:总体,这些方法有多种形式,一种是短形式,一种是长形式;长形式采用参数:

  • 图片:要显示的图片
  • 颜色: 新创建内容的颜色
  • 名称:(唯一)名称
  • 阈值:阈值,定义表面的等值
  • 重采样因子:下采样因子,以加快渲染速度。

在简单的形式中,缺陷参数被设置为默认值,它们是:

  • 颜色:
  • 名称:图片的标题
  • 阈值:Content.getDefaultThreshold() 的返回值定义
  • 重采样因子:Content.getDefaultResamplingFactor()的返回值定义 ```java public Content addContent(ImagePlus image, int type); public Content addContent(ImagePlus image, Color3f color, String name, int thresh, boolean[] channels, int resf, int type);

public Content addVoltex(ImagePlus image); public Content addVoltex(ImagePlus image, Color3f color, String name, int thresh, boolean[] channels, int resamplingF);

public Content addOrthoslice(ImagePlus image); public Content addOrthoslice(ImagePlus image, Color3f color, String name, int thresh, boolean[] channels, int resamplingF);

public Content addSurfacePlot(ImagePlus image); public Content addSurfacePlot(ImagePlus image, Color3f color, String name, int thresh, boolean[] channels, int resamplingF);

public Content addMesh(ImagePlus img); public Content addMesh(ImagePlus image, Color3f color, String name, int threshold, boolean[] channels, int resamplingF);

public Content addContent(Content c);

**删除内容**的重要方法是:
```java
public void removeAllContents();
public void removeContent(String name);

对于搜索内容,存在:

public Iterator contents();
public Collection getContents();
public Content getContent(String name);