МРТ-сегментация мозга с использованием FCM (маркировка)

Я делаю МРТ-сегментацию мозга с использованием Fuzzy C-Means, объемное изображение состоит из n срезов, и я применяю FCM для каждого среза, на выходе получается 4 метки на изображение (Grey Matter, White Matter, CSF и фон), как я может дать одинаковую метку (цвет) для каждого материала для всех срезов) Я использую Matlab

заранее спасибо

1 ответ

Предполагая, что ваша функция FCM работает правильно, она должна вывести одинаковые 4 значения метки для каждого среза, например [0 1 2 3], На самом деле это проблема отображения и не имеет никакого отношения к реальной сегментации. Если метки выводятся как разные значения, это еще одна проблема. Это может быть достигнуто с label2rgb как документация предлагает здесь. Я бы, вероятно, использовал эту форму:

RGB = label2rgb(L, map)

Где карта - это карта цветов. Если вы пройдете то же самое 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);
Другие вопросы по тегам