summaryrefslogtreecommitdiffstats
path: root/SD-VBS/common/toolbox/MultiNcut/MNcut.m
diff options
context:
space:
mode:
Diffstat (limited to 'SD-VBS/common/toolbox/MultiNcut/MNcut.m')
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/MNcut.m93
1 files changed, 93 insertions, 0 deletions
diff --git a/SD-VBS/common/toolbox/MultiNcut/MNcut.m b/SD-VBS/common/toolbox/MultiNcut/MNcut.m
new file mode 100755
index 0000000..5486080
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/MNcut.m
@@ -0,0 +1,93 @@
1function [NcutDiscretes,eigenVectors,eigenValues] = MNcut(I,nsegs);
2%
3% [NcutDiscrete,eigenVectors,eigenValues] = MNcut(I,nsegs);
4%
5%
6
7[nr,nc,nb] = size(I);
8
9max_image_size = max(nr,nc);
10
11% modified by song, 06/13/2005
12% test parameters
13if (1) % original settings
14 if (max_image_size>120) & (max_image_size<=500),
15 % use 3 levels,
16 data.layers.number=3;
17 data.layers.dist=3;
18 data.layers.weight=[3000,4000,10000];
19 data.W.scales=[1,2,3];%[1,2,3];
20 data.W.radius=[2,3,7];%[2,3,7];
21 elseif (max_image_size >500),
22 % use 4 levels,
23 data.layers.number=4;
24 data.layers.dist=3;
25 data.layers.weight=[3000,4000,10000,20000];
26 data.W.scales=[1,2,3,3];
27 data.W.radius=[2,3,4,6];
28 elseif (max_image_size <=120)
29 data.layers.number=2;
30 data.layers.dist=3;
31 data.layers.weight=[3000,10000];
32 data.W.scales=[1,2];
33 data.W.radius=[2,6];
34 end
35else % test setting
36 if (max_image_size>200) & (max_image_size<=500),
37 % use 3 levels,
38 data.layers.number=3;
39 data.layers.dist=3;
40 data.layers.weight=[3000,4000,10000];
41 data.W.scales=[1,2,3];%[1,2,3];
42 data.W.radius=[2,3,7];%[2,3,7];
43 elseif (max_image_size >500),
44 % use 4 levels,
45 data.layers.number=4;
46 data.layers.dist=3;
47 data.layers.weight=[3000,4000,10000,20000];
48 data.W.scales=[1,2,3,3];
49 data.W.radius=[2,3,4,6];
50 elseif (max_image_size <=200)
51 data.layers.number=2;
52 data.layers.dist=3;
53 data.layers.weight=[3000,10000];
54 data.W.scales=[1,2];
55 data.W.radius=[2,4];
56 end
57
58end;
59
60
61data.W.edgeVariance=0.1; %0.1
62data.W.gridtype='square';
63data.W.sigmaI=0.12;%0.12
64data.W.sigmaX=1000;
65data.W.mode='mixed';
66data.W.p=0;
67data.W.q=0;
68
69%eigensolver
70data.dataGraphCut.offset = 100;% 10; %valeur sur diagonale de W (mieux vaut 10 pour valeurs negatives de W)
71data.dataGraphCut.maxiterations=50;% voir
72data.dataGraphCut.eigsErrorTolerance=1e-2;%1e-6;
73data.dataGraphCut.valeurMin=1e-6;%1e-5;% utilise pour tronquer des valeurs et sparsifier des matrices
74data.dataGraphCut.verbose = 0;
75
76data.dataGraphCut.nbEigenValues=max(nsegs);
77
78disp('computeEdge');
79[multiWpp,ConstraintMat, Wind,data,emag,ephase]= computeMultiW (I,data);
80
81disp('Ncut');
82[eigenVectors,eigenValues]= eigSolve (multiWpp,ConstraintMat,data);
83
84%NcutDiscretes = zeros(nr,nc,length(nsegs));
85NcutDiscretes = zeros(nr,nc,(nsegs));
86
87for j=1:length(nsegs),
88 nseg = nsegs(j);
89 [nr,nc,nb] = size(eigenVectors(:,:,1:nseg));
90 [NcutDiscrete,evrotated] =discretisation(reshape(eigenVectors(:,:,1:nb),nr*nc,nb),nr,nc);
91 NcutDiscretes(:,:,j) = NcutDiscrete;
92end
93