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