使用Matlab计算三维体积中连通分量的质心

时间:2015-09-12 06:37:00

标签: matlab multidimensional-array centroid connected-components

我正在尝试在3D脑MRI(.mha数据类型)上实施脑肿瘤分割。

在初步分割之后,我正在应用26邻居连通分量算法(使用bwconncomp)通过获得具有最大体积的分量来获得最大连通分量,之后我需要计算所得分量的质心。

我不确定我的计算最大连通分量和质心的方法是否正确,因为获得的质心及其附近的voxels都具有值0

此外,我对3D voxel坐标的表示感到困惑。例如。如果centroid=(x,y,z),它是否与x=rowy=columnz=2D切片相对应?

任何帮助将不胜感激。以下是我的相关部分的代码。

CC=bwconncomp(Ibin,26);  %Input Black & White 3D data of size 240x240x155
Pixelid=regionprops(CC,'PixelIdxList');
[prow pcol]=size(Pixelid);
maxval=numel(Pixelid(1).PixelIdxList);
index=1;
for i=1:prow
 number=numel([Pixelid(i).PixelIdxList]);
 if (number>maxval)  %calculating the component with max number of voxels
  maxval=number;
  index=i;
 end
end
for i=1:prow
 if i~=index
   Ibin(Pixelid(i).PixelIdxList)=0;
 end
end
CC1=bwconncomp(Ibin,26); 
Cent=regionprops(CC1,'Centroid');

1 个答案:

答案 0 :(得分:0)

我将您的代码更改为以下内容:

CC=bwconncomp(Ibin,26);
PixelIdxList = CC.PixelIdxList;
maxval = numel(PixelIdxList{1});
index = 1;
for ii = 1:length(PixelIdxList)
    number = numel(PixelIdxList{ii});
    if number > maxval
        maxval = number;
        index = ii;
    end
end
[y,x,z] = ind2sub(size(Ibin),PixelIdxList{index})
centroid = [mean(x), mean(y), mean(z)];

bwconncomp已经为您提供PixelIdxList,因此您不必使用regionpropsPixelIdxList按线性索引列出像素,因此您必须将它们转换为下标以获取x,y和z坐标。 MATLAB矩阵中的第一个维度表示y坐标,第二个维度表示x,而第三个维度表示z。通过获取对象中包含的所有像素的平均x,y和z坐标来计算质心。