339 int currentLabel=0, labelBlob;
345 std::multimap<const Val, Site> sortedSites;
348 for ( ; ptSite != (*_texdata).siteEnd(); ++ptSite)
349 sortedSites.insert(std::pair<const Val, Site>((*_texdata).intensity(*ptSite), (*ptSite)));
360 for (ptSite=labelsImage.siteBegin(); ptSite != labelsImage.siteEnd(); ++ptSite)
364 typename std::multimap<const Val, Site>::reverse_iterator ptSortedSites;
367 for ( ptSortedSites=sortedSites.rbegin(); ptSortedSites != sortedSites.rend(); ++ptSortedSites) {
368 Val intensity=(*_texdata).intensity((*ptSortedSites).second);
375 std::vector<Site> neighb=(*_texdata).neighbours((*ptSortedSites).second);
377 std::vector<Site> above;
378 std::set<int> aboveLabels;
379 typename std::vector<Site>::iterator ptNeigh=neighb.begin();
381 for ( ; ptNeigh != neighb.end(); ++ptNeigh){
383 if ((*_texdata).intensity(*ptNeigh) > intensity){
385 above.push_back(*ptNeigh);
386 aboveLabels.insert(
int(labelsImage.intensity(*ptNeigh)));
390 nbAbove=above.size();
391 nbAboveLabels=aboveLabels.size();
397 labelsImage.intensity((*ptSortedSites).second)=(Val) currentLabel;
398 maximumList.push_back(maximum);
399 blobMap[currentLabel]=(greyLevelBlob);
402 else if ( (nbAbove==1) && ((labelsImage.intensity(*(above.begin())))==
BACKGROUND) ){
404 labelsImage.intensity((*ptSortedSites).second)=
BACKGROUND;
408 else if ((nbAbove>1) && (nbAboveLabels>1)){
412 labelsImage.intensity((*ptSortedSites).second)=
BACKGROUND;
413 std::set<int>::iterator ptLabels=aboveLabels.begin();
414 for (; ptLabels != aboveLabels.end(); ++ptLabels)
416 if (blobMap[*ptLabels]->CanGrow())
421 saddleList.push_back(saddle);
422 blobMap[*ptLabels]->SetSaddle(saddle);
426 blobMap[*ptLabels]->SetSaddle(saddle);
431 labelBlob=int(labelsImage.intensity(*(above.begin())));
432 if ((labelBlob !=
BACKGROUND) && (blobMap[labelBlob]->CanGrow() ))
434 labelsImage.intensity((*ptSortedSites).second)=(Val) labelBlob;
435 blobMap[labelBlob]->AddPoint((*ptSortedSites).second);
439 labelsImage.intensity((*ptSortedSites).second)=
BACKGROUND;
445 if (_mask!=0) { DoMasking();
446 std::cout<<
"MASKING" << std::endl;
510 typename std::map<int, GreyLevelBlob<Site>* >
::iterator blobIt;
514 Val saddleInt, maxInt, intensity;
515 float maxIntensity, meanIntensity, maxContrast, meanContrast, area;
520 fileStat = fopen ( _stats,
"w" );
521 fprintf ( fileStat,
"Blob_label max_int mean_int max_cont mean_cont area\n" );
527 for ( blobIt = blobMap.begin() ; blobIt != blobMap.end() ; ++blobIt ) {
537 blob = (*blobIt).second;
544 maxInt=(*_texdata).intensity(maxi->
_node);
548 saddleInt=(*_texdata).intensity(saddle->
_node);
555 maxContrast=float(maxInt-saddleInt);
556 maxIntensity=float(maxInt);
558 std::set<Site,ltstr_p3d<Site> > listePoints=blob->
GetListePoints();
559 typename std::set<Site,ltstr_p3d<Site> >
::iterator
560 itPoints=listePoints.begin();
564 for (; itPoints!=listePoints.end(); ++itPoints) {
566 intensity=(*_texdata).intensity(point);
569 meanContrast+=float(intensity - saddleInt);
570 meanIntensity+=float(intensity);
572 meanContrast/=float(nbPoint);
573 meanIntensity/=float(nbPoint);
584 std::set<Site,ltstr_p3d<Site> > pixels;
587 typename std::set<Site, ltstr_p3d<Site> >
::iterator itPix;
588 float tvmax = -100.0;
589 for ( itPix = pixels.begin() ; itPix != pixels.end() ; itPix++ ) {
596 std::cout <<
"BLOBMEASUREMENT = 0.0" << std::endl;
603 fprintf ( fileStat,
"%i %.4f %.4f %.4f %.4f %.4f\n", blob->
Label(),
604 maxIntensity, meanIntensity, maxContrast, meanContrast, area);
620 std::set<Point3d,ltstr_p3d<Point3d> > listeP=_blob->GetListePoints();
621 std::set<Point3d,ltstr_p3d<Point3d> >
::iterator pointIt=listeP.begin();
623 float x1,x2,y1,y2,z1,z2;
625 x1=10000.0; y1=10000.0; z1=10000.0;
626 x2=-10000.0; y2=-10000.0; z2=-10000.0;
627 std::vector<float> vectF(6);
629 for (; pointIt != listeP.end(); ++pointIt)
631 float x=(float) (*pointIt)[0];
632 float y=(float) (*pointIt)[1];
633 float z=(float) (*pointIt)[2];
642 vectF[0]=x1; vectF[1]=y1; vectF[2]=z1;
643 vectF[3]=x2; vectF[4]=y2; vectF[5]=z2;
670 float x1,x2,y1,y2,z1,z2;
672 x1=10000.0; y1=10000.0; z1=10000.0;
673 x2=-10000.0; y2=-10000.0; z2=-10000.0;
675 std::vector<float> vectF(6);
677 for (; pointIt != listeP.end(); ++pointIt)
679 float x=(float) (*pointIt).first[0];
680 float y=(float) (*pointIt).first[1];
681 float z=(float) (*pointIt).first[2];
690 vectF[0]=x1; vectF[1]=y1; vectF[2]=z1;
691 vectF[3]=x2; vectF[4]=y2; vectF[5]=z2;