[英]Matlab 3d plot of indexed data
我正在嘗試 plot 一個非常大的 CT 數據集的 3d 視圖。 我的數據位於 2000x2000x1000 維度的 3d 矩陣中。 object 被空氣包圍,在我的矩陣中設置為 NaN。
我希望能夠看到 object(無等值面)表面的灰度值,但我不太清楚如何在 Matlab 中做到這一點。有人可以幫我嗎?
鑒於我正在處理一個巨大的矩陣,而且我只對 object 的表面感興趣,有沒有人知道如何減少我的數據集大小的好技巧?
function surf(X,Y,Z) 允許您訪問 plot 3d 數據,其中 (X,Y) 給出 xy 平面中的坐標,而 Z 給出 z 坐標和表面顏色。
默認情況下,function 不會為 NaN 條目提供任何 plot,因此您應該使用沖浪 function 來訪問 go。
要將 surf-function 設置為使用灰度繪圖,請使用:
surf(matrix3d);
colormap(gray);
這將在表面 plot 中繪制矩陣並將顏色圖設置為灰度。
此外,據我了解您的數據,您可能能夠消除矩陣中的整個平面段。 例如,如果平面 A(1,1:2000,1:1000) 在所有條目中都是 NaN,您可以消除所有這些條目(因此條目 X=1 中的整個 Y、Z 平面)。 然而,這將需要一些繁重的 for 循環,這可能會超出頂部。 這取決於您有多少個數據矩陣,以及每個矩陣需要多少個不同的 plot。
我設法讓它工作:
function [X,Y,Z,C] = extract_surface(file_name,slice_number,voxel_size)
LT = imread(file_name);%..READ THE 2D MAP
BW = im2bw(LT,1);%..THRESHOLD TO BINARY
B = bwboundaries(BW,8,'noholes');%..FIND THE OUTLINE OF THE IMAGE
X = B{1}(:,1);%..EXTRACT X AND Y COORDINATES
Y = B{1}(:,2);
indices = sub2ind(size(LT),X,Y);%..FIND THE CORRESPONDING LINEAR INDICES
C = LT(indices);%..NOW READ THE VALUES AT THE OUTLINE POSITION
Z = ones(size(X))*slice_number;
然后我可以用 plot 這個
figure
scatter3(X,Y,Z,2,C)
現在我唯一可以改進的是讓散點 plot 中的所有這些點都與一個曲面相連。 @upperBound 你為此建議了delaunay3
- 我不太清楚如何做到這一點。 你有小費嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.