能否通过DM脚本获取到前面没有的图片?

Can we get the image that is not in front by DM script?

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

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

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

  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);
    

1)

因为您可以在一个 window/saved 数据集中包含多个图像(- 只需将一个图像复制并粘贴到另一个图像上 - )通常使用 ImageDocuments 进行迭代更省事。 ImageDocument 是存储到硬盘驱动器和从硬盘驱动器加载的对象。当您创建图像但不显示它时,该图像还没有 ImageDocument,但所有(曾经)显示的图像都有。

要select last 图像(最后面),您可以执行以下操作:

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

请注意,您也可以在一行中获取内容,使用 OOP 编码风格,其中方法的第一个参数放在命令的 前面 以允许管道-线。所以你可以select行

第二张最前面的图片(前提是至少有2张)

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

2)

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