我会尽量做到准确和简短。
我有一个体积(128x128x128)和一个掩码(与 [0|1|2] 值相同的大小)
我想使 3D 体积矩阵成为具有 RGB 的 3D 图像,并将掩码中标记的点存储在每个通道(红色、绿色、蓝色)中。
这是通过获取该 3D 立方体的切片来使用 2D 表示,而不是一遍又一遍地计算它以使事情变得更快(在我的项目中非常重要),所以实际上,3D 体积 + rgb 就像一个商店用于 128 张 2D 图像。
问题是,我必须采取哪些步骤以及如何完成所有这些: - 创建一个 128x128x128x3 的卷?- 定义一个新的颜色图(原来是灰色的)?- 加入每个频道?- 如何使用 imagesc/whatever 来显示该立方体的一个切片,其颜色点与掩码中标记的颜色相同(例如:imageRGB(:,:,64))?
这只是我的猜测,但我什至不知道如何正确地做到这一点......我有点迷茫,希望你能帮助我,这是一段可能是错误的代码,但可能会帮助你
% Create the matrix 4D
ovImg = zeros(size(volImg,1),size(volImg,2),size(volImg,3),3); % 128x128x128x3
% Store in each channel the points marked as groups
ovImg(:,:,:,1) = volImg .* (mask==1);
ovImg(:,:,:,2) = volImg .* (mask==2);
ovImg(:,:,:,3) = volImg .* (mask==3);
非常感谢!!
更新:
我在透明度和颜色图方面遇到了一些问题,这就是我所做的。
% Create the matrix 4D
ovImg = zeros(size(volImg,1),size(volImg,2),size(volImg,3),3);
% Store in each channel the points marked as groups
ovImg(:,:,:,1) = imaNorm.*(mask==1);
ovImg(:,:,:,2) = imaNorm.*(mask==2);
ovImg(:,:,:,3) = imaNorm.*(mask==3);
[X,Y,Z] = meshgrid(1:128,1:128,1:128);
imaNorm = volImg - min(volImg(:));
maxval = max(imaNorm(:));
ovImg = imaNorm + mask * maxval;
N= ceil(maxval);
c = [linspace(0,1,N)' zeros(N,2)];
my_colormap = [c(:,[1 2 3]) ; c(:,[3 1 2]) ; c(:,[2 3 1])];
figure;
imshow(squeeze(ovImg(:,:,64)),my_colormap);
figure;
imagesc(squeeze(mask(:,:,64)));
结果(叠加图像/蒙版)有 什么想法吗?再次感谢大家
最后更新:使用 Gunther Struyf 建议的另一种方法,我得到了我想要的。谢谢朋友,我真的很感激,希望这对其他人也有帮助。