複数のスライス画像を三次元表示した際の細かい側面の形状を表示したい
Afficher commentaires plus anciens
初めましてMatlabを利用している者です。
slice画像複数枚(dicom形式512*512glayscale)から三次元表示を行いました。
方法は3次元行列にした上で、等値面からボリュームデータを作りました。
等値断面を表示させることで全体の形状は知ることが可能になりました。
評価として四角形で囲んだ部分円柱のようになっているのですが、この部分の側面のみの形状のみを表示することは可能でしょうか?
現在のコードを下に示します
clear; clc; close all; % 初期化
fileFolder = fullfile(pwd); % 画像の読込み (指定枚数の断面画像)
dcmFiles = dir(fullfile(fileFolder,'*.dcm'));
numfiles = length(dcmFiles);
dcm = dicomread(dcmFiles(1).name);
grayscale = zeros(size(dcm,1),size(dcm,2),numfiles);
for k = 2:numfiles
grayscale(:,:,k) = dicomread(dcmFiles(k).name);
end
data = cast(grayscale,'uint8');
vol = isosurface(data, 10)
figure;
patch(vol, 'FaceColor','red', 'EdgeColor','none');
view(-40,24) % 視点の位置
daspect([1 1 0.3]) % X,Y,Z方向のアスペクト比の設定
colormap(gray); box on; camlight; lighting gouraud; % 照明等各種設定
sec = isocaps(data, 5); % 等値断面(等値面を作ったときの端の切断面)の頂点・面・輝度を求める
patch(sec, 'FaceColor','interp', 'EdgeColor','none'); shg; % 等値断面の表示
宜しくお願いします。
Réponse acceptée
Plus de réponses (2)
Hiroyuki Hishida
le 16 Déc 2019
0 votes
こんにちは。
例えば人間の腹部の三次元CT画像があって、そこから背骨の表面だけを取り出したいということですか?
だとしてですがお困りなのは、そんなナイスな等値面が生成できないということでしょうか?そうではなくvisualization の話であって、等値面の外側を消したいということでしょうか?
菱田
1 commentaire
virgo kk
le 17 Déc 2019
Hiroyuki Hishida
le 17 Déc 2019
0 votes
こんにちは。
私の書き方がまずく誤解を与えたようですが、おおよその状況がつかめました。
何かしら関数を使うと3次元CT画像の任意の領域だけを抽出でき、、、というものは、世の中的に存在しません。したがって、処理を考えて頂く必要があります。確実な方法はイメージラベラーなどを使って手動でセグメンテーションすることです。ピン角保存を諦めてよいのであれば、個人的にはグラフカットを使うとそれなりに良い結果が得られたように思います。が、この論文の方法を使いたい、この教科書の方法を使いたい、あるいは、こうしたいというのを提示いただけませんか?
なお、「等値面からボリュームデータを作りました」と書かれておりますが、「ボリュームデータから等値面生成した」ように見えます。「等値面からボリュームデータを作る」とは、STLなどの表面だけの情報からラスタライズするなどして3次元画像に変換する操作になります。
菱田
1 commentaire
virgo kk
le 17 Déc 2019
Catégories
En savoir plus sur ライティング、透明度、およびシェーディング dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!