我正在使用模糊 C 均值进行脑 MRI 分割,体积图像是 n 个切片,我对每个切片应用 FCM,输出是每张图像 4 个标签(灰质、白质、脑脊液和背景),我如何可以为所有切片的每种材料提供相同的标签(颜色))我正在使用matlab
提前致谢
我正在使用模糊 C 均值进行脑 MRI 分割,体积图像是 n 个切片,我对每个切片应用 FCM,输出是每张图像 4 个标签(灰质、白质、脑脊液和背景),我如何可以为所有切片的每种材料提供相同的标签(颜色))我正在使用matlab
提前致谢
假设您的 FCM 函数正常工作,它应该为每个切片输出相同的 4 个标签值,例如[0 1 2 3]
. 确实这是一个显示问题,与实际分割无关。如果标签被输出为不同的值,那就是另一个问题。这可以按照这里label2rgb
的文档建议来完成。我可能会使用这种形式:
RGB = label2rgb(L, map)
其中 map 是colormap。如果您将相同的内容传递map
给每个切片,则对标签的调用label2rgb
将返回相同的颜色。这也可以相对容易地实现。假设您的标签是[0,1,2,3]
并且您的标签图像有一个变量labels
,您可以这样做:
% //define your own custom colormap to be whatever you like
cmap = [1 1 1; ...% //white
1 0 0; ...% //red
0 1 0; ...% //green
0 0 1]; % //blue
labelVisSlice = zeros(size(labels,1),size(labels,2),3); % //make mxnx3 array
tmp1=labelVisSlice(:,:,1);
tmp2=labelVisSlice(:,:,2);
tmp3=labelVisSlice(:,:,3);
% //now loop over all the labels and fill in the colors.
for label=1:length(unique(labels))
labeledVoxels = labels==label;
% //I'm sure there is a much faster way to do this but It's not coming to mind
tmp1(labeledVoxels)=cmap(label+1,1);
tmp2(labeledVoxels)=cmap(label+1,2);
tmp3(labeledVoxels)=cmap(label+1,3);
end
labelVisSlice=cat(3,tmp1,tmp2,tmp3);
imagesc(labelVisSlice);