void dist_chamfer_cabl(Im2D<U_INT1,INT> I,INT v_max) { Im2D<U_INT1,INT> I0(I.tx(),I.ty(),0); ELISE_COPY(I0.all_pts(),I.in(),I0.out()); Chamfer::d32.im_dist(I); INT nb_dif; ELISE_COPY ( I.all_pts(), I0.in()!=(I.in()!=0), sigma(nb_dif) ); BENCH_ASSERT(nb_dif == 0); INT tx = I.tx(); INT ty = I.ty(); U_INT1 ** d = I.data(); INT vmax = I.vmax()-1; for (int x=1; x<tx-1 ; x++) for (int y=1; y<ty-1 ; y++) { INT v; if (d[y][x]) v = std::min3 ( std::min3(d[y+1][x-1]+3,d[y+1][x]+2,d[y+1][x+1]+3), std::min3(d[y][x-1]+2,vmax,d[y][x+1]+2), std::min3(d[y-1][x-1]+3,d[y-1][x]+2,d[y-1][x+1]+3) ); else v = 0; BENCH_ASSERT(v == d[y][x]); } INT dif; ELISE_COPY ( I.all_pts(), Abs ( Min(I.in(),v_max) - extinc_32(I0.in(0),v_max) ), VMax(dif) ); BENCH_ASSERT(dif == 0); }
template <class Type,class TBase> void cElNuage3DMaille_FromImProf<Type,TBase>::ProfBouchePPV() { Im2D<Type,TBase> aIPPV = BouchePPV(mIm,ImDef().in()); int aNbTest = 7; for (int aK=0 ; aK< (aNbTest+2) ; aK++) { Symb_FNum aFMasq = ImDef().in(); int aSzV = ElMax(1,ElSquare(aNbTest-aK)); Fonc_Num aFLisse = rect_som(aIPPV.in_proj(),aSzV) / ElSquare(1+2*aSzV); aFLisse = aFLisse*(! aFMasq) + mIm.in() * aFMasq; ELISE_COPY(aIPPV.all_pts(),aFLisse,aIPPV.out()); } ELISE_COPY(aIPPV.all_pts(),aIPPV.in(),mIm.out()); ELISE_COPY(ImDef().all_pts(),1,ImDef().out()); }