自迁移出 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);