ボリュームデータから骨のモデル化を行う方法.
Show older comments
matlab環境内で,100枚のdicom画像 二次元の骨のスライス画像(グレースケール画像)512*512を使用して,以下のモデルを作成しようとしています

自分が行ったことは,二次元スライス画像のスタックを行い,ボリュームデータを作成し,等値面を生成した後、三次元表示を行いました。しかし,望んでいるモデルとはかけ離れたものが出力され,手も足もでない状況です.どうすれば上図のように出力が可能になるのでしょうか?ご教授していただけると幸いです.宜しくお願いします.
以下に,作成したプログラムと,出力結果を以下に示します.
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,100)%任意の輝度の値で等値面を作成
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; % 等値断面の表示

Accepted Answer
More Answers (1)
Hiroyuki Hishida
on 14 Feb 2020
1 vote
こんにちは。
どういうデータを読み込んでいるかわかりませんが、閾値の選び方の問題のように感じます。
簡単のために、骨が写っているスライス画像を1枚読み込んでみて、その画像データを histogram で輝度値の分布をみてみるのはいかがでしょうか?真っ白になっている部分≒骨の部分 とみなせると思いますので、その輝度値を確認して、isosurface を作られると良いかと思います。
もしくはですが、お使いのMATLAB のバージョンは不明ですが、volumeViewer で3次元画像を読み込み、表示方法を工夫してみるのも一つの手かと思われます。
いかがでしょうか?
菱田
Categories
Find more on ライティング、透明度、およびシェーディング in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
