diff options
Diffstat (limited to 'SD-VBS/common/toolbox/MultiNcut/discretisation.m')
-rwxr-xr-x | SD-VBS/common/toolbox/MultiNcut/discretisation.m | 49 |
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 @@ | |||
1 | function [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 | |||
12 | vm = sqrt(sum(EigenVectors.*EigenVectors,2)); | ||
13 | EigenVectors = EigenVectors./repmat(vm,1,k); | ||
14 | |||
15 | R=zeros(k); | ||
16 | R(:,1)=EigenVectors(1+round(rand(1)*(n-1)),:)'; | ||
17 | c=zeros(n,1); | ||
18 | for j=2:k | ||
19 | c=c+abs(EigenVectors*R(:,j-1)); | ||
20 | [minimum,i]=min(c); | ||
21 | R(:,j)=EigenVectors(i,:)'; | ||
22 | end | ||
23 | |||
24 | lastObjectiveValue=0; | ||
25 | exitLoop=0; | ||
26 | nbIterationsDiscretisation = 0; | ||
27 | nbIterationsDiscretisationMax = 20;%voir | ||
28 | while 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 | ||
40 | end | ||
41 | |||
42 | %%%% | ||
43 | |||
44 | SegLabel = zeros(nr,nc); | ||
45 | for j=1:size(EigenvectorsDiscrete,2), | ||
46 | SegLabel = SegLabel + j*reshape(EigenvectorsDiscrete(:,j),nr,nc); | ||
47 | end | ||
48 | EigenVectors = reshape(EigenVectors,nr,nc,size(EigenVectors,2)); | ||
49 | |||