聚类分割结果图固定颜色表示

聚类分割结果图固定颜色表示

在我们使用聚类分割时,由于每次聚类中心顺序不一样,结果图中同一类别的颜色表示总是不同,这样很不便于比较。比如类别有3种,用3种不同的颜色表示,随机的结果会有 A 3 3 A_{3}^{3} A33种,很烦,所以希望每种类别固定一种颜色表示。
聚类分割结果图固定颜色表示_第1张图片
问题的关键是类别跟聚类中心不总是对应的。比如说三个类别对应的位置为上、中、下;聚类中心为1,2,3;每次的聚类中心不一定是123、321还是231等等,所以不能给聚类中心固定颜色表示。

我这里的思路是在标签矩阵中,第1次出现的标签被认为是第1类,第2次出现的标签被认为是第2类,第3次出现的标签被认为是第3类,而不是等于聚类中心的类别

代码

function out_label = standLabel(label)

%   输出:标签矩阵out_label(1*n),n为样本数目
%   输入:标签矩阵label(1*n),n为样本数目
%   out_label保存的是 每个元素在 原label中 出现的次序(非下标)  
%   比如:label = [3 3 1 3 2 2];
%   不同元素出现的次序:3是第1次出现,1是第2次出现,2是第3次出现,
%   则out_label = [1 1 2 1 3 3];

% 初始化和label大小一样的out_label
out_label = zeros(size(label));

% 删除数组中重复的元素,只保留第一个,且结果不排序
% 即把数组 转换为 集合,'stable'表示结果不排序
l = unique(label,'stable');

for i = 1:length(l)
    % out_label保存的是 每个元素在 原label中 出现的次序(非下标)
    out_label(label == l(i)) = i;
end


end

你可能感兴趣的:(Matlab,聚类,算法,图像识别)