如何解决如何将一维光谱分配给图像堆栈
知道为什么这行不通吗?
<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 举报,一经查实,本站将立刻删除。