MPR-CTを読み込んで3Dとし、一部を球近似することはできますか?
3 views (last 30 days)
Show older comments
大腿骨のMPR-CT画像から3Dモデルを作成し、内外側の後顆を球近似して、それぞれの球中心を結んだGCA (geometric center axis) を算出したいのですが、可能でしょうか。近似球をモデル上に描出し、また球中心の座標も求めたいです。ご教示いただけると幸甚です。
0 Comments
Answers (1)
Akira Agata
on 8 Jul 2022
Edited: Akira Agata
on 8 Jul 2022
MPR-CT画像から既に 3D モデルは作成済みだと想定します。
3D モデルが 3次元のバイナリイメージの形で利用可能だとすると、regionprops3 関数を使ってそれぞれの重心座標を算出できます。また、この関数でボリュームサイズも取得できますので、「近似球」を「体積が等しい球」と解釈すれば、球の公式からその半径を算出できます。すると、たとえば以下のようになりますが @沙也子 坂井 様のイメージと合ってますでしょうか?
% 3Dモデルを摸擬したサンプルデータ
V = false(200, 200, 200);
V(20:50, 30:80, 40:60) = true;
V(120:150, 140:160, 130:160) = true;
% 2つの物体を球で近似するための準備(重心座標と体積を取得)
tROI = regionprops3(V);
% 体積の等しい球の半径を計算
tROI.Radius = ((3*tROI.Volume)./(4*pi)).^(1/3);
% 可視化してみる
s = isosurface(V, 0.5);
figure
p = patch(s);
p.FaceColor = 'c';
p.EdgeColor = 'none';
p.FaceAlpha = 0.3;
view(3)
hold on
[x,y,z] = sphere;
for kk = 1:2
xt = x*tROI.Radius(kk) + tROI.Centroid(kk, 1);
yt = y*tROI.Radius(kk) + tROI.Centroid(kk, 2);
zt = z*tROI.Radius(kk) + tROI.Centroid(kk, 3);
h = surf(xt, yt, zt,...
'EdgeColor','none',...
'FaceColor','m',...
'FaceAlpha',0.3);
end
f = plot3(...
tROI.Centroid(:,1),tROI.Centroid(:,2),tROI.Centroid(:,3),...
'bo-','LineWidth',2);
legend([p,h,f], {'3Dモデル','球近似','GCA'})
grid on
axis equal
camlight
lighting gouraud
3 Comments
Akira Agata
on 20 Aug 2022
@沙也子 坂井 様
はい、ある物体の一部を近似することも可能です。
ただしその場合、対象となる「ある物体の一部」を 3D 画像解析等によって抽出する必要があります。
どのような抽出手法が適しているかは対象データと抽出したい部分の特徴によりますが、各種 3D 画像解析法につきましては下記が参考になるかと思います。
See Also
Categories
Find more on ライティング、透明度、およびシェーディング in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!