Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 计算三维结构中的中心线_Matlab_Matrix_3d - Fatal编程技术网

Matlab 计算三维结构中的中心线

Matlab 计算三维结构中的中心线,matlab,matrix,3d,Matlab,Matrix,3d,我有一个分段(病理)气管的3D矩阵。3D矩阵由多个通用二进制切片组成。使用matlab,我使用以下代码构建气管的三维可视化: xVec = 1:size(matrix,2); yVec = 1:size(matrix,1); zVec = 1:size(matrix,3); axis equal hold on W = smooth3(matrix,'box',5); p = patch(isosurface(xVec,yVec,zVec,W)); isonormals(xVec,yVec,zV

我有一个分段(病理)气管的3D矩阵。3D矩阵由多个通用二进制切片组成。使用matlab,我使用以下代码构建气管的三维可视化:

xVec = 1:size(matrix,2);
yVec = 1:size(matrix,1);
zVec = 1:size(matrix,3);
axis equal
hold on
W = smooth3(matrix,'box',5);
p = patch(isosurface(xVec,yVec,zVec,W));
isonormals(xVec,yVec,zVec,matrix,p);
set(p,'FaceColor',[0.7 0.05 0.05],'Edgecolor','none');
daspect('auto')
view([-12.5 24]);
camlight HEADLIGHT
lighting gouraud
lightangle(160,20)
set(gca,'ZDir','reverse');
material([1 1 1])
axis off
set(gca,'color','none')
生成如下图像:

我对气管在整个过程中的直径很感兴趣,现在我用它来计算每个横切面的直径,但是你可以看到气管是弯曲的,这导致我高估了气管部分的直径,偏差很大。我想我需要计算一个三维中心线,然后计算垂直于该中心线的直径,但我不知道一种有效的方法。有人能帮我吗?多谢各位

更新: 我想到了一个解决方案,但结果是次优的。使用该函数,我可以找到每个切片的结构边界(因此是气管腔)。此后,我从原始矩阵中减去这个边界,剩下的是位于气管内部的所有元素。 对于每个切片,我收集气管内的所有元素,然后检查特定切片内所有这些元素到整个气管腔内最近元素的距离。我认为该切片内的元素与最近内腔元素的距离最大,是该特定切片的中心。结果如下:


正如你所看到的,中心线非常弯曲。我认为这是因为我的矩阵分辨率很低(由于平滑,3D结构看起来很好)。此外,通过从灰度(我的dicom图像)到二进制的转换,我找到了很多有用的信息。因此,我想改进我的结果的一种方法是使用一种算法,该算法还可以计算图像中像素的强度。有人知道这样做的方法吗?

这可能过于简单,但您不能使用for循环来索引Z矩阵,并且对于每个级别,使用类似于然后使用idx2sub()的方法来创建图像的多边形切片。然后,以下软件包可能会帮助您找到多边形切片的中心(CenterX和CenterY)

在此之后,使用直径=(abs(max(X-ceterX))+abs(min(X-centerX))将是一个简单的问题


祝你好运,这是一幅多么伟大的图像啊!

你试过了吗:?这将导致XY平面上切片的中心,而不一定是三维形状的中心。