能否通过DM脚本获取到前面没有的图片?
Can we get the image that is not in front by DM script?
我对处理一个系列的多个图像有疑问:
我们在编码的时候,可以通过
image front:=GetFrontImage()
。我也可以得到不在前面的图像吗?
例如,如果总共有 20 张图像,我是否可以通过类似于此伪命令的方式直接获取第 7 张图像(-从前到后计数-):image img7:=GetFrontThe7thImage()
?
我有一系列图片,图片名称的格式是一致的,比如前图的名称是xxx001,第二张是xxx002,第三张是xxx003,... ,第N张图片是xxxN,
我可以使用像 image N:=imagexxxN
这样的编码定义,然后我直接使用图像 N 进行数学处理吗?或者我应该使用循环并一张一张地获取图像?
这部分需要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");
如果你的图片都是按照你说的打开并系统命名的,那么你可以使用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 数据进行操作。
我对处理一个系列的多个图像有疑问:
我们在编码的时候,可以通过
image front:=GetFrontImage()
。我也可以得到不在前面的图像吗? 例如,如果总共有 20 张图像,我是否可以通过类似于此伪命令的方式直接获取第 7 张图像(-从前到后计数-):image img7:=GetFrontThe7thImage()
?我有一系列图片,图片名称的格式是一致的,比如前图的名称是xxx001,第二张是xxx002,第三张是xxx003,... ,第N张图片是xxxN, 我可以使用像
image N:=imagexxxN
这样的编码定义,然后我直接使用图像 N 进行数学处理吗?或者我应该使用循环并一张一张地获取图像?
这部分需要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");
如果你的图片都是按照你说的打开并系统命名的,那么你可以使用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 数据进行操作。