From da90b6ee4fd90597248dbdd13256424f09741d5b Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 30 Dec 2020 08:48:28 +0100 Subject: [PATCH 1/9] Add region growing on spheres for point_set_3 --- .../examples/Shape_detection/CMakeLists.txt | 2 + .../examples/Shape_detection/data/spheres.ply | Bin 0 -> 286728 bytes .../region_growing_spheres_on_point_set_3.cpp | 92 +++++ .../Region_growing_on_point_set.h | 1 + .../Least_squares_sphere_fit_region.h | 342 ++++++++++++++++++ 5 files changed, 437 insertions(+) create mode 100644 Shape_detection/examples/Shape_detection/data/spheres.ply create mode 100644 Shape_detection/examples/Shape_detection/region_growing_spheres_on_point_set_3.cpp create mode 100644 Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h diff --git a/Shape_detection/examples/Shape_detection/CMakeLists.txt b/Shape_detection/examples/Shape_detection/CMakeLists.txt index c59d88b829e..ec2042109ec 100644 --- a/Shape_detection/examples/Shape_detection/CMakeLists.txt +++ b/Shape_detection/examples/Shape_detection/CMakeLists.txt @@ -22,6 +22,7 @@ if(TARGET CGAL::Eigen_support) create_single_source_cgal_program("region_growing_on_point_set_2.cpp") create_single_source_cgal_program("region_growing_on_point_set_3.cpp") + create_single_source_cgal_program("region_growing_spheres_on_point_set_3.cpp") create_single_source_cgal_program("region_growing_on_polygon_mesh.cpp") create_single_source_cgal_program("region_growing_with_custom_classes.cpp") @@ -34,6 +35,7 @@ if(TARGET CGAL::Eigen_support) efficient_RANSAC_and_plane_regularization region_growing_on_point_set_2 region_growing_on_point_set_3 + region_growing_spheres_on_point_set_3 region_growing_on_polygon_mesh region_growing_with_custom_classes shape_detection_basic_deprecated) diff --git a/Shape_detection/examples/Shape_detection/data/spheres.ply b/Shape_detection/examples/Shape_detection/data/spheres.ply new file mode 100644 index 0000000000000000000000000000000000000000..13901fd744f80c68fbe93d9e75527e28b972bebd GIT binary patch literal 286728 zcmZTvcU;cj7k?5Vq=*tN8EF|MDY=o#N(dQAo6=HgNkdYhMMMK7?X-tfr#)%!J)gaV zQ1Sfk^ZobtXT9$8dEI;N8SnEx@9Sje$#3oGY;Wc&Wp3kO=InXH&c@Z%&gzDhgQbm` zgVbK7J^U7q_V!i|u2Ond4pz=)u2z;(=AKfnx2&YJ^^TmDva>OF#=qmYva|Ycm7A5b ztCfe;{)4Iq`JJ2{o$#NYQkIT)&F!qDJpS)Lp8xkBumAgx!~g%x;s1Z<;Kh&keB+jt znWdF8zm&6#nc8YkXlparlu4w(h6@RO5|7zXIms}1w0a6CR(qsv<}2YJ$M=P#F$HSt z<;0wG8<5fUk8`?_WT-u9WN_Y!1sT0lcbnLB)H;qXdJQ$A1rCQUbgmzorK>%7H`k&E z3y$vy4n&}81TGuA$bhaJ>lc@kXV6s>wJ^d05wSU(1`(c0v^Lim?n>1lkCIOf{8bdF zIK4ghyB{0;!mgjHUz|c)ci;8w`CI~v9A6uQFJx$vShu8qT|V-l{;-HYO@nNa%-gz0 zsW5YLLG8i!M6}|cxqZRyQQ#r?eOfL}N6$Lv8z_Vnh+DGBxbzemzB*;a*4xryv*D{z z)n+=db>c^obK227hm+NLvlkt!Hn{okXCpdLdF$()Vha48?C>HzVuD@pbfly`3%#`s zBcz)Z!4d+&Ezh(Lejoq#!zwHYs2?w0S&>hH>vWkPn%-u43M@RpMRpn9K?;BcY_9O56 zTeFnrVnAZ}$oDNHM0g;V)yL>$LX&zxnzkevuC#8DkA6Od7CD@Y8M&?SR4{5~@2@fx zbgeE-E`|b5xn7rdEu})N*LB<8+8$)Kt6ALC<|7aYggp5bOca3bJ^ykz1zl*$5q)P& zhI+@S#V5Zgz<#dcO!aC6P*X<-4B8O3XOY-#CR(gI;!^uK47t2#Zo1q_2POHN_s)p1 zfZA!*wB*SUEQ~#FvD!g{zZ_1fT}c<{XPjH_5m<<74?PeQT0w^^CxXRdo!KB)XnsvK zvkY0A)t~(PeVTh-@e?!>thSrrG485Hmy47{_B^Kp$Nuj9^Cy@vu%)Ce#%c=9-rR9c z_y7gg5eT>5rhSIi&EpbAW>tvYxM0!kOoX{IQ-l0E7BsGZxLZ789Bn;(r*T^k5pg)2 z+zz!-7~M3pHGTFiiplWk{TMO>0Re+N=~4_}Ixdm9Xwn6e7bJfs|6!nC9FFw+zJJDs*33DB&9<`Ou~;zZ!!ot zUZB5y#e|RaCqsexOc*I%H@D+j3lbm@mc~A9fZkjSX)TX;@YrMhj>Do<_}CVny7~bP zu5CA~KmU>f`$GFfyw@}UhvOS3d2tfC>fbjyvEwCB65JQHrRdN)c6i2)5O*2rJ} zMg-~K&0FhpXJ9pfKwZ~Ri-?If)dxzG;Zmxjdl*)~30ytU!d-jD!0p=|C($@k7v!4)n=Tnad-6Xvq!O+MY;*-yDuwX;BY~scKa6 zykCckTvi))icq1KzG9W~Wg29>`ZdJ+mW)tU=wltif9K6Lil0JKSGTL>@#LY=Ux~N! z`Y7<_^IwW~3k7cP*OPQFxr6wH>(w<+RB-b{gk?PorH3CrkRO!>HixRzidCqf<@^5F zol-iSj4g0_yM_slhnHy=K5hm+0-;#-Q3o2T6Ky%I+=w)cmRRv%e|@;>Lf^4r227rN zI&HyXAfM*UTg~ykXbnE_7KS|}MYo#tgcPAG0}eue{}N$zkIBk!VQe_7*?(2Uup0Rj z{#8{)PICR>K}8A$VxRiTG1k?f(#p|6$L(}jeDh?Fx*i=2chwqcPEMhetv1sa24?{0 zE8*KO`q8d$OSUyDG@TJ%#;;qvF~-1NH5N*|{cl zXwR(t(A@zF1o~XO+lpwQe~X=*Zcavm*^h`5#T8tCyOeA^jV|AQ`eH>@Ino|d47t=Y z11HS%)T*p&gnH;`EN`WS zw_yju>znW8_CUH?wd)_n8f0eEb>eOy9nLJurp9c?ejv9#S4RY&uO}(Vx`hnbp5w2{ zc|gvQ9_uT@_a))il5&LvO9L*)Z53w2vJYGSypx$h0>$0MnSo;n=fgI4=}91#Y+3n| zQ;1CaU#)R7o&l%dkx~cM7_hKCa^$y4CE8ASnS9omh5m6k+anWekYc|7y4^?W5q0;W z3y?{IHz0N0(uW0Mu^)%aC8((KQDnp=he58-!ww{&0NbR6i}Q4NxF**GsncQ4 zQMEFmmim7va!K;W3DNIdbxy9bjKF*kpu&~3(Z=Z%Kwki?vs_{h`3hEhAkg1n6LKv#w_6RXUurJJ{B# zS;M`rW5Mf&QKu!JH?R3i^l5`*-JyaRU~Il!?9#@B(ku4L(E|N2YqBhaJ!EIi9|kgN_D-9n;ZffT6Rs z{MHOQ{GKyP3@G>j4RuSpR>v{9-~V9b)`^m*JtBKn)uQR_!3^CxA}o1Q)0>FxlB6sB z<5=?ys=3r$5prf4{o!z&7cBeGwBD2IeVd9=;6kVeC5r@C<6f;Pu4F^94=~v4AXUA;rf-0*{1~QUj|e0q>_(nlK3K zYFo7TT&Y1ln@YUQNmS_0G_AEb$%fr;zM2s1rqMqsgWTZ*{ak+@@N}JlgMk$s8B#L3 z?RL-Wg)$jji(Iao_OfBNk#nhOM-wcWe8@7E@5K4j?~ld`Cd6o#W~wf)MRhH)V_kbG zV3~d0C&iWxvYxv#_gBrJ=<+|e96l%E^ZLCGcOZe<&KCwuO$nfkF4-FXxEF%yi<@^SK{Ac4D zQF=HeAF+@;w380^ZFYaUxQqpv%gcWX+0Q`Qyp zMIs&&;TpRqXfB5ar%Mjc`iPF9sBn|bLMMq_dm8SY8AqZS0zEwo(Qwd1+rY7j1pJnX z8?HX3LD?iB%+8Vovws{)jWO=W{`~v=(n&Py*`VPn^8t7U4xLeEQ-P>5rDrG1f>Dze z55;jB)VztDV;Dia zaajhOwZ9tJ_K5;}3q{{ll9_Pg!QcHM)lBG;+Qb&0E8_a|%(m=yFrB!O`^qB-tVi^h z3HZ?ACv$D!l4lHfA+vsA)?ylr|11f+g!@p8&si1Pxu{lo?t2%x0j;~_=Ex`_!?pCK zkB(eq!RJrQt8QFpp!LZX$FCl)wu5-8K!t~T7dKuMlyKiFNZgh6=Ug>1y?rZd_ckIJ`7>D6rA*KY6fvRSoJ6?; zk>+$w3b$W4@ZfU`yj&W3>ZxrmO7|CakiE_TemmmQjkvyC(llQ#vim78%tPqwZ?d@Y zzM(L*5t-%%f9MGAF>4qN)5%G z=uXAvhw+8~;X_NI-vh9ldSUXwLK-rgmb>_4H5q8Z(j7s|sldx_Hi;Ln0Tb2F#N#2| z+-aLaO zUkX$2udhLNXI})!hSR`nXO+{3M>McFx_-x%sVTHZk58ivP2l|#Zm-)ri7JzPOCRrb zK+8)-MqP+ApxyN0V$g^(yQj!V9G0hu?Q$LN@6;9Y;>>%>;jPW0!s-iDoDco{ z4ZlvnBO?2f(Dqk|zIKzUR3izFR_~Z9FvopW;oJSbd;8$3R0?UjvLDBzUvd_<(`M87 z;;L)4DAGFk_O~e-*o@kLY_O)ok)cC_zpaUg$6Z_cWB-5sNS$wTFDiHtw|u|y3ZZj}O|*PJkDGi%0y%iXS1P1A?!N*bCqa%7K&L>w4Jn#1W|eFIUC-wA<2z5Z=|Uh zJo`!Y;ieN@JRg%(Km~7ght{C!Tm*lt6rv1fz@zSO??WR72!uV@x6A4jI=Y!GaHWdH z^#}Q=*MJV(CLa8jSc~rKW@%Bk|;K~-4*j6KDk^=oIn`~ zkJjd7=c4C97RmKmboiv!6M4^=4Wgn=f3&^azn3-MKIDGfth|D4IUqM>7NeN66=D$u}Fp$tjfe+vFeo0@xxaaTx5P*TJI zs%ZBr-=0Y0=EI!@d0oi%uAP-rY9jdMO%{$vkzm8iw1R4kTiZVQnov@yuw6PasA77E zYk#5rEj@_Xqx)M)y$DHuUjN896Z3z6y`Sm_VO;ihy-<}{6*AZO)*khj!aeU_nmo>* z78OThHdLXVqyy*gyd*=B?Rusq?l+AuT=UWRHHJ1vOB6dCY~+6b!E4-aUf6TZ%uk~N z8Hq^{WpglI@E`T+nWIC(nSuLvP(La?cFljPh0a~yH}#=jc|VK z2~)V9`H~Iqq<+~rT#G=Rb%6(+-6y&BQC=oZh0=PXZEkao=%mW_gi?MA-0bbV*0r4h znF$@2_#Ig2uf~g`y|eiU=ePC6Q+3FPf9S}fVjW`q%P@VQPJtlv2RtivF#kXsSRuzt zM#nGoZ{hQL$Bp+kZ>bsRTz}YE|MEMK*!|dhC(aLxNy6I07Btw;nCVD+M1j0@S3T#1 zleqi0o;osx-lZ3AynEFi>O_7w{Ea4p+UlF)G4nKVsuJ`cu$csnpRcIBUZm2Imi4|P{e(d>`m8X6;~Ea&!y>$9iXC-S@{Xx)Il7-97eGE0Nl!Vyg4cK z7Gg!|aS{O}2)6hZ;T6e(aT_n!WzrNFjt@I@a$%T@x1Z-N8v=I1>@wG#XmbmcTK_gZ@N^$x4X!2u&nfq1R1`E=_~zy zN`+?*1!|7+^q&Ia7?HPSsJd}f1#BOI-`$<0=6)L`fTLQt3(#seEFh) zx@i@f;BZ!5`j`VN3QcH=;o)d&`~%;k0aP%JytCr_B`O@UEaTsEY6#r?tNX8R=*0bw z-;OCC%x{DZ9GG053?{8Y7rJApp!z!U?vq<|5D>kXyZtO3COmns3Iug=`767Q$Gxci zlXXyQdIJ3V81r#^Iu(vp7Z1>;X^?VX^6g6nDn$HKOgZn~jlWOWVih}zPMh*32{os{ z-r2CbzL&`$NMX;4DY0PloKs4>0s~sYDRX)4Z3yG%HS^4FxVN?S<-`4e9vd|!xK2@(l@!n88T4>yJ^<63*a;279BzMsu z$lnOkEW4r6!TQ{RF$&k7u~fq*!wD=N|GT z7aw{p%jicN_cOJpn@bVT)0yS@$rOlgc1;anQh@dI`;C6T4&=Tl-nddP4{-g;|CY-{ zY z3viM76@NgL4$U=wmksk6AXX->N**MFhmN8H>pBr8IUGsLoJ5pyOMk*Z9^B`sD!d_ne$HbWMeL_)uVHv`Ic$q9)~RB`=NfTr9Bdc%9F+I>i9ryGb`yJjYPLH<9rwjQ@UeI3L1vs}TLH#E11uYLVNIsJcKF&R5Cf zB04y(zD}5(l_{P<$zBsRKFZVFey})dc|TgwS=-cy{inQpg}Tib60Fc!`8@M56?$U# zQvmyq+@e@s*8P5NK6#|0Nk=}J3*XDur-D!U*625dR5Rxpv=JAT+N(TpZaSIEYsDm0xj$=rqp~Bt~^GLY9H+xKWf#AQhdc@QBVZZW&dg;4#SkbZOsb(L> z8x-MMb%QCm-?qHt8lLOne(E(%tqsP5oBzmITB3OGEREG_M2P&ehZA6idGw;Y=EYOv zAfx2?WM?9od*1$ae|k}ly1ovFFBVz$9tk>({dsm{aCOZw7RWafc$*q}pi-0O`{)~u zn}0&A&-X(AXsW>m^AzNyf5$UqJqc`9@zushvLPX6nONEWMp(-F!dFfH5AU_*b>MpY zHRnoHNEI^rw%<2Eg$O1W(?a8qv!Lte%!ego6-oMpk9#G56eWZzZo*3F-{N~pn2jxZ!P6x&}#w--U~Torw8IX zFfg0TDozLKgcrN@?oV>pm-+}&k@bbdpuETz=%`z?ijy4)?!Pn6H^%c~If+#d^IiMF zC%V>O;KnF7pA1uOP~g*|uzjX>EqWPoJ=_||&^oS2(fmV&Z~wH?Di08mVVi6HW0e|= zPke`j9ubk%^|XUpZz_=dP?qSWYQ53Gk~5y$~%8+;=lgxoaGZ5 zO2|5T_W8jkv{)Cn%}EdQMS|1CpVu+LLH+5zgl{ZV7*%@YvR)LDClF*0L}r4p*p54? zAM??%!9dG#Lo%4pU)}!<*NZ>Z3+ID;Gg0{(`kmfA?OcDZw<0sqzimC=yyf0O{MKuS zo*gGcGKKW$Ydj5Z-)-twaiV|*WieB3vYmV0#k=<=(D{RtD zcnjd(gNxmNrrNpozi$@LL~oLE`))}!psTz;TQ&`o!CLV^2B`(-x3%uMw%s(uyL1J` z%oMomhh<_$;qw|VrpyfJG2g`V!56j$Ha3N-H*W!s*Kq5Z-f1Bd?!TG$%dH{MiKJ~aS z)`V`>6EyyGkRhRM)#idy1_bBTn|>@{p|W?i>eGx$REzl;CAoOS7didBJD?1u`fbs1 z2%iCi>MzwTc>Wj~c3IE@-z!O!HxH9WsC**N8m=QRw~_u0$(`p}8e z<86a}Brg8!d6;>8mG=QW5%t zyc*|-kl#L)yE23gUT@8R{k%{QGlP=W$C@X(`POpVDU4hARd+`oEI?TYwVFb^FusUS zwv|o8{jWpo(Y^k8D2ULO7(P11-A~c>c`{0#%d}CoZ$R!Ph0~+q6nIr?8ZcPM!gIok zZo+LkQjd2aJ6}%&Tz^SgS|f12_tH*9{c6bLqF(xg2;12-K=WO%hVK6ap znv~=(L(>m^i`@5<;K|Pit|HhzCpN{zSI>5#)zU7~$)n?3{GhRj?Q8l5;&ol8l6yO`J$<*azD}ScauKgP@qBZ<^7vB+@!U-qK)gqhW5u8X9nZPDt-PI|@#$L-SwCCII`}mn`B8(pofo^W|v( znx`153B{4YN8Kwy4D&-4gH;bQ4~>G&@-@W^!42H}*`fS`hHi-*IUG7)f*w~s>D{=D z0%BS(<}1c2kVxA5vTwQtZB)PMopYg(o3DE5;w<$0dx^DqZ4DawyZi66HVUk|BPul5 zh3CJ;VHJvpXV8Pz zFxZ0xV%M&GF#O+qO4RQ;1IGLMwwv?Cf{xs0duxo}yUx2^&Hls$-HyiXhh)gGx1}zE zj_ru?>U7!b7BHR9Jz2i}6FRi{j-x={4D1ZiR=8!!g4g>lJMIhnf|#*$k-X(}ZvHX- zbhIA`k~TeZiF@G7;mVxnn~A_2Uca2Hqgk&##XtLe0whzyv+np)@O^RC7_4na&w?&F zx5<|y9r@WoYphqwt^9uE$96h^>LsZPxn6YU-`c3nWGXj5lg_^#M7r`94?6f3qS(Sm zr;GS-{r#SsB#ZSwLY$cogWhF`#(dtnkJgRw{VMNW!9+wQ)&(t@BGk89M0xTT8QQk^ zeX7N{WzGE*sqV^3l=^Yo-b0Zk-1Soy&spfSl0*Qp_BFiKQn}_;L4@7f(UWIlm~g7E zAoor;2?PwXqXq+}xp=$4wyFUZHFh4z_%@mx0A=*<`kVuMn|$NC=O8c3;d zh`J;@h4YCY64^}w<6p~NR_Y{xT4Y~r%5AJ~*}l^_7|#dWwJz-}n5V#8og&)wz8$#v zv$}K~#=K4i--`HzB$tT>{=fyhwt-qVV7FXTS0$|iB`>9}jhG%C8T zulGW<5^da_^JV38D!d97OedtU;pNKI;?*L<$a{nSfq~Us`1>4{ozgT=dD`2$RHhn@ znRt}mUBvtEzaA%8MuVgQn?pmZCXvrZ&aBMX+?+3;kN^1R%U5+spmpqup;?+eoXYJ>anYcHg4h|G&F`pimlo@J%x)6m zEtgyKnY3{8gPHUZ3QCsSA!gxIiyj>g+$VI82yMCZ)M+aAb5oD?W9dZnaaGt{NE8vB zBM>6Qg`WX2BYb6_cpA#|NHHVxGN7%Cz9UMO4yy`Y&8D~2!q__T)Gc`ait{aPr`sSB z(2sC>NU1}!9zo&_K2#{)oJQ>XKm(oKa_m883R)jL|9VYZ2iHD%)`uq0{Qi?}$DTJJ zp;HRHdgsW%v*NjVE1oA@JolLzUr0xRws*B+ue5Xdu6fajDltjj!ffu zy}XaTnG5FIgX5o6U0YR$T4L1vw_nG61ny5&9m>!SMeEHThE?c@gzIEq5*@nsudQrY z!vcx6*jlRVIBHGhn|OkChB)8GfBW7Ess`i9W!;5{o_bwx+K39e4<-^fPqD%5vE!$y zO@L~2e|oD9wqkqw?PKA&`N^7Je~*~QqYLr*s|&@5u&>o?+r?TMFnW|CH@xeH!f$EK z+QD3X1xNk3{x}LdzHbljcpge~Z#Wlfh;;*j2m78BV!WYvdBP&|E&82rQu45Wl-pnM z=q;lILB!dYX&ntNWVz?84P@ATD+M5r-HO>`gsF`MsM8=DG(w1yf5wgs^TZDRhW?U$f70=qUZ> z^g^yd9g0g5Tjn-QgJoVkB@ciJX%87HM|H^P&5z0Lgf~+#$Kl-ZIr|07XRIIH)=Pk@ zh1bJ_lN9io5!pKyNQ2i#KlhF;P=M%Oek}DtCHK4<+Yd~l$zN(Z;v>nR_SX9>8ll3= zCja*cjbgbEM;YE3DLr;1$%bLB4$ZGl$}+&^Pd`;`k3L z#MgFH4qli>wpTI(#*_ccSFgTj5>Z6?{rB7X!=TyGY5Dv^GQ2w^DXn69&t_ecy@~-@{X$20 z<#3*^ztF|+S%IEVyHq5|I1Vwtly+kfNk|LZm%T_t!3S=Y{J}g?@asQ1CL;{^y57Z6 zsI47t@kjqVH_n6}T)=kfx`0P^noE#dChS#9+O(;O0y4jXMC%SQfPoywm;+TyL_xuDtMPgSlqH3e^7|jce`c&yktN>-{z! z=p{qGYW+ap)O!?{lk{M~dIn}ZUeh+UG2k}G?UTUTHaP8u4)*c0kTgEP%1aNB1AX3r zXXRV;+VS7r1N-ot?$XfZ$NP8Ek=wt}L|2mA%>sOJD=RUX6Wd7WI6N^0E zw5M9+u|BH!%$1lc3=n>xo)~$*2QsVWyJx2uT)ffJxe-u_>8RBasY*m#>#;r*>o!Ly zH1D`;Y!G~+T(x!oFcMav{O#(S!1cnnJmvxBKeo2AW@0gZYcRZjewGZG`FwtXO;pIp zw>kZVIgR4eggoV#pSb?{+i;PDI=zj>EPX3c2g}K4HRidT1uZzKA{d8Wv3#;GeFWt! zB~A;NO>*z6-amQ<-FuncoPMqm)xW)_DriapX~#JSQExiX@@%!3a!lmY&k49ibl~ov zSN3ub`Vx52|C47uf~4Q2-dK+Tk)5kJ_gQdHbtLt5C>2qSOAb87yfE$;X2rS(ATC1X z(K$zdwDfD(>C{U!DBXXJc@W2Oo%i}R=2fGho{)Q0edQPz&vZ1Ik&qTu&H9eL4Lnec z?*A!6g1OpS;V%5Ui3c~G)}ES#N`|54kDC+R@AFHgP9Yt)7@Ma$waBLTuKPn_GHg!E zTVtX^0|CivHTD`rlpOxLIAz^`_-*y|qG{CrqCrEW`!Oguv+b^F;JLr5je+D(Dj;dS zrzgKogZZKCbjREdgzvZAG?|EO-;C+VFGQfUxON#9t|v#E?nXbrdhGkM%(mMFgJ5b! z*%0w`oVz}ukwSvTI$E5=?ppMv^OeV)Rw8i1IpqPkZ zT**&C&cU;0p(b<~K1^2iM{F?Z+a6*4vH`?b9Vyhoc^l`$JLOH&a5iqo`vB2+P&>-s z%o9R}z$TZUyJgv+pihq2^??kFX&<)GN1M2OPS?L{QxKp$yn)B76qPh)x2fScY=2cu zY?5VwyWlA)EzIM{mcRQ}YsrKk9L`wvqdHV!ll$W5Ks9<4zG9nuC>7=$-k#gjLk0M% z`1pzQ6ta5kW$9Sh$=#21*EcH{B zaTh+3hA3G^)Ya)FXrWMcowMx>e13LtO5K$S`i|+JswxoY@PJD)Q!sHRlgqJ*M{T8PsHpzwns5XM_S-D zYSZlqev&!^o9KZ%l53cNj;3WCfnK0|yf_@YoPmT0gzj^lUtrsn7ORmD^{78%t!hv~30>N}6=&JeJ_;yqg7sf>Akz zBGd4)K;=(F6!t?7=QiKc9{3>@b==)J0_u-z96ia#`1p(L3FRYfU{}o3D_>WY1%ai0zmM4l8mu!KcG!*ejls{W*s6BZ&|@#;cyZ+rj$cB_ z?N`%iqq4efp4=y7w{pU{K$8N;;`i(JVIHD>JY(zo1l->#8Vm_^#&hqtVMKw2`h>Jr zWEwT1gSL9jWGk%ae*I3-+m8-Cjd7<6R55}(wD~k`cK{ckJl0>|gRDIX0eRFkFw*!r zWRO7t_1IAYeFqD)6bJ?N2bi$o%RQAlxAM7sxPiV;H|*$@-(UUn9c&OF1&-o*pDv;3 zwK*B{=l;CB{aq9&SaJX8M?CMt_Wa_YFb+0iX9dqEHlRJJyW*;|Ng&p9Ypl$k2@MrT znHKe5cOPK-yxup^c%Ff} z=H;z(Lo?BVX1yi5tT66Ws+3%QhXFq49yo2@UIrDX&Rh0=V8Iw3uWh>W2`Pzr>nw|V z4_>PYs{SjfP^;^|qnyZsQ;y3hXQXJreoc0iL3LdJ^a_+5hxy;s=tCQlQGO*s*%{-P zg$|*KrAcha{P-ZysJa<4)~@C6>KMcR<~w$EmJ0rsUtWedS0k#eldgma5l(gfT&{7N z0d(ykx7w6RWDwlvYm-DlcwV!Os#Jw)*}OZ>o=inDFP<2Qf5Q5Z8?x@_6sh2$*Is?o zp&nj+@Y{A3>zFy1&$pR>4Ek69zi@x$9R~qb@Q3C=e#N4YnoM@ zjOQLLxSzG+NrK;|-vfwulXzU!Rj zz$8jsC+noGT!>nm)K7Kb_blc^iC!8%DDY@?ex1+GQY2S$LycGTzxOPcHU%=#qssfu zL0TnfuiTi}_M{mQ+jZ44;XDhDo=rb#zN!gXEhX%fkYga6uT-Yx`#^R5{gW59%26oP z-m$?rJL$|u{hc`fh)b_Lx^N!zTfrti=ck*v^-(6T5D{!1X1Apo|xqH-87I+37s0m_43d? zrx$1))>mSEqsGuQV#I|-X=~M^NExS%$rU81|2MqCDuM+QQs1|-w@}ftn(VeG7YDfU zZk+pL5S-T!zWm5|kBC216zRC1YQFqDUy?=vdA&NF+J#n_-Y%jNaT~b%9}51$MECk_ z2P?Lxp=ES_qE`~e0qKS5Rro#8z2EC5vAFG2XTUHAM+nes9?meA!tl3K#gcE zi8m7S)kDtre_x@&vA_APrL^%CrVpOCgFMU>oapHtqiDB zMh|wn8UjccfIGy1#R9wr;?L_Sl~^fS<^MPZ_E_J8j|lq)f=TX)yg?cG>| z^=82`XW0Z6$XE{RtyLo<#tZfaPVXc)KSw{5>jd*cy+B=8%tM?tAjehWes100zNl;# z>{Nc>KULk0gnY*~T#DuDAq?e_Gdh$_3*^~g5ORhxSh@nB((!ZY)a+vU)k`fUyLxC+}e-7tHPXN|`mX_Xc z29M#>C`!p69Y3nS-zo{u1#MBns6Q2&KCh>vj#1ca$=D|*&eezb>FX-t_b1lhTs}Ok zL@As1EQ`hZ-q&jr1x}W*fy{m&+gdS#{+RmCVo@R2KV$Uw(1Fis=vUOe6eL)j_ke#d z334t@J&*Rp?-M1v?aFx@!TgKfh10%zv_ zYEr>&_Ebse=>fDbyw`y#_a7hl?afg-s$5Z=#)!F${&eoR5XHjt#9PU{EZpx5-8wD1 zQ)U9*=n9)3iNX2~g5PXX2Nkv~?EiR|o`X_SSz)#bm|q;cFP>UYfv>u!9R!}l!!prt z>mwI(xcT9B2$hAj>~jWDhzTlE(oLakpkn>Wfp=Hp*npD4kIt-`fX~z`?iRK67+(<# z1ih#*k@B@F%`Okky!n1>p9uqglQ#s)#9}`ANWFVqNF-|hsn0ry`)6E#k9ZC>z`Yiy zcH5a;#QS}Ei4LAeuR0?*>Vx^5u9(}|Mq_8t%ig7zKjAo9P9P99caNb0n;m}puV;bC zpy!HeF$y&0MKxVn#smvZoy2Px7lcf0pWd-72dNMU$LT!DAc+)6MnZ+?LxH({f&>j> z&zPybt7L})>XBr&7ds5|fUCS##4k%>f_7+D*XA+` zVhjp*+ps3M`t5|HXPdx}$NZy?bT!&_f-F;n@m_|9WI~cC9qLb(ggdO5MCk?$QsFBi z7cVJ_I}M?`CS)YV;rFj1X)<4J5 zirryEH;v~guH@TJjUF<@w5$u+QqP8Q$wWc+>jChxkKdCYREaQNI=^Kl10wnt4qX0| z0qbrpZ@ueD2Gy}S9`SMpApbu$^n)yr7K>b(RNsOca6-TJH3o$#opNQ+>d>Z|{72P0 zsqn9jn3dsAgR6Z(g;DMl#Q)pTSm#G07jN$sy*!Eh&itOf=AG-~hDv3^5xO8U;)6Zrk_ol_UKjIhAxfbG4*Sig}KgY1jH{fEy5mZgq?Ky;d0 zN>e4eH=PmiB99KWN|%n@md1H_SNvw1ucIh*^UG2LjE8W3vs>KR4SOC*&!*gbfnJ%- zAC4WPLS~)()UOX%Z=f#CXAsg48H+w>sJxHMF9|ROY4Bs^9cEca66~rIKG1ZY1gt~_ zLNy!n+iMpcBunr+Wb%m#yKiIYGlv5?UD1$g`}90XGz&iKTku(&#rdx?TyOk319ois zZZlrbf~TlV?B9|gB!w@mn7;z8koU=0?of}`^$a&St;O$~Hl*Ix#P4`!3Qck|+^DE# z%f99-f4F$k?|6;$1S*A&SAMJnq$cmN@Kqo41KwNHuQ_6VV=1#}g>wfypZ63s@fpST z_pNmWDoXe8u{j(Yj~e=S9x5rMgJ`Fu!)P4~R<*yb*zvF%{6yghNeBBCo(H*Uj6%fz ziE{;ZRY>I5b^h*E6j1tf!%WDO3MY;z?zc+DkMUc7{2R&2$N0q0^Tq)h(z>*@v<(4z zt9Ut-tF!d94HK5~`;Nt> zVg0~TAtft^B>0B$ZBSs*}=DT;t@jzsd~Qo3O$wUxWpgeFTkt9aT`M`EJX; zZA`9x9Kyo8psP~sMB4figvW!~%9tP6DbJs^IKhU#o>(`>YmG=LAg8LepUV&UZM<5+ zgyXwmmZvuxMQ9&1U;+}2j*H4qIKFrtQ{aAg&dS}9=%Rj_P@1bS7_HiJd z%f6d7TccUP1n1hwQxZBfxO80Y_+l#8A2=7sna!~0SS(L^&MQ>Cu$K0?Yz9J$##dV6 zdCPmYmDD;$FYNpgGFE5%-#qc|8Rt$k5t|n9L>Z8IS3=0^2K+wVjOSsI92I2qCbb*3 z528Pw1^tG~)d=6OY3BePJsMFE4HkHYy5jVgFWE>0ev|EiHg8z4XQEHrS#b~?Z@AP+ zWc|mtyGOJSfzib+=PkT5P`mDjAvS(5AHMBdgBsR z-3`z02>-n>T7@D^F3H#6K7I6=4krxr=$CjxDN2D8$oH^o^3s+Wg!NiBkrHF5#A4?f z;WJg}%7(^&FNbEpNL+SPa0>&J-t$o}<9D8p!CJfZ+-ax>J9Op65M*Ihez@an4*JoX zs;~_E=L_{c5=DM&c&u1MmrH&JTHV&)tqx3c@9R}aBN=2x=Vbm46eFLNv%6Y7iO{_{ zSGP|9_x;z(zvy}5cSC%#4vue#*dGW!nZq-v2TcpM##Ez<2;Zu+!Fc|1CE(xH05*Jo z_GoL#+$7pKrPUGtqY1~2U&#_Ke_4EpXVaw+^g`?7n!VSlaCKAH@V!jTx5x(ZC3FnK zinOS&o_=jy|L2#+^LFwp4JB_*HFA6WE85(F4)dqK?pfZ%gd64OS4oylA*H`M3wJjD zr)QfIy!RCZ`+JruSi8YMYHdaXjSP(q$;;}Zu)gBp!LRd^lh7;rv+;fKXMDdLfz>e- zWLh_<@oqjCT$dIwc`@(#==pIM%^3zP6=)DS@_ZV?et-LJxR4JqI34(_g`eGH%SkB&|GueX=BXWFDLk2FrJu#H^=&WVvEbsy6)NJ z9paeJp~-)k!|~ExKv zjxQ_JvrE=7Ivi9v5+x~5N1@Mo z4=;)9;NEYPO?f{GjEh@1XI_b>8$4P!PRxMD80>e%{5_f1^RTko2=WW8-?-!Se|km9 zOoethyJCmeKz1wyG-)dSkEH94r~3QDR}o1WStUY3ilnlVcbXD~LK4MS%Sb8>Bhnzr zDpHxLjO@LSz4xA(*X6n^GK%s$*YDq6UY|bqe9n1~=lwj-Vd=!WU82a}5)LYQz!F+j zp^NzVj3;Y**Nl9>{SDo!_Vx`tfalhSHIpWj@SL+ub==F7f>iWu#Jpw(nDfn= zu)Z&F;F*=_#t+}n>uln1xjV*9_P;tZd5Vr2_Z2Vey~lcLb>canAFa&ww@iE1h3b%E(BbTkK|ZCg<58QTM3gHXn%juJKNe?aJ%afcECK7nJ+$gAI5X`@tM||mNy6u z)vcTjokDU!gx(^I4}0HueRfHXh(ezGs-EyjLiqOz*-%MnqkzWG`!=PlrU9MB(6yjKjTEl;y zfpTk49aQ@}fp)mC8_!e~;P>~CD_bTa`*@0AE3q7s>`keO(^y}&-1FTZ*NM04W}@@m ziE!F>VAN26IUgYite5YF5}$&jSF(N3?KCb4uRT+!>%Yr=L5~x&Kf@+ zUWmp0#Y)IH=HK11vL_~=t%5Uk^6QorFGqPI~UYxB6uz~6dcOwNJp+`3gqmqu#d=;&wkm5Da`%cJ;Bk7H1?%f zf872ZD7${K=w(l%i4+O3tC%n9anDS`WVi%(_wFdOpX!{(>v24-*kIB*3I(({ zzSh8Xt%Su;AzL&JZP(tsHwyRj1;oR;kN1zF8C=hBy{kbV-~VFG{TGcwGrs?jOqxcj z`!u>#%c*GU-Xrx~Bh0(`^lx8}+$c)KFJ#d24g`!i7UifpFu13`nb&6mUCnDa@be-A zeRfFUa;vBYf~OGsh#2lW@%*&t;so+Ic+!s=_7qKBo{Wna$9Qk`wgqw4X;e@kKf5P! z3{~xUcHjwD4>RB8q$o~6Phs9%YhDrcitV-0P~IYdv3!@bcsc%hS=7j~n?p3QECG^@Y-2 zf2;@LYhE1o!1^`qG|NR80Y0~y4hhj({62)F4a#^9nNX{&#Ty3VYbj4Bw^ERpT$3iB z^fYR8zy9yUiB9zQPuX&*7m>OD7hR-@Ap0xmm%DNhYWHUO>p>x*+XAnp6pu`!WI?uU z(?3KsPM-8T{c;trR*N$o2QqD-g=X;ue1aYNLj|$!`ljizw^$b&LKKP55p6<+FOPDi z9$uZt-8{Mvu_eeuA3YOcv^RCUKc?CH*f_H zQqWK-OU}QKSijGCc{a?X57ak{)4iWyog;zZ;&QJYx;7Aa4EgdvY0b?@`THb9rX2R$ ziRTysDnmE9jyAxO=M9cn;vn<;rZr!ihWm;&2hAxpaQ?qOW!E>8NZPLKvBDx19kjo? zRr3<&18W{ma4@U|RRZBo)7D7TTxZQ!{m4{xu<_IczcYg8InPT`R;Q?A0 zZ#REl&9{(*_4q-ieU=tIpzz$_i<*BYUQZ7xb3fd7I*)hLxW0j!_Q<`t4-=^0DMKh| z9`nb#?C(al)ghm-`QT%piOl+EkoD69_-GbBPyG`I+gs{(&%Gd_b?hRdxyLZ>OS^X< zgufCUF$-(2Y+~|nJq$7hD6oC&oZZTUcyKQqlX+!JMDHuV*>z$(YP0Iy7yaTDNVdK@ zM{t71tPfxDJg-9sltvqcP4d9W|LFY1Ry^+(58HD03msj{Oa57Wt`T^?aEg4Yo@T}? z`u@EGNP}xO`%H2XysKQU=*0Ea{BOw#;SCJL+AV%LSgspvS>K-gy=9X5eWfxn-)<&L zdrQU))^{f)M+~2sLVa;BH?d+q6?=kgz{Z#{SZ+TMv$i>y`MrF4FrNx+HkfFJCczim z=UGW4%-`B$67H5Yjr;~0_YZRCqI14hGLM8;>jzqL=`ir9Mg_WYI-!g0?=!q{e$E&u z8sCU@Q@30qk0dpYqJ3xk4#}BfogMxU^u;Sdff3%!_pcIe4tdTW#QCu3*qL>i_h_h_ z(o-w@X$p#bLQnU9Gbr&|*z~YgS`xzJWndkk#Ct7sW zG|;BHK0F%EZQ`x|)G&#RUd-hmTfn?{wkW}ovQ}jI#jR8+q?EZIt{d3X;K+#I9x3Ti z#8DHzYyC^?FY)N^+Z%ZP>o%oJuEYKlbz&=N5*kcB*NV>WnsHRq)7{9D@(!_ee9$++ z`RJSQTDg^-3>4Av*483;0vVi@5#P?y!(30d&uU}HD=PFuN^1rDQ}hG_%vagJ_P*#n zn`vYkT$sA=ED37(`oCsmbmDwO=s&n=3@l8g3iX7)Kug#MJ&woN|6wS4-QjD~NL^BJ zPARSlsXJ_1Gka?iG5dFZl`)uRGv2rNP8HN>Z19T3bHU8Fk1DouV!Sa$Y!lI$3~#r@ zvR3?M@{`>cB%Y6;(AqUq*$t5}x0CiJCy@%4lI>G+h?D94IA*h zm9qOp^>OSsqF!2-=RX7{+cqTL-O1Fex@S9WBO=pcWdULB3OJJRclYl03G`0mLy+th z3L={)yVxF?04t$t&ft+T=J)O1Al40>GVKh2gKzB4tNCu=zEmgr#Gkl*`tf(*@Hkzu|0WeV7?_3_H&9W3Vf6Q-drOe8q~&s2 z5gkRYtXvr{@q$y)OO&s&Wx%*2xbFnt6q@^3&OyMuMQ?A_mT|#R&`c(5P1%wTD=RD7 zk-B886JW8hT_}eONugIR;Qh%$wvZv4GmwbWJ2p)m2VYfbA0;a>{oDw&0^BEkn=C4N za5@SUc7}eL#r>W`?c`-4%uD*cMK-63yB+xoJ@+nn#q>iUJl&Ww1(d4?a~$6%Algi_ zh{Rhm(ti4ynuzs-ZU0Vxx#vqm0h=DSo!r!p9*|d7yhytd1}vQM;*H0=^k)Wzu}WA^ zaV@uGazA%0jJ7B6w=Z-u>(76;F>YLP>5TJ!-H+%}DOZ|6I0;EU5i{F2MMo-oe`kN3 z!~D7A?3lII{mkEcp+adGO-6fKPVNbZwt<_aTi;KhHX&UtF4<{hkzpXIk>7zTX&;Y# z%O&FVbbq)cNCefMDThy@WgzL$adOij3H9@B=h)-GK>mdbbDAuppx|jI{NYhI#v9%5 z*=3PXqSf(*(d+~etC}@PX`&!^JDsE~%)b>_JjofCREp9c_zkA7XX>*&cz9n8L+-W% z7qiUYp}sH&`&67?*T!4&JKUW{p+Dq99G_00cn_P|oZw!B-{)- zm5=`~_Sj+~`YRLl^YV{2X8!uK^Cb-k*}=3-?D9o>03CO6zp1=$AyWN46}=KNe>}o9 zh5me#3(9E5x)1_EKWH%pBoz-_uU0RD9coY7qgW{@Q^V`FrSLS84060Gq}>HK`E#GL z^^P;^tF!%qM3@W-TJir>0FjgT<|Xj?T`M;CaT@zoW_lluT-wqO+A5nWzss%aM`HMJ zJ@v@B>DMR8D)_C!KO-+mLYr-`*7wa~eIM`s@8~a{V_w(ftM$3w2zv`wsy#GXnD1j|%8T_@C!}f>uOl!RHTHQ| zO+;wl8t(HQc%G$~&d2|%4~#OGwGQ%An0}$J9S56Gf^J8DXkH@xxvwx}ZbQZR$&(NI zrBoCf^uXfhqXOjmsUzik6CL%etf0B%5J;S{Fxra!)28(}&CVN>PE$*QMUvKh&6^L61+N*ryRg5_T+H1P><{2{JH5$4papEb z5Gg`v3h#f9!RxZv55&D|LxA&rI8hWQvW)el>2fL?n((}`H~5aL?a^WMwT^w(`_(ks zi8ln?{|uKH%e;0+!eL*>vn9$EGCGqzex+QDjAHi7S$|LMKr-3^n$We%&$0DUp+a%! zn!E#&*neyxC|4cN6?DW!hi_wF5WD1lVaa(SDDv+3_M~l?xt{8w0>hx)TYEzILmZkb z_B=8uNJeXx-`!QibBk#e(#A7ERCGhI(dzJM6%%hSvS4l!BT$tkE{5eW4uo*imnJ6E%#1<4QrM4?2L(MM&UM%f_W-u zW^NJ$Im*yiR^7MXU( z2K;+Hyu1g-K|eS2BG08P$QkF{GcvVDNwHLZd-Hej8}4a-k57@wEjR2&>u-i1sR zzYR-oA|jlxA2A;$YPD+T_Ta&qSSunkv5o=7PpbzhwN^J1FLuRBn$zpR62)zH{B=TpPxj#Q%Iq(BXZhZGJ0Q(H> z(0XgTu5TLEYqh2f+Triprb3CJP6EA2%9iLe#+(<(_w6l1Q85Koyy0J=5)7`Mms^zAx|$uLlv>+n$VJ8)V}-h zDnESp!;_QHB^)!oOEv@!{@x;d|;+neg2BIsP4tOP|*J z=EJo>(cKOmn4jrZa>ozri)k13eE-DO3WH@Od+U@}^~EZ$xCT+Nf5+pd$ttk-6dBu& z@xH2gF*Rj93c9Jy^8VV5X&@{=k$L0V#mrwfd{ufNd)u#U(}Qt{`}bMCO1UX?W{*<2 z2kx(VH!GH0x5R!}(q_$k`{J1WJADS@b(<2LWXCy+fQKxvIBJ3WlZC^yx}9Xqj}#nI zB6mWT(COGWS4RO=mIve_4`-%8tDEa1JChAK6dZ+bnYp*2@WkJ#>PXT}HF zZ=zojgXenApR?8QDS;Ynh;?^_0Ly*xSZ{c5R4YGkF9mGnj#-FFmE-fWavPxmqEDIlhEZ2dJKkL1<9XJkS{y@3FFq*yV)Z|y029tI{ zzpAl+Uw8Zmw@Vz@PwPF;zwT!@5J+ixy$h!?*Yj3eL>oF0vwauan<0 zf6w!_5wJJ+EyO%=#pc1&u;SP1dnAr8x9B`w?Gk#w03yF85%;oPvVh zW-4#FN=0VK{gvR?3LLKpaYc%_&f4(sbtZcP#JwMuGEK*NQd|GD$1P+u>Axjkf~_2J z9*CM*8Xd>=+sf6tN~{;y#<<(+oep`bwSBK|VZUmv;WcXdG^91(^qKANI|#QfeydS~ z=ex}Mq35X#yS z`g3}#|U3ho4?ll$rtK9OH;+lkBh3paOrE$RL{l@RwbYQ*PTxhng1ZsU%vm;!lP{0MA zd{yj|l9BZFW^i*qoXwQsjv9_Y_`Fj3cd18e#nSpeTKA3iC60H%leI+L(n* zjb@D!{OO3BKv2xrFGB++O##NINjyJZwS@UF@M%|BZeR;x z*8kcmZqu;rziVsL{ancF@czh{!+y^SEJqE#kx^-i*2yb)4qB(Nd}pME=|4<}w&R%s z1!uA63X5;yzR2se_H7hYz-w_>ND2E1uncW=INXbPC<2F?LRR?$Q$`D8$Zm)#=J2@^ zqK}PCfCLGhvykt(BZ7G+E5{05NRu#q%qw2m4eP!zA55jL9ksF4OUW(d0WCJp>?+nf znbYdC&si~0*`{l%x67M>J527&*pJou>2Ufq_CeXYhudko7!uE*^IS66e~*7kK$3!W zIRn}g4xzoEBouPPS!Ok#a-5X=0Xu8!{C~Ej!+z4Ev+Occ=<#G;|L4<7Qp=6WYV! zQ?pcy&$VR81q!-;T`ki1!35@ge;E(OKFs*M_#64x z!y$ez%GZ;*@HwIIed!xAig2W9|LtI)(6~!US9a9Gq4u>0SMu7J`TdIX3>6tkfBtp- z0STRCXS`|J@g4q+=lys485OqMv%Xp8FNSLmPvzvh{~r%r{@jgvHBWv?IYdG{)%@Kf z$+h5fF2?RwE%pr^ydX@KYTTfdM?L8(8<@Y6XWQhDw}cPmG*vQAea zo=k=BdJ}dMx^ytAAAGB^`4z(T&zNX*9qQ5Kt2}`Beb^2OQQ65f;CdTmm$!}v+KXNZ zotr1nW(z6jC;rU&AffFBYb7e+ZnU?a!hP29SB{~Jr67I3^Rcr91B@(;*Of+eLfP<3 zCzU-+{M_S%+I=c?%JCL6wqQIpU~+K3NjV$~+&jUwp9WSR(d9chPR}cixmBBD->#Jv z6RoqksOnO0kD%og(s2nQ^S?|3wTqXE23hG4r1^p~sB#>2w|h%p--CT&R#q}@H8nyZ z*Wt(*kqM-hQbO_Tu7WkD5mADwbl^^Aoh=t8g5k+Fp^uGTaAG$ngrxNMi@^I0Mq@R5?yb|{ATlb_ec!ie#Gtykx#&{e}-%KP%GK_+$tGLvX9bL7u+5#e!k zT9&PETlOR~e!kN#$p!XDC8H-Wj<4-fAQ=9)96nOFdn^zbz;VBa{M3?&48uJRWqI~8 z@zuM2TgRbP;=%!QT&GU$+a7d~wHgN1A72?NqQbL{CpA*n5aHrE-S{?#2`0bGm%Y9f zbsaa1AR3X-=+3>v-%&ig3C`j9&`kyL_4K6=K9yiL1KMF>SjT|*MH?KO(41cuUv>Nh z@++F=W?!EP=7#qDIhz5R$!DOnc*~ku{Jk;X*zChhBhvas{U-a1j{bOD$!j#j^>Ep5Z)f{T z^nHi8qpbzzZw-2C{*lSX=h3}>;mtVmyf(5i6xSh9Y`t|Zoztk-jeJVrINs;Kn?;SP z8_`j+hN$Ii5A*w~ZF@#RHnr9Jxv!H@Kxo=5^?EAkJF(sr!oF28hULF@oht+X6-&nk zteeLBxniU17*g14H|T+NSy66`{LRr=7ta62#7lt&8rSRw`DJMEf$MtO-CG@~c4eji zkZ3-NxKrJI%6<|(Zm|2$%)1JNPQ1(fx|IR@YK>YnX!FY6 z`5og2w}XHEV#EFu{C~p>C0}7);&$(-8`2b1S%<`YG^?5Y#e*gB0Z4P0&z;3_pL}W0 zNKbeT@iTG)BGCmBvr zDEA*}(V^L&-?M&c0G+oV_t3#NW9KW4he>FCpm)d- zFBxBKIB23rTJUCQ`mUSruPg;_Jc6)Q=1J>1kQ=X1} z0%vrJ=z19E`fajK%^mXq2d^J1UwXg*fAxwf-wjDnY8m~cW0;vQJS?A(=rB+Gw6IQqr%D+dI3_qN z;7bSI={4jk?00E2evVwB+rX^%Ho4njfA1=iLoZ_z2}p!eT{Y97Kn)Hbj-kU@4_@ib zhCh%-=}mD)1c_O%%I+@u0kZn0p}97L$YJ#Av1`}|tNu^>CGLd^G{AbSCbfJDMTG?F zip{LXx10Y+(dZgqy6n3;y#M>GSKJnBfilg#S@jDIoD(Ll%_sY!m3lk#^f5Z@#s1+U zbD8iYgVRMyt`EsdSNM1 zXgGyzV$69JI}1Qo-gQb`mI2=v27_L4k0ax1=}ua19m4gD1A%Q43{AIutBvSETnVbQ z;N}{*9ko~a!;41bxbbiHwupLg8BXvDkZ;EO&13WKqclV_IYSMM97K(oe}>JRYN1ug zZ{4}iC8)8I`rz|!Jjc#IvD~rJ&W!*2pB(K6y%U@XEMJL8Hz2@FAL9yEYsc8f^k^`~ z@<~mMeHy-=*?CW%YXrq%Jq}IkJ32dW$ntF?p4&@ATba41fHU`7N7zCK;-MY3(I19U z{F!g0D{INj^*=*pw1D+QO;Qwo{!HsKd^E2FdL>_6x+e{`SL<`^ULnKP)CkisnGwKx z+pCZEM?huaz6Zv54t=Sm!*A>73Q$hCoTYPw0m)xEMOcG6&=#|cn=VE&_s>e=3(S{Z z?7QsZJUoH&L%VGHLleL<;;Y8sMH(QvzEf1sE-)4_Bn{KBt{?j!E?xeNqWdcT%o_Ya zTJNnhw%AqyPw#(Gb!RJ4S>o=!fn@AkkB(S|zJJNQALO#2PC8QX<9}H5YXT`e(%w;m z_4X%sB#p;gGN5`vF-9Kq=SOSfzo}t-3CG*hWtCJItkd3nVt|CwxB2M~aOc3@VJXf| zBL=vi_&xK|@GC0$w)?kn)Byhb6)sW;1-@>%xpJ7Fge3YG%La5RA+)3atFao+UkmKi z38PkcF}bDx>oilJNO1Konu4kWPEjuGm{b~3KiZraJ&BcIf8=3Ceua|R{cM3 zhn=iLUc({zMI9v6z-2YhNyq^X;|I2``28~~Gj&5hM4%g2ZNg^TnD6iYfzuEB<2d*q zmjxUb^b!YRi!xz-){e84stnki{vvFzNG;NPed=k`x>bK#UINDd-8I8M3wuu?;$pzY zZ}eQ?G2hJ@G)D(6?meXD+zE7Pr;MyzbQcp3X*F~mgRn5J5H25FkFlsLDJ$lH)RkE3;`76dv8b1Vzk%DhpFkx#_tn_2&lAmcPX40^9rHPEsO{D1fU^V# zN}mXoSwHmelWzsyr~h)fbfysdHB+xb^Hh)>5dE$rO9QTN0w>b2PTnc!y#Ld67-z$L zyzWnhD9jw@pPnV52VN(S`Z>k}|6WVBTND~R*6Q>oGV71Wc0I!VG-iGY`j1=#B1Qqf zW6LIx^$CIs%_|*#=IqdS9ihN&J;epRC%wQeCv-p$E1Lf z=y(nYCOVcNQwHRX@|nHGz6PfC23z+1?q$Z4b#hA-Fm$nMZcd#-$gwftPg4fy=+yD^ zt)anad1&=?=_F!YIIkZ2d<+p+R*JsOR3b5@k|UKuBxLYj(mgZ07BuUI`~F4Iz{V`L zF?gv3#2Qx;50uiN6VJ1_zGnc|`7azX?L_%IEB@tPse@1acegM3RiHx(j{ePisnEUQ za>sg&KCs5;Jz~iN&Rz+*bMFNai3@f(7S@)*c%H9ssy-c}q|874{YU`{Pv4w#ODpqx zt>21qmy`A%&AR4#k@)uk+w{c-=oq+cQ=3qL7G17AH?B@YM;EI-Ut*jX=da~xITF0s z_9l}pfrz9nJhxb>XMuw3(JcZ>G@xl1@lmSCpdY@l<`|5iR;+(9Ps>GbW9mJdur9Qy zkQUPQG9UE%K_vJn74DvR_{X`640l=wE^1?37}tB+zr=o^zOtKaT82aBz@C*&E zmpc@4Wm6!zBeH5e#{irs5O`wB5)u3U96?d<3Dn~`vq?R%29)jzf5^xEg1DW;o8F7q zzc9r$)VFY&sSi3;!;y=eJyWtI@beu<7+i~ZE^5Z6-aJRz)MwtJvDFKQzgV&wJE2v?KN9b6;nT za6P_863tYv8{y4KRfP7~1g@eKsqv zvanm%jE;?XiIj}2@|T{@v*GyCcq+&f-%~K^6z#?TDGstChKd;RG?-^NKXZvFgYyzQ z)Z<^$ku3I$CTr$E&B2@p>M@f@TW>b)pFlN`b^p~lEZ}>WY@UzF`FEl7FBgs##4+zj zAUGdG00^2+4LTY&aP+@SEtpmpu+7ZFKQa9crJRfHdGQ+-@ zJ$}8-F(edn`-HlSXcBy7H#1U*rGqD!Jelc=g#*R4F6x*!h~tR|ujCMD++Rsu^dlk9 zLShNud@ZEKZjDMkM}xVGFO-e6GQoL9_V=%TI`)$w)TCy_BWP*3qpOa6$cBTy7G1*k zw1A~!(Jlt83BR0tIbaONi!5}__?wvXBb6fxlQ6-%rkKhzfOXiRJ04qBVjuC{HfKT` zklm{tkpTh2=)EZS&L={Mi3dL3xOEx@q?^X%8ug*^;f2x*SBoH5lO=}xb1nK8I(?#F zs2q8je_FYdL}vCQJo9Tu(1lV9yK|Q?uX<;8?PjGKNNNzu3ooF7cVasI+x!SnJCEyS z9mKu`D=Tjc^^2it%g)a)2PRRmZHV=c*&66BWcBAcMFZdGv~4}72awzS|2Eb{Q$UeG zXjs-wMe+X9`Y$eZqDS8EJ>TbHANn-0E{DN#q}oVwSCFCNIoD1Zn}J@0`$2S`H4Bo2 zon52%OrUHvpV1pJmC(pDGc;aK2enbFwP#=)I(`~v&#fC};^9dz2{<3cm_;?^VjXfe zti5!w3T#LFCx?|7@FV<&g0zA!Z0%1M_}M##&x?EK9^olSD4G!q#r40ZU0{9jU@aJR zMKx{VqQORXIa1lXB*g2Qe@oPl4xE^8Ec3G*B_(rAFHKCLUq(MfF9qboLm{)L8ZR-< zuP79J6wl-B&XaF++qUBKMUbiJ>W9qC&-dqUcOhY!-@lb*8ldU?%}BqH8su={$uXM- zB7`_KTFc0<@_PkX$bDD`sv1&{{cfH;(BIa4um(DJGj?;~__p!l$Va}qVK^mO#Q9B& z%#1%Q)0~aacr4=D4eVD~6Ihe~{bn^-NE-WaM%AInAy(IukFo!@lJvCrF6O*`C4JC( z9F4m0RL7F1klW^J#ngAXu;%gFV^>bo;g6-zXTbV|f=4U02P?Xn{NVRe6D#2@r;8XptP#;>X0}}y}>+(h&VYwFQL2=tb2OJ zKH>B7IK}I*B%Vh}>S~E8+#Us70Qrws#G_WmgQzZ8ohBr>+%&4gJcGkB$u3q3$vy$X$-s zq(`T%iSU zyi$7l>1OQrFvERLZ%-+FdT_(d*^my_5jQzR(y;%_`KvqFri)-bzK?7?z6-3gDu~0r zm?uFB>hB%IzSq%IwI19*X18Z*MGIwteq-A7Hy$^qh4XIU?rxo=nf}eyVkJu+0>H zWKcW;Izf!>9qLSe0^yT~!3YeT=@&9yH;E1zHaVMk)&hI(QAPsJ(=^8#TPN27WWBVh z;@hoNe+kFVWLzg2S9N%+;QSRmmLA8M4c_&(H@)ZSAUvj{Qj{?Utgrmrw~h}n@i+D_ z-ea&wo$dbS$3(O|x;xrVvJlGuMMSD%JnhJi-d|VLu%B=Y@=2(xL3lkywlKQD;AAvm zWZMKH#z*HTT&@Ne!{xvFJv0dY@AMBM<^iXr+}9ZJAu-RFOER$ncs%%O{=|19YtZ@b zRaXalL`{ozJn~V83+gNE?1Q|daBr8*gUt23J|aDZ{f!^OzzD`eMsA|VNy%U{<#DCq zDIInO2N%A%(glv410Kh|W1Sbqhj(4W@!?(Ym1E8%WV)^S_4Xqkdi3RRq0lY_r|V8Z0cR0nbClOxaHvA`1N{GGEVk#$kS{^fGJLaFfx2pwiUG_s7@>oA3xowBysY>|5@4N5bQ3l*tr}#GEMI}0%*kG3-Zin%W-51ht3cbhoSmh^6EMI3pf>rG7kb*C|b?w29>#tVz z&PNt84j{=Z*uxfV$!O`l-7Oyo^$bxpIxnL|4!W>eBws0}P;l7lI?uKDxYnFU! ztagOipR&8D;QJB3DX?$By3>lE0o&NK5@F?#pWay=8myTW-gLKT5baFM_Nvju_m<-R zU2{z`QWIY*a|Gj8+df(b?}t)|b|g=vx0RtU{f3WRvH$YL?j297=b3&}E9(O@YM@Y= zlvl$+M)aGO@%4lFp1@Zr%A0Y&uaN0N>zART@R+bQI(=PC{YXg8MGT%MMXUbc$G)i< z8ap2NT+{KcH1?+?$%WFIFOZq>Ekwqv0RpY~dB%b!Q0ARuUw1w!2e-0EN?Us<5k#MC3@NQ!#WP*CZ3e(`TaD@X49Eb;SwTy35(d2v&HhPmWA6Xz(AH77p|W^7IH(ILef8QM99IUONr&32b&62R_Y)m8 zz2h)5d^rE8ejhVl6&YL~2l1q7M``_jv`r(A-w)?&;jVqlQfnL0-9?esJwsin=)?16 zx87Ff^KVbTprEh5`~mD(mlDrty3;#Y01{zuOCwom@VQ1`^>Qn|pTT7v%hRWI%-0_d{rb>EpPg-NY zfr0VBhW8|SN-n;yqDVO0eh5u$6u%}}u=@99^Ig**UH5!?ZnPUkxJX=9k}AjduodT%QVyaVoT^ zH#v!06H)NfM?1>Znf0MVergI8t{=C{a6dr3c?L>X z1D}3L1}C0Z!P34|cy4-uzhtfteCM8?xRbu>-+QGN^RWaOT(<)=i6}QAhUAlx3$B?n z^K!;i$UpaUVg|6k7Dd6()v}uzPwK;W4WJ|$;lQwqlPEQoB~Q{P9v;4~`s`UlgUeIb z4j3vmq2HMzW)9UfCLd$KwXhVP>c`g~cA7$}MqHEz_G+Mw6xa3rqCth!#IYxse_4OK zO;6ut0{`BX*o=>L;1+ty$~$}lMQ#zu-PvCQ|H+t096LyZ^Y64GgANSBP(jL}WJ3zz z`%2ntY;%w)hg5a3Eao=}6+Esd7J!4|Eia~?qbKg?9!d!f`C16u$DOT1czrT*zf}Xw zhkSXcOG4@bCz48QYT$jTe9Ah^AJn^jB+C^0kQ=$&WONEqn0VubD+U7~BW1g&okv1b zmfHvaW+PCe7H=NG_0JN0{o9mpJ`fy}{6T87AI^6k$L;>nA^Os-j+K6l-@1lA;i#{I zbfTz^k0b-S_NFySihM=(#4GN@n4gT#FX5LH3Aov!E2Pe2UbU)q3Y$(T91VY!+G)pt zD8(i7|F$-wcW;dzjXUCVL?G~GkI~@k=e$9`*F@B4W}U5)RRm|Flipbb(jo6UXF|I! z1w{A`pX9q+#Kgz8qS*mZa%&kL9-2gDj+{t(eG#y0^55BQ$N=$~jr{SE1IVn6)lUZN zI`I1!Nvly{WyUW2_i5}S9@i84zOxEibGak4lxmQ*NB6p+_f)X^qi?U<=Uoqu6l#a`n=_`zz?)(EVFLL zY7p&d=?~<)T8ec%%Zso7R3T?o`S23IDO5uA-Q4|>=|@CZEF(3ePU{1sA@M}?PCwLG zueSgWURV**&7ec1J;(hA4P@9hKl}P)L>;ppb`jY#3<~G9^nX`&q8~k4pL|2g;Ck2@ z!LNi;bXR$>*7yt=Mo&N05~yd!PeSD~>VcqJ^m~OyMD$}*y-bvM5y*VV@4QK*!rDi@ zF3Eo}{=;iyU!S;&pR~;-)uZ4JvlP&qL_^BGe1!3k=3zA z!4DW`!t=y!Brz&PowLZN|e4yw@xbuUQXIUuS*PgVL{(~#;O*bpLjL&^J6!TCmtyx+!z<_ zQ;v={?nM>p2l9SBM_|`|tkgoX9$DY<_c$by3R>$*=g+X?dl<2vI#qlEi7^goE@b0- zLO4Gx&u!0y&sq0oDC0D^@0Vbmg6oQL8&7fJwPVcqzj)9V>(w>-V{7rh*Y)|dxId@? z2{YmN+jzdrFwxr8Tsn+A$12rgc%}jCLsz!Sl8m47a_q;BmRmP zMMNh5hjb&h1VndA)L+o)MqP&v@+6v-gZT1pd-r4cD0^*ma3p02y0x^7pZj()pD%RH zZwh`NhVv))O(NHYQ?mx?WngVs$;Wqob8jv5t2;Cqnx^ho{%rKn~^$nf>r9@M9^$yi`vn)!TAT2(tF>>iH2gMHQZpg&Qh zcj;ib9KK`2Ryuqt3Xh1|f&H!8HbriCA>#c*xN!#aBi{*;D&K#__k6EkYAHID2^>3= z_o(CgZR7AQQ%#$1u)JJ&`WyCx!gynVcE=QGk;MFuj&*|UUD?O+HPc|NF)b&a8Uc4+ zJbu5s0PEw^e3s;4^*#klxfdf)x>qHeCfNlVEmq{)9CWD3%_+H@RD~KiMrLAmk&%m; zce0!B>V1D?l3y=UORlAAUmk_BciX#L9{z;+s~@d%Kj)(gdgAH+lm^x-zURwW*X%wcysP&7mLj?#F`V}t}q*g${oBmRlbf!Lw(Cd91-zV25 z>F1S;@42=}EIaUg8ia!PE3Q9YghDF@Z7LJ#;K$Fg`0si)b3Kn8Pc1|<=FvGxhX%l~ z|MejK-88K8{wMq`rVWkRmd4fN`(i5jd>_lK&BXDIP%ih7io}&zdIJ->;hw;Q$78)D zSeZ|?5BjeXJz(7s{44?AU%o7~xXo{j`Skd;lhu`Ntt!NA>U;SE^=|2E!El#(rHj;s}?PFpPu6sF8XPTt` z>O#N%&2N2ydH?wQHaHk!eMvZLL-{VObL!%I&1OV|yS@5_tXZXqKg0Zi{Zck!Ro3LD z@zR;kr+&ZIfWGh5U>uwnfwr|9A8v{u!I;4QEpJp?kj>SzpT>_=z|n{8A`y{H{e{PF zS?o_)v7@38vGsy}sKO(TI2tIRx3@McH>2fS(fbL3V`$%H#Vfl+R^!QEDLm(h>iW@k zV`&uj?z-;bU&a7gx0^Pz+EKvXX6TxT`AWYJX8I<6nFM@(imCZSz}KxbWMep z$ZVU2x)|9U2P2YDXDXCeJ*3Jr)m-A%?-Hxiq8-p2kuSm7jDlo;KJ43 z>#C|1=&MZhhXv&yApK=A=;42>_0?epqa9_qwYZsX90idQhnXiD4ERHy@;hIe0sr-M zDEV+M+b>qPKy6M0j>j^LyKb5U~G8476nrQz!f&Db1 z)9TdKR{62|vF&ki)SXSXc6$dL*HY@9KRXSX`3Fj)AD1D`BU9J8u`g+j=lUV`HO0($ zrGI;}8NKsZTF~o5?E1yb_rJXv>!wSZUEB^~A4HHDGL~+igkig% zaQO4gam#~0nE6hfKYR?KFE{lzlnugN-{ZL_p- z$lRYMTX5fa+;ukQ5$7myq<7aw*GvFITi928r~#=w5MgO-uu_k(bgbqR$E)iGtJlZ(L7c0RLbl;|_7Z8lLRo8-*INiomT7 z3?O)T%*o^X6{hR{V=1w&2K#uw+@yFSvw!pnYncF}6%HODg?^CUO!_Gm!2rbr>#fR{ zg5mqwm4F>529d|q$nPQ(9B1(Sx98+Aw6YW@-CP=j!hJl;0zyBbSJjX!_TV>ELX+u} z-93o$`KLN};#cn@PS`4keZLyxM+cWCpqw!nZSa5svPT^brn%N2mIHn3%+6wdcm(f` zS@Sr+{mYl}v_bSliH+~AKM_iw49EWCC4uko&+HBNQc()e&OKWji6HW_TJy(toKNt4 zr;%6$FV*wAV-60(l}&;3yuT)Zem^+y{(&aseS}?3_H-7i$XjWNi(A##8y8w)e<0n7 zubnqYaI!7ZtFM0w){Pw}M7+;KA^nTLh=*wK<^WHoX=w)&uZZfYi$xdLcC9BR4Z=UK z9*&O#lfb31@yrYNR!qFsxM|?=YBG}#{SaYx_lI(&So0CK23$o z91nH-7)4NZ>%-5t>)IePU^XKI-!F>eNp`p<4FYBF#U95zTzw5Go1O7^uEUk>@Nu~T zosyVy?Sp32oq6EY`9c!@ULO6Xf5$LRYLUtJWeDb5ta@j)egglF4H}B4alO%%vaz|e z6uEByT5Gb8ioe%N^-O#Z^6KAnp8q@cS)H-9Ps4M1#lFoI5^aSroGh54E87a!&pSH% z?O&}2qHFNnkk7CD%N^GVU_bnnmBW(^jJ8X(PQOo(*DX^rz)prS&uuUEd}(CH|7RI| z*uN`?B6jZr#u?H_ZBDh}ds?}w+vg$+p=qyVyFacUT6?zmPaEVh-{*tq6Ds)WP~WWt z_JZuQdHaq&5~z;dQr1q0fb&k$7w_tiBHHEpXU(rx`HjgJo{s>@wI@uiwjF{ixV{gY z;rnkG-Mw!P7o)O+q9;k-bfj-i=BVFQi171MZU>bh-@DvXtlw}v=`Fu!B=-}pUwSCz zfBGvTmMd^P5$gj%K7!&c(^Wqxn<vH?v4n@83kCc>Zn;a?_j-dF zRZ(gH5{;hUAFUw+QNnK>)WSLbA6D=Y%9*I_=Q+a9MIKE=ux#r7aaL7Ixl$hG;Hur`E)9 zirNd*rvw|up%cMrm-kIlNn z*#+Pjrp(@NPe%n-P9hi9dyzjk>=uR@8efsE=~xjk-<^Kt-9x~-Cc|@6yJz9nEa`-M zSP{g|MOcamv>~3V8|lvu)ALbRf*;R-Y(I%VV092;-~aUd7cvKGZh>|6tZnE@N5ij9 z?k+@X`e1O*jh^2q=%|}Oaon@|-&k;6m*;1X%_{TI=*PDzP9Oel;7dEp%^YYfYiumsRmz ztk?G1a6sxF83F_?j?0{+!a&uUZX>A`5z6-1tE4tze(};$)HI29-X{LqVO-NDr>Eu+ z2@3Zlrl?hp1GBZ1>U?r5^7tjly!~-92)f^_?VqRnd&{(bME7GKOmD+=`KgsVHD&it zL-}BDjMxUugMXJGXO+qfy$YbE?g1IC$*EbHD6 zCc(QhR|_{KGW;>r>1V4X($4cCHHA@7;%q#nh~xiBSzps-<#CW$Q&Mce`26AH@ueKz z6!`DLD-Lc&xa@Uk2!jvcRd+t3YOdy9UDU%>vu88z~{K{e_w^*GDrIElpGZc6Ir z?5E|gtQR_aQP{caBkYpnP`zzbC{c9+9TH=C5!_hcT1za>z+cW@?R5?WEc|H;@68jC*s|=ypbzx^fM#98voIv95D{ii zfm@@5Gt`+0@Tjiz9Jo`5Tr$Q~=0+yK*!$Nmja{9zcy?uH-7pIKn&9z6YYfug>X@I? zp+bgbZ>NQOJrc6Jce5~I6tvR!p1pmau0Oo0B}PK3ueU0^{5=MG#iZQGhuGh)d$kv7 zXQLM;Cp1^Tk3*=>MzWC&#`iG(Yw#!u0`2z(2_GH@f_QdwD(2@U8_#juoQcQvQ!bL^(Dx~MaK2u}IU@0y5xU}R>?eNkr)xXA-a1AHy$pF?~2l@BEJVNgyiQj9>eCyY+F zDX4ycdCGDC^VpT@OpCNIeoX$p-QZaSs5n_0)a)OJSEqVfWikI2pXWB$SR%xas$OOG z8G~k=gc2F3J5ugR%ULyhsRwjUQOwP z#^ZYIrC8SypEtt!69XU}RlXLoZw!Wsq~FTf6o^V=X*d>KjL1JaWG#nB;Ka5(o$HM> zzB+@&Dt8IeS67#_`Pv6l_Gg)1sm+5|O6ZX$nMMJS3)dT-uosWpHePoW!S7i*8M3)E#50lU>{+;g< znv!t8w3n*qZ_d%;{csBA%Mbnyh#1Qqfk%FSv$j`_L9fAmu^jeXWE-(IH&@mV9bVNL zUwLMb9$wH%5e;-Z%g^i0&>)DE{8tj!GX|NXyg&cDUxBDICHwZ^yv8?qd9A*pX_`G` zx-Zy{3f_x{gk0AU zwZnx3uPoL+{KWOTQsWPVeb1*L<>C#w{g3j&=;QX+SD((&&Vv$_uL6kVADM#=WAM`E z-p-uJdGMEwHoFy+j6@D6bf7M)w|Zt&g&jp?~GTLH8|F@WS4b^{^uX zx642M8tSc_%jZ+OtDH+w;RzGu@c*D+ei=<=<{!MnT*%pEqH_W z2>NXxR1mOv0Q4gMNY&!?*~PUwW%fG^R3jXD`Z1w{plvNGir)o1etoMj5rW*l2eVF+ zVNP`4)D1HnUp%-8m2XqQDc}`qy^H&Df#L-z+=md`2PJzV*4w?RVec?J0I~Voiiv)c z@T$w+%1O8#>&QgZ>k0HD&Eu{)y@W=*KJF=#m!?tLOZlIuk_476FCYEKI|GfYX%*&6 z2ps#RO?U`puqM*9k5i_M_I`Os-=2dFgIxugi=&u#X#86>h6)zUik1^%O^Dg@`~J0c zGORp0tbcZmj^DXwNsJ=ZOEH$SS191NE^xj`>+&@G8j#=F`MMq{-2P<4zcLA2Q4FDO1t0MGyQdi( zCn1ZOJJr0cB*+=u|1r&d4tPKB-hJLYACmT5j@tdL98O>5ZXM|vqRn3lB}_q8ZW2Xw z69tqG?4HrW{@|HSQG$0z>e0DNvN!*1ph8EEsMi^f9@_a7d-#@wUIl(BSaj@z>L7*x zu4Q2V?WDn(ME4xHt+=D%TmTuBDDM(EK9Pp^cfHR4AGQaP>bAF(N1^fSnQ#`~1sMK3 zP(!_(hOTRl6IZi_;ZM=~ogz=^`cb)_C8eNK=DBDRJ_`CF$8Pd9&w>>5{6ND*CVZy4 z%>To7Zzq327SH2e+I&o2E{ucoKEf$e=Ps~0sIzSruYUol?_m9=0yH_dCQ1A{g}xON zW^VqXufOENd@}m>Go~e1X%uojbmKi@$KfMa{zAt{1Nv3__{eg~Fg$0twO9Eyou9+^ zw1|w7Uson>W1&Evfg^cg-yBr#wNE-4_Xe6<<3)ioj_u-`8%(e0dMu5SazrR9O|*OT zp&KgPiW07jVZ4Z!q%&F+4^jDE4P#reK2ZYhuj5yZ@cN4-Z^3cJMrn^^?;aoptC;KV zo`xI4BO)(X(}3!9cJjh+3i8lvI)kkDA~l&NCml-f(kwEiyS`a$kli53Y-9aF|%o`*|H< z?j1xYJ3Pf|Y)0XH6s4A*cM9&*d3mw&%Ax2piDMOV01 z8fW79Fl>q`o`ddg&vkbOtRsGwa&1In7S0B~=Q5wJMQk5^!>%~ty05M!BgYbYe~|0P zGltM=W9XM=-2dq^=aH4t?G(_DRNTIz@fmF}2tI8TN&w=z;M=CiD2v&Zla-c{8ND>=0l+PXWUw zgVu9Z)37Udl$1Z22+OhE>f5$Vz_E}t1vST9T0S9%BW(m;?ll|Vb7us;eA53bV>u6F zCU1sT9dTWs>1xV#T#xDS#FS^^5uFb|DCIMXR?MNqlZgO(M5bQzy&eM<;+s7Uy&1?@ zf6E4~kxt~7oWxNpK<_8m;pmYIHLQ0n2F%C6RP1@DJkIC5-FRqYlSvuc;M9NNF4q_c zl^yE3v2UE_KNzV@)T6$I#f=IgBuE@&Kl2jTHO0{&oU_pXFx-lv2R;v++F_i~}V#kdM4S>yO@E-5RR^Q($Uck<)vY-hZSqiN70M zc&rB0J9>ciRse(NvpEnk-QQYh5D79zR>U7_QjoA^TKG`G5a9b;cxMv{s()Vy&3;1w z`y{#kQZf}z`&e#d{Fe)JDF^)6FJL~&gD-9QiM0F=!)3?bN#OoFVDHh@30rQM=s%=P z!R*&#vjo-}WqNRVkPc_=H=G zm!6+Di^*yNvH@cT!f|HS@B#HNq0`WDnrw4SG#fR%|&*#8^rr|a!dRcatsTs=U$U&jZoOu>gkk&Hnv zI)U}N#Ljd0ejO?-+9YRCg*JWJ_%eTR21#6g=b55Izh8pfzL;lh&NP|ykqBp(Jj6e1 zQ9*>{E6_#Fg#vDWg{tg#sL*$8-N1>Cx3(B!JT-u^YL#�ZN~lW{MdvfbQY!+eB&} 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�Up46UB)a8C_KtR~w7|f(7b3kA?I>~dJM*p9 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©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 +#include +#include + +#include +#include + +#include +#include + +#include + +#include + +using Kernel = CGAL::Simple_cartesian; +using Point_3 = Kernel::Point_3; +using Vector_3 = Kernel::Vector_3; + +using Point_set = CGAL::Point_set_3; +using Point_map = typename Point_set::Point_map; +using Normal_map = typename Point_set::Vector_map; + +namespace Shape_detection = CGAL::Shape_detection::Point_set; + +using Neighbor_query = Shape_detection::K_neighbor_query + ; +using Region_type = Shape_detection::Least_squares_sphere_fit_region + ; +using Region_growing = CGAL::Shape_detection::Region_growing + ; + +int main (int argc, char** argv) +{ + std::ifstream ifile (argc > 1 ? argv[1] : "data/spheres.ply"); + Point_set points; + ifile >> points; + + std::cerr << points.size() << " points read" << std::endl; + + // Input should have normals + assert (points.has_normal_map()); + + // Default parameters for data/spheres.ply + const std::size_t k = 12; + const double tolerance = 0.01; + const double max_angle = 10.; + const std::size_t min_region_size = 50; + + Neighbor_query neighbor_query(points, k, points.point_map()); + Region_type region_type(points, tolerance, max_angle, min_region_size, + points.point_map(), points.normal_map()); + Region_growing region_growing(points, neighbor_query, region_type); + + // Add maps to get colored output + Point_set::Property_map + red = points.add_property_map("red", 0).first, + green = points.add_property_map("green", 0).first, + blue = points.add_property_map("blue", 0).first; + + CGAL::Random random; + + std::size_t nb_spheres = 0; + CGAL::Real_timer timer; + timer.start(); + region_growing.detect + (boost::make_function_output_iterator + ([&](const std::vector& region) + { + // Assign a random color to each region + unsigned char r = (unsigned char)(random.get_int(64, 192)); + unsigned char g = (unsigned char)(random.get_int(64, 192)); + unsigned char b = (unsigned char)(random.get_int(64, 192)); + for (const std::size_t& idx : region) + { + red[idx] = r; + green[idx] = g; + blue[idx] = b; + } + ++ nb_spheres; + })); + timer.stop(); + + std::cerr << nb_spheres << " spheres detected in " + << timer.time() << " seconds" << std::endl; + + // Save in colored_spheres.ply + std::ofstream out ("colored_spheres.ply"); + CGAL::set_binary_mode (out); + out << points; + + return EXIT_SUCCESS; +} diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set.h index 01caf3f6e37..1c25058d84c 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set.h @@ -21,6 +21,7 @@ #include #include +#include #include #include diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h new file mode 100644 index 00000000000..94a318e46be --- /dev/null +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h @@ -0,0 +1,342 @@ +// Copyright (c) 2020 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Simon Giraudot +// + +#ifndef CGAL_SHAPE_DETECTION_REGION_GROWING_POINT_SET_LEAST_SQUARES_SPHERE_FIT_REGION_H +#define CGAL_SHAPE_DETECTION_REGION_GROWING_POINT_SET_LEAST_SQUARES_SPHERE_FIT_REGION_H + +#include + +#include + +#include +#include +#include +#include + +#include + +namespace CGAL { +namespace Shape_detection { +namespace Point_set { + +/*! + \ingroup PkgShapeDetectionRGOnPoints + + \brief Region type based on the quality of the least squares sphere + fit applied to 3D points. + + This class fits a sphere to chunks of points in a 3D point set and + controls the quality of this fit. If all quality conditions are + satisfied, the chunk is accepted as a valid region, otherwise + rejected. + + \tparam GeomTraits + must be a model of `Kernel`. + + \tparam InputRange + must be a model of `ConstRange` whose iterator type is `RandomAccessIterator`. + + \tparam PointMap + must be an `LvaluePropertyMap` whose key type is the value type of the input + range and value type is `Kernel::Point_3`. + + \tparam NormalMap + must be an `LvaluePropertyMap` whose key type is the value type of the input + range and value type is `Kernel::Vector_3`. + + \cgalModels `RegionType` +*/ +template +class Least_squares_sphere_fit_region +{ + +public: + + /// \name Types + /// @{ + + /// \cond SKIP_IN_MANUAL + using Traits = GeomTraits; + using Input_range = InputRange; + using Point_map = PointMap; + using Normal_map = NormalMap; + /// \endcond + + /// Number type. + typedef typename GeomTraits::FT FT; + + /// \cond SKIP_IN_MANUAL + using Point_3 = typename Traits::Point_3; + using Vector_3 = typename Traits::Vector_3; + using Plane_3 = typename Traits::Plane_3; + + using Squared_length_3 = typename Traits::Compute_squared_length_3; + using Squared_distance_3 = typename Traits::Compute_squared_distance_3; + using Scalar_product_3 = typename Traits::Compute_scalar_product_3; + + using Get_sqrt = internal::Get_sqrt; + using Sqrt = typename Get_sqrt::Sqrt; + +private: + + const Input_range& m_input_range; + + const FT m_distance_threshold; + const FT m_normal_threshold; + const std::size_t m_min_region_size; + + const Point_map m_point_map; + const Normal_map m_normal_map; + + const Squared_length_3 m_squared_length_3; + const Squared_distance_3 m_squared_distance_3; + const Scalar_product_3 m_scalar_product_3; + const Sqrt m_sqrt; + + Point_3 m_center; + FT m_radius; + +public: + + /// \endcond + + /// @} + + /// \name Initialization + /// @{ + + /*! + \brief initializes all internal data structures. + + \param input_range an instance of `InputRange` with 3D points and + corresponding 3D normal vectors + + \param distance_threshold the maximum distance from a point to a + sphere. %Default is 1. + + \param angle_threshold the maximum accepted angle in degrees + between the normal of a point and the radius of a sphere. %Default + is 25 degrees. + + \param min_region_size the minimum number of 3D points a region + must have. %Default is 3. + + \param point_map an instance of `PointMap` that maps an item from + `input_range` to `Kernel::Point_3` + + \param normal_map an instance of `NormalMap` that maps an item + from `input_range` to `Kernel::Vector_3` + + \param traits an instance of `GeomTraits`. + + \pre `input_range.size() > 0` + \pre `distance_threshold >= 0` + \pre `angle_threshold >= 0 && angle_threshold <= 90` + \pre `min_region_size > 0` + */ + Least_squares_sphere_fit_region (const InputRange& input_range, + const FT distance_threshold = FT(1), + const FT angle_threshold = FT(25), + const std::size_t min_region_size = 3, + const PointMap point_map = PointMap(), + const NormalMap normal_map = NormalMap(), + const GeomTraits traits = GeomTraits()) + : m_input_range(input_range) + , m_distance_threshold(distance_threshold) + , m_normal_threshold(static_cast( + std::cos( + CGAL::to_double( + (angle_threshold * static_cast(CGAL_PI)) / FT(180))))), + m_min_region_size(min_region_size), + m_point_map(point_map), + m_normal_map(normal_map), + m_squared_length_3(traits.compute_squared_length_3_object()), + m_squared_distance_3(traits.compute_squared_distance_3_object()), + m_scalar_product_3(traits.compute_scalar_product_3_object()), + m_sqrt(Get_sqrt::sqrt_object(traits)) + { + CGAL_precondition(input_range.size() > 0); + CGAL_precondition(distance_threshold >= FT(0)); + CGAL_precondition(angle_threshold >= FT(0) && angle_threshold <= FT(90)); + CGAL_precondition(min_region_size > 0); + } + + /// @} + + /// \name Access + /// @{ + + /*! + \brief implements `RegionType::is_part_of_region()`. + + This function controls if a point with the index `query_index` is + within the `distance_threshold` from the corresponding sphere and + if the angle between its normal and the sphere radius is within + the `angle_threshold`. If both conditions are satisfied, it + returns `true`, otherwise `false`. + + \param query_index + index of the query point + + The first and third parameters are not used in this implementation. + + \return Boolean `true` or `false` + + \pre `query_index >= 0 && query_index < input_range.size()` + */ + bool is_part_of_region (const std::size_t, + const std::size_t query_index, + const std::vector& indices) const + { + CGAL_precondition(query_index < m_input_range.size()); + + // First, we need to integrate at least 6 points so that the + // computed sphere means something + if (indices.size() < 6) + return true; + + const auto& key = *(m_input_range.begin() + query_index); + const Point_3& query_point = get(m_point_map, key); + Vector_3 normal = get(m_normal_map, key); + + FT distance_to_center = m_sqrt(m_squared_distance_3 (query_point, m_center)); + FT distance_to_sphere = CGAL::abs (distance_to_center - m_radius); + + if (distance_to_sphere > m_distance_threshold) + return false; + + normal = normal / m_sqrt (normal * normal); + + Vector_3 ray (m_center, query_point); + ray = ray / m_sqrt (ray * ray); + + if (CGAL::abs (normal * ray) < m_normal_threshold) + return false; + + return true; + } + + /*! + \brief implements `RegionType::is_valid_region()`. + + This function controls if the `region` contains at least + `min_region_size` points. + + \param region + indices of points included in the region + + \return Boolean `true` or `false` + */ + inline bool is_valid_region(const std::vector& region) const + { + return (region.size() >= m_min_region_size); + } + + /*! + \brief implements `RegionType::update()`. + + This function fits the least squares sphere to all points from the `region`. + + \param region + indices of points included in the region + + \pre `region.size() > 0` + */ + void update(const std::vector& region) + { + CGAL_precondition(region.size() > 0); + + auto unary_function + = [&](const std::size_t& idx) -> const Point_3& + { + return get (m_point_map, *(m_input_range.begin() + idx)); + }; + CGAL::Bbox_3 bbox = CGAL::bbox_3 + (boost::make_transform_iterator + (region.begin(), unary_function), + boost::make_transform_iterator + (region.end(), unary_function)); + + using Diagonalize_traits = Eigen_diagonalize_traits; + using Covariance_matrix = typename Diagonalize_traits::Covariance_matrix; + using Vector = typename Diagonalize_traits::Vector; + using Matrix = typename Diagonalize_traits::Matrix; + + // Sphere least squares fitting + Covariance_matrix A + = { FT(0), FT(0), FT(0), FT(0), FT(0), + FT(0), FT(0), FT(0), FT(0), FT(0), + FT(0), FT(0), FT(0), FT(0), FT(0) }; + + A[0] = region.size(); + for (const std::size_t& idx : region) + { + const auto& key = *(m_input_range.begin() + idx); + const Point_3& p = get(m_point_map, key); + FT x = p.x() - bbox.xmin(); + FT y = p.y() - bbox.ymin(); + FT z = p.z() - bbox.zmin(); + FT r = x*x + y*y + z*z; + A[1] += x; + A[2] += y; + A[3] += z; + A[4] += r; + A[5] += x * x; + A[6] += x * y; + A[7] += x * z; + A[8] += x * r; + A[9] += y * y; + A[10] += y * z; + A[11] += y * r; + A[12] += z * z; + A[13] += z * r; + A[14] += r * r; + } + + Vector eigenvalues = { FT(0), FT(0), FT(0), FT(0), FT(0) }; + Matrix eigenvectors = { FT(0), FT(0), FT(0), FT(0), FT(0), + FT(0), FT(0), FT(0), FT(0), FT(0), + FT(0), FT(0), FT(0), FT(0), FT(0), + FT(0), FT(0), FT(0), FT(0), FT(0), + FT(0), FT(0), FT(0), FT(0), FT(0) }; + + Diagonalize_traits::diagonalize_selfadjoint_covariance_matrix + (A, eigenvalues, eigenvectors); + + m_center = Point_3 (bbox.xmin() - FT(0.5) * (eigenvectors[1] / eigenvectors[4]), + bbox.ymin() - FT(0.5) * (eigenvectors[2] / eigenvectors[4]), + bbox.zmin() - FT(0.5) * (eigenvectors[3] / eigenvectors[4])); + + m_radius = FT(0); + for (const std::size_t& idx : region) + { + const auto& key = *(m_input_range.begin() + idx); + const Point_3& p = get(m_point_map, key); + m_radius += m_sqrt (m_squared_distance_3 (p, m_center)); + } + + m_radius /= region.size(); + } + + /// @} + +}; + +} // namespace Point_set +} // namespace Shape_detection +} // namespace CGAL + +#endif // CGAL_SHAPE_DETECTION_REGION_GROWING_POINT_SET_LEAST_SQUARES_SPHERE_FIT_REGION_H From 31c577fc4739ce18ef453719ccbd25f988e306c9 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 30 Dec 2020 14:51:15 +0100 Subject: [PATCH 2/9] Add region growing on circles for point_set_2 --- .../examples/Shape_detection/CMakeLists.txt | 2 + .../examples/Shape_detection/data/circles.ply | Bin 0 -> 53064 bytes .../region_growing_circles_on_point_set_2.cpp | 104 ++++++ .../Region_growing_on_point_set.h | 1 + .../Least_squares_circle_fit_region.h | 340 ++++++++++++++++++ .../Least_squares_sphere_fit_region.h | 4 + 6 files changed, 451 insertions(+) create mode 100644 Shape_detection/examples/Shape_detection/data/circles.ply create mode 100644 Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp create mode 100644 Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h diff --git a/Shape_detection/examples/Shape_detection/CMakeLists.txt b/Shape_detection/examples/Shape_detection/CMakeLists.txt index ec2042109ec..89925216167 100644 --- a/Shape_detection/examples/Shape_detection/CMakeLists.txt +++ b/Shape_detection/examples/Shape_detection/CMakeLists.txt @@ -23,6 +23,7 @@ if(TARGET CGAL::Eigen_support) create_single_source_cgal_program("region_growing_on_point_set_2.cpp") create_single_source_cgal_program("region_growing_on_point_set_3.cpp") create_single_source_cgal_program("region_growing_spheres_on_point_set_3.cpp") + create_single_source_cgal_program("region_growing_circles_on_point_set_2.cpp") create_single_source_cgal_program("region_growing_on_polygon_mesh.cpp") create_single_source_cgal_program("region_growing_with_custom_classes.cpp") @@ -36,6 +37,7 @@ if(TARGET CGAL::Eigen_support) region_growing_on_point_set_2 region_growing_on_point_set_3 region_growing_spheres_on_point_set_3 + region_growing_circles_on_point_set_2 region_growing_on_polygon_mesh region_growing_with_custom_classes shape_detection_basic_deprecated) diff --git a/Shape_detection/examples/Shape_detection/data/circles.ply b/Shape_detection/examples/Shape_detection/data/circles.ply new file mode 100644 index 0000000000000000000000000000000000000000..e876787906648af57071d4a3e59240753030d613 GIT binary patch literal 53064 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 E0Fb|Qp#T5? literal 0 HcmV?d00001 diff --git a/Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp b/Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp new file mode 100644 index 00000000000..324af538dce --- /dev/null +++ b/Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp @@ -0,0 +1,104 @@ +#include +#include +#include + +#include +#include + +#include +#include + +#include + +#include + +using Kernel = CGAL::Simple_cartesian; +using Point_3 = Kernel::Point_3; +using Vector_3 = Kernel::Vector_3; +using Point_2 = Kernel::Point_2; +using Vector_2 = Kernel::Vector_2; + +using Point_set_3 = CGAL::Point_set_3; +using Point_set_2 = CGAL::Point_set_3; +using Point_map = Point_set_2::Point_map; +using Normal_map = Point_set_2::Vector_map; + +namespace Shape_detection = CGAL::Shape_detection::Point_set; + +using Neighbor_query = Shape_detection::K_neighbor_query + ; +using Region_type = Shape_detection::Least_squares_circle_fit_region + ; +using Region_growing = CGAL::Shape_detection::Region_growing + ; + +int main (int argc, char** argv) +{ + std::ifstream ifile (argc > 1 ? argv[1] : "data/circle.ply"); + Point_set_3 points3; + ifile >> points3; + + std::cerr << points3.size() << " points read" << std::endl; + + // Input should have normals + assert (points.has_normal_map()); + + Point_set_2 points; + points.add_normal_map(); + for (Point_set_3::Index idx : points3) + { + const Point_3& p = points3.point(idx); + const Vector_3& n = points3.normal(idx); + points.insert (Point_2 (p.x(), p.y()), Vector_2 (n.x(), n.y())); + } + + // Default parameters for data/circles.ply + const std::size_t k = 12; + const double tolerance = 0.01; + const double max_angle = 10.; + const std::size_t min_region_size = 20; + + Neighbor_query neighbor_query(points, k, points.point_map()); + Region_type region_type(points, tolerance, max_angle, min_region_size, + points.point_map(), points.normal_map()); + Region_growing region_growing(points, neighbor_query, region_type); + + // Add maps to get colored output + Point_set_3::Property_map + red = points3.add_property_map("red", 0).first, + green = points3.add_property_map("green", 0).first, + blue = points3.add_property_map("blue", 0).first; + + CGAL::Random random; + + std::size_t nb_circles = 0; + CGAL::Real_timer timer; + timer.start(); + region_growing.detect + (boost::make_function_output_iterator + ([&](const std::vector& region) + { + // Assign a random color to each region + unsigned char r = (unsigned char)(random.get_int(64, 192)); + unsigned char g = (unsigned char)(random.get_int(64, 192)); + unsigned char b = (unsigned char)(random.get_int(64, 192)); + for (const std::size_t& idx : region) + { + red[idx] = r; + green[idx] = g; + blue[idx] = b; + } + ++ nb_circles; + })); + timer.stop(); + + std::cerr << nb_circles << " circles detected in " + << timer.time() << " seconds" << std::endl; + + // Save in colored_spheres.ply + std::ofstream out ("colored_circles.ply"); + CGAL::set_binary_mode (out); + out << points3; + + return EXIT_SUCCESS; +} diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set.h index 1c25058d84c..cdacadf1c5d 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set.h @@ -20,6 +20,7 @@ #include #include +#include #include #include diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h new file mode 100644 index 00000000000..afd2f2c64c0 --- /dev/null +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h @@ -0,0 +1,340 @@ +// Copyright (c) 2020 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Simon Giraudot +// + +#ifndef CGAL_SHAPE_DETECTION_REGION_GROWING_POINT_SET_LEAST_SQUARES_CIRCLE_FIT_REGION_H +#define CGAL_SHAPE_DETECTION_REGION_GROWING_POINT_SET_LEAST_SQUARES_CIRCLE_FIT_REGION_H + +#include + +#include + +#include +#include +#include +#include + +#include + +namespace CGAL { +namespace Shape_detection { +namespace Point_set { + +/*! + \ingroup PkgShapeDetectionRGOnPoints + + \brief Region type based on the quality of the least squares circle + fit applied to 2D points. + + This class fits a circle to chunks of points in a 2D point set and + controls the quality of this fit. If all quality conditions are + satisfied, the chunk is accepted as a valid region, otherwise + rejected. + + \tparam GeomTraits + must be a model of `Kernel`. + + \tparam InputRange + must be a model of `ConstRange` whose iterator type is `RandomAccessIterator`. + + \tparam PointMap + must be an `LvaluePropertyMap` whose key type is the value type of the input + range and value type is `Kernel::Point_3`. + + \tparam NormalMap + must be an `LvaluePropertyMap` whose key type is the value type of the input + range and value type is `Kernel::Vector_3`. + + \cgalModels `RegionType` +*/ +template +class Least_squares_circle_fit_region +{ + +public: + + /// \name Types + /// @{ + + /// \cond SKIP_IN_MANUAL + using Traits = GeomTraits; + using Input_range = InputRange; + using Point_map = PointMap; + using Normal_map = NormalMap; + /// \endcond + + /// Number type. + typedef typename GeomTraits::FT FT; + + /// \cond SKIP_IN_MANUAL + using Point_2 = typename Traits::Point_2; + using Vector_2 = typename Traits::Vector_2; + + using Squared_distance_2 = typename Traits::Compute_squared_distance_2; + + using Get_sqrt = internal::Get_sqrt; + using Sqrt = typename Get_sqrt::Sqrt; + +private: + + const Input_range& m_input_range; + + const FT m_distance_threshold; + const FT m_normal_threshold; + const std::size_t m_min_region_size; + + const Point_map m_point_map; + const Normal_map m_normal_map; + + const Squared_distance_2 m_squared_distance_2; + const Sqrt m_sqrt; + + Point_2 m_center; + FT m_radius; + +public: + + /// \endcond + + /// @} + + /// \name Initialization + /// @{ + + /*! + \brief initializes all internal data structures. + + \param input_range an instance of `InputRange` with 2D points and + corresponding 2D normal vectors + + \param distance_threshold the maximum distance from a point to a + circle. %Default is 1. + + \param angle_threshold the maximum accepted angle in degrees + between the normal of a point and the radius of a circle. %Default + is 25 degrees. + + \param min_region_size the minimum number of 2D points a region + must have. %Default is 3. + + \param point_map an instance of `PointMap` that maps an item from + `input_range` to `Kernel::Point_3` + + \param normal_map an instance of `NormalMap` that maps an item + from `input_range` to `Kernel::Vector_3` + + \param traits an instance of `GeomTraits`. + + \pre `input_range.size() > 0` + \pre `distance_threshold >= 0` + \pre `angle_threshold >= 0 && angle_threshold <= 90` + \pre `min_region_size > 0` + */ + Least_squares_circle_fit_region (const InputRange& input_range, + const FT distance_threshold = FT(1), + const FT angle_threshold = FT(25), + const std::size_t min_region_size = 3, + const PointMap point_map = PointMap(), + const NormalMap normal_map = NormalMap(), + const GeomTraits traits = GeomTraits()) + : m_input_range(input_range) + , m_distance_threshold(distance_threshold) + , m_normal_threshold(static_cast( + std::cos( + CGAL::to_double( + (angle_threshold * static_cast(CGAL_PI)) / FT(180))))), + m_min_region_size(min_region_size), + m_point_map(point_map), + m_normal_map(normal_map), + m_squared_distance_2(traits.compute_squared_distance_2_object()), + m_sqrt(Get_sqrt::sqrt_object(traits)) + { + CGAL_precondition(input_range.size() > 0); + CGAL_precondition(distance_threshold >= FT(0)); + CGAL_precondition(angle_threshold >= FT(0) && angle_threshold <= FT(90)); + CGAL_precondition(min_region_size > 0); + } + + /// @} + + /// \name Access + /// @{ + + /*! + \brief implements `RegionType::is_part_of_region()`. + + This function controls if a point with the index `query_index` is + within the `distance_threshold` from the corresponding circle and + if the angle between its normal and the circle radius is within + the `angle_threshold`. If both conditions are satisfied, it + returns `true`, otherwise `false`. + + \param query_index + index of the query point + + The first and third parameters are not used in this implementation. + + \return Boolean `true` or `false` + + \pre `query_index >= 0 && query_index < input_range.size()` + */ + bool is_part_of_region (const std::size_t, + const std::size_t query_index, + const std::vector& indices) const + { + CGAL_precondition(query_index < m_input_range.size()); + + // First, we need to integrate at least 6 points so that the + // computed circle means something + if (indices.size() < 6) + return true; + + const auto& key = *(m_input_range.begin() + query_index); + const Point_2& query_point = get(m_point_map, key); + Vector_2 normal = get(m_normal_map, key); + + FT distance_to_center = m_sqrt(m_squared_distance_2 (query_point, m_center)); + FT distance_to_circle = CGAL::abs (distance_to_center - m_radius); + + if (distance_to_circle > m_distance_threshold) + return false; + + normal = normal / m_sqrt (normal * normal); + + Vector_2 ray (m_center, query_point); + ray = ray / m_sqrt (ray * ray); + + if (CGAL::abs (normal * ray) < m_normal_threshold) + return false; + + return true; + } + + /*! + \brief implements `RegionType::is_valid_region()`. + + This function controls if the `region` contains at least + `min_region_size` points. + + \param region + indices of points included in the region + + \return Boolean `true` or `false` + */ + inline bool is_valid_region(const std::vector& region) const + { + return (region.size() >= m_min_region_size); + } + + /*! + \brief implements `RegionType::update()`. + + This function fits the least squares circle to all points from the `region`. + + \param region + indices of points included in the region + + \pre `region.size() > 0` + */ + void update(const std::vector& region) + { + CGAL_precondition(region.size() > 0); + + auto unary_function + = [&](const std::size_t& idx) -> const Point_2& + { + return get (m_point_map, *(m_input_range.begin() + idx)); + }; + + // Use bbox to compute diagonalization with smaller coordinates to + // avoid loss of precision when inverting large coordinates + CGAL::Bbox_2 bbox = CGAL::bbox_2 + (boost::make_transform_iterator + (region.begin(), unary_function), + boost::make_transform_iterator + (region.end(), unary_function)); + + using Diagonalize_traits = Eigen_diagonalize_traits; + using Covariance_matrix = typename Diagonalize_traits::Covariance_matrix; + using Vector = typename Diagonalize_traits::Vector; + using Matrix = typename Diagonalize_traits::Matrix; + + // Circle least squares fitting, + // Circle of center (a,b) and radius R + // Ri = sqrt((xi - a)^2 + (yi - b)^2) + // Minimize Sum(Ri^2 - R^2)^2 + // -> Minimize Sum(xi^2 + yi^2 − 2 a*xi − 2 b*yi + a^2 + b^2 − R^2)^2 + // let B=-2a ; C=-2b; D= a^2 + b^2 - R^2 + // let ri = x^2 + y^2 + // -> Minimize Sum(D + B*xi + C*yi + ri)^2 + // -> Minimize Sum(1 + B/D*xi + C/D*yi + ri/D)^2 + // -> system of linear equations + // -> diagonalize matrix + // -> center coordinates = -0.5 * eigenvector(1) / eigenvector(3) ; -0.5 * eigenvector(2) / eigenvector(3) + Covariance_matrix A + = { FT(0), FT(0), FT(0), FT(0), FT(0), + FT(0), FT(0), FT(0), FT(0), FT(0) }; + + A[0] = region.size(); + for (const std::size_t& idx : region) + { + const auto& key = *(m_input_range.begin() + idx); + const Point_2& p = get(m_point_map, key); + FT x = p.x() - bbox.xmin(); + FT y = p.y() - bbox.ymin(); + FT r = x*x + y*y; + A[1] += x; + A[2] += y; + A[3] += r; + A[4] += x * x; + A[5] += x * y; + A[6] += x * r; + A[7] += y * y; + A[8] += y * r; + A[9] += r * r; + } + + Vector eigenvalues = { FT(0), FT(0), FT(0), FT(0) }; + Matrix eigenvectors = { FT(0), FT(0), FT(0), FT(0), + FT(0), FT(0), FT(0), FT(0), + FT(0), FT(0), FT(0), FT(0), + FT(0), FT(0), FT(0), FT(0) }; + + Diagonalize_traits::diagonalize_selfadjoint_covariance_matrix + (A, eigenvalues, eigenvectors); + + m_center = Point_2 (bbox.xmin() - FT(0.5) * (eigenvectors[1] / eigenvectors[3]), + bbox.ymin() - FT(0.5) * (eigenvectors[2] / eigenvectors[3])); + + m_radius = FT(0); + for (const std::size_t& idx : region) + { + const auto& key = *(m_input_range.begin() + idx); + const Point_2& p = get(m_point_map, key); + m_radius += m_sqrt (m_squared_distance_2 (p, m_center)); + } + + m_radius /= region.size(); + } + + /// @} + +}; + +} // namespace Point_set +} // namespace Shape_detection +} // namespace CGAL + +#endif // CGAL_SHAPE_DETECTION_REGION_GROWING_POINT_SET_LEAST_SQUARES_CIRCLE_FIT_REGION_H diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h index 94a318e46be..a142d34b789 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h @@ -264,6 +264,9 @@ public: { return get (m_point_map, *(m_input_range.begin() + idx)); }; + + // Use bbox to compute diagonalization with smaller coordinates to + // avoid loss of precision when inverting large coordinates CGAL::Bbox_3 bbox = CGAL::bbox_3 (boost::make_transform_iterator (region.begin(), unary_function), @@ -276,6 +279,7 @@ public: using Matrix = typename Diagonalize_traits::Matrix; // Sphere least squares fitting + // (see Least_square_circle_fit_region for details about computation) Covariance_matrix A = { FT(0), FT(0), FT(0), FT(0), FT(0), FT(0), FT(0), FT(0), FT(0), FT(0), From 5e0487e455c4cc0054739b6b385347369b1f2ab1 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Thu, 31 Dec 2020 13:26:57 +0100 Subject: [PATCH 3/9] Add region growing on cylinders for point_set_3 --- .../examples/Shape_detection/CMakeLists.txt | 2 + ...egion_growing_cylinders_on_point_set_3.cpp | 92 +++++ .../Region_growing_on_point_set.h | 1 + .../Least_squares_circle_fit_region.h | 5 + .../Least_squares_cylinder_fit_region.h | 341 ++++++++++++++++++ 5 files changed, 441 insertions(+) create mode 100644 Shape_detection/examples/Shape_detection/region_growing_cylinders_on_point_set_3.cpp create mode 100644 Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h diff --git a/Shape_detection/examples/Shape_detection/CMakeLists.txt b/Shape_detection/examples/Shape_detection/CMakeLists.txt index 89925216167..7e2e577fa3b 100644 --- a/Shape_detection/examples/Shape_detection/CMakeLists.txt +++ b/Shape_detection/examples/Shape_detection/CMakeLists.txt @@ -22,6 +22,7 @@ if(TARGET CGAL::Eigen_support) create_single_source_cgal_program("region_growing_on_point_set_2.cpp") create_single_source_cgal_program("region_growing_on_point_set_3.cpp") + create_single_source_cgal_program("region_growing_cylinders_on_point_set_3.cpp") create_single_source_cgal_program("region_growing_spheres_on_point_set_3.cpp") create_single_source_cgal_program("region_growing_circles_on_point_set_2.cpp") create_single_source_cgal_program("region_growing_on_polygon_mesh.cpp") @@ -36,6 +37,7 @@ if(TARGET CGAL::Eigen_support) efficient_RANSAC_and_plane_regularization region_growing_on_point_set_2 region_growing_on_point_set_3 + region_growing_cylinders_on_point_set_3 region_growing_spheres_on_point_set_3 region_growing_circles_on_point_set_2 region_growing_on_polygon_mesh diff --git a/Shape_detection/examples/Shape_detection/region_growing_cylinders_on_point_set_3.cpp b/Shape_detection/examples/Shape_detection/region_growing_cylinders_on_point_set_3.cpp new file mode 100644 index 00000000000..efcfa320a2e --- /dev/null +++ b/Shape_detection/examples/Shape_detection/region_growing_cylinders_on_point_set_3.cpp @@ -0,0 +1,92 @@ +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include + + +using Kernel = CGAL::Simple_cartesian; +using Point_3 = Kernel::Point_3; +using Vector_3 = Kernel::Vector_3; + +using Point_set = CGAL::Point_set_3; +using Point_map = typename Point_set::Point_map; +using Normal_map = typename Point_set::Vector_map; + +namespace Shape_detection = CGAL::Shape_detection::Point_set; + +using Neighbor_query = Shape_detection::K_neighbor_query + ; +using Region_type = Shape_detection::Least_squares_cylinder_fit_region + ; +using Region_growing = CGAL::Shape_detection::Region_growing + ; + +int main (int argc, char** argv) +{ + std::ifstream ifile (argc > 1 ? argv[1] : "data/cube.pwn"); + Point_set points; + ifile >> points; + + std::cerr << points.size() << " points read" << std::endl; + + // Input should have normals + assert (points.has_normal_map()); + + // Default parameters for data/cube.pwn + const std::size_t k = 24; + const double tolerance = 0.05; + const double max_angle = 5.; + const std::size_t min_region_size = 200; + + Neighbor_query neighbor_query(points, k, points.point_map()); + Region_type region_type(points, tolerance, max_angle, min_region_size, + points.point_map(), points.normal_map()); + Region_growing region_growing(points, neighbor_query, region_type); + + // Add maps to get colored output + Point_set::Property_map + red = points.add_property_map("red", 0).first, + green = points.add_property_map("green", 0).first, + blue = points.add_property_map("blue", 0).first; + + CGAL::Random random; + + std::size_t nb_cylinders = 0; + CGAL::Real_timer timer; + timer.start(); + region_growing.detect + (boost::make_function_output_iterator + ([&](const std::vector& region) + { + // Assign a random color to each region + unsigned char r = (unsigned char)(random.get_int(64, 192)); + unsigned char g = (unsigned char)(random.get_int(64, 192)); + unsigned char b = (unsigned char)(random.get_int(64, 192)); + for (const std::size_t& idx : region) + { + red[idx] = r; + green[idx] = g; + blue[idx] = b; + } + ++ nb_cylinders; + })); + timer.stop(); + + std::cerr << nb_cylinders << " cylinders detected in " + << timer.time() << " seconds" << std::endl; + + // Save in colored_cylinders.ply + std::ofstream out ("colored_cylinders.ply"); + CGAL::set_binary_mode (out); + out << points; + + return EXIT_SUCCESS; +} diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set.h index cdacadf1c5d..918ca0a7f69 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set.h @@ -23,6 +23,7 @@ #include #include #include +#include #include #include diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h index afd2f2c64c0..2ec16905f52 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h @@ -282,6 +282,11 @@ public: // -> Minimize Sum(1 + B/D*xi + C/D*yi + ri/D)^2 // -> system of linear equations // -> diagonalize matrix + // NB x y r + // xx xy xr + // yy yr + // rr + // // -> center coordinates = -0.5 * eigenvector(1) / eigenvector(3) ; -0.5 * eigenvector(2) / eigenvector(3) Covariance_matrix A = { FT(0), FT(0), FT(0), FT(0), FT(0), diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h new file mode 100644 index 00000000000..056d376ee3b --- /dev/null +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h @@ -0,0 +1,341 @@ +// Copyright (c) 2020 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Simon Giraudot +// + +#ifndef CGAL_SHAPE_DETECTION_REGION_GROWING_POINT_SET_LEAST_SQUARES_CYLINDER_FIT_REGION_H +#define CGAL_SHAPE_DETECTION_REGION_GROWING_POINT_SET_LEAST_SQUARES_CYLINDER_FIT_REGION_H + +#include + +#include + +#include +#include +#include +#include + +#include + +namespace CGAL { +namespace Shape_detection { +namespace Point_set { + +/*! + \ingroup PkgShapeDetectionRGOnPoints + + \brief Region type based on the quality of the least squares cylinder + fit applied to 3D points. + + This class fits a cylinder to chunks of points in a 3D point set and + controls the quality of this fit. If all quality conditions are + satisfied, the chunk is accepted as a valid region, otherwise + rejected. + + \tparam GeomTraits + must be a model of `Kernel`. + + \tparam InputRange + must be a model of `ConstRange` whose iterator type is `RandomAccessIterator`. + + \tparam PointMap + must be an `LvaluePropertyMap` whose key type is the value type of the input + range and value type is `Kernel::Point_3`. + + \tparam NormalMap + must be an `LvaluePropertyMap` whose key type is the value type of the input + range and value type is `Kernel::Vector_3`. + + \cgalModels `RegionType` +*/ +template +class Least_squares_cylinder_fit_region +{ + +public: + + /// \name Types + /// @{ + + /// \cond SKIP_IN_MANUAL + using Traits = GeomTraits; + using Input_range = InputRange; + using Point_map = PointMap; + using Normal_map = NormalMap; + /// \endcond + + /// Number type. + typedef typename GeomTraits::FT FT; + + /// \cond SKIP_IN_MANUAL + using Point_3 = typename Traits::Point_3; + using Vector_3 = typename Traits::Vector_3; + using Line_3 = typename Traits::Line_3; + + using Squared_distance_3 = typename Traits::Compute_squared_distance_3; + + using Get_sqrt = internal::Get_sqrt; + using Sqrt = typename Get_sqrt::Sqrt; + +private: + + const Input_range& m_input_range; + + const FT m_distance_threshold; + const FT m_normal_threshold; + const std::size_t m_min_region_size; + + const Point_map m_point_map; + const Normal_map m_normal_map; + + const Squared_distance_3 m_squared_distance_3; + const Sqrt m_sqrt; + + Line_3 m_axis; + FT m_radius; + +public: + + /// \endcond + + /// @} + + /// \name Initialization + /// @{ + + /*! + \brief initializes all internal data structures. + + \param input_range an instance of `InputRange` with 3D points and + corresponding 3D normal vectors + + \param distance_threshold the maximum distance from a point to a + cylinder. %Default is 1. + + \param angle_threshold the maximum accepted angle in degrees + between the normal of a point and the radius of a cylinder. %Default + is 25 degrees. + + \param min_region_size the minimum number of 3D points a region + must have. %Default is 3. + + \param point_map an instance of `PointMap` that maps an item from + `input_range` to `Kernel::Point_3` + + \param normal_map an instance of `NormalMap` that maps an item + from `input_range` to `Kernel::Vector_3` + + \param traits an instance of `GeomTraits`. + + \pre `input_range.size() > 0` + \pre `distance_threshold >= 0` + \pre `angle_threshold >= 0 && angle_threshold <= 90` + \pre `min_region_size > 0` + */ + Least_squares_cylinder_fit_region (const InputRange& input_range, + const FT distance_threshold = FT(1), + const FT angle_threshold = FT(25), + const std::size_t min_region_size = 3, + const PointMap point_map = PointMap(), + const NormalMap normal_map = NormalMap(), + const GeomTraits traits = GeomTraits()) + : m_input_range(input_range) + , m_distance_threshold(distance_threshold) + , m_normal_threshold(static_cast( + std::cos( + CGAL::to_double( + (angle_threshold * static_cast(CGAL_PI)) / FT(180))))), + m_min_region_size(min_region_size), + m_point_map(point_map), + m_normal_map(normal_map), + m_squared_distance_3(traits.compute_squared_distance_3_object()), + m_sqrt(Get_sqrt::sqrt_object(traits)), + m_radius(std::numeric_limits::quiet_NaN()) + { + CGAL_precondition(input_range.size() > 0); + CGAL_precondition(distance_threshold >= FT(0)); + CGAL_precondition(angle_threshold >= FT(0) && angle_threshold <= FT(90)); + CGAL_precondition(min_region_size > 0); + } + + /// @} + + /// \name Access + /// @{ + + /*! + \brief implements `RegionType::is_part_of_region()`. + + This function controls if a point with the index `query_index` is + within the `distance_threshold` from the corresponding cylinder and + if the angle between its normal and the cylinder radius is within + the `angle_threshold`. If both conditions are satisfied, it + returns `true`, otherwise `false`. + + \param query_index + index of the query point + + The first and third parameters are not used in this implementation. + + \return Boolean `true` or `false` + + \pre `query_index >= 0 && query_index < input_range.size()` + */ + bool is_part_of_region (const std::size_t, + const std::size_t query_index, + const std::vector& indices) const + { + CGAL_precondition(query_index < m_input_range.size()); + + // First, we need to integrate at least 6 points so that the + // computed cylinder means something + if (indices.size() < 6) + return true; + + if (std::isnan(m_radius)) + return false; + + const auto& key = *(m_input_range.begin() + query_index); + const Point_3& query_point = get(m_point_map, key); + Vector_3 normal = get(m_normal_map, key); + + FT distance_to_center = m_sqrt(m_squared_distance_3 (query_point, m_axis)); + FT distance_to_cylinder = CGAL::abs (distance_to_center - m_radius); + + if (distance_to_cylinder > m_distance_threshold) + return false; + + normal = normal / m_sqrt (normal * normal); + + Point_3 proj = m_axis.projection(query_point); + Vector_3 ray (proj, query_point); + ray = ray / m_sqrt (ray * ray); + + if (CGAL::abs (normal * ray) < m_normal_threshold) + return false; + + return true; + } + + /*! + \brief implements `RegionType::is_valid_region()`. + + This function controls if the `region` contains at least + `min_region_size` points. + + \param region + indices of points included in the region + + \return Boolean `true` or `false` + */ + inline bool is_valid_region(const std::vector& region) const + { + return (region.size() >= m_min_region_size); + } + + /*! + \brief implements `RegionType::update()`. + + This function fits the least squares cylinder to all points from the `region`. + + \param region + indices of points included in the region + + \pre `region.size() > 0` + */ + void update(const std::vector& region) + { + CGAL_precondition(region.size() > 0); + + Vector_3 mean_axis = CGAL::NULL_VECTOR; + std::size_t nb = 0; + // Shuffle to avoid always picking 2 close points + std::vector& aregion + = const_cast&>(region); + cpp98::random_shuffle (aregion.begin(), aregion.end()); + + const Point_3& ref = get(m_point_map, *(m_input_range.begin() + region.front())); + + m_radius = FT(0); + Point_3 point_on_axis = CGAL::ORIGIN; + for (std::size_t i = 0; i < aregion.size() - 1; ++ i) + { + Vector_3 v0 = get(m_normal_map, *(m_input_range.begin() + aregion[i])); + v0 = v0 / CGAL::sqrt(v0*v0); + Vector_3 v1 = get(m_normal_map, *(m_input_range.begin() + aregion[i+1])); + v1 = v1 / CGAL::sqrt(v1*v1); + Vector_3 axis = CGAL::cross_product (v0, v1); + if (CGAL::sqrt(axis.squared_length()) < (FT)(0.01)) + continue; + axis = axis / CGAL::sqrt(axis * axis); + + const Point_3& p0 = get(m_point_map, *(m_input_range.begin() + aregion[i])); + const Point_3& p1 = get(m_point_map, *(m_input_range.begin() + aregion[i+1])); + + Vector_3 xdir = v0 - axis * (v0 * axis); + xdir = xdir / CGAL::sqrt (xdir * xdir); + + Vector_3 ydir = CGAL::cross_product (axis, xdir); + ydir = ydir / CGAL::sqrt (ydir * ydir); + + FT v1x = v1 * ydir; + FT v1y = -v1 * xdir; + + Vector_3 d (p0, p1); + + FT ox = xdir * d; + FT oy = ydir * d; + FT ldist = v1x * ox + v1y * oy; + + FT radius = ldist / v1x; + + Point_3 point = p0 + xdir * radius; + Line_3 line (point, axis); + point = line.projection(ref); + + point_on_axis = CGAL::barycenter (point_on_axis, nb, point, 1); + + m_radius += CGAL::abs(radius); + + if (nb != 0 && axis * mean_axis < 0) + axis = -axis; + + mean_axis = mean_axis + axis; + ++ nb; + } + + if (nb == 0) + return; + + mean_axis = mean_axis / CGAL::sqrt(mean_axis * mean_axis); + m_axis = Line_3 (point_on_axis, mean_axis); + m_radius /= nb; + + m_radius = FT(0); + for (std::size_t i = 0; i < aregion.size(); ++ i) + { + const Point_3& p0 = get(m_point_map, *(m_input_range.begin() + aregion[i])); + m_radius += m_sqrt(m_squared_distance_3(p0, m_axis)); + } + m_radius /= aregion.size(); + } + /// @} + +}; + +} // namespace Point_set +} // namespace Shape_detection +} // namespace CGAL + +#endif // CGAL_SHAPE_DETECTION_REGION_GROWING_POINT_SET_LEAST_SQUARES_CYLINDER_FIT_REGION_H From 8a2029e233b9b97ab6baeb9de9921a58747fc5bc Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Mon, 4 Jan 2021 15:20:10 +0100 Subject: [PATCH 4/9] Add possibility to restrict radius of sphere/circle/cylinder --- .../region_growing_circles_on_point_set_2.cpp | 5 ++ ...egion_growing_cylinders_on_point_set_3.cpp | 5 ++ .../region_growing_spheres_on_point_set_3.cpp | 5 ++ .../Least_squares_circle_fit_region.h | 37 +++++++++----- .../Least_squares_cylinder_fit_region.h | 49 ++++++++++++------- .../Least_squares_sphere_fit_region.h | 31 ++++++++---- 6 files changed, 92 insertions(+), 40 deletions(-) diff --git a/Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp b/Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp index 324af538dce..fa1a5d18369 100644 --- a/Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp +++ b/Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp @@ -58,8 +58,13 @@ int main (int argc, char** argv) const double max_angle = 10.; const std::size_t min_region_size = 20; + // No constraint on radius + const double min_radius = 0.; + const double max_radius = std::numeric_limits::infinity(); + Neighbor_query neighbor_query(points, k, points.point_map()); Region_type region_type(points, tolerance, max_angle, min_region_size, + min_radius, max_radius, points.point_map(), points.normal_map()); Region_growing region_growing(points, neighbor_query, region_type); diff --git a/Shape_detection/examples/Shape_detection/region_growing_cylinders_on_point_set_3.cpp b/Shape_detection/examples/Shape_detection/region_growing_cylinders_on_point_set_3.cpp index efcfa320a2e..b82b7e1cd8e 100644 --- a/Shape_detection/examples/Shape_detection/region_growing_cylinders_on_point_set_3.cpp +++ b/Shape_detection/examples/Shape_detection/region_growing_cylinders_on_point_set_3.cpp @@ -46,8 +46,13 @@ int main (int argc, char** argv) const double max_angle = 5.; const std::size_t min_region_size = 200; + // No constraint on radius + const double min_radius = 0.; + const double max_radius = std::numeric_limits::infinity(); + Neighbor_query neighbor_query(points, k, points.point_map()); Region_type region_type(points, tolerance, max_angle, min_region_size, + min_radius, max_radius, points.point_map(), points.normal_map()); Region_growing region_growing(points, neighbor_query, region_type); diff --git a/Shape_detection/examples/Shape_detection/region_growing_spheres_on_point_set_3.cpp b/Shape_detection/examples/Shape_detection/region_growing_spheres_on_point_set_3.cpp index be8ab6e8e61..f7dc277e2d4 100644 --- a/Shape_detection/examples/Shape_detection/region_growing_spheres_on_point_set_3.cpp +++ b/Shape_detection/examples/Shape_detection/region_growing_spheres_on_point_set_3.cpp @@ -46,8 +46,13 @@ int main (int argc, char** argv) const double max_angle = 10.; const std::size_t min_region_size = 50; + // No constraint on radius + const double min_radius = 0.; + const double max_radius = std::numeric_limits::infinity(); + Neighbor_query neighbor_query(points, k, points.point_map()); Region_type region_type(points, tolerance, max_angle, min_region_size, + min_radius, max_radius, points.point_map(), points.normal_map()); Region_growing region_growing(points, neighbor_query, region_type); diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h index 2ec16905f52..6393c702d9e 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h @@ -94,6 +94,8 @@ private: const FT m_distance_threshold; const FT m_normal_threshold; const std::size_t m_min_region_size; + const FT m_min_radius; + const FT m_max_radius; const Point_map m_point_map; const Normal_map m_normal_map; @@ -146,25 +148,31 @@ public: const FT distance_threshold = FT(1), const FT angle_threshold = FT(25), const std::size_t min_region_size = 3, + const FT minimum_radius = FT(0), + const FT maximum_radius = std::numeric_limits::infinity(), const PointMap point_map = PointMap(), const NormalMap normal_map = NormalMap(), const GeomTraits traits = GeomTraits()) - : m_input_range(input_range) - , m_distance_threshold(distance_threshold) - , m_normal_threshold(static_cast( - std::cos( - CGAL::to_double( - (angle_threshold * static_cast(CGAL_PI)) / FT(180))))), - m_min_region_size(min_region_size), - m_point_map(point_map), - m_normal_map(normal_map), - m_squared_distance_2(traits.compute_squared_distance_2_object()), - m_sqrt(Get_sqrt::sqrt_object(traits)) + : m_input_range(input_range) + , m_distance_threshold(distance_threshold) + , m_normal_threshold(static_cast( + std::cos( + CGAL::to_double( + (angle_threshold * static_cast(CGAL_PI)) / FT(180))))) + , m_min_region_size(min_region_size) + , m_min_radius (minimum_radius) + , m_max_radius (maximum_radius) + , m_point_map(point_map) + , m_normal_map(normal_map) + , m_squared_distance_2(traits.compute_squared_distance_2_object()) + , m_sqrt(Get_sqrt::sqrt_object(traits)) { CGAL_precondition(input_range.size() > 0); CGAL_precondition(distance_threshold >= FT(0)); CGAL_precondition(angle_threshold >= FT(0) && angle_threshold <= FT(90)); CGAL_precondition(min_region_size > 0); + CGAL_precondition(minimum_radius >= 0); + CGAL_precondition(maximum_radius > minimum_radius); } /// @} @@ -201,6 +209,10 @@ public: if (indices.size() < 6) return true; + // If radius is out of bound, nothing fits, early ending + if (m_radius < m_min_radius || m_radius > m_max_radius) + return false; + const auto& key = *(m_input_range.begin() + query_index); const Point_2& query_point = get(m_point_map, key); Vector_2 normal = get(m_normal_map, key); @@ -235,7 +247,8 @@ public: */ inline bool is_valid_region(const std::vector& region) const { - return (region.size() >= m_min_region_size); + return ((m_min_radius <= m_radius && m_radius <= m_max_radius) + && (region.size() >= m_min_region_size)); } /*! diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h index 056d376ee3b..a554d93bc01 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h @@ -95,6 +95,8 @@ private: const FT m_distance_threshold; const FT m_normal_threshold; const std::size_t m_min_region_size; + const FT m_min_radius; + const FT m_max_radius; const Point_map m_point_map; const Normal_map m_normal_map; @@ -144,24 +146,28 @@ public: \pre `min_region_size > 0` */ Least_squares_cylinder_fit_region (const InputRange& input_range, - const FT distance_threshold = FT(1), - const FT angle_threshold = FT(25), - const std::size_t min_region_size = 3, - const PointMap point_map = PointMap(), - const NormalMap normal_map = NormalMap(), - const GeomTraits traits = GeomTraits()) - : m_input_range(input_range) - , m_distance_threshold(distance_threshold) - , m_normal_threshold(static_cast( - std::cos( - CGAL::to_double( - (angle_threshold * static_cast(CGAL_PI)) / FT(180))))), - m_min_region_size(min_region_size), - m_point_map(point_map), - m_normal_map(normal_map), - m_squared_distance_3(traits.compute_squared_distance_3_object()), - m_sqrt(Get_sqrt::sqrt_object(traits)), - m_radius(std::numeric_limits::quiet_NaN()) + const FT distance_threshold = FT(1), + const FT angle_threshold = FT(25), + const std::size_t min_region_size = 3, + const FT minimum_radius = FT(0), + const FT maximum_radius = std::numeric_limits::infinity(), + const PointMap point_map = PointMap(), + const NormalMap normal_map = NormalMap(), + const GeomTraits traits = GeomTraits()) + : m_input_range(input_range) + , m_distance_threshold(distance_threshold) + , m_normal_threshold(static_cast( + std::cos( + CGAL::to_double( + (angle_threshold * static_cast(CGAL_PI)) / FT(180))))) + , m_min_region_size(min_region_size) + , m_min_radius (minimum_radius) + , m_max_radius (maximum_radius) + , m_point_map(point_map) + , m_normal_map(normal_map) + , m_squared_distance_3(traits.compute_squared_distance_3_object()) + , m_sqrt(Get_sqrt::sqrt_object(traits)) + , m_radius(std::numeric_limits::quiet_NaN()) { CGAL_precondition(input_range.size() > 0); CGAL_precondition(distance_threshold >= FT(0)); @@ -206,6 +212,10 @@ public: if (std::isnan(m_radius)) return false; + // If radius is out of bound, nothing fits, early ending + if (m_radius < m_min_radius || m_radius > m_max_radius) + return false; + const auto& key = *(m_input_range.begin() + query_index); const Point_3& query_point = get(m_point_map, key); Vector_3 normal = get(m_normal_map, key); @@ -241,7 +251,8 @@ public: */ inline bool is_valid_region(const std::vector& region) const { - return (region.size() >= m_min_region_size); + return ((m_min_radius <= m_radius && m_radius <= m_max_radius) + && (region.size() >= m_min_region_size)); } /*! diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h index a142d34b789..781789e305c 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h @@ -97,6 +97,8 @@ private: const FT m_distance_threshold; const FT m_normal_threshold; const std::size_t m_min_region_size; + const FT m_min_radius; + const FT m_max_radius; const Point_map m_point_map; const Normal_map m_normal_map; @@ -151,6 +153,8 @@ public: const FT distance_threshold = FT(1), const FT angle_threshold = FT(25), const std::size_t min_region_size = 3, + const FT minimum_radius = FT(0), + const FT maximum_radius = std::numeric_limits::infinity(), const PointMap point_map = PointMap(), const NormalMap normal_map = NormalMap(), const GeomTraits traits = GeomTraits()) @@ -159,19 +163,23 @@ public: , m_normal_threshold(static_cast( std::cos( CGAL::to_double( - (angle_threshold * static_cast(CGAL_PI)) / FT(180))))), - m_min_region_size(min_region_size), - m_point_map(point_map), - m_normal_map(normal_map), - m_squared_length_3(traits.compute_squared_length_3_object()), - m_squared_distance_3(traits.compute_squared_distance_3_object()), - m_scalar_product_3(traits.compute_scalar_product_3_object()), - m_sqrt(Get_sqrt::sqrt_object(traits)) + (angle_threshold * static_cast(CGAL_PI)) / FT(180))))) + , m_min_region_size(min_region_size) + , m_min_radius (minimum_radius) + , m_max_radius (maximum_radius) + , m_point_map(point_map) + , m_normal_map(normal_map) + , m_squared_length_3(traits.compute_squared_length_3_object()) + , m_squared_distance_3(traits.compute_squared_distance_3_object()) + , m_scalar_product_3(traits.compute_scalar_product_3_object()) + , m_sqrt(Get_sqrt::sqrt_object(traits)) { CGAL_precondition(input_range.size() > 0); CGAL_precondition(distance_threshold >= FT(0)); CGAL_precondition(angle_threshold >= FT(0) && angle_threshold <= FT(90)); CGAL_precondition(min_region_size > 0); + CGAL_precondition(minimum_radius >= 0); + CGAL_precondition(maximum_radius > minimum_radius); } /// @} @@ -208,6 +216,10 @@ public: if (indices.size() < 6) return true; + // If radius is out of bound, nothing fits, early ending + if (m_radius < m_min_radius || m_radius > m_max_radius) + return false; + const auto& key = *(m_input_range.begin() + query_index); const Point_3& query_point = get(m_point_map, key); Vector_3 normal = get(m_normal_map, key); @@ -242,7 +254,8 @@ public: */ inline bool is_valid_region(const std::vector& region) const { - return (region.size() >= m_min_region_size); + return ((m_min_radius <= m_radius && m_radius <= m_max_radius) + && (region.size() >= m_min_region_size)); } /*! From 74d01916e3b5e6ad9494ceca6b05313f8e10734e Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Mon, 4 Jan 2021 15:23:41 +0100 Subject: [PATCH 5/9] Document missing parts --- .../Least_squares_circle_fit_region.h | 13 ++++++++++-- .../Least_squares_cylinder_fit_region.h | 21 +++++++++++++------ .../Least_squares_sphere_fit_region.h | 13 ++++++++++-- 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h index 6393c702d9e..6e22e1133b9 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h @@ -131,6 +131,14 @@ public: \param min_region_size the minimum number of 2D points a region must have. %Default is 3. + \param minimum_radius is the radius below which an estimated + circle is considered as invalid and discarded. %Default is 0 (no + limit). + + \param maximum_radius is the radius above which an estimated + circle is considered as invalid and discarded. %Default is + infinity (no limit). + \param point_map an instance of `PointMap` that maps an item from `input_range` to `Kernel::Point_3` @@ -237,8 +245,9 @@ public: /*! \brief implements `RegionType::is_valid_region()`. - This function controls if the `region` contains at least - `min_region_size` points. + This function controls if the estimated radius is between + `minimum_radius` and `maximum_radius` and if the `region` contains + at least `min_region_size` points. \param region indices of points included in the region diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h index a554d93bc01..70f5bc78bdf 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h @@ -35,10 +35,10 @@ namespace Point_set { \brief Region type based on the quality of the least squares cylinder fit applied to 3D points. - This class fits a cylinder to chunks of points in a 3D point set and - controls the quality of this fit. If all quality conditions are - satisfied, the chunk is accepted as a valid region, otherwise - rejected. + This class fits an infinite cylinder to chunks of points in a 3D + point set and controls the quality of this fit. If all quality + conditions are satisfied, the chunk is accepted as a valid region, + otherwise rejected. \tparam GeomTraits must be a model of `Kernel`. @@ -132,6 +132,14 @@ public: \param min_region_size the minimum number of 3D points a region must have. %Default is 3. + \param minimum_radius is the radius below which an estimated + cylinder is considered as invalid and discarded. %Default is 0 (no + limit). + + \param maximum_radius is the radius above which an estimated + cylinder is considered as invalid and discarded. %Default is + infinity (no limit). + \param point_map an instance of `PointMap` that maps an item from `input_range` to `Kernel::Point_3` @@ -241,8 +249,9 @@ public: /*! \brief implements `RegionType::is_valid_region()`. - This function controls if the `region` contains at least - `min_region_size` points. + This function controls if the estimated radius is between + `minimum_radius` and `maximum_radius` and if the `region` contains + at least `min_region_size` points. \param region indices of points included in the region diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h index 781789e305c..a86b4c48dbd 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h @@ -136,6 +136,14 @@ public: \param min_region_size the minimum number of 3D points a region must have. %Default is 3. + \param minimum_radius is the radius below which an estimated + sphere is considered as invalid and discarded. %Default is 0 (no + limit). + + \param maximum_radius is the radius above which an estimated + sphere is considered as invalid and discarded. %Default is + infinity (no limit). + \param point_map an instance of `PointMap` that maps an item from `input_range` to `Kernel::Point_3` @@ -244,8 +252,9 @@ public: /*! \brief implements `RegionType::is_valid_region()`. - This function controls if the `region` contains at least - `min_region_size` points. + This function controls if the estimated radius is between + `minimum_radius` and `maximum_radius` and if the `region` contains + at least `min_region_size` points. \param region indices of points included in the region From 661fe3505eed0f6b983ca1db8fa3d43223d35ecb Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Tue, 5 Jan 2021 10:35:05 +0100 Subject: [PATCH 6/9] User + ref manual for new region growing classes --- .../Shape_detection/PackageDescription.txt | 3 ++ .../doc/Shape_detection/Shape_detection.txt | 30 +++++++++++++++++-- .../doc/Shape_detection/examples.txt | 3 ++ .../Least_squares_circle_fit_region.h | 4 ++- .../Least_squares_cylinder_fit_region.h | 4 ++- .../Least_squares_sphere_fit_region.h | 7 +++-- 6 files changed, 43 insertions(+), 8 deletions(-) diff --git a/Shape_detection/doc/Shape_detection/PackageDescription.txt b/Shape_detection/doc/Shape_detection/PackageDescription.txt index 52001fe612e..de23940f38a 100644 --- a/Shape_detection/doc/Shape_detection/PackageDescription.txt +++ b/Shape_detection/doc/Shape_detection/PackageDescription.txt @@ -117,7 +117,10 @@ on a polygon mesh.} - `CGAL::Shape_detection::Point_set::K_neighbor_query` - `CGAL::Shape_detection::Point_set::Sphere_neighbor_query` - `CGAL::Shape_detection::Point_set::Least_squares_line_fit_region` +- `CGAL::Shape_detection::Point_set::Least_squares_circle_fit_region` - `CGAL::Shape_detection::Point_set::Least_squares_plane_fit_region` +- `CGAL::Shape_detection::Point_set::Least_squares_sphere_fit_region` +- `CGAL::Shape_detection::Point_set::Least_squares_cylinder_fit_region` - `CGAL::Shape_detection::Point_set::Least_squares_line_fit_sorting` - `CGAL::Shape_detection::Point_set::Least_squares_plane_fit_sorting` diff --git a/Shape_detection/doc/Shape_detection/Shape_detection.txt b/Shape_detection/doc/Shape_detection/Shape_detection.txt index f32f391e162..1aba22f2b4c 100644 --- a/Shape_detection/doc/Shape_detection/Shape_detection.txt +++ b/Shape_detection/doc/Shape_detection/Shape_detection.txt @@ -236,8 +236,8 @@ Shapes are detected by growing regions from seed items, where each region is cre Together with the generic algorithm's implementation `CGAL::Shape_detection::Region_growing`, three particular instances of this algorithm are provided: -- Line detection in a \ref Shape_detection_RegionGrowingPoints "2D point set"; -- Plane detection in a \ref Shape_detection_RegionGrowingPoints "3D point set"; +- Line and circle detection in a \ref Shape_detection_RegionGrowingPoints "2D point set"; +- Plane, sphere and cylinder detection in a \ref Shape_detection_RegionGrowingPoints "3D point set"; - Plane detection on a \ref Shape_detection_RegionGrowingMesh "polygon mesh". Other instances can be easily added by the user, as explained below. @@ -343,9 +343,12 @@ This class finds K (specified by the user) nearest neighbors of the query point The component also provides - `CGAL::Shape_detection::Point_set::Least_squares_line_fit_region` - least squares line fit type of region for 2D points; +- `CGAL::Shape_detection::Point_set::Least_squares_circle_fit_region` - least squares circle fit type of region for 2D points. - `CGAL::Shape_detection::Point_set::Least_squares_plane_fit_region` - least squares plane fit type of region for 3D points. +- `CGAL::Shape_detection::Point_set::Least_squares_sphere_fit_region` - least squares sphere fit type of region for 3D points. +- `CGAL::Shape_detection::Point_set::Least_squares_cylinder_fit_region` - least squares cylinder fit type of region for 3D points. -The program associates all points from a region to the best-fit hyperplane (2D line or 3D plane) +The program associates all points from a region to the best-fit object (2D line, 2D circle, 3D plane, 3D sphere, etc.) and controls the quality of this fit. The quality of region growing in a point set (2D or 3D) can be improved by slightly sacrificing the running time. @@ -409,6 +412,8 @@ when `angle_threshold` is strict enough (c), or it can be recognized as only one \subsubsection Shape_detection_RegionGrowingPoints_examples Examples +\paragraph Shape_detection_RegionGrowingPoints_example_2D_lines Detecting 2D Lines + Typical usage of the Region Growing component consists of five steps: -# Define an input range with points; @@ -423,6 +428,14 @@ The points with assigned to them normal vectors are stored in `std::vector` and \cgalExample{Shape_detection/region_growing_on_point_set_2.cpp} +\paragraph Shape_detection_RegionGrowingPoints_example_2D_circles Detecting 2D Circles + +The following example shows a similar example, this time detecting circles instead of lines. + +\cgalExample{Shape_detection/region_growing_circles_on_point_set_2.cpp} + +\paragraph Shape_detection_RegionGrowingPoints_example_3D_planes Detecting 3D Planes + If we are given a 3D point set, then the example below shows how to detect 3D planes using the K nearest neighbors search. We color all points from the found regions and save them in a file (see Figure \cgalFigureRef{Region_growing_on_point_set_3}). The example also shows how to retrieve all points, which are not assigned to any region, and how to use a custom output iterator. @@ -430,6 +443,17 @@ The point set with associated normals is stored in `CGAL::Point_set_3` and the u \cgalExample{Shape_detection/region_growing_on_point_set_3.cpp} +\paragraph Shape_detection_RegionGrowingPoints_example_3D_spheres Detecting 3D Spheres + +The following example shows a similar example, this time detecting spheres instead of planes. + +\cgalExample{Shape_detection/region_growing_spheres_on_point_set_3.cpp} + +\paragraph Shape_detection_RegionGrowingPoints_example_3D_cylinders Detecting 3D Cylinders + +The following example shows another similar example, this time detecting (infinite) cylinders. + +\cgalExample{Shape_detection/region_growing_cylinders_on_point_set_3.cpp} \subsubsection Shape_detection_RegionGrowingPoints_performance Performance diff --git a/Shape_detection/doc/Shape_detection/examples.txt b/Shape_detection/doc/Shape_detection/examples.txt index 166ca333643..5f4f999df03 100644 --- a/Shape_detection/doc/Shape_detection/examples.txt +++ b/Shape_detection/doc/Shape_detection/examples.txt @@ -7,7 +7,10 @@ \example Shape_detection/efficient_RANSAC_with_custom_shape.cpp \example Shape_detection/efficient_RANSAC_and_plane_regularization.cpp \example Shape_detection/region_growing_on_point_set_2.cpp +\example Shape_detection/region_growing_circles_on_point_set_2.cpp \example Shape_detection/region_growing_on_point_set_3.cpp +\example Shape_detection/region_growing_spheres_on_point_set_3.cpp +\example Shape_detection/region_growing_cylinders_on_point_set_3.cpp \example Shape_detection/region_growing_on_polygon_mesh.cpp \example Shape_detection/region_growing_with_custom_classes.cpp \example Shape_detection/shape_detection_basic_deprecated.cpp diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h index 6e22e1133b9..8b9db99fe1b 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h @@ -200,7 +200,9 @@ public: \param query_index index of the query point - The first and third parameters are not used in this implementation. + \param indices indices of the inliers of the region + + The first parameter is not used in this implementation. \return Boolean `true` or `false` diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h index 70f5bc78bdf..bdb5c577e51 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h @@ -200,7 +200,9 @@ public: \param query_index index of the query point - The first and third parameters are not used in this implementation. + \param indices indices of the inliers of the region + + The first parameter is not used in this implementation. \return Boolean `true` or `false` diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h index a86b4c48dbd..9d70725c8a6 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h @@ -204,10 +204,11 @@ public: the `angle_threshold`. If both conditions are satisfied, it returns `true`, otherwise `false`. - \param query_index - index of the query point + \param query_index index of the query point - The first and third parameters are not used in this implementation. + \param indices indices of the inliers of the region + + The first parameter is not used in this implementation. \return Boolean `true` or `false` From 773642e9dc299788cce1c14c7a96ce9eb315c56f Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Wed, 6 Jan 2021 07:59:14 +0100 Subject: [PATCH 7/9] Fix Boost include --- .../Shape_detection/region_growing_circles_on_point_set_2.cpp | 2 +- .../Shape_detection/region_growing_cylinders_on_point_set_3.cpp | 2 +- .../Shape_detection/region_growing_spheres_on_point_set_3.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp b/Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp index fa1a5d18369..e8c30e31bd8 100644 --- a/Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp +++ b/Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp @@ -8,7 +8,7 @@ #include #include -#include +#include #include diff --git a/Shape_detection/examples/Shape_detection/region_growing_cylinders_on_point_set_3.cpp b/Shape_detection/examples/Shape_detection/region_growing_cylinders_on_point_set_3.cpp index b82b7e1cd8e..c963bfa586f 100644 --- a/Shape_detection/examples/Shape_detection/region_growing_cylinders_on_point_set_3.cpp +++ b/Shape_detection/examples/Shape_detection/region_growing_cylinders_on_point_set_3.cpp @@ -9,7 +9,7 @@ #include #include -#include +#include using Kernel = CGAL::Simple_cartesian; diff --git a/Shape_detection/examples/Shape_detection/region_growing_spheres_on_point_set_3.cpp b/Shape_detection/examples/Shape_detection/region_growing_spheres_on_point_set_3.cpp index f7dc277e2d4..11bd4617f4f 100644 --- a/Shape_detection/examples/Shape_detection/region_growing_spheres_on_point_set_3.cpp +++ b/Shape_detection/examples/Shape_detection/region_growing_spheres_on_point_set_3.cpp @@ -8,7 +8,7 @@ #include #include -#include +#include #include From 244ca61261a7ef6e96eed9d1a7f7c8c4133d97e5 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Tue, 23 Feb 2021 08:26:41 +0100 Subject: [PATCH 8/9] Text corrections from review --- .../doc/Shape_detection/Shape_detection.txt | 12 ++++++------ .../region_growing_circles_on_point_set_2.cpp | 2 +- .../Least_squares_circle_fit_region.h | 11 +++++------ .../Least_squares_cylinder_fit_region.h | 11 +++++------ .../Least_squares_sphere_fit_region.h | 11 +++++------ 5 files changed, 22 insertions(+), 25 deletions(-) diff --git a/Shape_detection/doc/Shape_detection/Shape_detection.txt b/Shape_detection/doc/Shape_detection/Shape_detection.txt index 1aba22f2b4c..1e284fd938d 100644 --- a/Shape_detection/doc/Shape_detection/Shape_detection.txt +++ b/Shape_detection/doc/Shape_detection/Shape_detection.txt @@ -237,7 +237,7 @@ Shapes are detected by growing regions from seed items, where each region is cre Together with the generic algorithm's implementation `CGAL::Shape_detection::Region_growing`, three particular instances of this algorithm are provided: - Line and circle detection in a \ref Shape_detection_RegionGrowingPoints "2D point set"; -- Plane, sphere and cylinder detection in a \ref Shape_detection_RegionGrowingPoints "3D point set"; +- Plane, sphere, and cylinder detection in a \ref Shape_detection_RegionGrowingPoints "3D point set"; - Plane detection on a \ref Shape_detection_RegionGrowingMesh "polygon mesh". Other instances can be easily added by the user, as explained below. @@ -342,11 +342,11 @@ This class finds K (specified by the user) nearest neighbors of the query point The component also provides -- `CGAL::Shape_detection::Point_set::Least_squares_line_fit_region` - least squares line fit type of region for 2D points; -- `CGAL::Shape_detection::Point_set::Least_squares_circle_fit_region` - least squares circle fit type of region for 2D points. -- `CGAL::Shape_detection::Point_set::Least_squares_plane_fit_region` - least squares plane fit type of region for 3D points. -- `CGAL::Shape_detection::Point_set::Least_squares_sphere_fit_region` - least squares sphere fit type of region for 3D points. -- `CGAL::Shape_detection::Point_set::Least_squares_cylinder_fit_region` - least squares cylinder fit type of region for 3D points. +- `CGAL::Shape_detection::Point_set::Least_squares_line_fit_region` - least squares line fit type of region for 2D points +- `CGAL::Shape_detection::Point_set::Least_squares_circle_fit_region` - least squares circle fit type of region for 2D points +- `CGAL::Shape_detection::Point_set::Least_squares_plane_fit_region` - least squares plane fit type of region for 3D points +- `CGAL::Shape_detection::Point_set::Least_squares_sphere_fit_region` - least squares sphere fit type of region for 3D points +- `CGAL::Shape_detection::Point_set::Least_squares_cylinder_fit_region` - least squares cylinder fit type of region for 3D points The program associates all points from a region to the best-fit object (2D line, 2D circle, 3D plane, 3D sphere, etc.) and controls the quality of this fit. diff --git a/Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp b/Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp index e8c30e31bd8..d5b16263061 100644 --- a/Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp +++ b/Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp @@ -100,7 +100,7 @@ int main (int argc, char** argv) std::cerr << nb_circles << " circles detected in " << timer.time() << " seconds" << std::endl; - // Save in colored_spheres.ply + // Save in colored_circles.ply std::ofstream out ("colored_circles.ply"); CGAL::set_binary_mode (out); out << points3; diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h index 8b9db99fe1b..87e55a0136b 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_circle_fit_region.h @@ -131,13 +131,12 @@ public: \param min_region_size the minimum number of 2D points a region must have. %Default is 3. - \param minimum_radius is the radius below which an estimated - circle is considered as invalid and discarded. %Default is 0 (no - limit). + \param minimum_radius the radius below which an estimated circle + is considered as invalid and discarded. %Default is 0 (no limit). - \param maximum_radius is the radius above which an estimated - circle is considered as invalid and discarded. %Default is - infinity (no limit). + \param maximum_radius the radius above which an estimated circle + is considered as invalid and discarded. %Default is infinity (no + limit). \param point_map an instance of `PointMap` that maps an item from `input_range` to `Kernel::Point_3` diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h index bdb5c577e51..492853ccce9 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_cylinder_fit_region.h @@ -132,13 +132,12 @@ public: \param min_region_size the minimum number of 3D points a region must have. %Default is 3. - \param minimum_radius is the radius below which an estimated - cylinder is considered as invalid and discarded. %Default is 0 (no - limit). + \param minimum_radius the radius below which an estimated cylinder + is considered as invalid and discarded. %Default is 0 (no limit). - \param maximum_radius is the radius above which an estimated - cylinder is considered as invalid and discarded. %Default is - infinity (no limit). + \param maximum_radius the radius above which an estimated cylinder + is considered as invalid and discarded. %Default is infinity (no + limit). \param point_map an instance of `PointMap` that maps an item from `input_range` to `Kernel::Point_3` diff --git a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h index 9d70725c8a6..fd25ab23384 100644 --- a/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h +++ b/Shape_detection/include/CGAL/Shape_detection/Region_growing/Region_growing_on_point_set/Least_squares_sphere_fit_region.h @@ -136,13 +136,12 @@ public: \param min_region_size the minimum number of 3D points a region must have. %Default is 3. - \param minimum_radius is the radius below which an estimated - sphere is considered as invalid and discarded. %Default is 0 (no - limit). + \param minimum_radius the radius below which an estimated sphere + is considered as invalid and discarded. %Default is 0 (no limit). - \param maximum_radius is the radius above which an estimated - sphere is considered as invalid and discarded. %Default is - infinity (no limit). + \param maximum_radius the radius above which an estimated sphere + is considered as invalid and discarded. %Default is infinity (no + limit). \param point_map an instance of `PointMap` that maps an item from `input_range` to `Kernel::Point_3` From dc858ba722b851739c17c2530122600790673876 Mon Sep 17 00:00:00 2001 From: Simon Giraudot Date: Tue, 23 Feb 2021 08:34:15 +0100 Subject: [PATCH 9/9] Clean up namings according to review --- .../doc/Shape_detection/Shape_detection.txt | 6 +++--- Shape_detection/doc/Shape_detection/examples.txt | 6 +++--- .../examples/Shape_detection/CMakeLists.txt | 12 ++++++------ .../data/{polygon_mesh.off => building.off} | 0 .../data/{point_set_3.xyz => building.xyz} | 0 .../data/{point_set_2.xyz => buildings_outline.xyz} | 0 .../region_growing_circles_on_point_set_2.cpp | 2 +- ...2.cpp => region_growing_lines_on_point_set_2.cpp} | 2 +- ....cpp => region_growing_planes_on_point_set_3.cpp} | 2 +- ...cpp => region_growing_planes_on_polygon_mesh.cpp} | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) rename Shape_detection/examples/Shape_detection/data/{polygon_mesh.off => building.off} (100%) rename Shape_detection/examples/Shape_detection/data/{point_set_3.xyz => building.xyz} (100%) rename Shape_detection/examples/Shape_detection/data/{point_set_2.xyz => buildings_outline.xyz} (100%) rename Shape_detection/examples/Shape_detection/{region_growing_on_point_set_2.cpp => region_growing_lines_on_point_set_2.cpp} (98%) rename Shape_detection/examples/Shape_detection/{region_growing_on_point_set_3.cpp => region_growing_planes_on_point_set_3.cpp} (99%) rename Shape_detection/examples/Shape_detection/{region_growing_on_polygon_mesh.cpp => region_growing_planes_on_polygon_mesh.cpp} (98%) diff --git a/Shape_detection/doc/Shape_detection/Shape_detection.txt b/Shape_detection/doc/Shape_detection/Shape_detection.txt index 1e284fd938d..2e285ad8b44 100644 --- a/Shape_detection/doc/Shape_detection/Shape_detection.txt +++ b/Shape_detection/doc/Shape_detection/Shape_detection.txt @@ -426,7 +426,7 @@ Given a 2D point set, we detect 2D lines using the fuzzy sphere neighborhood. We The points with assigned to them normal vectors are stored in `std::vector` and the used `Kernel` is `CGAL::Simple_cartesian`, where the number type is `double`. -\cgalExample{Shape_detection/region_growing_on_point_set_2.cpp} +\cgalExample{Shape_detection/region_growing_lines_on_point_set_2.cpp} \paragraph Shape_detection_RegionGrowingPoints_example_2D_circles Detecting 2D Circles @@ -441,7 +441,7 @@ and save them in a file (see Figure \cgalFigureRef{Region_growing_on_point_set_3 The point set with associated normals is stored in `CGAL::Point_set_3` and the used `Kernel` is `CGAL::Exact_predicates_inexact_constructions_kernel`. -\cgalExample{Shape_detection/region_growing_on_point_set_3.cpp} +\cgalExample{Shape_detection/region_growing_planes_on_point_set_3.cpp} \paragraph Shape_detection_RegionGrowingPoints_example_3D_spheres Detecting 3D Spheres @@ -542,7 +542,7 @@ a faster version of region growing, use a floating type based kernel. We can improve the quality of region growing by providing a different seeding order (analogously to \ref Shape_detection_RegionGrowingPoints "Point Sets") that is why in this example we also sort indices of input faces using the `CGAL::Shape_detection::Polygon_mesh::Least_squares_plane_fit_sorting` and only then detect regions. -\cgalExample{Shape_detection/region_growing_on_polygon_mesh.cpp} +\cgalExample{Shape_detection/region_growing_planes_on_polygon_mesh.cpp} \subsubsection Shape_detection_RegionGrowingMesh_performance Performance diff --git a/Shape_detection/doc/Shape_detection/examples.txt b/Shape_detection/doc/Shape_detection/examples.txt index 5f4f999df03..af3e9b3c2d8 100644 --- a/Shape_detection/doc/Shape_detection/examples.txt +++ b/Shape_detection/doc/Shape_detection/examples.txt @@ -6,12 +6,12 @@ \example Shape_detection/include/efficient_RANSAC_with_custom_shape.h \example Shape_detection/efficient_RANSAC_with_custom_shape.cpp \example Shape_detection/efficient_RANSAC_and_plane_regularization.cpp -\example Shape_detection/region_growing_on_point_set_2.cpp +\example Shape_detection/region_growing_lines_on_point_set_2.cpp \example Shape_detection/region_growing_circles_on_point_set_2.cpp -\example Shape_detection/region_growing_on_point_set_3.cpp +\example Shape_detection/region_growing_planes_on_point_set_3.cpp \example Shape_detection/region_growing_spheres_on_point_set_3.cpp \example Shape_detection/region_growing_cylinders_on_point_set_3.cpp -\example Shape_detection/region_growing_on_polygon_mesh.cpp +\example Shape_detection/region_growing_planes_on_polygon_mesh.cpp \example Shape_detection/region_growing_with_custom_classes.cpp \example Shape_detection/shape_detection_basic_deprecated.cpp */ diff --git a/Shape_detection/examples/Shape_detection/CMakeLists.txt b/Shape_detection/examples/Shape_detection/CMakeLists.txt index 7e2e577fa3b..d73b755083f 100644 --- a/Shape_detection/examples/Shape_detection/CMakeLists.txt +++ b/Shape_detection/examples/Shape_detection/CMakeLists.txt @@ -20,12 +20,12 @@ if(TARGET CGAL::Eigen_support) create_single_source_cgal_program( "efficient_RANSAC_and_plane_regularization.cpp") - create_single_source_cgal_program("region_growing_on_point_set_2.cpp") - create_single_source_cgal_program("region_growing_on_point_set_3.cpp") + create_single_source_cgal_program("region_growing_lines_on_point_set_2.cpp") + create_single_source_cgal_program("region_growing_planes_on_point_set_3.cpp") create_single_source_cgal_program("region_growing_cylinders_on_point_set_3.cpp") create_single_source_cgal_program("region_growing_spheres_on_point_set_3.cpp") create_single_source_cgal_program("region_growing_circles_on_point_set_2.cpp") - create_single_source_cgal_program("region_growing_on_polygon_mesh.cpp") + create_single_source_cgal_program("region_growing_planes_on_polygon_mesh.cpp") create_single_source_cgal_program("region_growing_with_custom_classes.cpp") create_single_source_cgal_program("shape_detection_basic_deprecated.cpp") @@ -35,12 +35,12 @@ if(TARGET CGAL::Eigen_support) efficient_RANSAC_basic efficient_RANSAC_with_callback efficient_RANSAC_and_plane_regularization - region_growing_on_point_set_2 - region_growing_on_point_set_3 + region_growing_lines_on_point_set_2 + region_growing_planes_on_point_set_3 region_growing_cylinders_on_point_set_3 region_growing_spheres_on_point_set_3 region_growing_circles_on_point_set_2 - region_growing_on_polygon_mesh + region_growing_planes_on_polygon_mesh region_growing_with_custom_classes shape_detection_basic_deprecated) target_link_libraries(${target} PUBLIC CGAL::Eigen_support) diff --git a/Shape_detection/examples/Shape_detection/data/polygon_mesh.off b/Shape_detection/examples/Shape_detection/data/building.off similarity index 100% rename from Shape_detection/examples/Shape_detection/data/polygon_mesh.off rename to Shape_detection/examples/Shape_detection/data/building.off diff --git a/Shape_detection/examples/Shape_detection/data/point_set_3.xyz b/Shape_detection/examples/Shape_detection/data/building.xyz similarity index 100% rename from Shape_detection/examples/Shape_detection/data/point_set_3.xyz rename to Shape_detection/examples/Shape_detection/data/building.xyz diff --git a/Shape_detection/examples/Shape_detection/data/point_set_2.xyz b/Shape_detection/examples/Shape_detection/data/buildings_outline.xyz similarity index 100% rename from Shape_detection/examples/Shape_detection/data/point_set_2.xyz rename to Shape_detection/examples/Shape_detection/data/buildings_outline.xyz diff --git a/Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp b/Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp index d5b16263061..671b0d6f613 100644 --- a/Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp +++ b/Shape_detection/examples/Shape_detection/region_growing_circles_on_point_set_2.cpp @@ -34,7 +34,7 @@ using Region_growing = CGAL::Shape_detection::Region_growing int main (int argc, char** argv) { - std::ifstream ifile (argc > 1 ? argv[1] : "data/circle.ply"); + std::ifstream ifile (argc > 1 ? argv[1] : "data/circles.ply"); Point_set_3 points3; ifile >> points3; diff --git a/Shape_detection/examples/Shape_detection/region_growing_on_point_set_2.cpp b/Shape_detection/examples/Shape_detection/region_growing_lines_on_point_set_2.cpp similarity index 98% rename from Shape_detection/examples/Shape_detection/region_growing_on_point_set_2.cpp rename to Shape_detection/examples/Shape_detection/region_growing_lines_on_point_set_2.cpp index d15c67f3a25..56f9d61c191 100644 --- a/Shape_detection/examples/Shape_detection/region_growing_on_point_set_2.cpp +++ b/Shape_detection/examples/Shape_detection/region_growing_lines_on_point_set_2.cpp @@ -77,7 +77,7 @@ int main(int argc, char *argv[]) { << std::endl << std::endl; // Load xyz data either from a local folder or a user-provided file. - std::ifstream in(argc > 1 ? argv[1] : "data/point_set_2.xyz"); + std::ifstream in(argc > 1 ? argv[1] : "data/buildings_outline.xyz"); CGAL::set_ascii_mode(in); if (!in) { diff --git a/Shape_detection/examples/Shape_detection/region_growing_on_point_set_3.cpp b/Shape_detection/examples/Shape_detection/region_growing_planes_on_point_set_3.cpp similarity index 99% rename from Shape_detection/examples/Shape_detection/region_growing_on_point_set_3.cpp rename to Shape_detection/examples/Shape_detection/region_growing_planes_on_point_set_3.cpp index a5392222d9d..02eadfbb189 100644 --- a/Shape_detection/examples/Shape_detection/region_growing_on_point_set_3.cpp +++ b/Shape_detection/examples/Shape_detection/region_growing_planes_on_point_set_3.cpp @@ -108,7 +108,7 @@ int main(int argc, char *argv[]) { << std::endl << std::endl; // Load xyz data either from a local folder or a user-provided file. - std::ifstream in(argc > 1 ? argv[1] : "data/point_set_3.xyz"); + std::ifstream in(argc > 1 ? argv[1] : "data/building.xyz"); CGAL::set_ascii_mode(in); if (!in) { diff --git a/Shape_detection/examples/Shape_detection/region_growing_on_polygon_mesh.cpp b/Shape_detection/examples/Shape_detection/region_growing_planes_on_polygon_mesh.cpp similarity index 98% rename from Shape_detection/examples/Shape_detection/region_growing_on_polygon_mesh.cpp rename to Shape_detection/examples/Shape_detection/region_growing_planes_on_polygon_mesh.cpp index ba9d4faf915..967d4c24592 100644 --- a/Shape_detection/examples/Shape_detection/region_growing_on_polygon_mesh.cpp +++ b/Shape_detection/examples/Shape_detection/region_growing_planes_on_polygon_mesh.cpp @@ -64,7 +64,7 @@ int main(int argc, char *argv[]) { << std::endl << std::endl; // Load off data either from a local folder or a user-provided file. - std::ifstream in(argc > 1 ? argv[1] : "data/polygon_mesh.off"); + std::ifstream in(argc > 1 ? argv[1] : "data/building.off"); CGAL::set_ascii_mode(in); if (!in) {