summaryrefslogtreecommitdiffstats
path: root/SD-VBS/common/toolbox/MultiNcut/discretisation.m
diff options
context:
space:
mode:
Diffstat (limited to 'SD-VBS/common/toolbox/MultiNcut/discretisation.m')
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/discretisation.m49
1 files changed, 49 insertions, 0 deletions
diff --git a/SD-VBS/common/toolbox/MultiNcut/discretisation.m b/SD-VBS/common/toolbox/MultiNcut/discretisation.m
new file mode 100755
index 0000000..70b5650
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/discretisation.m
@@ -0,0 +1,49 @@
1function [SegLabel,EigenVectors]=discretisation(EigenVectors,nr,nc)
2%
3% EigenvectorsDiscrete=discretisation(EigenVectors)
4%
5% Input: EigenVectors = continuous Ncut vector, size = ndata x nbEigenvectors
6% Output EigenvectorsDiscrete = discrete Ncut vector, size = ndata x nbEigenvectors
7%
8% Timothee Cour, Stella Yu, Jianbo Shi, 2004
9
10[n,k]=size(EigenVectors);
11
12vm = sqrt(sum(EigenVectors.*EigenVectors,2));
13EigenVectors = EigenVectors./repmat(vm,1,k);
14
15R=zeros(k);
16R(:,1)=EigenVectors(1+round(rand(1)*(n-1)),:)';
17c=zeros(n,1);
18for j=2:k
19 c=c+abs(EigenVectors*R(:,j-1));
20 [minimum,i]=min(c);
21 R(:,j)=EigenVectors(i,:)';
22end
23
24lastObjectiveValue=0;
25exitLoop=0;
26nbIterationsDiscretisation = 0;
27nbIterationsDiscretisationMax = 20;%voir
28while exitLoop== 0
29 nbIterationsDiscretisation = nbIterationsDiscretisation + 1 ;
30 EigenvectorsDiscrete = discretisationEigenVectorData(EigenVectors*R);
31 [U,S,V] = svd(EigenvectorsDiscrete'*EigenVectors,0);
32 NcutValue=2*(n-trace(S));
33
34 if abs(NcutValue-lastObjectiveValue) < eps | nbIterationsDiscretisation > nbIterationsDiscretisationMax
35 exitLoop=1;
36 else
37 lastObjectiveValue = NcutValue;
38 R=V*U';
39 end
40end
41
42%%%%
43
44SegLabel = zeros(nr,nc);
45for j=1:size(EigenvectorsDiscrete,2),
46 SegLabel = SegLabel + j*reshape(EigenvectorsDiscrete(:,j),nr,nc);
47end
48EigenVectors = reshape(EigenVectors,nr,nc,size(EigenVectors,2));
49