我试图绘制一个非常大的数据集CT的三维视图。 我的数据是2000x2000x1000的尺寸的3D矩阵。 该目的是通过空气,其被设置为NaN在我的基质包围。
我希望能够看到该对象(无等值面)的表面的灰度值,但我不能完全解决如何做,在Matlab的。 任何人都可以帮助我吗?
鉴于我一个处理一个巨大的矩阵,我只有在物体的表面有兴趣,没有人知道一个好的技巧如何减少我的数据集的大小?
我试图绘制一个非常大的数据集CT的三维视图。 我的数据是2000x2000x1000的尺寸的3D矩阵。 该目的是通过空气,其被设置为NaN在我的基质包围。
我希望能够看到该对象(无等值面)的表面的灰度值,但我不能完全解决如何做,在Matlab的。 任何人都可以帮助我吗?
鉴于我一个处理一个巨大的矩阵,我只有在物体的表面有兴趣,没有人知道一个好的技巧如何减少我的数据集的大小?
该功能冲浪(X,Y,Z),可以绘制三维数据,其中(X,Y)给出了在xy平面坐标,同时大全提供z坐标和表面的颜色。
默认情况下,该功能不会绘制的NaN的条目东西,所以你应该是好去与冲浪功能。
要设置冲浪功能使用灰度绘图使用:
surf(matrix3d);
colormap(gray);
该地块在表面图的矩阵,并设置颜色映射为灰度。
此外,据我了解你的数据,你也许能消除你的矩阵整个平面段。 如果例如平面A(1,1:2000,1:1000)是楠的所有条目,你可以消除所有这些条目(因而整个Y,Z平面在进入X = 1)。 然而,这将需要一些沉重的for循环,这可能是在上面。 这取决于你有多少数据矩阵相比,你有多少个不同的情节想每个矩阵。
我会尽量给你一些想法。 我认为缺乏直接的3D“表面检测”的。
既然你有一个三维矩阵,其中XY平面是CT扫描片,每个片是一个形象,我会尝试找到每个片的边缘与说的边缘 。 这将需要一些预处理像第一阈值处理每一个切片图像。 然后我既可以使用scatter3作为三维点云或显示边缘数据delaunay3作为表面以显示边缘的数据。
我希望这将帮助你实现你所要求的东西。
我设法得到它的工作:
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;
那么我可以绘制这与
figure
scatter3(X,Y,Z,2,C)
现在,我可以提高的唯一的事情就是与表面连接散点图所有这些问题。 @upperBound你的建议delaunay3
用于此目的的-我不能完全弄清楚如何做到这一点。 你有小费?