gpt4 book ai didi

Matlab:创建 3D 立方体 RGB 并显示它

转载 作者:行者123 更新时间:2023-12-02 02:12:45 26 4
gpt4 key购买 nike

我会尽量做到精确和简短。

我有一个体积 (128x128x128) 和一个 mask (具有 [0|1|2] 值的相同大小)

我想使 3D 体积矩阵成为具有 RGB 的 3D 图像,并在每个 channel (红色、绿色、蓝色)中存储掩码中标记的点。

这是通过获取 3D 立方体的一部分来使用 2D 表示,而不是一遍又一遍地计算它以使事情变得更快(在我的项目中非常重要),所以实际上,3D 体积 + rgb 将是就像一个存储 128 个 2D 图像的商店。

问题是,我必须执行哪些步骤以及如何完成这一切:- 创建一个 128x128x128x3 的卷?- 定义一个新的颜色图(原来是灰色的)?- 加入每个 channel ?- 我如何使用 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)));

结果(叠加图像/蒙版) Overlayed and mask picture有任何想法吗?再次感谢大家


最终更新:通过 Gunther Struyf 建议的另一种方法,我得到了我想要的结果。谢谢伙计,我真的很感激,希望这也能帮助其他人。

最佳答案

您可以使用 imshowcolormap从灰度图像(您拥有)“伪造”RGB 图像。对于比例,我不会将它相乘,而是向该值添加一个偏移量,因此每个蒙版在颜色图中都是不同的范围。

要绘制 3d 矩阵的一部分,您可以只对其进行索引,然后 squeeze它删除生成的单例维度:

例子:

[X,Y,Z]=meshgrid(1:128,1:128,1:128);
volImg =5*sin(X/3)+13*cos(Y/5)+8*sin(Z/10);
volImg=volImg-min(volImg(:));
mask = repmat(floor(linspace(0,3-2*eps,128))',[1 128 128]);

maxval=max(volImg(:));
ovImg=volImg+mask*maxval;
imshow(squeeze(ovImg(:,:,1)),jet(ceil(max(ovImg(:)))));

未屏蔽的原始图像 (imshow(squeeze(volImg(:,:,1)),jet(ceil(maxval))))

enter image description here

结果与掩码(上面的代码块):

enter image description here

对于不同的颜色图,请参阅 here ,或创建您自己的颜色图。例如,您的掩码具有三个值,所以让我们将它们与 R、G 和 B 相匹配:

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(:,:,1)),my_colormap);

给出:

enter image description here

其他方法:

现在我明白了你的问题,我看到你从一开始就很正确,你只需要将变量重新调整为 0 到 1 之间的值,因为从 imshow :

Color intensity can be specified on the interval 0.0 to 1.0.

你可以使用:

minval=min(volImg(:));
maxval=max(volImg(:));
volImg=(volImg-minval)/(maxval-minval);

接下来是您的代码:

ovImg = zeros([size(volImg),3]);
ovImg(:,:,:,1) = volImg .* (mask==1);
ovImg(:,:,:,2) = volImg .* (mask==2);
ovImg(:,:,:,3) = volImg .* (mask==3);

你现在只需要绘制它:

imshow(squeeze(ovImg(:,:,64,:)))

关于Matlab:创建 3D 立方体 RGB 并显示它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12014188/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com