void getGrayImages(const string &aFilename, Im2D_U_INT1 &oGrayImage0, Im2D_U_INT1 &oGrayImage1, Im2D_U_INT1 &oGrayImage2)
{
	getGrayImage(aFilename, oGrayImage0);

	oGrayImage1.Resize(oGrayImage0.sz());
	oGrayImage1.dup(oGrayImage0);

	oGrayImage2.Resize(oGrayImage0.sz());
	oGrayImage2.dup(oGrayImage0);
}
void save_tiff(const string &aFilename, Im2D_U_INT1 &aRed, Im2D_U_INT1 &aGreen, Im2D_U_INT1 &aBlue)
{
	ELISE_DEBUG_ERROR(aRed.sz() != aGreen.sz() || aRed.sz() != aBlue.sz(), "save_tiff", "invalid sizes " << aRed.sz() << ' ' << aGreen.sz() << ' ' << aBlue.sz());

	ELISE_COPY
	(
		aRed.all_pts(),
		Virgule(aRed.in(), aGreen.in(), aBlue.in()),
		Tiff_Im(
			aFilename.c_str(),
			aRed.sz(),
			GenIm::u_int1,
			Tiff_Im::No_Compr,
			Tiff_Im::RGB,
			Tiff_Im::Empty_ARG ).out()
	);

	if ( !ELISE_fp::exist_file(aFilename)) ELISE_ERROR_EXIT("failed to save TIFF image [" << aFilename << "]");
	cout << '\t' << "-- TIFF file [" << aFilename << "] created" << endl;
}
void  CalcMaxLoc<Type,TypeBase,Compare>::FiltrMaxLoc_BCVS
      (
          ElSTDNS vector<Pt2di> & Pts,
          Im2D<Type,TypeBase> Im,
          REAL  FactInf,
          REAL  TolGeom,
          Pt2di SzVois,
          Im2D_U_INT1 Marq
      )
{
    Pt2di SzIm = Inf(Im.sz(),Marq.sz());
    Box2di BoxIm(Pt2di(0,0),SzIm);

    Marq.raz();
    mBufFiltr.clear();


    INT4 ** dIm = Im.data();

    for (INT kp1=0; kp1<(INT)Pts.size() ; kp1++)
    {
        ELISE_ASSERT
        (
           BoxIm.contains(Pts[kp1]),
           "GenMaxLoc::FiltrMaxLoc_BCVS"
        );
    }
    
	{
    for (INT kp1=0; kp1<(INT)Pts.size() ; kp1++)
    {
        Pt2di p1 = Pts[kp1];
        Box2di BoxP1(p1-SzVois,p1+SzVois);
        INT v1 = dIm[p1.y][p1.x];
        INT Vinf = round_up(v1*FactInf);
        bool Refut = false;
   

        for (INT kp2=0 ; (kp2<(INT)Pts.size())&&(!Refut)  ; kp2++)
        {
            Pt2di p2 = Pts[kp2];
            if (    (kp1!= kp2)
                 && CmpTot(v1,dIm[p2.y][p2.x],p1,p2)
                 && BoxP1.contains(p2)
                 && BandeConnectedVsup(p1,p2,Im,Vinf,TolGeom,Marq)
               )
               Refut = true;
        }
        if (! Refut)
           mBufFiltr.push_back(p1);
    }
	}
    Pts = mBufFiltr;
}
Exemple #4
0
Im2D_U_INT1 cOneImageOfLayer::MakeImagePrio
     (
         Im2D_U_INT1              aImIn,
         int                      aDeZoom,
         int                      aSzBox
     )
{
// std::cout << "cOneImageOfLayer::MakeImagePrio\n";
    if ((aDeZoom==1) && (aSzBox<=0)) return aImIn;
    TIm2D<U_INT1,INT> aTImIn(aImIn);

    Pt2di aSzOut = aImIn.sz() / aDeZoom;
    Im2D_U_INT1 aImOut(aSzOut.x,aSzOut.y);
    TIm2D<U_INT1,INT> aTImOut(aImOut);

    int pNoDef = mVPrio[mTheNoLayer];

    Pt2di aPBox(aSzBox,aSzBox);
    Pt2di aPOut;

// std::cout << "SZZZ " << aImIn.sz() << aSzOut << "\n";
    for (aPOut.x=0 ; aPOut.x<aSzOut.x; aPOut.x++)
    {
        for (aPOut.y=0 ; aPOut.y<aSzOut.y; aPOut.y++)
        {
            const Pt2di aPIn = aPOut*aDeZoom;
            int aLabC = aTImIn.getproj(aPIn);
            int aPrio = mVPrio[aLabC];
            const Pt2di aP0In = aPIn-aPBox;
            const Pt2di aP1In = aPIn+aPBox;
            Pt2di aQIn;
            for (aQIn.x = aP0In.x ;aQIn.x<=aP1In.x; aQIn.x++)
            {
                  for (aQIn.y = aP0In.y ;aQIn.y<=aP1In.y; aQIn.y++)
                  {
                      int aLab = aTImIn.getproj(aQIn);
                      if (aLab!= aLabC)
                      {
                         ElSetMin(aPrio,pNoDef);
                      }
                      ElSetMin(aPrio,mVPrio[aLab]);
                  }
            }

            aTImOut.oset
            (
                aPOut,
                (aPrio<=pNoDef) ? mVLabOfPrio[aPrio] : aLabC
            );
        }
    }
    return aImOut;
}
EHFS_ScoreIm::EHFS_ScoreIm 
(
    REAL         Step,
    REAL         Width,
    REAL         LentghMax,
    Im2D_U_INT1  ImGlob,
    REAL         CostChg,
    REAL         VminRadiom
)   :
    ElHoughFiltSeg(Step,Width,LentghMax,ImGlob.sz()),
    mImLoc     (SzMax().x,SzMax().y),
    mGainIfSeg (mImLoc.data()[mNbYMax]),
    mImGlob    (ImGlob),
    mCostChg   (CostChg),
    mVminRadiom (VminRadiom)
{
}
void drawPoint(Im2D_U_INT1 &aImage, const Pt2dr &aPoint, U_INT1 aValue, unsigned int aSize)
{
	const int sizei = (int)aSize;
	int x = round_ni(aPoint.x), y = round_ni(aPoint.y);

	if (x < 0 || x >= aImage.tx() || y < 0 || y >= aImage.ty())
	{
		ELISE_WARNING("point (" << x << ',' << y << ") out of rectangle " << aImage.sz());
		return;
	}

	drawPoint(aImage, x, y, aValue);
	for (int j = -sizei; j <= sizei; j++)
		for (int i = -sizei; i < sizei; i++)
		{
			drawPoint(aImage, x + i, y + j, aValue);
		}
}
bool CalcMaxLoc<Type,TypeBase,Compare>::BandeConnectedVsup 
     (
            Pt2di p1,
            Pt2di p2,
            Im2D<Type,TypeBase> Im,
            Type  VInf,
            REAL Tol,
            Im2D_U_INT1 Marq   
     )
{
    if (p1==p2)
       return true;

    Pt2di Sz = Inf(Im.sz(),Marq.sz());

    Box2di Box(Pt2di(0,0), Sz);

    if (!(Box.contains(p1) && Box.contains(p2)))
       return false;

    U_INT1 ** dMarq = Marq.data();
    Type **     dIm = Im.data();

    mBufCC.clear();
    mBufCC.push_back(p1);
    dMarq[p1.y][p1.x] = 1;
  
    Pt2dr aPR1(p1.x,p1.y);
    Pt2dr aPR2(p2.x,p2.y);
    SegComp seg12(aPR1,aPR2);

    bool got = false;
    for (INT kBuf=0 ; (kBuf!=(INT)mBufCC.size()) && (! got) ; kBuf++)
    {
         Pt2di pBuf = mBufCC[ kBuf];
         for (INT kV=0 ; kV< 8; kV++)
         {
             Pt2di pVois = pBuf + TAB_8_NEIGH[kV];
             if (
                        Box.contains(pVois)
                   &&  (dMarq[pVois.y][pVois.x] == 0)
                   &&  (! mCmp(dIm[pVois.y][pVois.x],VInf))
                   &&  (seg12.BoxContains(Pt2dr(pVois),1.0,Tol))
                )
             {
                 if (pVois==p2) 
                    got = true;
                 dMarq[pVois.y][pVois.x] = 1;
                 mBufCC.push_back(pVois);
             }
         }
    }

	{
    for (INT kBuf=0 ; kBuf<(INT)mBufCC.size() ; kBuf++)
    {
        Pt2di pBuf = mBufCC[ kBuf];
        dMarq[pBuf.y][pBuf.x] = 0;
    }
	}

    return got;
}
Exemple #8
0
Im2D_INT2  TestCoxRoy
           (
                INT         aSzV,
                Im2D_U_INT1 imG1,
                Im2D_U_INT1 imG2,
                Pt2di       aP0,
                Pt2di       aP1,
                INT         aParMin,
                INT         aParMax
           )
{
   ElTimer  aRoyTimer;
   TheP0 = aP0;
   Pt2di aSz = aP1 -aP0;
   Im2D_INT2  aRes (aSz.x,aSz.y);

   TheCorr = new EliseCorrel2D
                 (
                     imG1.in(0),
                     imG2.in(0),
                     imG1.sz(),
                     aSzV,
                     false,
                     -1,
		     true,
		     true
                 );

   Im2D_INT2 aIZMin(aSz.x,aSz.y,(INT2)(aParMin));
   Im2D_INT2 aIZMax(aSz.x,aSz.y,(INT2)(aParMax));

   cInterfaceCoxRoyAlgo * TheCRA = cInterfaceCoxRoyAlgo::NewOne
                (
                      aSz.x,
                      aSz.y,
                      aIZMin.data(),
                      aIZMax.data(),
                      false,
                      false
                );
    InitCostCoxRoy(*TheCRA);





   INT MpdFlow=0;
   if (false)
   {
      cInterfaceCoxAlgo * pSCA =     cInterfaceCoxAlgo::StdNewOne
		                     (
			                 aSz,
			                 0,
			                 aParMax-aParMin,
			                 2,
			                 false
			              );
      for (INT anX=aP0.x ; anX<aP1.x ; anX++)
          for (INT anY=aP0.y ; anY<aP1.y ; anY++)
              for (INT aZ=0 ; aZ<(aParMax-aParMin) ; aZ++)
	      {
		  Pt2di aP(anX,anY);
                  REAL aC = TheCorr->Correl(aP,aP+Pt2di(aZ+aParMin,0));
		  pSCA->SetCost(Pt3di(anX-aP0.x,anY-aP0.y,aZ),MakeCapa(1-aC));
	      }
      MpdFlow =  pSCA->PccMaxFlow();
      Im2D_INT2 aSol = pSCA->Sol(0);   
      Video_Win aW =  Video_Win::WStd(aSol.sz(),1.0);
      aW.set_title("MPD");
      INT aV0,aV1;
      ELISE_COPY(aSol.all_pts(),aSol.in(),VMin(aV0)|VMax(aV1));
      ELISE_COPY(aSol.all_pts(),(aSol.in()-aV0)*(255.0/(aV1-aV0)),aW.ogray());
      delete pSCA;
   }
   cout << "MPD Flow " << MpdFlow << "\n";





    aRoyTimer.reinit();
    INT aFl1 = TheCRA->TopMaxFlowStd(aRes.data());
    cout << "Roy Time = " << aRoyTimer.uval() << "\n";


    ELISE_COPY(aRes.all_pts(),aRes.in(),aRes.out());


    {
        INT aV0,aV1;
        ELISE_COPY(aRes.all_pts(),aRes.in(),VMin(aV0)|VMax(aV1));
        cout << "Cox Roy Interv = " << aV0  << " --- " << aV1 << "\n";
    }

    delete TheCRA;

    INT ecartPlani = 2;
    INT ecartAlti = 5;

    ELISE_COPY
    (
          aIZMin.all_pts(),
          rect_min(aRes.in(aParMax),ecartPlani) -ecartAlti,
          aIZMin.out()
    );
    ELISE_COPY
    (
          aIZMax.all_pts(),
          rect_max(aRes.in(aParMin),ecartPlani) +ecartAlti,
          aIZMax.out()
    );


   Im2D_INT2  aRes2 (aSz.x,aSz.y);
   TheCRA = cInterfaceCoxRoyAlgo::NewOne
                (
                      aSz.x,
                      aSz.y,
                      aIZMin.data(),
                      aIZMax.data(),
                      false,
                      false
                );
    InitCostCoxRoy(*TheCRA);

    aRoyTimer.reinit();
    INT aFl2 = TheCRA->TopMaxFlowStd(aRes2.data());
    cout << "Roy Time 2 = " << aRoyTimer.uval() << "\n";

    INT aNbDif;
    ELISE_COPY
    (
         aRes.all_pts(), 
         aRes.in()!=aRes2.in(),
         sigma(aNbDif)
    );
    BENCH_ASSERT(aNbDif==0);

    cout << "FLOWS : " << aFl1 << " " << aFl2 << "\n";
    cout << "Nb Dif = " << aNbDif << "\n";




    delete TheCorr;
    return aRes;
}