私は正確かつ短くしようとします。
ボリューム (128x128x128) とマスク ([0|1|2] の値で同じサイズ) があります。
3D ボリューム マトリックスを RGB の 3D イメージにし、マスクでマークされたポイントを各チャネル (赤、緑、青) に格納したいと考えています。
これは、その 3D キューブのスライスを取得して 2D 表現を使用することであり、物事をより高速にするために何度も計算するのではなく (私のプロジェクトでは非常に重要です)、実際には、3D ボリューム + RGB はストアのようなものです。 128 の 2D 画像用。
問題は、これをすべて行うにはどのような手順と方法が必要かということです: - ボリューム 128x128x128x3 を作成しますか? - 新しいカラーマップを定義します (オリジナルは灰色です) ? - 各チャンネルに参加しますか? - imagesc/whatever を使用して、その立方体の 1 つのスライスを、マスクでマークされている色のポイント (例: 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 が提案した別のアプローチで、まさに私が望んでいたものを手に入れることができました。ありがとうございます。本当に感謝しています。これが他の人にも役立つことを願っています。