Skip to content

Commit 9d03f0f

Browse files
authored
Inpaint gmca (#54)
* new option descreasing lambda * new option descreasing lambda * inpaint 1D Lambda last iter
1 parent 811bf17 commit 9d03f0f

File tree

3 files changed

+33
-6
lines changed

3 files changed

+33
-6
lines changed

src/mc/mcmain2d/mr_gmca.cc

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ Bool UseKnownColomn = False;
165165
Bool UseMask = False;
166166
int NbrKnownColumn = 0; // Number of column which are known in the mixing matrix (a priori)
167167
fltarray MatKnownColumn; // Matrix containing the known column
168-
type_gmca_threshold_decrease TypeThresholdDecrease = GMCA_THRES_MAD; // Select the decreasing threshold strategy
168+
// enum type_gmca_threshold_decrease {GMCA_THRES_LINEAR, GMCA_THRES_EXP, GMCA_THRES_MAD, GMCA_THRES_MOM};
169+
type_gmca_threshold_decrease TypeThresholdDecrease = GMCA_THRES_MAD; // Select the decreasing threshold strategy
169170
Bool Inpainting = False; // If true, GMCA consider missing data, and apply an inpainting technique
170171
fltarray Mask; // if Inpainting==True, Mask contains the available data Mask(i) = 1 or 0 (0 for no data).
171172
Bool PositiveMatrix = False; // if True, the mixing matrice is assume to be positive
@@ -238,6 +239,13 @@ static void usage(char *argv[])
238239
fprintf(OUTMAN, " [-K Last K-Mad]\n");
239240
fprintf(OUTMAN, " Last value of K for K-Mad Thresholding. \n");
240241
fprintf(OUTMAN, " [-G Global Thresholding]\n");
242+
fprintf(OUTMAN, " [-E ThresholdDecreasingMethod]\n");
243+
fprintf(OUTMAN, " 1: Linear Thresholding. \n");
244+
fprintf(OUTMAN, " 2: Exponential Thresholding. \n");
245+
fprintf(OUTMAN, " 3: Residual MAD Thresholding. \n");
246+
fprintf(OUTMAN, " 4: MOM Thresholding. \n");
247+
fprintf(OUTMAN, " Default is 3. \n");
248+
241249
// fprintf(OUTMAN, " [-O]\n");
242250
// fprintf(OUTMAN, " Orthogonalization of the spectra\n");
243251
verbose_usage();
@@ -260,7 +268,7 @@ static void transinit(int argc, char *argv[])
260268
#endif
261269

262270
/* get options */
263-
while ((c = GetOpt(argc,argv,"i:N:t:n:MS:PpI:A:ldm:L:DK:GUOvzZ:")) != -1)
271+
while ((c = GetOpt(argc,argv,"E:i:N:t:n:MS:PpI:A:ldm:L:DK:GUOvzZ:")) != -1)
264272
{
265273
switch (c)
266274
{
@@ -338,6 +346,22 @@ static void transinit(int argc, char *argv[])
338346
exit(-1);
339347
}
340348
break;
349+
case 'E':
350+
/* -d <type> type of transform */
351+
if (sscanf(OptArg,"%d",&c ) != 1)
352+
{
353+
fprintf(OUTMAN, "bad type of threshold decreasing method: %s\n", OptArg);
354+
exit(-1);
355+
356+
}
357+
if ((c > 0) && (c <= NRB_GMCA_THRES_DEC+1))
358+
TypeThresholdDecrease = (type_gmca_threshold_decrease) (c-1);
359+
else
360+
{
361+
fprintf(OUTMAN, "bad type of threshold decreasing method: %s\n", OptArg);
362+
exit(-1);
363+
}
364+
break;
341365
case 'M': Normalize = (Normalize == True) ? False: True; break;
342366
case 'v': Verbose = True; break;
343367
case 'n':
@@ -374,6 +398,7 @@ static void transinit(int argc, char *argv[])
374398
exit(-1);
375399
}
376400
break;
401+
377402
#ifdef LARGE_BUFF
378403
case 'z':
379404
if (OptZ == True)

src/mga/libmga1d/MCA1D.cc

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -418,13 +418,14 @@ void MCA1D::decomposition (fltarray& Signal)
418418

419419
// if (LambdaTV > 0) LambdaTV *= sqrt((double) 2.) / Nbr_Iter;
420420

421-
for (int Iter=0; Iter < Nbr_Iter; Iter++)
421+
for (int Iter=0; Iter < Nbr_Iter; Iter++)
422422
{
423423
if (Iter>0)
424424
{
425-
if (Linear == True) Lambda -= StepL;
426-
else Lambda = LastSoftThreshold
427-
+ DeltaThreshold *(1.-erf(2.8*Iter/ Nbr_Iter));
425+
if (Linear == True)
426+
Lambda = LastSoftThreshold + (FirstSoftThreshold - LastSoftThreshold ) * (Nbr_Iter-1-Iter) / (float) (Nbr_Iter-1);
427+
else Lambda = LastSoftThreshold
428+
+ DeltaThreshold *(1.-erf(2.8*(Iter-1)/ (double)(Nbr_Iter-1))) * cos((double)Iter /(double)(Nbr_Iter-1)*PI/2.);
428429
if (Lambda < LastSoftThreshold) Lambda = LastSoftThreshold;
429430
}
430431

src/sparse/libsparse2d/GMCA.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141

4242
#define DEF_GMCA_MAX_ITER 100
4343

44+
#define NRB_GMCA_THRES_DEC 4
4445
enum type_gmca_threshold_decrease {GMCA_THRES_LINEAR, GMCA_THRES_EXP, GMCA_THRES_MAD, GMCA_THRES_MOM};
4546

4647
#define DEF_GMCA_DECREASE GMCA_THRES_LINEAR

0 commit comments

Comments
 (0)