微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将一维光谱分配给图像堆栈

如何解决如何将一维光谱分配给图像堆栈

知道为什么这行不通吗?

<script>

im3D不变,仅给出零。在DM脚本方面,这将是:

DM::Image im2D = DM::RealImage("2D",4,2048);
DM::Image im3D= DM::RealImage("3D",2048,9,9);

PlugIn::ImageDataLocker im2D_LLl(im2D,PlugIn::ImageDataLocker::lock_data_CONTIGUOUS);
float *im2D_data = (float*)(im2D_LLl.get_image_data().get_data());
for (int i = 0; i <2048; i++) *Im2D_data++ = i;

Imaging::DataSlice planeslice;
long xi=0,yi=0;
planeslice = Imaging::DataSlice(Imaging::DataIndex(xi,yi,0),Imaging::DataSlice::Slice1(2,1));

DM::SliceImage(im3D,planeslice) = im2D;

效果很好。

解决方法

您的示例代码让我有些困惑。
看来您创建的XYZ = 2048 x 9 x 9的3D图像
但然后沿dim = 2(z)将其切成2048个通道(只有9个!)

您的脚本代码也是如此。 slice1沿尺寸2创建一维图像。

我认为您打算使用

slice2( img3D,9,1,1 ) = img2d

或者,如果您确实打算进行频谱插入(如您的标题所示),那么您肯定需要一些更好命名的变量。


创建堆栈并沿平面方向填充堆栈的脚本示例:

image stack := realimage("Stack of 2048 2D images 9x9",4,2048)
for ( number i=0; i<2048; i++ ){
    image plane2D := Realimage("2D plane 9x9",9)
    plane2D = iradius + random()
    stack.Slice2(0,i,1 ) = plane2D
}
stack.ShowImage()

创建堆栈并按频谱填充它的脚本示例:

image stack := realimage("Stack of 2048 2D images 9x9",2048)
for ( number i=0; i<9; i++ ){
    for ( number j=0; j<9; j++ ){
        image spec1D:= Realimage("1D spectrum 2048",2048)
        spec1D = iradius + random()
        stack.Slice1(i,j,2,2048,1 ) = spec1D
    }
}
stack.ShowImage()

关于SDK代码:创建图片存储柜以更改数据时,请确保使用

im2d.DataChanged();

完成并更新图像对象。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。