使用FCM(标记)进行脑部MRI分割

时间:2014-05-01 00:01:02

标签: matlab image-segmentation imaging fuzzy-c-means

我正在使用模糊C-Means进行脑MRI分割,体积图像为n个切片,我为每个切片应用FCM,输出为每个图像4个标签(灰色物质,白色物质,CSF和背景) ,我如何为所有切片的每种材料提供相同的标签(颜色)我正在使用matlab

提前致谢

1 个答案:

答案 0 :(得分:0)

假设您的FCM功能正常工作,它应为每个切片输出相同的4个标签值,例如[0 1 2 3]。这确实是显示问题,与实际细分无关。如果标签输出为不同的值,则是另一个问题。这可以使用label2rgb来完成,正如文档所示here。我可能会使用这种形式:

RGB = label2rgb(L, 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);