You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从数据集中任意提取特定图像子集?DM脚本实现图像栈切片提取

没问题!用DM脚本完全能搞定这个需求,我给你准备了几个实用的脚本方案,覆盖你提到的所有场景:

1. 提取偶数/奇数索引切片

这个脚本可以快速分离图像栈里的偶数或奇数索引切片(注意:这里的索引从0开始,也就是DM界面里显示的第1个切片对应索引0)。

// 提取偶数索引切片(索引从0开始)
void ExtractEvenSlices(ImageStack sourceStack)
{
    number sliceCount = sourceStack.ImageCount();
    ImageStack destStack := NewImageStack("Even Slices", sourceStack.ImageWidth(), sourceStack.ImageHeight(), 0);
    
    for (number i=0; i<sliceCount; i+=2)
    {
        Image slice := sourceStack.Image(i);
        destStack.AddImage(slice.ImageClone());
    }
    
    destStack.ShowImage();
    destStack.SaveAs("Even_Slices.dm4"); // 按需修改保存路径和格式
}

// 提取奇数索引切片(索引从0开始)
void ExtractOddSlices(ImageStack sourceStack)
{
    number sliceCount = sourceStack.ImageCount();
    ImageStack destStack := NewImageStack("Odd Slices", sourceStack.ImageWidth(), sourceStack.ImageHeight(), 0);
    
    for (number i=1; i<sliceCount; i+=2)
    {
        Image slice := sourceStack.Image(i);
        destStack.AddImage(slice.ImageClone());
    }
    
    destStack.ShowImage();
    destStack.SaveAs("Odd_Slices.dm4"); // 按需修改保存路径和格式
}

// 使用示例:选中源图像栈后运行
ImageStack source = GetFrontImage();
if (source.ImageCount() > 0)
{
    ExtractEvenSlices(source);
    // ExtractOddSlices(source); // 切换注释来提取奇数切片
}
else
{
    OKDialog("请先选中一个图像栈!");
}

使用方法:

  • 打开你的图像栈并选中它
  • 把脚本粘贴到DM的脚本编辑器里
  • 运行脚本,默认提取偶数切片;如果要提取奇数切片,注释掉ExtractEvenSlices(source),取消注释ExtractOddSlices(source)即可
  • 脚本会自动生成新的图像栈并显示,同时保存为指定格式的文件(你可以修改SaveAs里的路径和文件名)
2. 提取任意指定索引的切片

如果需要提取非规律的切片(比如第3、5、8个切片),可以用下面的脚本,它支持手动输入要提取的索引列表:

// 提取任意指定索引的切片(索引从0开始,用逗号分隔)
void ExtractCustomSlices(ImageStack sourceStack, string indexStr)
{
    number sliceCount = sourceStack.ImageCount();
    TagGroup indexList = NewTagGroup();
    indexList.TagGroupLoadIndexedTagsFromString(indexStr);
    
    ImageStack destStack := NewImageStack("Custom Slices", sourceStack.ImageWidth(), sourceStack.ImageHeight(), 0);
    
    for (number i=0; i<indexList.TagGroupCountTags(); i++)
    {
        number idx;
        if (indexList.TagGroupGetIndexedTagAsNumber(i, idx) && idx >=0 && idx < sliceCount)
        {
            Image slice := sourceStack.Image(idx);
            destStack.AddImage(slice.ImageClone());
        }
        else
        {
            OKDialog("索引 " + idx + " 无效,已跳过!");
        }
    }
    
    destStack.ShowImage();
    destStack.SaveAs("Custom_Slices.dm4"); // 按需修改保存路径和格式
}

// 使用示例:选中源图像栈后运行,输入索引列表
ImageStack source = GetFrontImage();
if (source.ImageCount() > 0)
{
    string input = InputDialog("请输入要提取的切片索引(从0开始,逗号分隔):", "2,5,7,10");
    if (input != "")
    {
        ExtractCustomSlices(source, input);
    }
}
else
{
    OKDialog("请先选中一个图像栈!");
}

使用方法:

  • 选中源图像栈后运行脚本
  • 在弹出的对话框里输入要提取的索引,比如2,5,7(对应DM里的第3、6、8个切片)
  • 脚本会自动过滤无效索引,生成新的图像栈并保存
一些额外提示
  • 如果你需要批量处理多个图像栈,可以在脚本里添加循环遍历所有打开的图像的逻辑
  • 保存格式支持DM支持的所有格式,比如.tif、.png等,只要修改SaveAs里的后缀即可
  • 脚本里的ImageClone()是为了避免修改原图像栈,如果你不需要保留原数据,可以直接用destStack.AddImage(slice)(但不推荐)

内容的提问来源于stack exchange,提问作者DM Adventurer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:06:26