我正在尝试在3D脑MRI上实现脑肿瘤分割。
初步分割后,我使用26邻连通分量算法(使用bwconncomp),通过获得体积最大的分量来获得最大的连通分量,然后我需要计算合成分量的质心。
我不确定我计算最大连接分量和质心的方法是否正确,因为得到的质心及其附近的voxels
都有值0
。
我也对3D voxel
坐标的表示感到困惑。如。如果是centroid=(x,y,z)
,是否对应x=row
、y=column
和z=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');
我把你的代码改成如下:
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
,所以你不必使用regionprops
。PixelIdxList
通过它们的线性索引列出像素,因此您必须将它们转换为下标以获得x, y和z坐标。MATLAB矩阵中的第一维表示y
坐标,第二维表示x
坐标,第三维表示z
坐标。质心是通过取对象中包含的所有像素的x、y和z坐标的平均值来计算的。