
https://svn.lrde.epita.fr/svn/oln/trunk Index: ChangeLog from Alexandre Abraham <abraham@lrde.epita.fr> W-watershed implemented, dummy tikz output. * milena/sandbox/abraham/morpho/basic_najman.hh: Fix bugs. * milena/sandbox/abraham/morpho/images/test_2.pgm: New. * milena/sandbox/abraham/morpho/images/test_3.pgm: New. * milena/sandbox/abraham/morpho/images/test_4.pgm: New. * milena/sandbox/abraham/morpho/tikz.h: New (mln::io::tikz::save) New, working on 2d grayscale images. * milena/sandbox/abraham/morpho/test_watershed.cc: Add tikz output. * milena/sandbox/abraham/morpho/Makefile: . Makefile | 2 - basic_najman.hh | 96 ++++++++++++++++++++++++++++++------------------------ images/test_2.pgm | 5 ++ images/test_3.pgm | 29 ++++++++++++++++ test_watershed.cc | 64 ++++++++++++++++++++++++++++++++---- tikz.h | 37 ++++++++++++++++++++ 6 files changed, 184 insertions(+), 49 deletions(-) Index: milena/sandbox/abraham/morpho/basic_najman.hh --- milena/sandbox/abraham/morpho/basic_najman.hh (revision 1887) +++ milena/sandbox/abraham/morpho/basic_najman.hh (working copy) @@ -6,6 +6,9 @@ #include <queue> #include <set> +#define MOINS_UN + + namespace mln { @@ -19,7 +22,7 @@ typedef mln_psite(I) psite; struct node { - int level; + mln_value(I) level; int area; int highest; p_array<mln_psite(I)> children; @@ -349,8 +352,8 @@ p_set<psite> v; for_all(q) - if (exact(ima)(q) < exact(ima)(p)) - v.append(Par_node(q)); + if (exact(pima).has(q) && exact(pima)(q) < exact(pima)(p)) + v.insert(Par_node(q)); if (v.npoints() == 0) return psite(-1, -1); @@ -372,7 +375,7 @@ p_set<psite> v; for_all(q) - if (exact(ima)(q) < exact(ima)(p)) + if (exact(pima).has(q) && exact(pima)(q) < exact(pima)(p)) v.insert(Par_node(q)); if (v.npoints() == 0) @@ -422,12 +425,12 @@ if (i != psite(-1, -1)) { - pima(p) = nodes(i).level ; + pima(p) = nodes(i).level MOINS_UN ; Par_node(p) = i; mln_niter(N) q(nbh, p); for_all(q) - if (!isproc(q)) + if (exact(pima).has(q) && !isproc(q)) if (m_destructible(q) != psite(-1, -1)) { l.push(q); @@ -439,13 +442,15 @@ void w_watershed() { - p_array< p_set<psite> > L; + std::vector< std::set<psite> > L(255); // TODO : replace int with the type of value - mln_ch_value(I, int) K; - mln_ch_value(I, psite) H; + I K(exact(ima).domain(), exact(ima).border()); + mln_ch_value(I, psite) H(exact(ima).domain(), exact(ima).border()); mln_piter(I) it(exact(ima).domain()); + // mln_value(I) max = 0; + psite i; for_all(it) { @@ -454,19 +459,30 @@ i = w_destructible(p); if (i != psite(-1, -1)) { - L[nodes(i).level].insert(p); - K(p) = nodes(i).level; + // if (max < nodes(i).level) + // max = nodes(i).level; + L[nodes(i).level MOINS_UN].insert(p); + K(p) = nodes(i).level MOINS_UN; H(p) = i; + } + } - typename p_array< p_set<psite> >::fwd_piter n(L); - for_all(n) + mln_value(I) k = 0; + + typename std::vector< std::set<psite> >::iterator n; + for( n = L.begin(); n != L.end(); n++, k++ ) { - while (!n.empty()) + + // to avoid looping on max + // if (k + 1 == max) + // break; + + while (!n->empty()) { - psite p = *n.begin(); - n.erase(p); - // TODO : replace int with the type of value - int k = nodes(p).level + 1; + psite p = *(n->begin()); + n->erase(p); + // mln_value(I) k = nodes(p).level; + if (K(p) == k) { pima(p) = k; @@ -474,16 +490,16 @@ mln_niter(N) q(nbh, p); for_all(q) - if (k < pima(q)) + if (exact(pima).has(q) && k < pima(q)) { psite j = w_destructible(q); - if (j != psite(-1, -1)) - K(q) = -1; + if (j == psite(-1, -1)) + K(q) = 255; else - if (K(q) != nodes(j).level) + if (K(q) != nodes(j).level MOINS_UN) { - n.insert(q); - K(q) = i-1; + n->insert(q); + K(q) = nodes(j).level MOINS_UN; H(q) = j; } } @@ -491,10 +507,6 @@ } } } - } - - } - }; // struct basic_najman Index: milena/sandbox/abraham/morpho/images/test_2.pgm --- milena/sandbox/abraham/morpho/images/test_2.pgm (revision 0) +++ milena/sandbox/abraham/morpho/images/test_2.pgm (revision 0) @@ -0,0 +1,5 @@ +P5 +# CREATOR: GIMP PNM Filter Version 1.1 +7 6 +255 +3M³fMf³MMÌÌÌfÌ̳æMMæ³f3MfæM \ No newline at end of file Index: milena/sandbox/abraham/morpho/images/test_3.pgm --- milena/sandbox/abraham/morpho/images/test_3.pgm (revision 0) +++ milena/sandbox/abraham/morpho/images/test_3.pgm (revision 0) @@ -0,0 +1,29 @@ +P5 +# CREATOR: GIMP PNM Filter Version 1.1 +100 100 +255 +!$(-17=CIPX_gow¡ª²»ÃËÒÙßäèëììëéåáÛÔÍż´¬¥~}|||{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ $(,16<BHOU]dlt|¨±ºÃËÓÚßäèêëêèåàÚÓÌļ´¬¤ ~}|||{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{#'+/4:?ELRY`hpx§±ºÃÌÓÚàäçèèæãßÙÓËû³«£ ~}|||{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{!%)-27<BHNU\dlu~§±»ÄÍÕÛàäææåâÞÙÒËû³«£ ~}|||{{{{{{{{{{{{{{{zzzzzzzzz{{{{{{||| "&*/38>DJQX`ir|§²½ÇÏ×ÝáãääáÝØÑʺ²ª¢}}||{{{{{{{{{{{{{{zzzzzzzzzz{{{{{{{||| #'+/49?ELT]fp{ªµÀÉÒØÞáââàÜ×Ñʺ²ª¢~}}||{{{{{{{{{{zzzzzzzzzzzzzz{{{{{{|||| + + + + #'+05;BIQ[ep|¡®¹ÄÍÔÚÞàáßÛ×Ðɹ±©¢~}||{{{{{{{{{zzzzzzzzzzzzzz{{{{{{||||}} + + + #',28?GPZfr¦³¾ÈÑ×ÜÞßÞÛÖÐÉÁ¹±©¡~}||{{{{zzzzzzzzzzzzzzzzzz{{{{{{||||}}} + + $)/6>GQ\iv¬¹ÄÍÔÙÜÞÝÚÕÏÈÁ¹±©¡~}|{{{{zzzzzzzzzzzzzzzzzzz{{{{{||||}}}~ + "'.5>ITan|§´¿ÉÑ×ÛÜÜÙÕÏÈÁ¹±©¡~}|{{{zzzzzzzzzzzzzzzzzzzz{{{{{||||}}}~ +!'.7AMYgv ¢°¼ÆÏÕÙÛÛÙÕÏÈÁ¹±©¡}||{{{zzzzzzzzzzzzzzzzzz{{{{{{||||}}}}~ +")1;GSap¬¸ÄÍÓØÚÚØÔÏÈÁ¹±©¡}||{{zzzzzzzzzzzzzzzzzzz{{{{{{|||}}}~~~ $,6AN\k{¨¶ÁËÒ×ÙÚØÔÏÈÁ¹±©¡}||{{zzzzzzzzzzzzzzzzzz{{{{{{|||}}}~~~ + )2>JYhx¦´¿ÉÑÖÙÙ×ÔÏÈÁ¹±©¡}||{{zzzzzzzzzzzzzzzzzz{{{{{||||}}}~~~ + &/;GVeu ¤²¾ÈÐÕØÙ×ÔÏÈÁ¹±©¡}||{{zzzzzzzzzzzzzzzzzz{{{{{||||}}}~~~ + $-9FTcs£±½ÇÏÕØÙ×ÔÏÈÁ¹±©¢}||{{zzzzzzzzzzzzzzzzz{{{{{{||||}}}}~~~ + #,8DSbr¢°½ÇÏÕØÙ×ÔÏÉÁº±©¢}||{{zzzzzzzzzzzzzzzzz{{{{{{|||||}}}~~~ + ",7DRbr¢°½ÇÏÕØÙØÔÏɺ²ª¢}||{{zzzzzzzzzzzzzzzzz{{{{{{|||||}}}}~~ +",7DSbr£±½ÈÐÕØÙØÕÏɺ²ª¢~||{{zzzzzzzzzzzzzzzzz{{{{{{|||||}}}}~~ #-8ETct¤²¾ÈÐÖÙÚØÕÐʺ²ª£~}|{{{zzzzzzzzzzzzzzzz{{{{{{{|||||}}}}}#! + + %/:GVeu¥³¿ÉÑ×ÚÚÙÕÐÊû³«£~}|{{{zzzzzzzzzzzzzzzz{{{{{{{|||||}}}}},) + '1=JXhx§µÁËÒØÛÛÚÖÑËü´«¤~}|{{{zzzzzzzzzzzzzzzz{{{{{{{{|||||||}}62/+'$ + + +"*4@M\k{ª·ÃÌÔÙÜÜÚ×ÒËļ´¬¤ ~}|{{{zzzzzzzzzzzzzzzz{{{{{{{{{|||||||}A=950,($ &/9ER`pºÅÏÖÛÝÝÜØÓÍŽµ¦ }||{{{zzzzzzzzzzzzzzzz{{{{{{{{{{{|||||MIE@;61-($!$+4>JWfu£±½ÈÑØÜßßÝÙÔÎÆ¾¶®¦~}|{{{zzzzzzzzzzzzzzzz{{{{{{{{{{{{{|||[VQLFA<72-)%"$*1:EP^l{§µÁËÔÚÞààÞÚÕÏÈÀ¸°¨ ~}|{{{zzzzzzzzzzzzzzzz{{{{{{{{{{{{{|||id^YSMGB<73.+'$" !#'+19BLXes¹ÅÏ×ÜàââàÜ×Ñɺ²ª¢ }||{{{zzzzzzzzzzzzzz{{{{{{{{{{{{{{{||wrlg`ZTNHC>951.+)(''(),/4:BKUam{¥²¾ÉÒÚßâäãáÝØÒËû³«¤~}||{{{{zzzzzzzzzzz{{{{{{{{{{{{{{{{{{ ztnhb[UPJEA=964221236:>ELU_kw¬¸ÄÎÖÝâåæåãßÚÔÍÆ¾¶®¦ ~}||{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|vpic]WRMIFC@>==>?BEJPX`ju§³¿ÉÒÚàåçèçåáÜÖÐÈÀ¹±©¢~}}|||{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ }wqke`[WSPNLKJKLORW]dmv¤¯»ÅÏ×ÞäèêêéçäßÙÒËü´¬¥ ~}}|||||{{{{{{{{{{{{{{{{{{{|||||||¬§¢ ytojfb_\[YYY[]aekrz¢¸ÂÌÕÜâçêìíìéæáÛÕÎÆ¿·°©¢ ~~}}}|||||||||||||||||||||||||||¶²¨£}xtqnkjhhhjloty£·ÀÊÒÚáæêíïïîëèãÞØÑÊû´¦ ~~~}}}}}||||||||||||||||}}}}}}¾º¶±¬§¢}{yxxxy|¥®·ÀÉÑÙßåêíðññðíêæáÛÔÍÆ¿¸±ª¤ ~~~~~}}}}}}}}}}}}}}}~~~~~ÃÀ¼¸´°«§£¢©±¸ÁÉÐØÞäéíðòóóñïìèãÞØÑÊüµ¯©£~~~~~~~~~~ÇÄÁ½º¶³¯¬¨¥¢¤©®µ»ÂÉÐ×ÝãèìðòôõôóñîêæáÛÕÎÇÁº³¨£ ÈÅÂÀ½º·´²¯«©§¥¤£¢¢¢£¤¦©¬°´¹¿ÅËÑ×ÝãçìïòôöööôóðìèãÞØÒÌÅ¿¸²¨£ ÆÄÂÀ½»¹·¶´³±°¯®®®®°±´·º¾ÃÈÍÒØÝâçëïòôö÷÷÷öôñîêæáÛÕÏÉý·²¨¤ ÂÁ¿½¼º¹¸·¶¶µµµµµµµµ¶·¹º½¿ÃÆÊÏÓØÜáåêíðóõ÷÷ø÷öõòïìèãÞØÓÍÇÁ¼¶²©¥¢½»º¹¸·¶¶¶¶¶··¸¸¹º»¼½¾¿ÁÃÆÉÌÐÓ×Üàäèëïñôö÷øøø÷õóðíéäßÚÕÏÊÅÀ»¶²®«¨¥£ ¶´³³²²²²³´µ¶·¸º»¼½¿ÀÂÃÅÇÊÌÏÒÖÚÝáåèìïñôõ÷÷ø÷öõóðíéåàÛÖÑÌǾº¶³°ª¨¦¥£¢ ¬¬«««¬®¯±³µ¶¸º¼¾¿ÁÃÄÆÈËÍÐÓÖÚÝáäèëîðóôö÷÷ööôòïìéäàÛ×ÒÍÉÄÀ½¹¶´±¯®¬«©¨§¦¥¤£¡ ¤¤££££¤¦§©«°²µ·¹»½¿ÁÃÅÇÉÌÏÒÕØÛßâåéìîñóôõõõôóñîëçãßÚÖÑÍÉÅÁ¾»¹·µ´²±°¯®¬«ª©¨§¦¥¤£¢¡¡ ¡¡¡¡¢¢¡¤§©¬¯²´¶¹»½¿ÁÃÆÈËÎÑÔ×ÛÞâåèëîðòóóóòñïìèäàÜ×ÓÏËÇÃÀ¾¼º¸··¶µµµ´´³³²±°°¯®¬«ª©©¨¨¨§§§¨¨¨¨¨©©©©ª¢¥¨«°²µ·¹»¾ÀÂÅÈËÎÒÖÙÝáäèêíïðññðîìéåáÝØÓÏËÇÃÀ¾¼º¹¸¸¸¸¸¹¹¹¹¹¹¹¸¸··¶µ´³²²±°°°°°°°°°°±±±²²²¢¥¨«¯²´¶¹»¾ÁÄÇËÏÓ×ÛßãæéëíîííëèåáÜ×ÓÎÉÅÁ¾»¹¸····¸¹º»¼½¾¿¿¿¿¿¿¾¾½¼¼»º¹¹¹¸¸¸¸¸¸¸¹¹¹ººº»~ ¢¤¦©«°²µ¸¼¿ÃÇÌÐÕÙÝáäçéêêéçäàÛÖÑÌǽº·´³²²²³´¶¸º¼¾¿ÁÂÄÅÅÆÆÆÅÅÄÄÃÂÂÁÁÁÀÀÀÀÀÁÁÁÂÂÂÃÃwwwwwxz{} ¢¤¦©¬¯²¶º¿ÃÈÍÒ×ÜßâäææäâßÛÖÐÊÄ¿ºµ±®¬«ª«¬®°²µ¸»½ÀÃÅÇÉÊËÌÌÍÌÌÌËËÊÊÉÉÉÈÈÈÈÈÉÉÉÊÊÊÊpppppqrtvxz} ¢¥¨¬±µ»ÀÆËÐÕÚÝßááßÝÙÔÏɼ¶°«§¤¢¡¡¢¤¦©¬°´¸¼¿ÃÆÉÌÎÐÑÒÓÓÓÓÓÒÒÑÑÐÐÐÐÐÐÐÐÐÑÑÑÒÒjiijjklmoqsuwz|£§¬²¸¾ÄÊÏÔØÚÜÜÚØÓÎÈÁº³¬¦¡¡¥©®³¸½ÁÆÊÍÐÓÕרÙÙÙÙÙÙØØ×××ÖÖÖÖÖ×××רØeeeeefghiklnpsuwy{} £©¯¶¼ÃÈÎÒÕ××ÕÒÍÇÀ¹±©¢¡§³¸¾ÃÈÍÑÕØÚÜÝÞßßÞÞÞÝÝÜÜÜÜÛÛÜÜÜÜÝÝÝ````aabcdeghjlnprsuwxz|~ §®µ¼ÂÈÌÐÑÑÐÌÇÁ¹±¨ ¥¬²¹ÀÆËÑÕÙÜßáâããããââááààààßßßààààà]]]]]]^_`abcefhikmnoqrtvxz|¦®µ¼ÂÇÊÌÌÊÆÁº²©zvtstvy}¤¬³»ÂÉÏÔÙÝàãäæææææååääãããââââããããZZZZZ[[\\]^_abcdfghiklmoqsux| §¯¶¼ÁÅÇÇÅÁ»³«¡|uplihiknrw}£¬´½ÄÌÒØÝáäæèèééèèççæååäääääääääYXXXXYYYZ[[\]^_`abcdefgijloquy~¡©°·½ÀÂÂÀ¼µ¤ |slfb_^^`cglry¤®·¿ÈÏÖÛàäæèéêêêéèèçæåååääääääåWWWWWWWXXXYZZ[\]]^_`abcdegilosx~ ¤¬²¸¼¾¾¼·°¨~tkc]XUTTUX\ahov¦°ºÃËÓÙÞãæèêêêêêéèçæååääääääääVVVVVVVVWWWXXYYZ[[\]]^_`acegkosy§®´¸ºº·³¬£wmd\UPMKKLOSX^emu©´½ÇÏÖÜáåèéêêêéèçæåääããâââââãUUUUUUUUUVVVWWWXXYYZZ[\]^_adgkou|¤«±µ··´¯¨}rg]UNIFDCDGJOU\dmv¢¸ÂËÓÚßãæèéééèçæåäãâááàààààáTTTTTTTUUUUUVVVWWWXXXYZZ[]_adhlry¡¨®²´´±«¤ ymbXPIC@>=>@CGMT[dny§³½ÇÏ×ÝáäæçèççåäãâáàßßÞÞÞÞÞÞTTTTTTTTTTTUUUUUVVVWWWXYZ[]_bfjpv~¦¬°²±®©¡ui^TKD?;888:=AFMT]gr}¢®¹ÃÌÔÚßãåæææåäâáàÞÝÝÜÜÜÛÛÜÜTTTTTTTTTTTTTTTUUUUUVVVWXY[]`dhnt|¤ª®°¯¬§rf[QHA;753458<AGNWalw©µ¿ÉÑØÝàãäääãâàßÝÜÛÚÚÙÙÙÙÙÙTTTTSSSSSSTTTTTTTTTUUUVVWXZ\_bgmsz£¨®®«¥|pdYNF>84100147<BIR\fr¥±¼ÆÏÕÛÞáâââáàÞÝÛÚÙØØ××××××TTTTSSSSSSSSSTTTTTTTTUUVVXY[^bflry¢¨¬®ª¤{ocWMD=72/../149?FNXcn{¢®ºÄÌÓÙÝßááàßÞÜÛÙØ×ÖÕÕÔÔÔÔÔTTSSSSSSSSSSSSSSTTTTTTUUVWY[^afkry¡§«©¤{nbWLC;51.,,-/26<CKU`lx ¬¸ÂËÒ×ÛÞßßßÞÜÚÙ×ÖÕÔÓÓÓÒÒÒÒTTSSSSSSSSSSSSSSSTTTTTUUVWY[]afkry¡§«¬©¤{nbVLC;50-++,.15;AJS^jw«¶ÁÉÑÖÚÜÞÞÝÜÚÙ×ÖÕÓÓÒÑÑÑÑÑÑTTSSSSSSSSSSSSSSSSSSTTTUVWXZ]aekqy¡§«ª¤{ocWMD<61.,+,-05:AJS^jv«¶ÀÉÐÕÙÛÜÜÜÛÙ×ÖÔÓÒÑÐÐÐÏÏÏÏTTSSSSSSSSSSSSSSSSSSSTTTUVXZ]aekqy¢¨¬®ª¥}pdYNE=72/-,-.16;BJT_jw«¶ÀÉÏÕØÚÛÛÛÙØÖÕÓÒÑÐÏÏÎÎÎÎÎTSSSSSSSSSSSSSSSSSSSSTTTUVXZ]aekqy¢¨¯¯¬§sg[QG@941/..038=DLVamy ¬·ÁÉÐÔØÚÛÛÚØ×ÕÔÒÑÐÏÎÎÎÎÍÍÍTSSSSSSSSSSSSSSSSSSSSTTTUVXZ]aekry£©®°°®©¡vj_TKC<7421136;@GOYdo|¢®¸ÂÉÐÔØÙÚÚÙØÖÔÓÑÐÏÏÎÎÍÍÍÍÍTSSSSSSSSSSSSSSSSSSSSTTTUVXZ]afkry¤ª¯²²°«¤zncYOGA<86568;?ELT^ht¥°ºÃÊÐÕ×ÙÙÙØ×ÕÔÒÑÐÏÎÍÍÍÍÌÌÌTSSSSSSSSSSSSSSSSSSSTTTUVWXZ]aflrz¥«±´´³®¨ ti^UMGA><;;=@EJRZcny ¨³½ÅÌÑÕØÙÙØ×ÖÔÓÑÐÏÎÍÍÍÌÌÌÌÌTSSSSSSSSSSSSSSSSTTTTTTUVWY[^aflsz¦²¶·¶²¬¤ zoe\TMHEBBBDGLQXajt¢¬¶¿ÇÍÒÕØÙÙØ×ÕÔÒÑÐÏÎÍÍÌÌÌÌÌÌTTTSSSSSSSSSSTTTTTTTTTUUVWY[^bgms{§¯´¸º¹¶±ª¡wmd\VQMKJKLPTZair|§±ºÂÉÏÓÖרØ×ÖÕÓÒÐÏÎÎÍÍÌÌÌÌÌÌTTTTTTTTTTTTTTTTTTTTTUUVWXY\_cgmt| ©±·»½½º¶¯§vmf_ZWTSTVY]cjrz¢¬µ¾ÅËÐÔÖØØØ×ÕÔÓÑÐÏÎÍÍÌÌÌÌÌÌÌTTTTTTTTTTTTTTTUUUUUUUVVWYZ]`chnu}¢«²¹¾ÀÁ¿»µ®¥wpjea_^_adhmt{©²ºÁÈÍÑÔÖ×××ÖÕÓÒÑÏÎÎÍÍÌÌÌÌÌÍÍUUUTTTUUUUUUUUUUUVVVVVWWXZ[^aejov~¤µ¼ÁÄÅÄÁ¼µ¥{uqmkjklosy§¯·¾ÅËÏÒÕÖ××ÖÕÔÒÑÐÏÎÍÌÌÌÌÌÌÌÌÍUUUUUUUUUVVVVVVVVWWWWWXYY[]_bfkqx¥¯·¾ÄÇÉÈÆÂ¼µ®¥}zxwwy|¦®µ¼ÃÈÍÑÓÕÖÖÖÕÔÓÑÐÏÎÍÍÌÌÌÌÌÌÌÌÍVVVVVVVWWWWWWXXXXXXYYYZZ[]^adhmsz¨±ºÁÇËÍÍÌÈľ·¯¨ ¡¨¯µ¼ÁÇËÏÒÔÕÖÖÕÔÓÒÑÐÏÎÍÌÌÌÌÌÌÌÍÍÍXXXXXXXXXYYYYYZZZZ[[[[\]^_acgkpv} ¡ª´¼ÄÊÎÑÒÑÏËÅ¿¹²¬¦ ¥«°¶¼ÁÆÊÎÑÓÔÕÕÕÔÓÒÑÐÏÎÍÍÌÌÌÌÌÌÌÍÍÍZZZZZZZZ[[[\\\\]]]]^^^_`abdgjnsy¤·¿ÇÍÒÕÖÖÔÑÍǼ¶±¬§¤¡ ¢¤§«¯´¸½ÂÆÊÍÐÒÓÔÕÕÔÓÒÑÐÏÎÎÍÌÌÌÌÌÌÌÌÍÍÍ\\\\]]]]^^^__```aaabbbcdefhknrw}§±ºÂÊÐÕØÚÚÙ×ÓÏÊÅÀ»·³°¬««¬¯²µ¸¼¿ÃÇÊÍÏÑÓÔÔÔÔÓÒÑÐÏÎÎÍÌÌÌÌÌÌÌÌÌÍÍÍ__````aaabbccddeefffgghijkmpsw|¢«´½ÅÍÓØÛÝÞÝÛÙÕÑÍÈÄÀ½º¸·¶¶¶·¹»½ÀÃÅÈËÍÏÑÒÓÔÔÓÓÒÑÐÐÏÎÍÍÌÌÌÌÌÌÌÌÍÍÍÎcddddeeffgghiijjkkllmmnopqsvy}§°¸ÁÉÐÖÛÞáááàÝÛ×ÔÐÍÉÆÄÂÁÀÀÀÀÂÃÅÇÈÊÌÎÐÑÒÓÓÓÓÒÒÑÐÏÏÎÍÍÌÌÌËËËÌÌÌÍÍÍÎiiiijjkklmnnoppqrrssttuvwxz}¤¬´½ÅÌÓÙÞáãääãáßÜÙÖÓÐÎÌÊÉÈÈÈÈÉÉËÌÍÎÐÑÑÒÓÓÓÓÒÒÑÐÏÏÎÍÍÌÌËËËËËËÌÌÌÍÍÍoooppqrrstuvwwxyzz{{||}~ £ª²ºÂÉÐÖÜàãåææåäâàÝÛØÖÔÒÐÏÎÎÎÎÎÏÏÐÐÑÒÒÓÓÓÓÒÒÑÑÐÏÏÎÍÍÌÌËËËËËËËÌÌÌÍÍÍvvwwxyyz{|}~ ¤ª±¸ÀÇÎÔÚÞâåæçççæäâàÞÜÚØ×ÕÔÓÓÒÒÒÒÒÒÓÓÓÓÓÓÓÒÒÑÐÐÏÎÎÍÍÌÌËËËËËËËËÌÌÌÍÍÍ~ ¢§¬²¹¿ÆÌÒØÝáäæèèèèæåãâàÞÝÛÚÙØ×ÖÖÕÕÕÔÔÔÔÔÓÓÒÒÑÑÐÐÏÎÎÍÍÌÌËËËËËËËËËÌÌÌÌÍÍ ¢¥¨¬°µºÀÆÌÑÖÛßãåçèèèçæåãâàßÞÜÛÚÙØØ××ÖÖÕÕÔÔÓÓÒÒÑÑÐÏÏÎÍÍÌÌÌËËËËËËËËËËËÌÌÌÌÍ ¡¢£¤¥¥¦§§¨ª«°²¶º¾ÃÇÍÒÖÛßâåçèèèèçæåãâàßÞÝÜÛÚÙÙØ××ÖÖÕÔÔÓÒÒÑÐÐÏÎÎÍÍÌÌÌËËËËËËËËËËËËËÌÌÌÍ ¢£¤¥¦¨©ª«¬®¯°°±²²³µ¶¸º¼¿ÃÇËÏÓ×ÛßâåæèèèèçæåãâáßÞÝÜÛÚÚÙØØ×ÖÖÕÔÔÓÒÒÑÐÐÏÎÎÍÍÌÌÌËËËËËËËËËËËËËËËÌĮ̀¨©ª«¬®¯°²³´¶·¸¹ºº»¼¼½¾¾¿ÁÂÄÆÉÌÏÒÖÙÝàãåçèééèçæåãâáßÞÝÜÛÚÙÙØØ×ÖÖÕÔÔÓÒÒÑÐÐÏÎÎÍÍÌÌÌËËËËËËËËËËËËËËËËÌÌ̳´´µ¶·¸¹º¼½¾¿ÁÂÃÄÄÅÆÆÇÇÈÉÊËÌÎÐÒÔ×ÚÜßâäæèééééèçåãâàßÝÜÛÚÙÙØØ×ÖÖÕÕÔÓÓÒÑÑÐÏÏÎÎÍÍÍÌÌÌÌËËËËËËËËËËËËËËËËË̾¿¿ÀÁÂÃÄÅÆÇÉÊËÌÍÎÎÏÐÐÑÑÒÒÓÔÕרÚÜÞàãåçèêêëëêéçæäâàßÝÜÚÙØØ×ÖÖÕÕÔÔÓÓÒÑÑÐÐÏÏÎÎÍÍÌÌÌÌÌËËËËËËËËËËËËËËËËÌÌÌÉÉÊÊËÌÍÎÏÐÑÒÓÔÕÖרØÙÙÚÚÛÛÜÝÝßàáãäæèéëìììììêéçåãáßÝÛÚÙØ×ÖÕÕÔÔÓÓÓÒÒÑÑÐÏÏÎÎÎÍÍÌÌÌÌÌËËËËËËËËËËËËËËËËËÌÌÌÒÓÓÔÕÕÖרÙÚÛÜÝÞßßààááâââããäåææèéêëìíîïïîîìëéçäâàÞÜÚØ×ÖÕÔÔÓÓÒÒÒÑÑÐÐÐÏÏÎÎÎÍÍÍÌÌÌÌËËËËËËËËËËËËËËËËÌÌÌÌÌÛÜÜÝÝÞßßàáâãääåææççèèèéééêêëëìíîïïðññññðïíëéçäáßÝÚÙ×ÖÔÔÓÒÒÑÑÑÐÐÐÏÏÏÎÎÎÍÍÍÍÌÌÌÌÌÌËËËËËËËËËËËËÌÌÌÌÌÌÌÌãããääåææçèèéêëëììíííîîîîïïïððññòóóóôôóòñðîìéæäáÞÜÚØÖÔÓÒÑÑÐÐÐÏÏÏÏÏÎÎÎÎÍÍÍÍÍÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌééêêëëììííîïïððñññòòòóóóóóôôôõõõöööööõôòñïìéæäáÞÛÙ×ÕÓÒÑÐÐÏÏÏÏÎÎÎÎÎÍÍÍÍÍÍÍÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌïïïðððññòòòóóôôõõõõöööööö÷÷÷÷÷øøøøøø÷öõóñïìéæãàÝÛØÖÔÓÑÐÐÏÏÎÎÎÎÎÍÍÍÍÍÍÍÍÍÍÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌóóóôôôõõõööö÷÷÷øøøøùùùùùùùùúúúúúúúùùø÷öôòïíêçãàÝÛØÖÔÒÑÐÏÎÎÎÍÍÍÍÍÍÍÍÍÍÍÍÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÍÍÍÍÍÌÌÌÌÌ \ No newline at end of file Index: milena/sandbox/abraham/morpho/images/test_4.pgm Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Property changes on: milena/sandbox/abraham/morpho/images/test_4.pgm ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Index: milena/sandbox/abraham/morpho/tikz.h --- milena/sandbox/abraham/morpho/tikz.h (revision 0) +++ milena/sandbox/abraham/morpho/tikz.h (revision 0) @@ -0,0 +1,37 @@ +#ifndef TIKZ_H +# define TIKZ_H + +#include <fstream> + +namespace mln { + namespace io { + namespace tikz { + + template <typename I> + void save (const Image<I>& input, std::string filename) + { + const I& ima = exact(input); + + std::ofstream file(filename.c_str()); + file << "\\begin{tikzpicture}" << std::endl; + file << "\\tikzstyle{every node}=[draw,shape=rectangle, minimum width=1cm, minimum height=1cm]" << std::endl; + + typename I::fwd_piter p(ima.domain()); + + int i = 0; + + for_all(p) + file << "\\path " << p.to_point() << "node[fill=black!" << ((255 - ima(p)) * 100) / 255 << "] (p_" << i++ << ") { \\scriptsize " + << ((ima(p) < 127)?("\\color{white}"):("")) << ima(p) << "};" << std::endl; + + file << "\\end{tikzpicture}" << std::endl; + } + + } // namespace tikz + } // namespace io +} // namespace mln + + + + +#endif // !TIKZ_H Index: milena/sandbox/abraham/morpho/test_watershed.cc --- milena/sandbox/abraham/morpho/test_watershed.cc (revision 1887) +++ milena/sandbox/abraham/morpho/test_watershed.cc (working copy) @@ -13,6 +13,8 @@ #include <string> #include <iostream> +#include "tikz.h" + int print_and_exit (std::string s) { std::cerr << s << std::endl; @@ -26,15 +28,41 @@ typedef image2d<int_u8> image2dint; - image2dint input, mverif; + image2dint input, mverif, wverif; + + #define TEST + io::pgm::load(input, "./images/test_watershed.pgm"); - // io::pgm::load(input, "./images/lena.pgm"); + // io::pgm::load(input, "./images/test_3.pgm"); + // io::pgm::load(input, "./images/lena_light.pgm"); io::pgm::load(mverif, "./images/result_m_watershed.pgm"); + io::pgm::load(wverif, "./images/result_topo_watershed.pgm"); morpho::basic_najman< image2d<int_u8>, neighb2d> n(input, c4()); + + /* + image2dint::fwd_piter it(input.domain()); + for_all(it) + { + input(it) = input(it)/17; + mverif(it) = mverif(it)/17; + } + */ + + io::tikz::save(input, "start.tex"); + + std::cout << "Building Component tree..." << std::endl; + n.go(); + + std::cout << "M-Watershed" << std::endl; + n.m_watershed(); + io::tikz::save(n.pima, "step.tex"); + +#ifdef TEST + bool equal = true; equal = n.pima == mverif; @@ -47,7 +75,31 @@ else std::cout << "M-Watershed good as chocolate ice cream" << std::endl; - // n.w_watershed(); +#endif + + std::cout << "W-watershed" << std::endl; + + n.w_watershed(); + + // for_all(it) + // n.pima(it) = n.pima(it) * 17; + + +#ifdef TEST + equal = n.pima == wverif; + + if (!equal) + { + std::cout << "W-Watershed broken" << std::endl; + return 1; + } + else + std::cout << "W-Watershed good as chocolate ice cream" << std::endl; +#endif + + io::tikz::save(n.pima, "end.tex"); + + // n.image_output(n.pima); io::pgm::save(n.pima, "out.pgm"); Index: milena/sandbox/abraham/morpho/Makefile --- milena/sandbox/abraham/morpho/Makefile (revision 1887) +++ milena/sandbox/abraham/morpho/Makefile (working copy) @@ -11,6 +11,6 @@ all: tree -test_watershed.o: basic_najman.hh +test_watershed.o: basic_najman.hh tikz.h test_component_tree.o: basic_najman.hh test.o: basic_najman.hh \ No newline at end of file