【发布时间】:2018-03-22 17:19:39
【问题描述】:
我有一个尺寸为 4D 的数据集,例如 100(宽度)x 100(高度)x 2048(能量通道)x 20(帧)。 有没有什么功能或方法可以将相同宽度、高度和能量通道的 3D 数据立方体(帧)附加到 4D 数据集的末尾? 最后4D数据集应该是100*100*2048*21。
【问题讨论】:
标签: dm-script
我有一个尺寸为 4D 的数据集,例如 100(宽度)x 100(高度)x 2048(能量通道)x 20(帧)。 有没有什么功能或方法可以将相同宽度、高度和能量通道的 3D 数据立方体(帧)附加到 4D 数据集的末尾? 最后4D数据集应该是100*100*2048*21。
【问题讨论】:
标签: dm-script
没有以这种方式扩展图像对象的命令。
您必须将其作为手动副本执行。 (不幸的是,这需要额外的内存。)
number sx = 100
number sy = 100
number sz = 100
number sf = 10
image before := RealImage( "Before", 4, sx, sy, sz, sf )
before = icol
image addFrame := RealImage( "Frame", 4, sx, sy, sz )
addFrame = irow
image after := RealImage( "After", 4, sx, sy, sz, sf + 1)
after.SliceN( 4,4, 0,0,0,0, 0,sx,1, 1,sy,1, 2,sz,1, 3,sf,1 ) = before
after.SliceN( 4,4, 0,0,0,sf, 0,sx,1, 1,sy,1, 2,sz,1, 3,1,1 ) = addFrame
before.showimage()
after.ShowImage()
如果这是一个问题,您也可以使用流式传输命令将数据(仅值,无元数据)直接流式传输到缓冲存储器或硬盘上。只有在最后,您才会将该数据流式传输到适当大小的图像变量中。
最后,根据您的应用程序,您可能会考虑将新数据作为标签组添加到标签列表(可以附加)。您可以将“图像”存储为标签(TagGroupSetTagAsArray())。同样,您可以在稍后的时间点从这些信息中创建一个“完整的”图像。
number sx = 100
number sy = 100
number sz = 100
number sf = 10
tagGroup FrameTags = NewTagGroup()
tagGroup FrameList = FrameTags.TagGroupGetOrCreateTagList( "frames" )
FrameTags.TagGroupSetTagAsLong( "X Size", sx )
FrameTags.TagGroupSetTagAsLong( "Y Size", sy )
FrameTags.TagGroupSetTagAsLong( "Z Size", sz )
// Add frames whenever you need .....
for( number f = 0; f < sf; f++ )
{
image addFrame := RealImage( "Frame", 4, sx, sy, sz )
addFrame = random()
FrameList.TagGroupInsertTagAsArray( f, addFrame )
}
// Handle taggroup as you want. (Add to global tags, add to image, store to disc... )
FrameTags.TagGroupOpenBrowserWindow( "frames", 0 )
// Whenever needed, reconstruct image from frames
number nsx, nsy, nsz
FrameTags.TagGroupGetTagAsLong( "X Size", nsx )
FrameTags.TagGroupGetTagAsLong( "Y Size", nsy )
FrameTags.TagGroupGetTagAsLong( "Z Size", nsz )
TagGroup nFrameList
FrameTags.TagGroupGetTagAsTagGroup( "frames", nFrameList )
number nsf = nFrameList.TagGroupCountTags()
image after := RealImage( "After", 4, nsx, nsy, nsz, nsf )
for( number f = 0; f < nsf; f++ )
{
image addFrame := RealImage( "Frame", 4, sx, sy, sz )
FrameList.TagGroupGetIndexedTagAsArray( f, addFrame )
after.SliceN( 4,4, 0,0,0,f, 0,sx,1, 1,sy,1, 2,sz,1, 3,1,1) = addFrame
}
after.ShowImage()
【讨论】: