Révision 24 src/lsm_cells.cpp

lsm_cells.cpp (revision 24)
3 3
Parallel standard version
4 4

  
5 5
To compile :
6
 g++ -o lsm_cells_20160610.exe lsm_cells_20160610.cpp -O2 -L/usr/X11R6/lib -lm -lpthread -lX11 -fopenmp
6
 g++ -o lsm_cells lsm_cells.cpp -O2 -L/usr/X11R6/lib -lm -lpthread -lX11 -fopenmp
7 7
 Need CImg.h and lsm_lib.h
8 8

  
9 9
To execute :
10
 ./lsm_cells.exe img img_wat img_contour erosion
10
 ./lsm_cells img img_wat img_contour erosion
11 11

  
12 12
 image in .inr or .inr.gz, save in .inr.gz
13 13
 img : grayscale image of cells (unsigned char)
......
152 152
		
153 153
      //Stop criteria
154 154
      int bg_evolution=abs(new_backsegm-backsegm);
155
      /*
156
      if((it>20)and(bg_evolution<evolution_min))
157
	{contour_evolve=false;}
158
	*/
159 155
	
160 156
      //New stop criteria 
161 157
      if((it>10) and (bg_evolution<=evolution_min) and (bg_evolution>=evolution_max))
......
256 252
  if(argc<5)
257 253
    {
258 254
    cout<<"!! wrong number of arguments ("<<argc<<")"<<endl;
259
    cout<<"how to execute : ./lsm_cells.exe img img_wat img_contour erosion [a b smooth lsm_type]"<<endl;
255
    cout<<"Usage : lsm_cells img img_wat img_contour erosion [a b smooth lsm_type]"<<endl;
260 256
    cout<<"----------------- "<<endl;  
261 257
	cout<<"img : grayscale image of cells, (.inr or .inr.gz)"<<endl;
262 258
	cout<<"img_wat : image of seeds, (.inr or .inr.gz)"<<endl;
......
269 265
	cout<<"              if negative, the object retracts"<<endl;
270 266
	cout<<"              if positive, the object inflates"<<endl;
271 267
	cout<<"b : curvature term (float) --> 0 or 1 (the default is 0)"<<endl;
272
	cout<<"gamma : scale parameter (float>0) --> 0.5 or 1 (the default is 0)"<<endl;
268
	cout<<"gamma : scale parameter (float>0) --> 0.5 or 1 (the default is 1)"<<endl;
273 269
	cout<<"smooth : gaussian blur to apply to the image (int) --> 0 or 1 (the default is 0)"<<endl;
274 270
    cout<<"lsm_type : image, gradient or hessien based evolution --> 'i', 'g' or 'h' (the default is g)"<<endl;  
275 271
      return 0;
......
361 357

  
362 358
  //---------------------------------------------------------------Parameters
363 359
  //model parameters
364
  //int alfabis=100;
365
  //float betabis=0;
366 360
  
367 361
  int c0=-4;
368 362
  int erosion=atoi(argv[4]);
......
419 413

  
420 414
  //------------------------------------Names and directories
421 415
  //new name with arguments
422
  //string ar=argv[4];
423
  //string insert="_cellLSM-d"+ar;
424 416
  filename.insert(filename.size()-4,insert);
425 417

  
426 418
  //create directories and update names
......
510 502
  CImgList<float> gg=gradient(g);
511 503
  CImg<float> h=g;
512 504
  img.assign();
505

  
513 506
  
514
  // save edge indicator
515
  string edge_indicator_name = "edge_indicator.inr";
516
  g.save_inr(edge_indicator_name.c_str(),tailleVoxel);
517
  string zip="gzip -f "+edge_indicator_name;
518
  syst=system(zip.c_str());
519
  
520
  //g.crop(0,0,cut,0,g._width,g._height,cut,0);
521
  //g.normalize(0,255).save((filename_cut+"_edge_indicator.png").c_str());
522
  // warning !!! once normalised, one cannot do computations with it
523
  
524 507
  CImg<float> gout=g;
525 508
  gout.crop(0,0,cut,0,g._width,g._height,cut,0);
526 509
  gout.normalize(0,255).save((filename_cut+"_edge_indicator.png").c_str());
......
557 540
  //reconstruct image of eroded cell
558 541
  CImg<unsigned short> wat_eroded=reconstruct(background,psi_list,min_list,nbcells,list);
559 542
  wat_eroded.save_inr(wat_eroded_name.c_str(),tailleVoxel);
560
  zip="gzip -f "+wat_eroded_name;
543
  string zip="gzip -f "+wat_eroded_name;
561 544
  syst=system(zip.c_str());
562 545
  wat_eroded.crop(0,0,cut,0,wat_eroded._width,wat_eroded._height,cut,0);
563 546
  wat_eroded.normalize(0,255).save((filename_cut+"_eroded.png").c_str());
......
600 583
  file<<"edge detection : "<<time2<<endl;
601 584

  
602 585

  
603
/*
604
  //--------------------------------------------------------Edge evolution
605
  //evolve every cell to fill the gaps
606
  lam=0;
607
  alf=alfabis;
608
  beta=betabis;
609
  bool contour_evolve=true;
610
  float backsegm=free.sum();
611
  int it=0;
612
  int it_stop=0;
613

  
614
  while((it<timestep_max)and(contour_evolve==true))
615
    {
616
      //each cell evolve one time step
617
#pragma omp parallel shared(psi_list,min_list,g,gg,h,lam,mu,alf,beta,epsilon,dt,free)
618
      {
619
#pragma omp for schedule(dynamic)
620
	for(int i=0;i<nbcells;i++) 
621
	  {
622
	  psi_list[i]=evolution_AK2_contour_interact(psi_list[i],g,gg,h,lam,mu,alf,beta,epsilon,dt,free,min_list[i]);
623
	  }
624
      }
625

  
626
      //reconstruct image of edge detection, overlap=not segmented
627
      edge=reconstruct_overlap(background,psi_list,min_list,nbcells,free,list);
628

  
629
      //bg evolution
630
      float newsegm=free.sum();
631
      float bg_evolution=newsegm-backsegm;
632
      backsegm=newsegm;
633

  
634
      //stop criteria
635
      //double stop_criteria=size-newsegm;
636
      if((it>40)and(abs(bg_evolution)<1))
637
	{
638
	    contour_evolve=false;
639
	}
640

  
641
      //save
642
      if(((it%100==0)and(it!=0))or(contour_evolve==false)or(it==timestep_max-1))
643
	{
644
	  edge.save_inr(edge_evolve_name.c_str(),tailleVoxel);
645
	  zip="gzip -f "+edge_evolve_name;
646
	  syst=system(zip.c_str());
647
	  CImg<unsigned short> edgeCrop=edge.get_crop(0,0,cut,0,edge._width,edge._height,cut,0);
648
	  edgeCrop.normalize(0,255).save((filename_cut+"_final.png").c_str());
649
	}
650

  
651
      cout<<"it "<<it<<" evo "<<bg_evolution<<endl;
652
      it+=1;
653

  
654
    }
655
*/
656

  
657 586
  double end=omp_get_wtime();
658 587
  double time=double(end-begin);
659 588
  cout<<"total time : "<<time<<" (~"<<time/60<<" mn  ~"<<time/60/60<<" h)"<<endl;

Formats disponibles : Unified diff