3

我对处理一个系列的多个图像有疑问:

  1. 当我们编码时,我们可以通过 image front:=GetFrontImage(). 我也可以得到不在前面的图像吗?例如,如果总共有 20 张图像,我可以通过类似于此伪命令的内容直接获取第 7 张图像(-从前到后计数-)image img7:=GetFrontThe7thImage():?

  2. 我有一系列图片,图片名称的格式是一致的,比如前面的图片名字是xxx001,第二张是xxx002,第三张是xxx003,...,第N张图片是xxxN,请问可以用吗一个编码定义image N:=imagexxxN,然后我直接使用图像 N 进行数学处理?或者我应该使用循环并一张一张地获取图像?

4

2 回答 2

2

1)

由于您可以在一个窗口/保存的数据集中有多个图像( - 只需将一个图像复制并粘贴到另一个图像上 - ),因此通常可以节省ImageDocuments迭代使用。ImageDocument 是存储到硬盘驱动器并从硬盘驱动器加载的对象。当您创建图像但不显示它时,该图像还没有 ImageDocument,但所有(一次)显示的图像都有。

要选择最后一张图片(最后一张),您可以执行以下操作:

number nDocs = CountImageDocuments()
imageDocument docLast = GetImageDocument( nDocs-1 )
image imgLast := ImageDocumentGetImage( docLast, 0 )
SelectImage( imgLast )

请注意,您也可以使用 OOP 编码样式在一行中获取内容,其中方法的第一个参数放在命令前面以允许使用管道。因此,您可以按行选择第二个最前面的图像(前提是至少有 2 个)

GetImageDocument(1).ImageDocumentGetImage(0).SelectImage()

2)

您需要一个循环来访问多个图像,但对于并行处理,您可能会考虑将数据放入 3D 数据堆栈中。(另请注意,您可以使用 将多个图像加载到 3D 堆栈中File/Open Series...)。根据您想要执行的操作,您可以使用该命令“逐个切片”地在 z 维度上迭代此堆栈Slice2,或者您可以将 3D 数据作为一个整体进行操作。

于 2015-07-21T06:33:15.750 回答
1
  1. 对于这一部分,您需要两个函数 CountImages() 和 FindImageByIndex()。这是一个展示它们如何工作的示例:

    Result("\nAvailable images:\n");
    
    Number imageCount = CountImages();
    if (imageCount > 0)
    {
        for (Number imageIndex = 0; imageIndex < imageCount; imageIndex++)
        {
            Image nextImage := FindImageByIndex(imageIndex);
            String imageName = nextImage.ImageGetName();
            Result("Image " + imageIndex + ": " + imageName + "\n");
        }
    }
    else
        Result("None\n");
    
    Result("\n");
    
  2. 如果您的图像都是打开的并且按照您的指示进行了系统命名,那么您可以使用 GetNamedImage() 函数找到特定的图像,如下所示:

    String baseName = "xxx";
    Number desiredImageNumber = 3;
    String imageName = baseName + Format(desiredImageNumber, "%03.0f");
    Image desiredImage := GetNamedImage(imageName);
    
于 2015-07-21T01:45:03.830 回答