[英]Can we get the image that is not in front by DM script?
我对处理系列的多个图像有疑问:
当我们编码时,我们可以通过image front:=GetFrontImage()
获得前面的image front:=GetFrontImage()
。 我还可以获得不在前面的图像吗? 例如,如果总共有20个图像,我可以通过类似于这个伪命令的东西直接获取第7个图像(从前到后安装): image img7:=GetFrontThe7thImage()
?
我有一系列图像,图像名称的格式是一致的,如前图像的名称是xxx001,第二个是xxx002,第三个是xxx003,...,第N个图像是xxxN,我可以使用编码定义如image N:=imagexxxN
,然后我直接使用图像N进行数学处理? 或者我应该使用循环并逐个获取图像?
由于您可以在一个窗口/已保存的数据集中拥有多个图像( - 只需将一个图像复制并粘贴到另一个窗口上),因此通常可以使用ImageDocuments
进行迭代。 ImageDocument是存储到硬盘驱动器并从硬盘驱动器加载的对象。 当您创建图像但不显示图像时,此图像还没有ImageDocument,但所有(一次)显示的图像都有。
要选择最后一个图像( 最后面的图像),您可以执行以下操作:
number nDocs = CountImageDocuments()
imageDocument docLast = GetImageDocument( nDocs-1 )
image imgLast := ImageDocumentGetImage( docLast, 0 )
SelectImage( imgLast )
请注意,您也可以使用OOP编码样式将事物放在一行中,其中方法的第一个参数放在命令前面以允许管道。 因此,您可以选择第2个最前方的图像(前提是至少有2个)
GetImageDocument(1).ImageDocumentGetImage(0).SelectImage()
您需要一个循环来访问多个图像,但是对于并行处理,您可以考虑将数据放入3D数据堆栈中。 (另请注意,您可以使用File/Open Series...
多个图像加载到3D堆栈中File/Open Series...
)。 根据您要执行的操作,您可以使用Slice2
命令在“z Slice2
”上逐个“切片”操作此堆栈,或者您可以作为整体对3D数据进行操作。
对于此部分,您需要两个函数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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.