Commit 4887a2e3 authored by Guillaume Lazzara's avatar Guillaume Lazzara
Browse files

Update tutorial.

	* doc/tutorial/doxyfile_tuto.local: new doxyfile. Generate only the
	tutorial.

	* doc/tutorial/figures/extend-1.ppm,
	* doc/tutorial/figures/extend-2.ppm,
	* doc/tutorial/figures/extend-3.ppm,
	* doc/tutorial/figures/extend-4.ppm,
	* doc/tutorial/figures/extend-5.ppm,
	* doc/tutorial/outputs/extend.txt: new reference files for the new
	example.

	* doc/tutorial/samples/Makefile.am,
	* doc/tutorial/samples/extend.cc: new example for the tutorial,
	related to the image extension.

	* doc/tutorial/samples/ima2d-rot.cc: use extended_to().

	* doc/tutorial/tools/todoxygen.sh: support keyword subsubsection.

	* doc/tutorial/tutorial.tex: add more details about image extension.

git-svn-id: https://svn.lrde.epita.fr/svn/oln/trunk@3419 4aad255d-cdde-0310-9447-f3009e2ae8c0
parent 29408f14
2009-02-24 Guillaume Lazzara <z@lrde.epita.fr>
Update tutorial.
* doc/tutorial/doxyfile_tuto.local: new doxyfile. Generate only the
tutorial.
* doc/tutorial/figures/extend-1.ppm,
* doc/tutorial/figures/extend-2.ppm,
* doc/tutorial/figures/extend-3.ppm,
* doc/tutorial/figures/extend-4.ppm,
* doc/tutorial/figures/extend-5.ppm,
* doc/tutorial/outputs/extend.txt: new reference files for the new
example.
* doc/tutorial/samples/Makefile.am,
* doc/tutorial/samples/extend.cc: new example for the tutorial,
related to the image extension.
* doc/tutorial/samples/ima2d-rot.cc: use extended_to().
* doc/tutorial/tools/todoxygen.sh: support keyword subsubsection.
* doc/tutorial/tutorial.tex: add more details about image extension.
2009-02-23 Fabien Freling <fabien.freling@lrde.epita.fr>
 
Add DICOM support.
# Doxyfile 1.5.6
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "Milena (Olena)"
PROJECT_NUMBER = "User documentation 1.0 $Id: ChangeLog 2542 2008-10-10 13:35:03Z ballas $"
OUTPUT_DIRECTORY = ./user/
CREATE_SUBDIRS = YES
OUTPUT_LANGUAGE = English
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF =
ALWAYS_DETAILED_SEC = YES
INLINE_INHERITED_MEMB = YES
FULL_PATH_NAMES = YES
STRIP_FROM_PATH = ../../../milena \
../../milena
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO
QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
DETAILS_AT_TOP = NO
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 8
ALIASES =
OPTIMIZE_OUTPUT_FOR_C = NO
OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
BUILTIN_STL_SUPPORT = YES
CPP_CLI_SUPPORT = NO
SIP_SUPPORT = NO
IDL_PROPERTY_SUPPORT = YES
DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES
TYPEDEF_HIDES_STRUCT = NO
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL = NO
EXTRACT_PRIVATE = NO
EXTRACT_STATIC = NO
EXTRACT_LOCAL_CLASSES = NO
EXTRACT_LOCAL_METHODS = NO
EXTRACT_ANON_NSPACES = NO
HIDE_UNDOC_MEMBERS = YES
HIDE_UNDOC_CLASSES = YES
HIDE_FRIEND_COMPOUNDS = YES
HIDE_IN_BODY_DOCS = YES
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = YES
HIDE_SCOPE_NAMES = YES
SHOW_INCLUDE_FILES = YES
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = YES
SORT_GROUP_NAMES = YES
SORT_BY_SCOPE_NAME = NO
GENERATE_TODOLIST = NO
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_DIRECTORIES = YES
SHOW_FILES = YES
SHOW_NAMESPACES = YES
FILE_VERSION_FILTER =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = YES
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = .
INPUT_ENCODING = UTF-8
FILE_PATTERNS = *.cc \
*.hh \
*.hxx \
*.hcc
RECURSIVE = YES
EXCLUDE = user
EXCLUDE_SYMLINKS = YES
EXCLUDE_PATTERNS = *spe.hh
EXCLUDE_SYMBOLS = *::internal*
EXAMPLE_PATH = /lrde/stockholm/lazzara/svn/olena/git/oln/milena/doc/tutorial/samples \
/lrde/stockholm/lazzara/svn/olena/git/oln/milena/doc/tutorial/outputs \
/lrde/stockholm/lazzara/svn/olena/git/oln/milena/doc/tutorial/examples \
/lrde/stockholm/lazzara/svn/olena/git/oln/milena/doc/examples \
/lrde/stockholm/lazzara/svn/olena/git/build/milena/doc/tutorial/samples \
/lrde/stockholm/lazzara/svn/olena/git/build/milena/doc/tutorial/outputs
EXAMPLE_PATTERNS =
EXAMPLE_RECURSIVE = NO
IMAGE_PATH = /lrde/stockholm/lazzara/svn/olena/git/oln/milena/doc/tutorial/figures \
/lrde/stockholm/lazzara/svn/olena/git/build/milena/doc/tutorial/figures \
/lrde/stockholm/lazzara/svn/olena/git/oln/milena/img
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = YES
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
REFERENCES_LINK_SOURCE = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = YES
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_OUTPUT = html
HTML_FILE_EXTENSION = .html
HTML_HEADER =
HTML_FOOTER =
HTML_STYLESHEET =
HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = NO
GENERATE_DOCSET = NO
DOCSET_FEEDNAME = "Doxygen generated docs"
DOCSET_BUNDLE_ID = org.doxygen.Project
HTML_DYNAMIC_SECTIONS = YES
CHM_FILE =
HHC_LOCATION =
GENERATE_CHI = NO
CHM_INDEX_ENCODING =
BINARY_TOC = NO
TOC_EXPAND = NO
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = FRAME
TREEVIEW_WIDTH = 250
FORMULA_FONTSIZE = 10
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = NO
LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
EXTRA_PACKAGES =
LATEX_HEADER =
PDF_HYPERLINKS = YES
USE_PDFLATEX = YES
LATEX_BATCHMODE = YES
LATEX_HIDE_INDICES = NO
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
RTF_OUTPUT = rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
MAN_OUTPUT = man
MAN_EXTENSION = .3
MAN_LINKS = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
XML_SCHEMA =
XML_DTD =
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = YES
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED = "mlc_unqualif(T)=typename mln::metal::unqualif<T>::ret" \
"mln_piter(T)=typename T::piter" \
"mln_fwd_piter(T)=typename T::fwd_piter" \
"mln_bkd_piter(T)=typename T::bkd_piter" \
"mln_qiter(T)=typename T::qiter" \
"mln_fwd_qiter(T)=typename T::fwd_qiter" \
"mln_bkd_qiter(T)=typename T::bkd_qiter" \
"mln_niter(T)=typename T::niter" \
"mln_fwd_niter(T)=typename T::fwd_niter" \
"mln_bkd_niter(T)=typename T::bkd_niter" \
"mln_viter(T)=typename T::viter" \
"mln_fwd_viter(T)=typename T::fwd_viter" \
"mln_bkd_viter(T)=typename T::bkd_viter" \
"mln_result(T)=typename T::result" \
"mln_enc(T)=typename T::enc" \
"mln_value(T)=typename T::value" \
"mln_qlf_value(T)=typename T::qlf_value" \
"mln_pset(T)=typename T::pset" \
"mln_sum(T)=typename mln::value::props<T>::sum" \
"mln_vset(T)=typename T::vset" \
"mln_rvalue(T)=typename T::rvalue" \
"mln_lvalue(T)=typename T::lvalue" \
"mln_mesh(T)=typename T::mesh" \
"mln_coord(T)=typename T::coord" \
"mln_site(T)=typename T::site" \
"mln_psite(T)=typename T::psite" \
"mln_dpsite(T)=typename T::dpsite" \
"mln_accu_with(A, T)=typename A::template with< T >::ret" \
"mln_trait_op_plus(L, R)=typename mln::trait::op::plus< L , R >::ret" \
"mln_trait_op_minus(L, R)=typename mln::trait::op::minus< L , R >::ret" \
"mln_trait_op_times(L, R)=typename mln::trait::op::times< L , R >::ret" \
"mln_trait_op_div(L, R)=typename mln::trait::op::div< L , R >::ret" \
"mln_trait_op_mod(L, R)=typename mln::trait::op::mod< L , R >::ret" \
"mln_trait_op_uminus(T)=typename mln::trait::op::uminus< T >::ret" \
"mln_ch_value(I, V)=typename mln::trait::ch_value< I, V >::ret" \
"mlc_unqualif_(T)=mln::metal::unqualif<T>::ret" \
"mln_piter_(T)=T::piter" \
"mln_fwd_piter_(T)=T::fwd_piter" \
"mln_bkd_piter_(T)=T::bkd_piter" \
"mln_qiter_(T)=T::qiter" \
"mln_fwd_qiter_(T)=T::fwd_qiter" \
"mln_bkd_qiter_(T)=T::bkd_qiter" \
"mln_niter_(T)=T::niter" \
"mln_fwd_niter_(T)=T::fwd_niter" \
"mln_bkd_niter_(T)=T::bkd_niter" \
"mln_viter_(T)=T::viter" \
"mln_fwd_viter_(T)=T::fwd_viter" \
"mln_bkd_viter_(T)=T::bkd_viter" \
"mln_result_(T)=T::result" \
"mln_enc_(T)=T::enc" \
"mln_value_(T)=T::value" \
"mln_qlf_value_(T)=T::qlf_value" \
"mln_pset_(T)=T::pset" \
"mln_sum_(T)=mln::value::props<T>::sum" \
"mln_vset_(T)=T::vset" \
"mln_rvalue_(T)=T::rvalue" \
"mln_lvalue_(T)=T::lvalue" \
"mln_mesh_(T)=T::mesh" \
"mln_coord_(T)=T::coord" \
"mln_site_(T)=T::site" \
"mln_psite_(T)=T::psite" \
"mln_dpsite_(T)=T::dpsite" \
"mln_accu_with_(A, T)=A::template with< T >::ret" \
"mln_trait_op_plus_(L, R)=mln::trait::op::plus< L , R >::ret" \
"mln_trait_op_minus_(L, R)=mln::trait::op::minus< L , R >::ret" \
"mln_trait_op_times_(L, R)=mln::trait::op::times< L , R >::ret" \
"mln_trait_op_div_(L, R)=mln::trait::op::div< L , R >::ret" \
"mln_trait_op_mod_(L, R)=mln::trait::op::mod< L , R >::ret" \
"mln_trait_op_uminus_(T)=mln::trait::op::uminus< T >::ret" \
"mln_ch_value_(I, V)=typename mln::trait::ch_value< I, V >::ret" \
"mln_ch_value(I, V)_=mln::trait::ch_value< I, V >::ret" \
"mln_morpher_lvalue(I)=typename internal::morpher_lvalue_<I>::ret" \
"mln_concrete(I)=typename mln::trait::concrete< I >::ret" \
"mln_concrete_ch_value(I, V)=typename mln::trait::ch_value< typename mln::trait::concrete< I >::ret, V >::ret" \
"mlc_const(T)=typename mln::metal::const_< T >::ret" \
"mlc_const_return(T)=typename mln::metal::const_return_< T >::ret" \
"mln_element(T)=typename T::element" \
"mln_element_(T)=T::element" \
"mln_delta(T)=typename T::delta" \
"mln_delta_(T)=T::delta" \
"mln_dpoint(T)=typename T::dpoint" \
"mln_dpoint_(T)=T::dpoint" \
"mln_point(T)=typename T::point" \
"mln_point_(T)=T::point" \
"mln_gradient_component(I)=typename mln::trait::ch_value< I, mln::value::props< typename I::value >::sum >::ret" \
"mln_gradient(I)=mln::value::stack_image< I::point::dim, mln::trait::ch_value< I, mln::value::props< typename I::value >::sum >::ret >"
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::additions related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES
MSCGEN_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
DOT_FONTNAME = FreeSans
DOT_FONTPATH =
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = NO
TEMPLATE_RELATIONS = YES
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 1000
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# Configuration::additions related to the search engine
#---------------------------------------------------------------------------
SEARCHENGINE = NO
P6
# Generated by Milena 1.0 http://olena.lrde.epita.fr
# EPITA Research and Development Laboratory (LRDE)
64 64
255
yt߃lށnpwtde>WHYKVKVKUSXZZ_\b`ebc_dafbeaeaecgcgeggd`fcc_gaeafccacbbaabaa[aQYZZzo݈q~j݀nނmhހg݃j݄nzќ鴈NZY]\]^b\]^_]^`b_^Z^nimlkinrj_Z;PCRISHQHPQVY\^Z_[b_c_c]d`d_d_dacacadaa^d`b\eac_c_b``^`_`_`_[`RZNYnk߄somlihހiۀkۄmÏљtgRYZ][][]\]]]_^b`DR_Amklnqokb_<NBNIRGPFNPTXY\Y`]b]b_b`c^c`c`b^cab`bacac`a]gdebcab^a_^]`__^]aU\LX`d~svqpmlހj~l}kuћ,SYV[Z\]^_abbfb?P[B]?mlorroj_W8JBNHRHPHPNRXX\Z^[`]_^aaa^a__]aadc\ZZW]\][^\``cbcb_]_^^\]\_^\`V]MX\fzuwtojl߁m݀n~lzi֠ҌpRW[\\\]_cb<O\B\<d?nnsqlli^U8JBOGPFOEPOTVXZZ][_]][___^``ac_^``[ZYYZXZYZY^_acce___^]]\]]][_U\MYXbspށtt߅olnn߂m~nyiߋjҙП_bSW\]bb<OZBaEd@b>pppfhnj]V6JBOFPFOFNNTWWZY[Y\]\\]`]^___a]^__]^acikqqml]^\^]`]``c]`]]]\Y]S\NZU_olyq݀t߂o߀nkl}jxiueraڧ~NVX]=NZ>^BeD`?]<oqen[gok^V6H>MFQFNGNOTVWYX\Y\\^^^_\^^^^^bhu}{ȉ͘ҦХӪϘssW\_d^c\_[]W\R[MYT]nitmyqq}m}j{gverepbqb݁jΛإwh;MX>]?cCaB]=_;pmeV]Vjmk^V1G<MANCLFOMTTUXYYX[Z[\]^cfntbmkupvz}Ȃ̐ϛҥ֬ٲ޹ћ_hX`X^W\SYNWIUS[oitkvoyr{luescscpcnao`oa}۬ݤW>Z?dBaA^A]?`;szc?IYTimj\S.E9KAOCOEQJRPUSVXZZ[YYd]S\[b]fioiqnsx|ʈҝէ׬۳ݶݼسosMWPXQYMYGTQ[qjxlsmpltksgpbsdqcpdresfzk~9LV>bAdB^@^@`?X9oZT1FZVjqg[T-D;MCSCQDPKTQXRVUXWY\[ZYNVU\^dchjmlqsv~ϔקگܴ޹ܹڻĹʝJWKVGUFVP]um~ovl]`]_ujqdsepcqesfvizj0IW=`?d>^>`C_Dd F?Ur`;J5H[WioiYS/F;MAPERDRKTQUTXWYXYWXLSS\X_Za^dhlknprxxӑکܯثٴ·˿̾ɜ<MCSATO[sj}lynTY3JffshrepeqgqfxkFSW;`?dA]>c@\Dm+R<X}uLM8J6GZWjphXS0H=OAQDQEQJRQVTWWYYYLSOYU\T\X`bflmppsswvԊםӠ޺ȽŹĸȼʱqw7K<PMXtl}nzpZ`n=IVqjrgoeqhshc`^A_?gA^?cA]@f$MCewx|u8J:J7JXUjtlZW/F<MBQCOEPJQRVTWZ[RXPXPXT[X_afhlnoqpmoss΂~ҝ໯ῴ޼ĸĸȽĶ-DITtk}p|rY\h>~$B]_sgmcqitiz#CY<iCd@b@`@bFw3Yqx~zՏ~:K<L9KYXlrn[Y0J:LAODQDPJRQWQWnbEPNVOVT[[agloomompcjrwؤ൤޵۳޹øĹƺǺȼǝXhBNqg}o{rZ^n?_73FjdtjtiFRY=d?gA`AaAbAd Jkwvwъ~Ց<M:K5GVVlro\Z.H8K>MAOETJTMTV\ziFTMVNVU]aeilijij[fx}ݨܧ۪۫๭߻ླ¸ùȽ׽9Lph|m|q[^l@X8Mf޽ʾŷ_F]BgCdDbBcB]@XnxyχԌ~Ԋ{;L=L:ITTjrmYV+E6J@NBMCNHQOU{oj_ESMUOW\b]b_dcdX_τܜؗ١ڤݱܱݴܵ༳ῴøȾɵpvnfn}nWY\<rٷ̿xIf]AeA`>]?dC:\{|́}Ջ}ԋ}Ӊ{@MBN>KUSksn]Y/E:KBNDNDNKQMSy\WDQIUTYW^[dbfYa~y׊֐ۜܥۧکأ۫޴߹߼޽ٲĺżſۄw}ewd^eۻʼƸƺ~Mf_Ca?_=d?_Cq{~~֋~Ԉ|ӈ|ӆ{COBMALXRkrq`X/D;LCNCMBKHNFP{YWFTERMVV^X_[dvs|x{{؎ڝؘڢיڡܦۨܯܱשزۼܺڻ׹ݱ}iݟ߻ǹöķi3V_C_>^=fBKe|}ԈՊ~Ԉ{҆|҄zBOAMAKXSkss`X.C:IAL@LALEM@Nh]LSHTMVV^Xbsttrpq~}Շؔؗדۜ۞ٜڤک٧خسٮ֩խϥ״ߵ߼ô¶ĹߺȽ˺WA`A\>c@1Yv|Ѐ֌Չӈ~҆|ц{AN@M@KXTjtsaY0G<KANAL@KDMEPze]XEQMWR]kmqqhkzwyz{|Չڒږڕۘؔדל٤ةץפӚџٮܶྰ޾÷໮ԖکY@_?]<fJ]p|}Ԋ׊ՊӉ~Ӊ}Ԉ{@M>J>LZWkuqcZ0G<LAM@KAKBKKT{gi]JSLWjlgjbirqpqvwz{ׅׄ֊׌،ԋՐؓؔ֕ԕϐסݮຨ߼ݸݻøȼԛ΋؝zC]\?\?aA>b{|уԌӈ~Ҋ҈}҉|҈|AN@NCM[Wktpe\.C;L?M?K@K?IQWmz`VV_cci_hmnjmiqrux|k}d~fvn~ς̈́σvόܥതầڴ۹޾¶ùǻ޶oo\fҧT<^AbCeJhu||ՉԈ~҇}҇}ч{Ј|Ѕ{CPCPEN^Vktqf[-D9J@MAM?K?HFOskX[YW_Xdikeicjgmouez`yMo>ptQ~Dy?nh$Q_$Sl|ؠᶦ߹޺ڸ޾Ķ߻ƊQWGW֛Sb\>\>a?~5Yy|҆Ԍԋ҈Іφ|΅|ЄyFRBMDN^UlsqfZ/E:J@KAL@L>I6Gxf`hgP]eibj`hdlin\r]wHu}4dm$YN}=t}Atg/bRHjtӘݰݷܴܶڸݼ޻ƔFTGVjmݟKZ]>a>`?_H`p~}ՐՍӌъψІ}Ά}΄}IUEQCK]Vksph[.E9J>LALALAJ=I؏w܃o__`h^f[g^hbn]mNjw0ak(X_Hy7js,\~Dyh.ck8hns֠ڬ׫֫حܴܹSjb|ց{y袊O\]=d@`>c>r+Swzӈ֒ՑӎыψΈ͇̄}KUFRAKWRmurh],E7I>L?K?KCLFLRV{[]_iZg^s]s[m8_x5ee#Us2c[Go)Wj Qm.dwI{`أݴԪԨңԭ۰۞7UOnd~҄䚁?N\:e>eA^<cCNftxؔՒՐԐҌЋϊ̇̄}JUFQ?KSQmvsi],D5H?M?L@LDNLRCL^`Tc[l]lXr=er'Y|6g`Ou2fh#Q`Df"Pu2eS٩ӥѢҢңⰨ볩촧[b8YUs},FZ=g>jBa=a;l$Mep}|֖ԒԑԐҎэЊΈ~̄|IVFR>JRTowvk`-E8L@OBP@MFPNUHOޔrPYVcYfZh0Qo&RZCl(Zl*[h']|@qZBe#I[s~ةج̔ҡؔ謡yusB5Z~iA`=i@l"E^;`=B^psʄ|ҎԒӏԏԏьъЉ~΃{HREP?LRTnxula1J8KCRERBOLTUXOSnh~nQX[dRd|)OeFi&ReK_Gf Rz:pt:jXAgn٘ÍѥӢѓ߈螓첦Ʒ뜑'BdEwl#IfAk Ej C_<_Bdn}xΊɃ}ɂ}̇}Έ~эЌЉІ|ς{FRCO=JPSqxulb1L<PCRFRDQLTQVRUUVg]]e_v.Rh'YZFj%Ug!NcMdNl+^c'UZgՇۥŗԦԌ甍꟔Ǹ񵦬>NW?i|u'KgDk$FdAb>t-RstόѐΏ͌ʇ}}|Ā~Ɂ{̄|ЁyDOAN>KPUszwk_0J:ODSESDQKQSU^^ZXNYf~AXl.`k2e[Co*X\Be!Oh%Z`!QE[̅ؗפҦejhp܁隓뚐﹨ﲠ>PX<Vo:Yk%Jm&Ha@_APgtuӎ~юЎ}ђЎɈ}Ä}~||z{zxDRFQ>KMRqyzna1L;ODSCPBMHPTYrkS\BbIWw._l-cu<n\Ja"OdJ_Fj+[s.O|ި՜ўcechYb8M[e捆쟒쨙wtMZ8Jb=EcKcm%Hh Db@fGfr}xՌ|щ|Ј{Ί}ϋ|ˈ{Ɉ}ȉÃ}rzBO@N9HHOnvxoa/F7IBN?J<Iai|n{ncf{,Nl/a{@vDz]Ok,\V@p4daDU=inݟ๫ɐ)Aw<o>~1N.JZaps엎񸧲`g,JuAu?c;<\Xln%Ic>b?r*OrtЈz҈zІyцyχzχz̆yɆ|dž~{~v|BO>M4FDLny{m_1F;KBLCM7Gcj܏`by*Mj+^i([h*aRXC\Gh%P\>XA9Y̊ܯ֩IU}?9T9^߷J\MWdj힖ۛ2SFiWjg7^;8Zbts+La=_?JayvҊ{Іzσxσxσxτy˃xŀ{}|vzqx|}EQ?M2FALn{|qb6HALJR:ILfyvyk.^r8ng*]l0fy@x]h*YY=`A\=]Arwۤҥ[bfm`kWhr؏u{W`_gۙfxm9N|>aA}4Xl|t+L_=fBdnɀzЇz̈́x̂y͇}̄ẑx}vxwuxzԜ⬇BO9K,B;Hp{ta4E@JIOakdz|:eb Ph*bUk0df(_{HSm5a[?]?U@IWՓӨHR`ix}~{~{އ~clZe靝踰|akJV,Bf=v,Swn#E`<o%Gor·|΅ẑy˃zʁxȁy}wyvsuі泅贄賅:M2H&@8Ho{|ta3D?NXlgVt9il+`OK~VEb$WzCwxHwJdaDWAi*Osu۲=PKT`gwz猈藑痑斐~~kqZc揑ߋioYc3IlAp"Iāe<_;>VvtЊ|ͅ{ʃ|Ƀzǀx}yywstҗ캇칅鴃鸍/H,E#A5Gp{|sb4FAQLWOyEx}9kl2iTi+\\DZDa"Jb>Yjw3PO;MZآcm#BPX^cprꗏ隐瑆yvkm[`ㄇĻވot[d+Ek@lCɅd@e>X_̄{ψy̆{ʁyz~x|xtuƃx춃캆ĝ/K-KvB3Go{wqa.ERlb@jRo5is>z`r9h`IT=~.K~,Qow>Q_@psĞW<'BLT]ako|{艃鏇犁om`dV[v|ȿ݃lsY`qCr"Cg?yr-LfAnkъyчw̅yɂzy|wxvss~Ŗʡĝ2K-Ht<-Bo|ys_1ILgVw7hF{p3ns?wao7i\HY?:VO\x.JV<[eLjq1K]<1FJR[_fjst{y~{be^c]bmqƹ|jpLY[?u%Df;lx?Wy/LxnЊzͅw˂vȂyŁy}wts̉xﺁ︂Ĕțȟɥ2I,D!>;Lq}|uf9R>NLj5gFwo;ql1jUa\Ek#DWD~=a[>x9Uڠ`hX7d>:LKOX[cgqrvv~{zfjTXHQTZ蠖xxfk.KZCx%Bk;]oI^LYrΈz˃xɂyƀy~v{urs|ǜʡ˦ʦ/E,D&AR^wy}xf3H<MVop)]r3in4er6pTco3`K\YG|9^m}\e{}YBf"FeBEUOUX[`elmrt{{}ywil{y┓堖txYc\E_F0Ip>JbSegdЃt͇z˃xǁyƀy~xzuuq~Țȝˠ̥˪)B&@#?Ubxy|ye2DBZXty1gv;ic'Ym/bv=r|F}\}3Uy/QtXbh&Fd<p!?d<FXLSY[`chjijrrvuutzyꬡ鯦䞕nu8SZDf F/Gr<6Tcnsdφv˅zȁxŀz}w}wxqzq~ŒɚɜˡΫͮx?#@#?Sa{}}ye5NKdRmj([i+[d(]zDz{Awr9pWDnÇѣW`y>Vl@b:t#Ai<>RBLZZ]\fgjhSVWY]^Z[`aimahcm_D]Cn#E1Gv!>r(LoryfΈx˄xǀxāyx|vvr}p̞˜˟ͨЮϭm@z ?(DXdx||yvOjD`Nop/^ZJn2i[w@zKw?seىnndj^B_;f<p @mA4K9HRSWY`bombbPWR]jz~xnr9Q]A]>p A3Iz(DkF~y~n͉xʆyɄyÁxy~wur˄rɗ͠͡ΥЪϨ̣g>p:)CQ[u}|s,HVr8^z@i_#Uj.fiWwC{ak΄q`#KdE`AdBm!Bn B~/I+CDKPT[^fiij^aZ]Xb_mnw]c]A^Af@t"A3I+Em!Hф|Ѓsˉxɇ{ʇyą{y|xrpˇvѣТѩѨ˝ɚɛb=d=8LT[p|~yi-HMm{3_m.X`&W]VihWSR}ǎo/N[EgBaAc@g@o?n?x$@.@DLW\cgimnrvx䇄぀wx-HVBbDi@v$D6J-Dq Eҋ˃sʋ{ƈ}dž|Æ}||xoqȌ{֨ѤХϤ͡˞ɝ_?\?4IVZq{|zf.G>[f$Sp3]e'WYRXo9qhh^D_\!K]Fo"Dd@bA`>k?l@p"Av=";DLY`invx剈按㊈jncCY Kg$Gf?{,I:N0Fu$GҌŀvƆ{Ä~|~{yxmpѝקΜѤΠƗӑt_@X={&BLTr{{teYmVsa#Ql(Tf$QTKhw?t}I}^{ed1\YF{)Fc@_@b?b?l!Bm A(A0HCTS_aiou~~߆ۄ{zn7YZ#Md!GaA|.J?T6L,LІ|^`eforxw||{vwfn䶑М̚ʙʃly.Ed=8ShAq>5Gzl{~߉I]}>_SEq-Wf%Sm+ZxEwWYV[Spb)Sy'Fg"F_Ca@a@hBkAz%BLW[`_dhknprrts紟輧wA^U?{-J=T3K3Q}ujjbdZbT^W`^fci\hƐə“ɂpr#Bs"A5JuUg/G}#>tiz~yj`ui+NP>}Aoh,_Cp`%XL|PtBybmMrGlm Dh"DaC_CbEfCw'Eq"CKUX]^chjklln|w⚉毖鶜ìxl$E5N,F8U|u|vvtpsekWaJYYZDQʗǖǀjx'B/G:L9KqXe{"?vk|yuuYC\De$Nn,Ui)Wj/[k5ee+^p:qXyS}Xyl/Vf#IeF^Gg#Hk#G7Lr!CLWW]cgijkjqoz⒄䡍笑췚¦ʴm A})D>XzrÀy|wyxtvlrdmgYg[ɗΜ鲂2I;M>OIT?Pu5Vy#Axl~|nTkQ>_H]G[Iw;gYGe)Ys8kt;q}Leww?hNjb@kA]Ai#Gh?DO~$AHU_acejhkjrou}㘅植겕。DZѽTgl<CWyot|tyvwwrujop\ܓnО̗}e7MBRMWBQHZXAm=xi{|iOdUC_GXCb$Tp6aaIb$Rf)[{EzzE{ekq5cYteAq%D_AeBo?FM)BKU]]echdkgsozrzⓄ䠍殕Ʋν۵]6LX|qr|sxusroqgf|ŽҞ򿈮OP?ONVDQDRK_O 8}m<wf{{g?Z^HY?UBxBpf*Ta!KYCZIk1d|J~dqpzLnjAn!Be@cB1FVW0FNTaafcfbhdpkwox㜊嫔빣Ų̻ӿt6QTXƀu~t{swrrpjl|nϟ̗ќߑh@JCNOU@QL[G]K
6us%Bte|}pBeWCZ@`!Le'Rg(Q`!KXC]Mh,Zl8mpOzNq}Bd=_~7Vh@n>DMZ\0GTXbajffbd_kesm~v|┆䨒趢ȸϿqy_\Áu|syqxrsrjkՌt͚̕ċfWFLHNEODSH[>VN 9dxz/Iqcz{oCbXA[Fe%N]Ka"KZI[H_"Qk3dtDycUx?iaEh Bn$Db>)APTZ\3L^^hfjfhdfbibpjzs߄zᐁ⠋沜꾮ƶ˽Ԩha}t}v|uzutsol}dzϙvQQCMAL;MHXCYD\M 8Vo<Ql_yzkPeYD` IWDa"Nb&P_ J[Fc&Sj2cl5dj9el4egcA_<]:e;:HVWDPBQdajgnijdgahbojwo~tߊ|ᚅ䬖躨Ŷ˽̻e_HR\_omxtzv~pu_ًkҘߊbDL>M4HFVBVFZ7NL 6Lg£IZg]x{jFc^GW@_ K_!M_"Mc"JXB[Kj5jcv<mz?hf$J];Z:Z8(@MORR(DYZdajglflehaf^kbrj{o߆x㤏涤´ʻϿps;L6H4G7KGVtgӊf}ĈTM,C7IASBVDXG]q#A~/GUiǩ\fg^xz݀kEbYD]F\E[Hb#Me$NVBZD^JuDtkO{Z=X:U9i:<HRQ.B@Mc\gbidkgmhkbg`i`mdwk߁s|㝉寝龮ǹ̾ҝIULU<Ns'DV;d^r֌c$@,D;QFX9PMa>Un!?BVkyĨmpf^yz|iCaXC[D]FYEb%Pc(S_"Md&Re'Th,\Mzu>fW>V;X8.BBH*@5FZWc]hajdjemfngkdkdjarg{n߈zᒂ㦓淨ĶʼIJCQPWIT<O|.Hg`Ё^*A{&A3KHZ3LAXQg9Qr(Fr,IVluwd\z}܃oq*PWC_I^H`$Oj.Zf(Y|Cpe*V_'Tn3eYr8bT>W;c7z#<.DIOXW]Yb\f_hakenfsjohmelbodxlނwᏀ⠎䰠迱Ƚͼ\cJTQZN\Q[\\rb7K1F3KM^4J1KViNdt*Fm#Cc Bz<[ʫe^zzme"KYD_Ic#Oa&Rm2_] RQc)Yl5_r7br;lr:fS<d7->GJQOYV\W_X`Ze]g`iakepirkrjqgrixk~q}ᙊ⨗巩ķʻ~~DQT^]eZZQUHSMU;NCX4J1HM`]o;Sj!@j=]=n.Rطҫg`x~unbGZCe%Oo*Tj*Xv>ij(Yv:iw?nt=hg%Qg(Uy@no,R'<@DNMVR[U\V_X`Xd\d\hbjephpisiwkvjzns}ᣒ䳣辱Ǻ֦CULW[``ZXU`XOR>R;V;RDXgsG\f>i!@9K
\ No newline at end of file
......@@ -9,6 +9,7 @@ noinst_PROGRAMS = \
domain-display \
dpoint-1 \
estim-sites \
extend \
extension-ignore \
fill \
fill-call-1 \
......@@ -55,6 +56,7 @@ box2d_bbox_SOURCES = box2d-bbox.cc
domain_display_SOURCES = domain-display.cc
dpoint_1_SOURCES = dpoint-1.cc
estim_sites_SOURCES = estim-sites.cc
extend_SOURCES = extend.cc
extension_ignore_SOURCES = extension-ignore.cc
fill_SOURCES = fill.cc
fill_call_1_SOURCES = fill-call-1.cc
......
#include <mln/essential/2d.hh>
#include <mln/fun/p2b/big_chess.hh>
#include <tests/data.hh>
#include <doc/tutorial/tools/sample_utils.hh>
namespace mln
{
struct saturate_rgb8 : public Function_v2v<saturate_rgb8>
{
typedef value::rgb8 result;
value::rgb8 operator()(const value::rgb8& v) const
{
value::rgb8 v2 = v;
v2.red() > 50 ? v2.red() -= 50 : v2.red() = 0;
v2.green() > 50 ? v2.green() -= 50 : v2.green() = 0;
v2.blue() > 50 ? v2.blue() -= 50 : v2.blue() = 0;
return v2;
}
};
} // end of namespace mln
// \{
namespace mln
{
struct my_ext : public Function_p2v<my_ext>
{
typedef value::rgb8 result;
value::rgb8 operator()(const point2d& p) const
{
if ((p.row() + p.col()) % 20)
return literal::black;
return literal::white;
}
};
} // end of namespace mln
// \}
int main()
{
using namespace mln;
using value::rgb8;
border::thickness = 5;
// \{
image2d<rgb8> lena;
io::ppm::load(lena, MLN_IMG_DIR "/small.ppm");
box2d bbox_enlarged = lena.domain();
bbox_enlarged.enlarge(border::thickness);
mln_VAR(ima_roi, lena | fun::p2b::big_chess<box2d>(lena.domain(), 10));
// \}
image2d<rgb8> tmp;
initialize(tmp, lena);
data::fill(tmp, literal::black);
data::paste(ima_roi, tmp);
doc::ppmsave(tmp, "extend");
// \{
mln_VAR(ext_with_val, extended_to(extend(ima_roi, literal::blue), bbox_enlarged));
// \}
doc::ppmsave(ext_with_val, "extend");
// \{
mln_VAR(ext_with_fun, extended_to(extend(ima_roi, my_ext()), bbox_enlarged));
// \}
doc::ppmsave(ext_with_fun, "extend");
// \{
mln_VAR(ext_with_ima, extend(ima_roi, lena));
// \}
doc::ppmsave(ext_with_ima, "extend");
image2d<bool> mask;
initialize(mask, lena);
data::fill(mask, true);
data::fill((mask | ima_roi.domain()).rw(), false);
mln_VAR(ima_ext, level::transform(lena | (pw::value(mask) != false), saturate_rgb8()));
data::paste(ima_ext, lena);
data::paste(ima_roi, lena);
doc::ppmsave(lena, "extend");
}
......@@ -41,7 +41,7 @@ int main()
}
draw::box(ima2, ima2.bbox(), literal::red);
doc::ppmsave(ima2 | extended_domain, IMA2_PPM);
doc::ppmsave(extended_to(ima2, extended_domain), IMA2_PPM);
// \}
}
......@@ -30,7 +30,7 @@ sed -i -e 's/&#X2261/\&equiv/g' $out
#Doxygen wants us to preserve '\n' after commands.
#\ref and \see do not need that extra new line.
for keyword in include section page subpage subsection image; do
for keyword in include section page subpage subsection subsubsection image; do
sed -i -e "s/\\\\endhtmlonly\\\\$keyword/\\\\endhtmlonly\n\n\\\\$keyword/g" $out
sed -i -e "s/\\\\$keyword \(.*\)\\\\htmlonly/\\\\$keyword \1\n\n\\\\htmlonly\n/g" $out
done
......
......@@ -73,6 +73,13 @@
\backslash htmlonly %
}
\newcommand{\doxysubsubsection}[2]{%
\label{#1}
\backslash endhtmlonly%
\backslash subsubsection #1 #2%
\backslash htmlonly %
}
% #1 - part number (Optional)
% #2 - file name
\newcommand{\doxycode}[2][1]{
......@@ -150,6 +157,7 @@ $$
\renewcommand{\doxychapter}[2]{\chapter{#2}\label{#1}}
\renewcommand{\doxysection}[2]{\section{#2}\label{#1}}
\renewcommand{\doxysubsection}[2]{\subsection{#2}\label{#1}}
\renewcommand{\doxysubsubsection}[2]{\subsubsection{#2}\label{#1}}
\renewcommand{\doxycode}[2][1]{\lstinputlisting[frame=single]{samples/#2-#1.cc}}
\renewcommand{\doxyrawcode}[1]{\lstinputlisting[frame=single]{samples/#1.cc.raw}}
\renewcommand{\doxyoutput}[1]{\lstinputlisting[frame=single]{outputs/#1.txt}}
......@@ -564,7 +572,8 @@ restricted to the region of interest \var{roi}'. Actually this is not directly
Note the use of \code{rw()} which is mandatory due to C++ limitations. In C++,
the image created by \code{lena | roi} is \code{const}, e.g. read-only, though
\code{data::fill} expect a \code{non-const} image, e.g. read-write.
\code{data::fill} expect a \code{non-const} image, e.g. read-write. \code{rw()}
is a workaround to make it read-write.
\begin{center}
\begin{tabular}{c c c}
......@@ -1214,6 +1223,8 @@ image domain. In the library, both the concept of border and of extension can be
These concepts are useful in many algorithms and can avoid costly tests while
working with sites located on image edges.
\doxysubsection{imabordersection}{Image border}
A border is a finite extension provided to a basic image type, such as
\type{image2d}. By default, every image is created with a border. The default width is
defined through the global variable \var{border::thickness} defined in
......@@ -1234,8 +1245,6 @@ ignored while saving or printing an image.
Some operations can be performed on the border. The functions are located in
\hpath{mln/border}.\\
FIXME: More details about border manipulation! border:get(), \ldots
%
\bigskip
%
......@@ -1254,7 +1263,9 @@ resize & Set image border to a specific size.\\
\end{tabular} \\
On morphed images, decribed in section \doxyref{imamorphed}, the border concept
\doxysubsection{imextgeneral}{Generality on image extension}
On morphed images, described in section \doxyref{imamorphed}, the border concept
does not exist and is generalized to the extension concept.
A simple example of a morphed image is a sub-image. A sub image does not have
border nor extension by default.
......@@ -1264,8 +1275,6 @@ Another point is that an image can be used as extension. For instance, in the
case of a sub-image, you may be interested in extending the sub-image with the
image itself.
[FIXME: schema - voir cahier]
The extension supports the following operations. These functions are located in
\hpath{mln/extension}.\\
......@@ -1275,9 +1284,65 @@ The extension supports the following operations. These functions are located in
\begin{tabular}{l|p{10cm}}
Routine & Description \\
\hline
adjust & Adjust the extension given a structural element.\\
adjust\_duplicate & Adjust the size of the extension given a structural element and duplicate the image inner boundary.\\
adjust\_fill & Adjust the size of the extension given a structural element and fill it with a value.\\
duplicate & Duplicate the values of the image inner boundary in the extension.\\
fill & Fill the extension with a given value.\\
\end{tabular} \\
In order to extend an image, a routine \code{extend} is available in
\hpath{mln/core/routine/extend.hh}. The routine \code{extended\_to} may
also help during debug. It allows to extend the image domain to a larger
one. The values associated to the new sites comes from the extension.
\doxysubsection{extexample}{Different extensions}
Let's say we have want to extract a sub domain from an image. In the following
example, \var{ima\_roi} holds several small rectangles from the original image.
\doxycode[2]{extend}
\begin{center}
\begin{tabular}{c c c}
\doxyimg{small-enlarged} & ~\huge{\rightarrow}~ & \doxyfigure[1]{extend}{3cm} \\
\var{lena} & & \var{ima\_roi} (black color means the sites are not included in the domain) \\
\end{tabular}
\end{center}
Then, we may extend this sub image with one of the three following extension type.
\doxysubsubsection{extval}{Extension with a value}
Let's extend with the value \code{literal::blue}.
\doxycode[3]{extend}