File size: 2,267 Bytes
e9fe176 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | function [subsets] = ComputeLabelSubSets(segIndexs,Labels)
subsets = cell(length(segIndexs),1);
for i = 1:length(segIndexs)
imageNdxs = unique(segIndexs{i}.image);
occMat = zeros(length(Labels{i}));
for j = imageNdxs(:)'
labelNdxs = unique(segIndexs{i}.label(segIndexs{i}.image==j));
for k = labelNdxs(:)'
occMat(k,labelNdxs) = occMat(k,labelNdxs)+1;
end
end
distMeasure = occMat;
distMeasure = distMeasure./repmat(sqrt(diag(distMeasure)),[1 size(distMeasure,2)])./repmat(sqrt(diag(distMeasure))',[size(distMeasure,2) 1]);
distMeasure = 1-distMeasure;
distMeasure = distMeasure - diag(diag(distMeasure));
Z = linkage(squareform(distMeasure),'average');
c = cluster(Z,'cutoff',.9,'criterion','distance');
[foo lpsndx] = sort(c);lps = distMeasure(lpsndx,:);lps = lps(:,lpsndx);
current = 0;
for j = 1:max(c)
clusterSize = sum(c==j);
lps(current+1:current+clusterSize,current+1:current+clusterSize)=1;
current = current+clusterSize;
end
clusterSplitMat = lps<.7;
rowCount = sum(clusterSplitMat);
while(any(rowCount>2))
%show(clusterSplitMat);
[rcMax ndx] = max(rowCount);
c(lpsndx(ndx)) = max(c)+1;
clusterSplitMat(ndx,:) = 0;
clusterSplitMat(:,ndx) = 0;
rowCount = sum(clusterSplitMat);
end
for j = 1:max(c)
subsets{i}{j} = find(c==j);
end
fprintf('%d Clusters @ %.2f\n',max(c),.9);
for j = 1:max(c)
fprintf('%s ',Labels{i}{j==c});
fprintf('\n');
end
fprintf('\n');
%{
%for experimentation
fprintf('%s ',Labels{i}{:});
fprintf('\n');
cutoffs = .9;%.6:.1:
for k = 1:length(cutoffs);
c = cluster(Z,'cutoff',cutoffs(k),'criterion','distance');
figure(k);dendrogram(Z,200,'colorthreshold',cutoffs(k));
[foo ndx] = sort(c);lps = distMeasure(ndx,:);lps = lps(:,ndx);show(lps,k+length(cutoffs));
fprintf('%d Clusters @ %.2f\n',max(c),cutoffs(k));
for j = 1:max(c)
fprintf('%s ',Labels{i}{j==c});
fprintf('\n');
end
fprintf('\n');
end
fprintf('\n');
%}
end
end |