
This is a merge commit message of the following branches: Merge: 71c9c14... c5e5514... Conflicts: ChangeLog milena/ChangeLog milena/doc/tutorial/tutorial.tex milena/tests/geom/Makefile.am milena/tests/io/pbms/load.cc milena/tests/io/pgms/load.cc milena/tests/io/ppms/load.cc scribo/ChangeLog scribo/core/object_image.hh scribo/demo/Makefile.am scribo/primitive/link/internal/anchors_3.hh scribo/scribo.mk scribo/src/binarization/Makefile.am scribo/src/binarization/sauvola_ms.cc scribo/src/debug/Makefile.am ChangeLog | 20 + build-aux/autotroll.mk | 108 +++ configure.ac | 10 +- m4/autotroll.m4 | 563 +++++++++++ milena/ChangeLog | 530 ++++++++++- milena/doc/tutorial.tex | 4 + milena/img/picasso.ppm | Bin 0 -> 244671 bytes milena/mln/accu/center.hh | 14 +- milena/mln/accu/count_value.hh | 4 +- milena/mln/accu/label_used.hh | 5 +- milena/mln/accu/pair.hh | 26 + milena/mln/accu/stat/variance.hh | 4 +- milena/mln/border/thickness.hh | 4 + milena/mln/canvas/labeling/blobs.hh | 22 +- milena/mln/convert/from_to.hxx | 31 + milena/mln/convert/to_qimage.hh | 270 ++++++ milena/mln/convert/to_qimage_nocopy.hh | 178 ++++ milena/mln/core/alias/dpoint1d.hh | 4 + milena/mln/core/alias/dpoint2d.hh | 4 + milena/mln/core/alias/dpoint3d.hh | 4 + milena/mln/core/alias/neighb3d.hh | 42 + milena/mln/core/concept/function.hh | 43 + milena/mln/core/image/image3d.hh | 9 +- milena/mln/core/image/imorph/interpolated.hh | 13 +- milena/mln/core/image/imorph/labeled_image.hh | 2 + milena/mln/core/internal/box_impl.hh | 61 ++- milena/mln/core/internal/labeled_image_base.hh | 31 +- milena/mln/core/point.hh | 51 +- milena/mln/core/routine/extend.hh | 57 ++- milena/mln/core/site_set/box.hh | 37 +- milena/mln/data/fill_with_value.hh | 3 +- milena/mln/data/paste_without_localization.hh | 310 ++++++- milena/mln/data/split.hh | 99 ++ milena/mln/debug/mosaic.hh | 141 +++ milena/mln/debug/slices_2d.hh | 15 +- milena/mln/debug/z_order.hh | 159 +++ milena/mln/draw/all.hh | 1 + milena/mln/draw/box.hh | 5 +- milena/mln/draw/box_plain.hh | 92 ++ milena/mln/draw/dashed_line.hh | 113 +++ milena/mln/draw/line.hh | 1 + milena/mln/fun/all.hh | 2 + milena/mln/fun/internal/x2x_linear_impl.hh | 20 +- milena/mln/fun/n2v/all.hh | 51 + milena/mln/fun/n2v/white_gaussian.hh | 104 ++ milena/mln/fun/v2v/all.hh | 1 + milena/mln/fun/v2v/hsl_to_rgb.hh | 3 + milena/mln/fun/v2v/qt_rgb_to_int_u.hh | 71 ++ milena/mln/fun/v2v/rgb_to_int_u.hh | 64 ++ milena/mln/fun/x2x/composed.hh | 18 +- milena/mln/fun/x2x/rotation.hh | 5 +- milena/mln/fun/x2x/translation.hh | 6 +- milena/mln/geom/all.hh | 4 +- milena/mln/geom/horizontal_symmetry.hh | 194 ++++ milena/mln/geom/nslices.hh | 68 ++ milena/mln/geom/nslis.hh | 68 -- milena/mln/geom/rotate.hh | 18 +- milena/mln/geom/size3d.hh | 5 +- milena/mln/geom/vertical_symmetry.hh | 196 ++++ milena/mln/histo/compute.hh | 15 +- milena/mln/histo/equalize.hh | 97 ++ milena/mln/io/dicom/all.hh | 4 +- milena/mln/io/dicom/get_header.hh | 107 ++ milena/mln/io/dicom/load.hh | 17 +- milena/mln/io/dump/all.hh | 1 + milena/mln/io/dump/get_header.hh | 127 +++ milena/mln/io/dump/save.hh | 3 + milena/mln/io/magick/save.hh | 21 +- milena/mln/io/plot/save.hh | 28 +- milena/mln/io/pnm/load.hh | 3 +- milena/mln/io/raw/all.hh | 49 + milena/mln/io/raw/get_header.hh | 135 +++ milena/mln/io/raw/load.hh | 226 +++++ milena/mln/io/raw/save.hh | 177 ++++ milena/mln/labeling/blobs.hh | 4 +- milena/mln/labeling/blobs_and_compute.hh | 57 +- milena/mln/labeling/colorize.hh | 75 ++- milena/mln/labeling/compute.hh | 415 ++++++++- milena/mln/labeling/pack.hh | 2 +- milena/mln/labeling/relabel.hh | 23 +- milena/mln/linear/gaussian.hh | 8 +- milena/mln/linear/gaussian/impl.hh | 13 +- milena/mln/literal/black.hh | 4 + milena/mln/literal/colors.hh | 7 +- milena/mln/literal/identity.hh | 4 + milena/mln/literal/one.hh | 3 + milena/mln/literal/origin.hh | 6 +- milena/mln/literal/white.hh | 4 + milena/mln/literal/zero.hh | 4 + milena/mln/make/box3d.hh | 15 +- milena/mln/make/image.hh | 7 +- milena/mln/math/diff_abs.hh | 5 +- milena/mln/registration/icp.hh | 5 +- milena/mln/subsampling/antialiased.hh | 457 +++++++++ milena/mln/tag/init.hh | 4 + milena/mln/topo/skeleton/crest.hh | 51 +- milena/mln/trace/entering.hh | 3 + milena/mln/trace/quiet.hh | 5 +- milena/mln/transform/influence_zone_geodesic.hh | 13 +- milena/mln/value/int_u.hh | 69 ++- milena/mln/value/internal/make_generic_name.hh | 67 ++ milena/mln/value/label.hh | 22 +- milena/mln/value/qt/rgb32.hh | 802 +++++++++++++++ milena/mln/value/rgb.hh | 11 +- milena/mln/value/sign.hh | 10 +- milena/mln/win/sline3d.hh | 76 ++ milena/mln/world/binary_2d/enlarge.hh | 4 +- milena/mln/world/inter_pixel/full2image.hh | 4 +- milena/sandbox/ChangeLog | 23 + milena/sandbox/bench/README_CFLAGS | 8 + milena/sandbox/bench/extract_vertical_lines.cc | 49 + .../bench/fast_components_and_attributes.cc | 402 ++++++++ milena/sandbox/bench/fast_rows.cc | 247 +++++ milena/sandbox/bench/fast_tiles.cc | 140 +++ milena/sandbox/bin/labeling/colorize.cc | 24 + milena/sandbox/bin/pgm_to_pbm.cc | 39 + milena/sandbox/bin/ppm_negate.cc | 43 + .../lazzara/scribo/binarization_naive/main.cc | 54 + .../lazzara/scribo/binarization_naive/toto.cc | 28 + milena/sandbox/lazzara/scribo/fill_holes/main.cc | 118 +++ .../separateurs_materialises/lines_pattern.cc | 69 ++ .../sandbox/lazzara/scribo/skeleton_crest/main.cc | 52 + milena/tests/core/alias/box3d.cc | 5 +- milena/tests/core/image/image3d.cc | 11 +- milena/tests/core/other/box_runstart_piter.cc | 56 +- milena/tests/core/site_set/Makefile.am | 2 + milena/tests/core/site_set/box.cc | 42 + milena/tests/data/Makefile.am | 4 + milena/tests/data/paste_without_localization.cc | 81 ++ milena/tests/data/split.cc | 54 + milena/tests/fun/v2v/Makefile.am | 9 + milena/tests/fun/v2v/qt_rgb_to_int_u.cc | 44 + milena/tests/geom/Makefile.am | 12 +- milena/tests/geom/horizontal_symmetry.cc | 50 + milena/tests/geom/nslices.cc | 38 + milena/tests/geom/nslis.cc | 37 - milena/tests/geom/vertical_symmetry.cc | 49 + milena/tests/io/pbms/load.cc | 3 +- milena/tests/io/pgms/load.cc | 3 +- milena/tests/io/ppms/load.cc | 3 +- .../transform/bench_closest_point_geodesic.cc | 9 +- scribo/ChangeLog | 689 +++++++++++++- scribo/binarization/binarize.hh | 180 ---- scribo/binarization/global_threshold.hh | 90 ++ scribo/binarization/global_threshold_auto.hh | 168 ++++ scribo/binarization/internal/first_pass_functor.hh | 151 +++ scribo/binarization/local_threshold.hh | 221 +++++ scribo/binarization/sauvola.hh | 23 +- scribo/binarization/sauvola_ms.hh | 1017 ++++++++++++++++++++ scribo/binarization/sauvola_ms_split.hh | 148 +++ scribo/binarization/sauvola_threshold.hh | 478 --------- scribo/binarization/sauvola_threshold_image.hh | 490 ++++++++++ scribo/binarization/simple.hh | 166 ---- scribo/canvas/integral_browsing.hh | 435 +++++++++ scribo/core/component_info.hh | 203 ++++ scribo/core/component_set.hh | 560 +++++++++++ scribo/core/init_integral_image.hh | 96 ++ scribo/core/line_info.hh | 903 +++++++++++++++++ scribo/core/line_set.hh | 418 ++++++++ scribo/core/macros.hh | 24 +- scribo/core/object_groups.hh | 178 +++- scribo/core/object_links.hh | 141 +++- scribo/core/tag/anchor.hh | 68 ++ scribo/core/tag/component.hh | 118 +++ scribo/core/tag/line.hh | 213 ++++ scribo/debug/alignment_decision_image.hh | 61 +- scribo/debug/bboxes_enlarged_image.hh | 136 +++ scribo/debug/decision_image.hh | 30 +- scribo/debug/links_decision_image.hh | 34 +- scribo/debug/looks_like_a_text_line_image.hh | 130 +++ scribo/debug/mean_and_base_lines_image.hh | 147 +++ scribo/debug/save_bboxes_image.hh | 60 ++- scribo/debug/save_linked_bboxes_image.hh | 112 ++- scribo/debug/usage.hh | 13 +- scribo/demo/Makefile.am | 3 +- scribo/demo/demo.pro | 16 - scribo/demo/demo.qrc | 13 - scribo/demo/icons/document-open.png | Bin 1550 -> 0 bytes scribo/demo/icons/edit-find.png | Bin 1636 -> 0 bytes scribo/demo/icons/format-indent-more.png | Bin 766 -> 0 bytes scribo/demo/icons/go-next.png | Bin 1219 -> 0 bytes scribo/demo/icons/image-x-generic.png | Bin 1163 -> 0 bytes scribo/demo/icons/list-add.png | Bin 601 -> 0 bytes scribo/demo/icons/ocr.png | Bin 14929 -> 0 bytes scribo/demo/icons/text-x-generic.png | Bin 744 -> 0 bytes scribo/demo/icons/view-refresh.png | Bin 2024 -> 0 bytes scribo/demo/icons/x-office-spreadsheet.png | Bin 1518 -> 0 bytes scribo/demo/review/Makefile.am | 11 + scribo/demo/review/icons/document-open.png | Bin 0 -> 1550 bytes scribo/demo/review/icons/edit-find.png | Bin 0 -> 1636 bytes scribo/demo/review/icons/format-indent-more.png | Bin 0 -> 766 bytes scribo/demo/review/icons/go-next.png | Bin 0 -> 1219 bytes scribo/demo/review/icons/image-x-generic.png | Bin 0 -> 1163 bytes scribo/demo/review/icons/list-add.png | Bin 0 -> 601 bytes scribo/demo/review/icons/ocr.png | Bin 0 -> 14929 bytes scribo/demo/review/icons/text-x-generic.png | Bin 0 -> 744 bytes scribo/demo/review/icons/view-refresh.png | Bin 0 -> 2024 bytes scribo/demo/review/icons/x-office-spreadsheet.png | Bin 0 -> 1518 bytes scribo/demo/review/review.pro | 16 + scribo/demo/review/review.qrc | 13 + scribo/demo/review/src/main.cc | 42 + scribo/demo/review/src/mainwindow.cc | 570 +++++++++++ scribo/demo/review/src/mainwindow.hh | 138 +++ scribo/demo/review/ui/mainwindow.ui | 340 +++++++ scribo/demo/shared/icons/Symbols-Delete-icon.png | Bin 0 -> 3704 bytes scribo/demo/shared/icons/accept-icon.png | Bin 0 -> 4858 bytes scribo/demo/shared/icons/close.gif | Bin 0 -> 340 bytes scribo/demo/shared/icons/crop-icon.png | Bin 0 -> 228 bytes scribo/demo/shared/icons/image-add-icon.png | Bin 0 -> 2917 bytes scribo/demo/shared/icons/image-edit-icon.png | Bin 0 -> 2305 bytes scribo/demo/shared/icons/image-multi-icon.png | Bin 0 -> 2033 bytes scribo/demo/shared/icons/image-next-icon.png | Bin 0 -> 3008 bytes scribo/demo/shared/icons/image-remove-icon.png | Bin 0 -> 3127 bytes scribo/demo/shared/icons/next-icon.png | Bin 0 -> 4611 bytes scribo/demo/shared/icons/page-down-icon.png | Bin 0 -> 3450 bytes scribo/demo/shared/icons/page-search-icon.png | Bin 0 -> 3101 bytes scribo/demo/shared/icons/rotate_ccw.png | Bin 0 -> 4200 bytes scribo/demo/shared/icons/rotate_cw.png | Bin 0 -> 4161 bytes scribo/demo/shared/icons/search-add-icon.png | Bin 0 -> 4274 bytes scribo/demo/shared/icons/search-remove-icon.png | Bin 0 -> 4196 bytes scribo/demo/shared/shared.qrc | 20 + scribo/demo/shared/src/bak/crop_item.cc | 332 +++++++ scribo/demo/shared/src/bak/crop_item.hh | 100 ++ scribo/demo/shared/src/bak/image_viewer.cc | 242 +++++ scribo/demo/shared/src/bak/image_viewer.hh | 116 +++ scribo/demo/shared/src/bak/types.hh | 50 + scribo/demo/shared/src/browse_widget.cc | 72 ++ scribo/demo/shared/src/browse_widget.hh | 78 ++ scribo/demo/shared/src/crop_item.cc | 313 ++++++ scribo/demo/shared/src/crop_item.hh | 103 ++ scribo/demo/shared/src/image_viewer.cc | 344 +++++++ scribo/demo/shared/src/image_viewer.hh | 135 +++ .../shared/src/internal.bak/interactive_scene.cc | 286 ++++++ .../shared/src/internal.bak/interactive_scene.hh | 108 +++ .../shared/src/internal.bak/selection_rectangle.cc | 241 +++++ .../shared/src/internal.bak/selection_rectangle.hh | 91 ++ .../demo/shared/src/internal/interactive_scene.cc | 87 ++ .../demo/shared/src/internal/interactive_scene.hh | 84 ++ .../shared/src/internal/selection_rectangle.cc | 241 +++++ .../shared/src/internal/selection_rectangle.hh | 91 ++ scribo/demo/shared/src/to_mln_image.hh | 77 ++ scribo/demo/shared/src/types.hh | 50 + scribo/demo/shared/ui/browse_widget.ui | 106 ++ scribo/demo/shared/ui/crop_widget.ui | 34 + scribo/demo/shared/ui/image_viewer.ui | 284 ++++++ scribo/demo/shared/ui/interactive_scene.cc | 143 +++ scribo/demo/shared/ui/interactive_scene.hh | 87 ++ scribo/demo/shared/ui/rotate_widget.ui | 34 + scribo/demo/src/main.cc | 42 - scribo/demo/src/mainwindow.cc | 570 ----------- scribo/demo/src/mainwindow.hh | 138 --- scribo/demo/ui/mainwindow.ui | 340 ------- scribo/demo/wizard/images/dematerialization.png | Bin 0 -> 76309 bytes scribo/demo/wizard/src/crop_page.cc | 48 + scribo/demo/wizard/src/crop_page.hh | 60 ++ scribo/demo/wizard/src/crop_widget.cc | 37 + scribo/demo/wizard/src/crop_widget.hh | 62 ++ scribo/demo/wizard/src/doc_type.hh | 51 + scribo/demo/wizard/src/doc_type_page.cc | 48 + scribo/demo/wizard/src/doc_type_page.hh | 61 ++ scribo/demo/wizard/src/doc_type_widget.cc | 38 + scribo/demo/wizard/src/doc_type_widget.hh | 64 ++ scribo/demo/wizard/src/load_page.cc | 70 ++ scribo/demo/wizard/src/load_page.hh | 67 ++ scribo/demo/wizard/src/load_widget.cc | 56 ++ scribo/demo/wizard/src/load_widget.hh | 64 ++ scribo/demo/wizard/src/main.cc | 15 + scribo/demo/wizard/src/main_window.cc | 129 +++ scribo/demo/wizard/src/main_window.hh | 70 ++ scribo/demo/wizard/src/mln_widgets.cc | 7 + scribo/demo/wizard/src/preprocessing_page.cc | 61 ++ scribo/demo/wizard/src/preprocessing_page.hh | 66 ++ scribo/demo/wizard/src/preprocessing_task.hh | 61 ++ scribo/demo/wizard/src/preprocessing_widget.cc | 87 ++ scribo/demo/wizard/src/preprocessing_widget.hh | 65 ++ scribo/demo/wizard/src/process_page.cc | 73 ++ scribo/demo/wizard/src/process_page.hh | 64 ++ scribo/demo/wizard/src/process_widget.cc | 80 ++ scribo/demo/wizard/src/process_widget.hh | 71 ++ scribo/demo/wizard/src/rotate_page.cc | 45 + scribo/demo/wizard/src/rotate_page.hh | 60 ++ scribo/demo/wizard/src/rotate_widget.cc | 38 + scribo/demo/wizard/src/rotate_widget.hh | 62 ++ scribo/demo/wizard/src/runner.cc | 279 ++++++ scribo/demo/wizard/src/runner.hh | 84 ++ scribo/demo/wizard/src/test.cc | 16 + scribo/demo/wizard/ui/doc_type_widget.ui | 115 +++ scribo/demo/wizard/ui/load_widget.ui | 110 +++ scribo/demo/wizard/ui/main_window.ui | 216 +++++ scribo/demo/wizard/ui/preprocessing_widget.ui | 223 +++++ scribo/demo/wizard/wizard.pro | 67 ++ scribo/demo/wizard/wizard.qrc | 5 + scribo/draw/bounding_box_links.hh | 75 +- scribo/draw/bounding_boxes.hh | 31 +- scribo/draw/groups_bboxes.hh | 93 ++ scribo/estim/object_groups_v_thickness.hh | 26 +- scribo/filter/common/objects_photo.hh | 42 +- scribo/filter/internal/compute.hh | 30 +- scribo/filter/object_groups_size_ratio.hh | 3 +- scribo/filter/object_groups_small.hh | 11 +- scribo/filter/object_groups_v_thickness.hh | 5 +- scribo/filter/object_groups_with_holes.hh | 328 +++++++ scribo/filter/object_links_bbox_h_ratio.hh | 14 +- scribo/filter/object_links_bbox_overlap.hh | 41 +- scribo/filter/object_links_bbox_ratio.hh | 27 +- scribo/filter/object_links_bottom_aligned.hh | 23 +- scribo/filter/object_links_center_aligned.hh | 2 +- scribo/filter/object_links_left_aligned.hh | 122 +++ scribo/filter/object_links_non_aligned_simple.hh | 123 ++- scribo/filter/object_links_right_aligned.hh | 121 +++ scribo/filter/object_links_top_aligned.hh | 13 +- scribo/filter/objects_small.hh | 74 +- scribo/filter/objects_thick.hh | 58 +- scribo/filter/objects_thin.hh | 103 +- scribo/filter/objects_with_holes.hh | 580 +++++++++++ scribo/fun/v2b/label_to_bool.hh | 66 ++ scribo/fun/v2b/objects_small_filter.hh | 39 +- scribo/io/xml/save_text_lines.hh | 154 +++ scribo/preprocessing/denoise.hh | 106 ++ scribo/preprocessing/denoise_bg.hh | 156 +++ scribo/preprocessing/denoise_fg.hh | 131 +++ scribo/preprocessing/homogeneous_contrast.hh | 119 +++ scribo/preprocessing/rotate_90.hh | 159 +++ scribo/preprocessing/unskew.hh | 6 +- scribo/primitive/extract/components.hh | 145 +++ scribo/primitive/extract/lines_pattern.hh | 23 +- scribo/primitive/extract/lines_v_thick.hh | 4 +- scribo/primitive/extract/objects.hh | 138 --- scribo/primitive/group/apply.hh | 76 +- scribo/primitive/group/from_double_link.hh | 18 +- scribo/primitive/group/from_single_link.hh | 31 +- scribo/primitive/internal/find_left_link.hh | 108 --- scribo/primitive/internal/find_right_link.hh | 108 --- scribo/primitive/internal/find_root.hh | 12 +- scribo/primitive/internal/init_link_array.hh | 15 +- scribo/primitive/internal/is_invalid_link.hh | 100 -- scribo/primitive/internal/is_link_valid.hh | 14 +- scribo/primitive/internal/rd.hh | 192 ++++ scribo/primitive/link/compute.hh | 51 +- scribo/primitive/link/compute_several.hh | 2 +- scribo/primitive/link/internal/compute_anchor.hh | 249 +++++ scribo/primitive/link/internal/find_link.hh | 22 +- .../primitive/link/internal/find_several_links.hh | 105 ++- .../link/internal/link_center_dmax_base.hh | 179 ---- .../link/internal/link_center_dmax_ratio_base.hh | 175 ---- .../primitive/link/internal/link_functor_base.hh | 126 ++- .../primitive/link/internal/link_ms_dmax_base.hh | 27 +- .../link/internal/link_ms_dmax_ratio_base.hh | 28 +- .../link/internal/link_several_dmax_base.hh | 265 +++++ .../link/internal/link_single_dmax_base.hh | 167 ++++ .../link/internal/link_single_dmax_ratio_base.hh | 172 ++++ scribo/primitive/link/merge_double_link.hh | 33 +- .../link/with_several_right_links_overlap.hh | 10 +- scribo/primitive/link/with_single_down_link.hh | 183 ++++ scribo/primitive/link/with_single_left_link.hh | 37 +- .../link/with_single_left_link_dmax_ratio.hh | 38 +- scribo/primitive/link/with_single_right_link.hh | 33 +- .../link/with_single_right_link_bottom.hh | 39 +- .../link/with_single_right_link_dmax_ratio.hh | 60 +- .../primitive/link/with_single_right_link_top.hh | 32 +- scribo/primitive/link/with_single_up_link.hh | 183 ++++ scribo/primitive/regroup/from_single_left_link.hh | 140 +++ scribo/scribo.mk | 3 +- scribo/src/Makefile.am | 27 + scribo/src/afp/components.hh | 195 ++++ scribo/src/afp/link.hh | 142 +++ scribo/src/afp/regroup.hh | 84 ++ scribo/src/binarization/Makefile.am | 74 ++- .../src/binarization/pgm_global_threshold_auto.cc | 62 ++ scribo/src/binarization/pgm_sauvola.cc | 66 ++ scribo/src/binarization/pgm_sauvola_ms.cc | 97 ++ scribo/src/binarization/ppm_fg_sauvola_ms.cc | 104 ++ scribo/src/binarization/ppm_sauvola.cc | 61 ++ scribo/src/binarization/ppm_sauvola_ms.cc | 97 ++ scribo/src/binarization/ppm_sauvola_ms_split.cc | 98 ++ scribo/src/binarization/sauvola.cc | 60 -- scribo/src/binarization/sauvola_pgm.cc | 63 -- scribo/src/binarization/simple.cc | 61 -- scribo/src/debug/Makefile.am | 26 +- .../src/debug/show_info_median_inter_characters.cc | 256 +++++ scribo/src/debug/show_info_x_height.cc | 281 ++++++ .../src/debug/show_left_right_links_validation.cc | 122 --- scribo/src/debug/show_links_bbox_h_ratio.cc | 2 +- scribo/src/debug/show_links_bottom_aligned.cc | 24 +- .../show_links_left_right_links_validation.cc | 122 +++ .../src/debug/show_links_several_right_overlap.cc | 51 +- scribo/src/debug/show_links_single_down.cc | 157 +++ .../debug/show_links_single_down_left_aligned.cc | 99 ++ .../debug/show_links_single_down_right_aligned.cc | 99 ++ scribo/src/debug/show_links_single_left.cc | 4 +- .../src/debug/show_links_single_left_dmax_ratio.cc | 4 +- scribo/src/debug/show_links_single_right.cc | 4 +- .../debug/show_links_single_right_dmax_ratio.cc | 4 +- scribo/src/debug/show_links_single_up.cc | 157 +++ .../src/debug/show_links_single_up_left_aligned.cc | 100 ++ .../debug/show_links_single_up_right_aligned.cc | 98 ++ scribo/src/debug/show_links_top_aligned.cc | 22 +- scribo/src/filter/Makefile.am | 6 +- scribo/src/filter/objects_with_holes.cc | 70 ++ scribo/src/filter/objects_with_holes_pgm.cc | 71 ++ scribo/src/pbm_lines_in_doc.cc | 299 ++++++ scribo/src/preprocessing/Makefile.am | 9 +- scribo/src/preprocessing/denoise.cc | 69 ++ scribo/src/preprocessing/homogeneous_contrast.cc | 44 + scribo/src/preprocessing/split_bg_fg.cc | 7 +- scribo/src/preprocessing/subsample.cc | 65 ++ scribo/src/text/Makefile.am | 10 + scribo/src/text/pbm_recognition.cc | 65 ++ scribo/src/text_in_article.cc | 331 +++++++ scribo/src/text_in_photo_pbm_fast.cc | 441 +++++++++ scribo/src/text_in_photo_ppm.cc | 246 +++++- scribo/src/text_in_photo_ppm_fast.cc | 635 ++++++++++++ scribo/subsampling/integral.hh | 420 ++++++++ scribo/subsampling/integral_single_image.hh | 459 +++++++++ scribo/tests/Makefile.am | 2 + scribo/tests/binarization/Makefile.am | 30 + scribo/tests/binarization/global_threshold.cc | 24 + scribo/tests/binarization/local_threshold.cc | 29 + scribo/tests/core/Makefile.am | 27 + scribo/tests/core/object_image.cc | 72 ++ scribo/tests/filter/Makefile.am | 3 + scribo/tests/filter/objects_with_holes.cc | 49 + scribo/tests/preprocessing/Makefile.am | 4 +- scribo/tests/preprocessing/rotate_90.cc | 59 ++ scribo/text/clean.hh | 12 +- scribo/text/merging.hh | 933 ++++++++++++++++++ scribo/text/recognition.hh | 130 ++- 427 files changed, 35277 insertions(+), 4553 deletions(-) diff --cc ChangeLog index 44386d3,a2493ff..f0b86a5 --- a/ChangeLog +++ b/ChangeLog @@@ -1,362 -1,23 +1,382 @@@ + 2010-06-03 Guillaume Lazzara <z@lrde.epita.fr> + + * configure.ac: Check for Qt library using AutoTroll. + + 2010-05-25 Guillaume Lazzara <z@lrde.epita.fr> + + * configure.ac: Do not configure scribo/src/multi_scale anymore. + + 2010-02-16 Guillaume Lazzara <z@lrde.epita.fr> + + * configure.ac: Configure scribo/tests/binarization. + + 2010-02-16 Guillaume Lazzara <z@lrde.epita.fr> + + * configure.ac: Configure scribo/demo/review. + + 2009-12-15 Guillaume Lazzara <z@lrde.epita.fr> + + * configure.ac: Configure scribo/tests/core. + +2010-06-24 Roland Levillain <roland@lrde.epita.fr> + + Add `mesh-segm-skel' to the branches to be uploaded (as snapshot). + + * lrde-upload.sh: Here. + +2010-04-23 Roland Levillain <roland@lrde.epita.fr> + + Add variables for C++ compiler flags for Scribo. + + * configure.ac (SCRIBO_CXXFLAGS, SCRIBO_TESTS_CXXFLAGS): + New configure variables. + +2010-06-04 Roland Levillain <roland@lrde.epita.fr> + + Set decent compiler flags when the Intel C++ compiler is used. + + * configure.ac: Here. + +2010-04-23 Roland Levillain <roland@lrde.epita.fr> + + Add a simple test to identify the Intel C++ compiler. + + * configure.ac: Here. + +2010-06-03 Roland Levillain <roland@lrde.epita.fr> + + Clean up a bit Olena's Makefiles. + + * Makefile.am, external/Makefile.am: Here. + +2010-06-02 Roland Levillain <roland@lrde.epita.fr> + + * lrde-upload.sh: Fix and factor uses of chmod. + +2010-05-03 Roland Levillain <roland@lrde.epita.fr> + + * AUTHORS: Update. + +2010-05-12 Roland Levillain <roland@lrde.epita.fr> + + Add missing copyright headers. + + * build-aux/devtools.sh, + * build-aux/devtools_utils.sh, + * build-aux/generate_dist_headers.sh, + * build-aux/make_report_utils.sh, + * configure.ac, + * lrde-upload.sh: + Here. + +2010-05-28 Roland Levillain <roland@lrde.epita.fr> + + Add `swilena' to the branches to be uploaded. + + * lrde-upload.sh: Here. + Add a copyright header. + +2010-05-10 Roland Levillain <roland@lrde.epita.fr> + + Upload only branches master and next, in their own directories. + + * lrde-upload.sh: Here. + Inspired from Vaucanson's lrde-upload.sh. + +2010-04-29 Roland Levillain <roland@lrde.epita.fr> + + Upload only the HTML version of the user reference manual. + + * lrde-upload.sh: Here. + +2010-04-29 Roland Levillain <roland@lrde.epita.fr> + + Change permissions on uploaded files instead of on original files. + + * lrde-upload.sh: Here. + +2010-04-29 Roland Levillain <roland@lrde.epita.fr> + + Fix read permissions on uploaded PDF files. + + * lrde-upload.sh: Here. + +2010-04-27 Roland Levillain <roland@lrde.epita.fr> + + Improve lrde-upload.sh. + + * lrde-upload.sh: Be more robust to cases of missing files. + +2010-04-26 Roland Levillain <roland@lrde.epita.fr> + + Update lrde-upload.sh. + + * lrde-upload.sh: Catch up with the tree's current layout. + +2010-04-23 Roland Levillain <roland@lrde.epita.fr> + + Document configure variables. + + * configure.ac: Here. + +2010-04-23 Roland Levillain <roland@lrde.epita.fr> + + Work around g++ 4.2's behavior regarding strict aliasing. + + * configure.ac: Set STRICT_ALIASING_CXXFLAGS to + `-fno-strict-aliasing' when the compiler is g++ 4.2. + +2010-04-21 Roland Levillain <roland@lrde.epita.fr> + + Catch up with the new interface of Scribo's unit tests generator. + + * bootstrap: Here. + +2010-04-20 Roland Levillain <roland@lrde.epita.fr> + + Move a test from Scribo into Milena. + + * scribo/test.cc: Move... + * milena/tests/util/ord.cc: ...here. + +2010-04-20 Roland Levillain <roland@lrde.epita.fr> + + Unconditionally regen files not recorded in the repository. + + * bootstrap: Here. + +2010-04-09 Roland Levillain <roland@lrde.epita.fr> + + * configure.ac: Add option `--enable-scribo'. + +2010-04-09 Roland Levillain <roland@lrde.epita.fr> + + * configure.ac: Protect variables with double quotes. + +2010-04-09 Roland Levillain <roland@lrde.epita.fr> + + Improve Swilena's configuration. + + * m4/with-swilena.m4: Remove file. + Supeseded by other tests performed... + * configure.ac: ...here. + +2010-04-09 Roland Levillain <roland@lrde.epita.fr> + + Require Python >= 2.4 for Swilena. + + * m4/with-swilena.m4 (_OLN_WITH_SWIG): Here. + +2010-04-09 Roland Levillain <roland@lrde.epita.fr> + + Require SWIG >= 1.3.35 for Swilena. + + * m4/with-swilena.m4 (_OLN_WITH_SWIG): Here. + +2010-03-31 Roland Levillain <roland@lrde.epita.fr> + + * bootstrap: Check for HeVeA instead of TeX4ht. + +2010-03-30 Roland Levillain <roland@lrde.epita.fr> + + Revert to HeVeA to generate HTML from LaTeX. + + * build-aux/tex.mk (TEXI2HTML): Disable flag `--tex4ht'. + +2010-03-23 Roland Levillain <roland@lrde.epita.fr> + + * Makefile.am (LOCAL_RECURSIVE_TARGETS): Remove doc. + +2010-03-22 Roland Levillain <roland@lrde.epita.fr> + + Regen INSTALL using autoreconf. + + * INSTALL: New. + +2010-03-22 Roland Levillain <roland@lrde.epita.fr> + + Move INSTALL's contents to README and HACKING. + + * INSTALL: Remove this file and move its contents... + * README: ...here, and... + * HACKING: ...here (new file). + +2010-03-22 Roland Levillain <roland@lrde.epita.fr> + + Remove useless regen actions from bootstrap. + + * bootstrap (gen_doc_figures): Remove this function, and its uses + as well. + +2010-03-22 Roland Levillain <roland@lrde.epita.fr> + + Add options to boostrap. + + * bootstrap: Here. + (usage): New function. Call it when invoked with option + `-h, --help'. + Regen files stored in the repository only if invoked with option + `-r, --regen'. + +2010-03-22 Roland Levillain <roland@lrde.epita.fr> + + * bootstrap: Make a more portable use of mktemp. + +2010-03-22 Roland Levillain <roland@lrde.epita.fr> + + * bootstrap: Regen milena/doc/figures.mk. + +2010-03-22 Roland Levillain <roland@lrde.epita.fr> + + * bootstrap: Various fixes. + +2010-03-18 Roland Levillain <roland@lrde.epita.fr> + + * bootstrap: Regen the list of split outputs of the documentation. + +2010-03-17 Roland Levillain <roland@lrde.epita.fr> + + * bootstrap: Be terser. + +2010-03-17 Roland Levillain <roland@lrde.epita.fr> + + * bootstrap: Don't remove the automatically collected temp dir. + +2010-03-17 Roland Levillain <roland@lrde.epita.fr> + + * bootstrap: Regen the list of outputs of the documentation. + +2010-03-17 Roland Levillain <roland@lrde.epita.fr> + + * bootstrap: Regen the list of outputs rules and timestamps. + +2010-03-16 Roland Levillain <roland@lrde.epita.fr> + + * bootstrap: Regen the list of split examples of the documentation. + +2010-03-16 Roland Levillain <roland@lrde.epita.fr> + + * bootstrap: Regen the list of examples of the documentation. + +2010-03-16 Roland Levillain <roland@lrde.epita.fr> + + Catch up with milena/doc figure generators. + + * bootstrap: Here. + +2010-03-15 Roland Levillain <roland@lrde.epita.fr> + + Disable the implicit generation of HTML from LaTeX. + + * build-aux/tex.mk (.tex.html): Remove this rule, since (TeX4ht) + HTML outputs may contain more than one file (e.g., CSS style + sheets, images, etc.). + (SUFFIXES): Remove .html. + +2010-03-15 Roland Levillain <roland@lrde.epita.fr> + + Have texi2dvi use TeX4ht instead of HeVeA to produce HTML outputs. + + * build-aux/tex.mk (TEXI2HTML): Add --tex4ht. + * bootstrap (tempdir): Check for TeX4ht, dvipng and convert (from + ImageMagick). + +2010-03-15 Roland Levillain <roland@lrde.epita.fr> + + Support HTML outputs in tex.mk. + + * build-aux/tex.mk (SUFFIXES): Add .html. + (.tex.html): New rule. + (TEXI2HTML, TEXI2HTML_FLAGS): New variables. + +2010-03-15 Roland Levillain <roland@lrde.epita.fr> + + Automake configuration. + + * configure.ac: Remove option `foreign'. + Pass option `subdir-objects'. + +2010-03-15 Roland Levillain <roland@lrde.epita.fr> + + Have bootstrap check for HeVeA 1.10. + + * bootstrap (require): Take a flag as an optional second argument. + Use it to check for HeVeA 1.10. + +2010-03-12 Roland Levillain <roland@lrde.epita.fr> + + Add texi2dvi as well as a Make helper to use it. + + * build-aux/texi2dvi: New script. + Imported from Texinfo. + * build-aux/tex.mk: New Makefile helper. + Inspired by LRDE share/style/tex.mk. + * build-aux/Makefile.am (EXTRA_DIST): Add texi2dvi. + +2010-03-12 Roland Levillain <roland@lrde.epita.fr> + + * configure.ac: Configure milena/doc/tools/data.hh. + +2010-03-08 Roland Levillain <roland@lrde.epita.fr> + + Require Doxygen 1.5.6 at bootstrapping time. + + * bootstrap: Here. + (require): Be more tolerant w.r.t. version messages. + +2010-03-08 Roland Levillain <roland@lrde.epita.fr> + + * bootstrap: Fix a typo in an error message. + +2010-03-03 Roland Levillain <roland@lrde.epita.fr> + + * configure.ac: Do not configure milena/doc/examples/Makefile. + +2010-03-03 Roland Levillain <roland@lrde.epita.fr> + + * configure.ac: Do not configure milena/doc/white_paper/Makefile. + +2010-03-03 Roland Levillain <roland@lrde.epita.fr> + + * configure.ac: Do not configure milena/doc/technical/Makefile. + +2010-03-03 Roland Levillain <roland@lrde.epita.fr> + + * configure.ac: Do not configure milena/doc/tutorial/Makefile. + +2010-03-02 Roland Levillain <roland@lrde.epita.fr> + + * configure.ac: Do not configure milena/doc/ref_guide/Makefile. + +2010-03-02 Roland Levillain <roland@lrde.epita.fr> + + Stop pruning Makefiles under milena/doc/. + + * Makefile.am (LRDE_STRIPPED_DIST_FILES): Remove + $(distdir)/milena/doc/Makefile.am, + $(distdir)/milena/doc/ref_guide/Makefile.am, + $(distdir)/milena/doc/tutorial/Makefile.am and + $(distdir)/milena/doc/white_paper/Makefile.am. + +2010-03-15 Roland Levillain <roland@lrde.epita.fr> + + Aesthetic changes. + + * build-aux/regen-recursive.mk, + * build-aux/extra-recursive-targets.mk: + Here. + Help Emacs find out the nature of these files. + +2010-03-15 Roland Levillain <roland@lrde.epita.fr> + + * AUTHORS: Update. + +2009-10-27 Roland Levillain <roland@lrde.epita.fr> + + Add missing copyright headers to M4 files. + + * m4/oln-with-lib.m4, m4/with-swilena.m4: Here. + 2009-10-02 Roland Levillain <roland@lrde.epita.fr> Configure Makefiles under milena/apps/papers/. diff --cc configure.ac index 20efb20,0bdaa3b..e6b01b8 --- a/configure.ac +++ b/configure.ac @@@ -210,10 -165,14 +210,15 @@@ OLN_WITH_LIB([TIFF], [tiff.h], [tiff] OLN_WITH_LIB([GDCM], [gdcm-2.0/gdcmReader.h], [gdcmCommon], [gdcm], [GDCM], [-lgdcmzlib]) -# Tesseract -OLN_WITH_LIB([TESSERACT], [tesseract/baseapi.h], [tesseract_full], [tesseract], [TESSERACT]) +# Tesseract. +OLN_WITH_LIB([TESSERACT], [tesseract/baseapi.h], [tesseract_full], + [tesseract], [TESSERACT]) + # Qt. + AT_WITH_QT([], [], [], + AC_DEFINE([HAVE_QT], 1, [Define to 1 if we can use Qt]), + AC_DEFINE([HAVE_QT], 0)) + AM_CONDITIONAL([HAVE_QT], [test x$QT_PATH != x]) ## ---------------------------- ## diff --cc milena/ChangeLog index 214b7e6,1f2117e..0ba1a95 --- a/milena/ChangeLog +++ b/milena/ChangeLog @@@ -1,1626 -1,479 +1,2102 @@@ + 2010-06-03 Guillaume Lazzara <z@lrde.epita.fr> + + Add a function to convert qt::rgb32 values to int_u8. + + * mln/fun/v2v/qt_rgb_to_int_u.hh: New. + + * tests/fun/v2v/Makefile.am, + * tests/fun/v2v/qt_rgb_to_int_u.cc: New test. + + 2010-06-03 Guillaume Lazzara <z@lrde.epita.fr> + + Use sites instead of pixels in canvas::labeling::blobs functors. + + * mln/canvas/labeling/blobs.hh, + * mln/labeling/blobs.hh: Update members prototypes. + + * mln/labeling/blobs_and_compute.hh: Do not construct on-the-fly + pixels anymore. + + 2010-05-25 Guillaume Lazzara <z@lrde.epita.fr> + + Small fixes. + + * mln/labeling/compute.hh: Add a missing include. + + * mln/literal/colors.hh: Revamp header. + + * mln/value/internal/make_generic_name.hh: Add a missing inline. + + * mln/value/qt/rgb32.hh: Add a missing inline and a useless + literal. + + * mln/value/rgb.hh: Add a fixme. + + 2010-05-25 Guillaume Lazzara <z@lrde.epita.fr> + + * mln/subsampling/antialiased.hh: Fix an invalid output buffer + size which may lead to a segfault. + + 2010-05-25 Guillaume Lazzara <z@lrde.epita.fr> + + Add a new meta tool to deduce an extension type. + + mln/core/routine/extend.hh: Introduce a new macro + mln_extension_type. + + mln/geom/rotate.hh: Make use of this new macro. + + 2010-05-25 Guillaume Lazzara <z@lrde.epita.fr> + + Reduce precision issues in transformations. + + * mln/core/image/imorph/interpolated.hh: Make the vector type more + generic. + + * mln/core/point.hh: Provide specific conversion operators for + float and double. + + * mln/fun/internal/x2x_linear_impl.hh: Allow to set the matrix + value type. + + * mln/fun/x2x/composed.hh, + * mln/fun/x2x/rotation.hh, + * mln/fun/x2x/translation.hh: Introduce data_t typedef passed to + x2x_linear_impl. + + 2010-04-30 Guillaume Lazzara <z@lrde.epita.fr> + + Add some code in my sandbox. + + * sandbox/lazzara/scribo/binarization_naive/main.cc, + * sandbox/lazzara/scribo/binarization_naive/toto.cc, + * sandbox/lazzara/scribo/fill_holes/main.cc, + * sandbox/lazzara/scribo/separateurs_materialises/lines_pattern.cc, + * sandbox/lazzara/scribo/skeleton_crest/main.cc, + * sandbox/lazzara/skeleton_crest/main.cc: New. + + 2010-05-21 edwin carlinet <carlinet@lrde.epita.fr> + + Add MLN_WO_GLOBAL_VARS directive that prevents globals vars to be + included. + + * mln/border/thickness.hh, + * mln/core/alias/dpoint1d.hh, + * mln/core/alias/dpoint2d.hh, + * mln/core/alias/dpoint3d.hh, + * mln/fun/v2v/hsl_to_rgb.hh, + * mln/literal/black.hh, + * mln/literal/colors.hh, + * mln/literal/identity.hh, + * mln/literal/one.hh, + * mln/literal/origin.hh, + * mln/literal/white.hh, + * mln/literal/zero.hh, + * mln/tag/init.hh, + * mln/trace/entering.hh, + * mln/trace/quiet.hh, + * mln/value/sign.hh: Add MLN_WO_GLOBAL_VARS define. + + 2010-04-30 Guillaume Lazzara <z@lrde.epita.fr> + + Add some code in my sandbox. + + * milena/sandbox/lazzara/scribo/binarization_naive/main.cc, + * milena/sandbox/lazzara/scribo/binarization_naive/toto.cc, + * milena/sandbox/lazzara/scribo/fill_holes/main.cc, + * milena/sandbox/lazzara/scribo/separateurs_materialises/lines_pattern.cc, + * milena/sandbox/lazzara/scribo/skeleton_crest/main.cc, + * milena/sandbox/lazzara/skeleton_crest/main.cc: New. + + 2010-04-30 Guillaume Lazzara <z@lrde.epita.fr> + + Add fastest implementations in labeling::compute. + + * mln/labeling/compute.hh: New fastest implementations. + + 2010-04-30 Guillaume Lazzara <z@lrde.epita.fr> + + Small fixes in Milena. + + * mln/canvas/labeling/blobs.hh: Fill extension. + + * mln/data/paste_without_localization.hh: Check whether the + two images have the same domain. + + * mln/labeling/blobs_and_compute.hh: Rename members. + + * mln/labeling/colorize.hh: Add missing includes. + + * mln/world/binary_2d/enlarge.hh: use def::coord. + + 2010-04-13 Guillaume Lazzara <z@lrde.epita.fr> + + * mln/labeling/blobs_and_compute.hh: Fix an invalid size of + reserved memory. + + 2010-04-13 Guillaume Lazzara <z@lrde.epita.fr> + + * mln/subsampling/antialiased.hh: Fix the use of 'factor round'. + + 2010-04-09 Guillaume Lazzara <z@lrde.epita.fr> + + Rename nslis to nslices. + + * mln/geom/nslis.hh, + * tests/geom/nslis.cc: Rename as... + + * mln/geom/nslices.hh, + * tests/geom/nslices.cc: ... this. + + * mln/core/image/image3d.hh, + * mln/core/internal/box_impl.hh, + * mln/core/site_set/box.hh, + * mln/debug/slices_2d.hh, + * mln/geom/all.hh, + * mln/geom/size3d.hh, + * mln/linear/gaussian.hh, + * mln/linear/gaussian/impl.hh, + * mln/make/box3d.hh, + * mln/make/image.hh, + * mln/registration/icp.hh, + * tests/core/alias/box3d.cc, + * tests/core/image/image3d.cc, + * tests/geom/Makefile.am, + * tests/io/pbms/load.cc, + * tests/io/pgms/load.cc, + * tests/io/ppms/load.cc, + * tests/transform/bench_closest_point_geodesic.cc: Rename nslis to + nslices. + + 2010-04-07 Guillaume Lazzara <z@lrde.epita.fr> + + * img/picasso.ppm: Add a ppm version. + + 2010-04-07 Guillaume Lazzara <z@lrde.epita.fr> + + * mln/value/qt/rgb32.hh: Explicitly cast float values to unsigned. + + 2010-04-06 Guillaume Lazzara <z@lrde.epita.fr> + + * mln/debug/mosaic.hh: New. Construct a single image from a set of + images. + + 2010-04-06 Guillaume Lazzara <z@lrde.epita.fr> + + * mln/histo/equalize.hh: New. Add histogram equalization. + + 2010-03-22 Guillaume Lazzara <z@lrde.epita.fr> + + Add vertical/horizontal symmetry. + + * mln/labeling/relabel.hh: Fix an invalid 'const'. + + * mln/geom/horizontal_symmetry.hh, + * mln/geom/vertical_symmetry.hh: New routines. + + * tests/geom/Makefile.am, + * tests/geom/horizontal_symmetry.cc, + * tests/geom/vertical_symmetry.cc: New tests. + + 2010-03-22 Guillaume Lazzara <z@lrde.epita.fr> + + * mln/debug/z_order.hh: New image data initializer. + + 2010-03-22 Guillaume Lazzara <z@lrde.epita.fr> + + Improve antialiased subsampling. + + * mln/subsampling/antialiased.hh: Add support for any factors and + for RGB images. + + 2010-03-19 Guillaume Lazzara <z@lrde.epita.fr> + + Add a new routine to split a color image into three grayscale + images. + + * mln/data/split.hh: New. + + * tests/data/split.cc: New test. + + 2010-03-19 Guillaume Lazzara <z@lrde.epita.fr> + + Add new implementations of paste_without_localization. + + * mln/data/paste_without_localization.hh: Add new implementations. + + * tests/data/Makefile.am, + * tests/data/paste_without_localization.cc: New tests. + + 2010-03-19 Guillaume Lazzara <z@lrde.epita.fr> + + Improve to_qimage routines. + + * mln/convert/to_qimage.hh: rename namespace. + + * mln/convert/to_qimage_nocopy.hh: Add a new implementation and + improve existing ones. + + 2010-03-15 Guillaume Lazzara <z@lrde.epita.fr> + + * mln/subsampling/antialiased.hh: Add support for reduction factor + different from 2 or 3. + + 2010-02-16 Guillaume Lazzara <z@lrde.epita.fr> + + * mln/labeling/colorize.hh: Add support for value::qt::rgb32. + + 2010-02-19 Guillaume Lazzara <z@lrde.epita.fr> + + Small fixes in Milena. + + * mln/accu/center.hh: Add nsites() member. + + * mln/accu/pair.hh: Provide access to the underlying accus. + + * mln/accu/stat/variance.hh: Use literal::zero. + + * mln/core/internal/labeled_image_base.hh: Indent. + + * mln/core/site_set/box.hh: Rename center() as pcenter(). + + * mln/labeling/blobs_and_compute.hh: Return the array of + accumulators. + + * mln/labeling/colorize.hh: Make sure a color is not used + twice in the same image. + + * mln/labeling/compute.hh: Add a new overload. + + * mln/transform/influence_zone_geodesic.hh: Fix a + segmentation fault when an image had a border. + + 2009-12-14 Guillaume Lazzara <z@lrde.epita.fr> + + Add rbg_to_int_u function. + + * mln/fun/v2v/all.hh: Include the new header. + + * mln/fun/v2v/rgb_to_int_u.hh: New. + + 2009-12-14 Guillaume Lazzara <z@lrde.epita.fr> + + Add an antialiased subsampling. + + * mln/subsampling/antialiased.hh: New. + + 2009-12-14 Guillaume Lazzara <z@lrde.epita.fr> + + Add hooks for subclasses in labeled_image_base. + + * mln/core/internal/labeled_image_base.hh: New methods which can + be overridden in subclasses. + + * mln/core/image/imorph/labeled_image.hh: Add a missing header. + + 2010-03-11 Guillaume Lazzara <z@lrde.epita.fr> + + Small fixes. + + * mln/accu/count_value.hh: Fix doc. + + * mln/convert/from_to.hxx, + * mln/value/int_u.hh, + * mln/value/qt/rgb32.hhL: Add new from_to overloads. + + * mln/convert/to_qimage.hh: Add a missing include. + + * mln/convert/to_qimage_nocopy.hh: Rename an overload. + + * mln/core/concept/function.hh: Add new concept n2v. + + * mln/geom/rotate.hh: rename center() to pcenter(). + + * mln/histo/compute.hh: Fix a namespace ambiguity. + + * mln/io/magick/save.hh: Handle qt::rgb32. + + * mln/io/plot/save.hh: Add an overload for histograms. + + * mln/labeling/relabel.hh: Make 'nlabels' const. + + * mln/topo/skeleton/crest.hh: Fix a bug. + + * tests/core/other/box_runstart_piter.cc: Write a valid test. + + 2010-03-11 Guillaume Lazzara <z@lrde.epita.fr> + + * mln/draw/dashed_line.hh: New draw line routine. + + 2010-02-24 Guillaume Lazzara <z@lrde.epita.fr> + + Add white gaussian noise function. + + * mln/fun/all.hh: Include a new file. + + * mln/fun/n2v/all.hh, + * mln/fun/n2v/white_gaussian.hh: New. + + 2010-02-16 Guillaume Lazzara <z@lrde.epita.fr> + + Cleanup to_qimage convertion routines. + + * mln/convert/to_qimage.hh: Remove useless comments and move a + specific implementation... + + * mln/convert/to_qimage_nocopy.hh: ... in this new file. + + 2010-02-16 Guillaume Lazzara <z@lrde.epita.fr> + + Add a routine to convert to a QImage. + + * mln/convert/to_qimage.hh: New. + + 2010-02-16 Guillaume Lazzara <z@lrde.epita.fr> + + Add box<>::merge. + + * mln/core/site_set/box.hh: New member 'merge()'. + + * tests/core/site_set/Makefile.am, + * tests/core/site_set/box.cc: New test. + + 2010-02-16 Guillaume Lazzara <z@lrde.epita.fr> + + Rename image3d<>::nslices to image3d<>::nslis. + + * mln/core/image/image3d.hh, + * mln/debug/slices_2d.hh, + * tests/io/pbms/load.cc, + * tests/io/pgms/load.cc, + * tests/io/ppms/load.cc: Rename nslices to nslis. + + 2010-02-16 Guillaume Lazzara <z@lrde.epita.fr> + + Various small fixes. + + * doc/tutorial/tutorial.tex: Add more contacts. + + * mln/accu/label_used.hh: Do not use label<>::next(). + + * mln/draw/line.hh: Add a fixme. + + * mln/io/dump/save.hh: Close the file. + + * mln/io/plot/save.hh: Fix an invalid prototype. + + * mln/io/pnm/load.hh: Fix an invalid static check. + + * mln/io/raw/get_header.hh: Fix comment. + + * mln/labeling/pack.hh: Disable a static check on symbolic values. + + * mln/math/diff_abs.hh: Add a fixme. + + * mln/world/inter_pixel/full2image.hh: Use mln_concrete(). + + * mln/data/fill_with_value.hh, + * mln/io/raw/load.hh, + * mln/io/raw/save.hh, + * mln/labeling/compute.hh, + * mln/registration/icp.hh: Aesthetic changes. + + 2010-02-16 Guillaume Lazzara <z@lrde.epita.fr> + + * mln/topo/skeleton/crest.hh: Fix invalid PSI values for component + edge sites. + + 2010-02-16 Guillaume Lazzara <z@lrde.epita.fr> + + Add a routine to read dump files header. + + * mln/io/dump/all.hh: Include a new file. + + * mln/io/dump/get_header.hh: New. + + 2010-02-16 Guillaume Lazzara <z@lrde.epita.fr> + + Add a routine to read DICOM files header. + + * mln/io/dicom/all.hh: Include a new file. + + * mln/io/dicom/get_header.hh: New. + + * mln/io/dicom/load.hh: Add more doc. + + 2010-02-16 Guillaume Lazzara <z@lrde.epita.fr> + + Add A new routine to draw plain boxes. + + * mln/draw/all.hh: Include new file. + + * mln/draw/box.hh: Add a fixme. + + * mln/draw/box_plain.hh: New. + + 2010-02-16 Guillaume Lazzara <z@lrde.epita.fr> + + Add more implementations for box specializations. + + * mln/core/internal/box_impl.hh: Add width, height and depth. + + 2010-02-16 Guillaume Lazzara <z@lrde.epita.fr> + + First draft of raw format support. + + * mln/io/raw/all.hh, + * mln/io/raw/get_header.hh, + * mln/io/raw/load.hh, + * mln/io/raw/save.hh: New. + + 2010-02-16 Guillaume Lazzara <z@lrde.epita.fr> + + Add new 3D neighborhoods and windows. + + * mln/core/alias/neighb3d.hh, + * mln/win/sline3d.hh: New. + + 2010-02-16 Guillaume Lazzara <z@lrde.epita.fr> + + Add a new rgb32 type for Qt compatibility. + + * mln/convert/from_to.hxx: Declare conversion routines. + + * mln/value/qt/rgb32.hh: New. + + 2010-02-16 Guillaume Lazzara <z@lrde.epita.fr> + + Fix invalid value type names in dump format. + + * mln/value/internal/make_generic_name.hh: New. + + * mln/value/int_u.hh, + * mln/value/label.hh, + * mln/value/rgb.hh: Make use of the new routine to print a + correct type names in dump format. + +2010-04-26 Roland Levillain <roland@lrde.epita.fr> + + Clean Milena's tests' outputs during `make mostlyclean'. + + * apps/mesh-segm-skel/Makefile.am, + * apps/papers/levillain.09.ismm/Makefile.am + (CLEANFILES): Rename as... + (MOSTLYCLEANFILES): ...this. + +2010-04-26 Roland Levillain <roland@lrde.epita.fr> + + Canonize Milena's tests' output file names. + + * tests/binarization/threshold.cc, + * tests/data/approx/median.cc, + * tests/data/median.cc, + * tests/data/median_fast.cc, + * tests/data/naive/median.cc, + * tests/io/dump/dump.cc, + * tests/io/fits/fits.cc, + * tests/io/magick/save.cc, + * tests/io/off/load_save_bin.cc, + * tests/io/pbm/pbm.cc, + * tests/io/pbm/pbm_ascii.cc, + * tests/io/pbms/load.cc, + * tests/io/pgm/pgm.cc, + * tests/io/pgm/pgm16.cc, + * tests/io/pgm/pgm19.cc, + * tests/io/pgm/pgm27.cc, + * tests/io/pgm/pgm_ascii.cc, + * tests/io/pgms/load.cc, + * tests/io/ppm/ppm.cc, + * tests/io/ppm/ppm16.cc, + * tests/io/ppm/ppm23.cc, + * tests/io/ppms/load.cc, + * tests/linear/convolve.cc, + * tests/linear/convolve_2x1d.cc, + * tests/linear/convolve_directional.cc, + * tests/linear/gaussian.cc, + * tests/linear/gaussian/filter.cc, + * tests/linear/lap.cc, + * tests/linear/log.cc, + * tests/linear/sobel_2d.cc, + * tests/morpho/approx/dilation.cc, + * tests/morpho/approx/erosion.cc, + * tests/morpho/artificial_line_graph_image_wst.cc, + * tests/morpho/closing/algebraic.cc, + * tests/morpho/closing/approx/structural.cc, + * tests/morpho/closing/height.cc, + * tests/morpho/closing/leveling.cc, + * tests/morpho/closing/structural.cc, + * tests/morpho/closing/sum.cc, + * tests/morpho/closing/volume.cc, + * tests/morpho/complex_image_wst.cc, + * tests/morpho/contrast.cc, + * tests/morpho/dilation.cc, + * tests/morpho/general.cc, + * tests/morpho/gradient.cc, + * tests/morpho/hit_or_miss.cc, + * tests/morpho/laplacian.cc, + * tests/morpho/lena_line_graph_image_wst1.cc, + * tests/morpho/lena_line_graph_image_wst2.cc, + * tests/morpho/meyer_wst.cc, + * tests/morpho/meyer_wst_long.cc, + * tests/morpho/opening/algebraic.cc, + * tests/morpho/opening/approx/structural.cc, + * tests/morpho/opening/area.cc, + * tests/morpho/opening/height.cc, + * tests/morpho/opening/leveling.cc, + * tests/morpho/opening/structural.cc, + * tests/morpho/opening/sum.cc, + * tests/morpho/opening/volume.cc, + * tests/morpho/thinning.cc, + * tests/morpho/watershed/flooding.cc, + * tests/morpho/watershed/topological.cc: + Add the name of the test as prefix of its output file names. + * tests/binarization/Makefile.am, + * tests/data/Makefile.am, + * tests/data/approx/Makefile.am, + * tests/data/naive/Makefile.am, + * tests/io/dump/Makefile.am, + * tests/io/fits/Makefile.am, + * tests/io/magick/Makefile.am, + * tests/io/off/Makefile.am, + * tests/io/pbm/Makefile.am, + * tests/io/pbms/Makefile.am, + * tests/io/pgm/Makefile.am, + * tests/io/pgms/Makefile.am, + * tests/io/ppm/Makefile.am, + * tests/io/ppms/Makefile.am, + * tests/linear/Makefile.am, + * tests/linear/gaussian/Makefile.am, + * tests/morpho/Makefile.am, + * tests/morpho/approx/Makefile.am, + * tests/morpho/closing/Makefile.am, + * tests/morpho/closing/approx/Makefile.am, + * tests/morpho/opening/Makefile.am, + * tests/morpho/opening/approx/Makefile.am, + * tests/morpho/watershed/Makefile.am + (CLEANFILES): Adjust. + Rename as... + (MOSTLYCLEANFILES): ...this. + +2010-05-11 Roland Levillain <roland@lrde.epita.fr> + + Add missing const qualifiers in iterators on complexes. + + * mln/topo/internal/complex_set_iterator_base.hh + (complex_set_iterator_base<F, E>::complex_set_iterator_base) + (complex_set_iterator_base<F, E>::set_cplx): + Add const qualifier to argument. + +2010-06-03 Roland Levillain <roland@lrde.epita.fr> + + Clean up some tests in tests/morpho/. + + * tests/morpho/rank_filter.cc: Do not include mln/io/pgm/save.hh. + * tests/morpho/skeleton_constrained.cc: Likewise. + (mln::show_connectivity_numbers): Move this function into the + global namespace to avoid the pollution of the `mln' namespace. + Aesthetic changes. + +2010-06-03 Roland Levillain <roland@lrde.epita.fr> + + Clean up a bit Milena's Makefiles. + + * Makefile.am, + * apps/mesh-segm-skel/Makefile.am, + * mesh/Makefile.am, + * tests/Makefile.am, + * tests/accu/Makefile.am, + * tests/accu/image/Makefile.am, + * tests/accu/math/Makefile.am, + * tests/accu/shape/Makefile.am, + * tests/accu/site_set/Makefile.am, + * tests/accu/stat/Makefile.am, + * tests/algebra/Makefile.am, + * tests/arith/Makefile.am, + * tests/binarization/Makefile.am, + * tests/border/Makefile.am, + * tests/canvas/Makefile.am, + * tests/canvas/browsing/Makefile.am, + * tests/canvas/morpho/Makefile.am, + * tests/convert/Makefile.am, + * tests/convert/impl/Makefile.am, + * tests/core/Makefile.am, + * tests/core/alias/Makefile.am, + * tests/core/image/Makefile.am, + * tests/core/image/dmorph/Makefile.am, + * tests/core/image/imorph/Makefile.am, + * tests/core/image/vmorph/Makefile.am, + * tests/core/other/Makefile.am, + * tests/core/routine/Makefile.am, + * tests/core/site_set/Makefile.am, + * tests/data/Makefile.am, + * tests/data/approx/Makefile.am, + * tests/data/naive/Makefile.am, + * tests/debug/Makefile.am, + * tests/display/Makefile.am, + * tests/draw/Makefile.am, + * tests/estim/Makefile.am, + * tests/extension/Makefile.am, + * tests/extract/Makefile.am, + * tests/fun/Makefile.am, + * tests/fun/i2v/Makefile.am, + * tests/fun/p2b/Makefile.am, + * tests/fun/p2p/Makefile.am, + * tests/fun/p2v/Makefile.am, + * tests/fun/stat/Makefile.am, + * tests/fun/v2i/Makefile.am, + * tests/fun/v2v/Makefile.am, + * tests/fun/vv2v/Makefile.am, + * tests/fun/x2x/Makefile.am, + * tests/geom/Makefile.am, + * tests/graph/Makefile.am, + * tests/graph/attribute/Makefile.am, + * tests/histo/Makefile.am, + * tests/io/Makefile.am, + * tests/io/dicom/Makefile.am, + * tests/io/dump/Makefile.am, + * tests/io/fits/Makefile.am, + * tests/io/fld/Makefile.am, + * tests/io/magick/Makefile.am, + * tests/io/off/Makefile.am, + * tests/io/pbm/Makefile.am, + * tests/io/pbms/Makefile.am, + * tests/io/pfm/Makefile.am, + * tests/io/pgm/Makefile.am, + * tests/io/pgms/Makefile.am, + * tests/io/pnm/Makefile.am, + * tests/io/ppm/Makefile.am, + * tests/io/ppms/Makefile.am, + * tests/io/tiff/Makefile.am, + * tests/labeling/Makefile.am, + * tests/linear/Makefile.am, + * tests/linear/gaussian/Makefile.am, + * tests/linear/local/Makefile.am, + * tests/literal/Makefile.am, + * tests/logical/Makefile.am, + * tests/make/Makefile.am, + * tests/math/Makefile.am, + * tests/metal/Makefile.am, + * tests/metal/make/Makefile.am, + * tests/metal/math/Makefile.am, + * tests/morpho/Makefile.am, + * tests/morpho/approx/Makefile.am, + * tests/morpho/attribute/Makefile.am, + * tests/morpho/closing/Makefile.am, + * tests/morpho/closing/approx/Makefile.am, + * tests/morpho/elementary/Makefile.am, + * tests/morpho/opening/Makefile.am, + * tests/morpho/opening/approx/Makefile.am, + * tests/morpho/reconstruction/Makefile.am, + * tests/morpho/reconstruction/by_dilation/Makefile.am, + * tests/morpho/reconstruction/by_erosion/Makefile.am, + * tests/morpho/tree/Makefile.am, + * tests/morpho/tree/filter/Makefile.am, + * tests/morpho/watershed/Makefile.am, + * tests/norm/Makefile.am, + * tests/opt/Makefile.am, + * tests/pw/Makefile.am, + * tests/registration/Makefile.am, + * tests/set/Makefile.am, + * tests/subsampling/Makefile.am, + * tests/tag/Makefile.am, + * tests/test/Makefile.am, + * tests/topo/Makefile.am, + * tests/topo/skeleton/Makefile.am, + * tests/trace/Makefile.am, + * tests/trait/Makefile.am, + * tests/trait/image/Makefile.am, + * tests/trait/op/Makefile.am, + * tests/trait/value/Makefile.am, + * tests/transform/Makefile.am, + * tests/unit_test/Makefile.am, + * tests/upscaling/Makefile.am, + * tests/upscaling/art/Makefile.am, + * tests/util/Makefile.am, + * tests/value/Makefile.am, + * tests/value/builtin/Makefile.am, + * tests/value/concept/Makefile.am, + * tests/win/Makefile.am, + * tests/world/Makefile.am, + * tests/world/binary_2d/Makefile.am, + * tests/world/inter_pixel/Makefile.am, + * tests/world/inter_pixel/dim2/Makefile.am, + * tools/Makefile.am: + Here. + +2010-05-12 Roland Levillain <roland@lrde.epita.fr> + + Add missing copyright headers in Milena. + + * apps/constrained-connectivity/test-constrained-connectivity.in, + * apps/mesh-segm-skel/test-mesh-complex-max-curv-segm.in, + * apps/mesh-segm-skel/test-mesh-complex-max-curv.in, + * apps/mesh-segm-skel/test-mesh-complex-segm.in, + * apps/mesh-segm-skel/test-mesh-complex-skel.in, + * apps/mesh-segm-skel/test-mesh-max-curv.in, + * apps/mesh-segm-skel/test-mesh-segm.in, + * doc/graphicx.hva, + * doc/tools/clearbanner.sh, + * doc/tools/split_sample.sh: + Here. + +2010-05-11 Roland Levillain <roland@lrde.epita.fr> + + Miscellaneous changes in graphs and graph-based images. + + * mln/util/graph.hh, + * mln/util/line_graph.hh, + * mln/core/image/vertex_image.hh, + * mln/core/image/edge_image.hh: + Fix the Doxygen documentation. + * mln/util/vertex.hh: Aesthetic changes. + * mln/util/edge.hh: Aesthetic changes. + (util::edge<G>::invalidate): Remove dead code. + * tests/morpho/line_graph_image_morpho.cc: + Fix (non) Doxygen comments. + +2010-05-11 Roland Levillain <roland@lrde.epita.fr> + + Fix make::edge_image. + + * mln/make/edge_image.hh: Fix Doxygen comments. + (make::edge_image(const Graph<G>&, const fun::i2v::array<V>&)) + (make::edge_image(const Graph<G>&, const Function_v2v<FP>&, + const Function_v2v<FV>&))): + Properly build the required p_edges site sets. + (make::edge_image(const vertex_image<P,V,G>&, const Function_v2b<F>&)): + Actually use the predicate passed as second argument. + Remove debug code. + +2010-04-27 Roland Levillain <roland@lrde.epita.fr> + + Help g++ 3.3 compile Milena code. + + * apps/graph-morpho/convert.hh + (convert::to_image2d(const mln::bin_1complex_image2d&)): + Break up an object's construction to help g++ 3.3 understand it. + +2010-04-23 Roland Levillain <roland@lrde.epita.fr> + + Prevent g++ 4.2 from issuing bad code for graph-morpho/samples_image2d. + + * apps/graph-morpho/Makefile.am (STRICT_ALIASING_CXXFLAGS): New. + (samples_image2d_CXXFLAGS): New. + Set to $(AM_CXXFLAGS) $(STRICT_ALIASING_CXXFLAGS). + +2010-04-22 Roland Levillain <roland@lrde.epita.fr> + + Fix distcleancheck. + + * apps/papers/levillain.09.ismm/Makefile.am (CLEANFILES): New. + Add $(noinst_DATA) and graph-s.neato. + * tests/morpho/watershed/Makefile.am (CLEANFILES): + Add topo_wst.pgm. + +2010-04-22 Roland Levillain <roland@lrde.epita.fr> + + Do not install images from papers (yet). + + * apps/papers/levillain.09.ismm/Makefile.am + (dist_data_DATA): Move seeds.pgm and m283-c.off... + (dist_noinst_DATA): ...here. + (data_DATA): Move lena-s.ppm, graph-s.png and m283-s.off... + (noinst_DATA): ...here. + +2010-04-22 Roland Levillain <roland@lrde.epita.fr> + + Fix the Milena installation. + + * Makefile.am (nobase_include_HEADERS): Move mln/version.hh... + (nobase_nodist_include_HEADERS): ...here. + +2010-04-21 Roland Levillain <roland@lrde.epita.fr> + + Fix the Milena distribution. + + * apps/papers/levillain.09.ismm/Makefile.am + (data_DATA): Move seeds.pgm and m283-c.off... + (dist_data_DATA): ...here. + * tests/unit_test/Makefile.am (EXTRA_DIST): Add disabled_tests. + +2010-04-21 Roland Levillain <roland@lrde.epita.fr> + + Fix Milena's unit tests generator's dependencies. + + * tests/unit_test/Makefile.am ($(srcdir)/unit-tests.mk): + Depend on disabled_tests. + +2010-04-13 Roland Levillain <roland@lrde.epita.fr> + + Fix accu::compute(const Meta_Accumulator<A>, const Image<I>&). + + * mln/accu/compute.hh + (accu::compute(const Meta_Accumulator<A>, const Image<I>&)): Here. + +2010-04-20 Roland Levillain <roland@lrde.epita.fr> + + Exercise mln::util::ord. + + * tests/util/Makefile.am (check_PROGRAMS): Add ord. + (ord_SOURCES): New. + +2010-04-20 Roland Levillain <roland@lrde.epita.fr> + + Fix more tests. + + * mln/core/image/imorph/labeled_image.hh: Include + mln/data/compute.hh. + * mln/io/fld/save.hh: Fix headers' inclusions. + * mln/io/fld/write_header.hh: Likewise. + Add missing namespace qualifiers. + +2010-04-20 Roland Levillain <roland@lrde.epita.fr> + + Install meshes in $(pkgdatadir)/meshes. + + * mesh/Makefile.am (meshdir): Here. + +2010-04-09 Roland Levillain <roland@lrde.epita.fr> + + Fix test core/other/box_runend_piter. + + * tests/core/other/box_runend_piter.cc: Fix assertion. + +2010-03-30 Roland Levillain <roland@lrde.epita.fr> + + Do not install low-quality HTML documentation. + + * doc/Makefile.am (DATA_html_dirs_inst): New. + Use it... + (install-data-local, uninstall-local): Here. + +2010-03-30 Roland Levillain <roland@lrde.epita.fr> + + Adjust the installation of the HTML documentation. + + * doc/Makefile.am (all-local): Do not depend on + $(srcdir)/$(USER_REFMAN_PDF). + (dist_pdf_DATA): Add $(srcdir)/$(USER_REFMAN_PDF) instead of + $(USER_REFMAN_PDF). + (AM_CPPFLAGS): Remove -I$(top_srcdir)/milena/doc/tutorial/tools. + (regen-doc, $(srcdir)/user-refman.stamp) + (regen-devel-doc, $(srcdir)/devel-refman.stamp): + Remove `-' before `rm' actions. + (EXTRA_DIST): Add $(USER_REFMAN). + (maintainer-clean-local) + (install-data-local) + (uninstall-local): + Handle the new HTML subdirectories. + (MAINTAINERCLEANFILES): Remove $(dist_html_DATA). + +2010-03-30 Roland Levillain <roland@lrde.epita.fr> + + Move LaTeX sources at the root of doc/; generate HTML in subdirs. + + * doc/tutorial/tutorial.tex, + * doc/technical/technical.tex, + * doc/ref_guide/ref_guide.tex, + * doc/white_paper/white_paper.tex: + Move... + * doc/tutorial.tex, + * doc/technical.tex, + * doc/ref-guide.tex, + * doc/white-paper.tex: + ...here. + * doc/graphicx.hva: New. + * doc/technical/figures/file_layout.pdf, + * doc/technical/figures/file_layout.png, + * doc/white_paper/figures/house.png, + * doc/white_paper/figures/house_rag.png, + * doc/white_paper/figures/house_wshed.png, + * doc/white_paper/figures/house_wshed_mean_colors.png: + Move... + * doc/figures/technical/file_layout.pdf, + * doc/figures/technical/file_layout.png, + * doc/figures/house.png, + * doc/figures/house_rag.png, + * doc/figures/house_wshed.png, + * doc/figures/house_wshed_mean_colors.png: + ...here. + * doc/technical.tex: Adjust paths. + * doc/technical/designs/, + * doc/tutorial/designs/, + * doc/tutorial/doxyfile_tuto.local, + * doc/tutorial/image_types.txt, + * doc/tutorial/image_values.txt, + * doc/tutorial/images_tour.txt, + * doc/tutorial/slides.tex: + Rename as... + * doc/technical.old/designs/, + * doc/tutorial.old/design/, + * doc/tutorial.old/doxyfile_tuto.local, + * doc/tutorial.old/image_types.txt, + * doc/tutorial.old/image_values.txt, + * doc/tutorial.old/images_tour.txt, + * doc/tutorial.old/slides.tex: + ...this. + * tutorial/headers.stamp: Remove. + * doc/Makefile.am (REFMAN_deps): Rename as... + (refman_dependencies): ...this. + Adjust paths. + ($(srcdir)/user-refman.stamp, $(srcdir)/devel-refman.stamp): + Adjust. + (PNGS, EPSS): Remove. + (.png.eps): Remove rule. + (TECHNICAL_FIGURES, WHITE_PAPER_FIGURES): New. + (MORE_FIGURES): Add $(TECHNICAL_FIGURES) and + $(WHITE_PAPER_FIGURES). + (technical_dir, tutorial_dir, white_paper_dir, ref_guide_dir): + Remove. + (TECHNICAL, TUTORIAL, WHITE_PAPER, REF_GUIDE): New. + (TECHNICAL_PDF, TUTORIAL_PDF, WHITE_PAPER_PDF, REF_GUIDE_PDF) + (TUTORIAL_HH, REF_GUIDE_HH) + (EXTRA_DIST, MAINTAINERCLEANFILES): Adjust. + Remove (EPSS). + (EXTRA_DIST): Remove $(PNGS). + Add graphicx.hva. + (technical_dependencies) + (tutorial_dependencies) + (ref_guide_dependencies): + Rename as... + (TECHNICAL_deps) + (TUTORIAL_deps) + (REF_GUIDE_deps): + ...this. + (TECHNICAL_deps): Add $(TECHNICAL_FIGURES). + (WHITE_PAPER_deps): New. + ($(TECHNICAL_PDF)) + ($(TUTORIAL_PDF)) + ($(WHITE_PAPER_PDF)) + ($(REF_GUIDE_PDF)): + Adjust. + (TECHNICAL_HTML, TECHNICAL_HTML_OUTPUTS) + (TUTORIAL_HTML, TUTORIAL_HTML_OUTPUTS) + (WHITE_PAPER_HTML, WHITE_PAPER_HTML_OUTPUTS) + (REF_GUIDE_HTML, REF_GUIDE_HTML_OUTPUTS): + Remove. + (all-local): Depend on + $(srcdir)/$(TECHNICAL).stamp, + $(srcdir)/$(TUTORIAL).stamp, + $(srcdir)/$(WHITE_PAPER).stamp and + $(srcdir)/$(REF_GUIDE).stamp. + ($(TECHNICAL_HTML).stamp) + ($(TUTORIAL_HTML).stamp) + ($(WHITE_PAPER_HTML).stamp) + ($(REF_GUIDE_HTML).stamp): + Turn targets into... + ($(srcdir)/$(TECHNICAL).stamp) + ($(srcdir)/$(TUTORIAL).stamp) + ($(srcdir)/$(WHITE_PAPER).stamp) + ($(srcdir)/$(REF_GUIDE).stamp): + ...this. + Adjust rules to generate outputs in a subdirectory. + ($(TECHNICAL_HTML_OUTPUTS)) + ($(TUTORIAL_HTML_OUTPUTS)) + ($(WHITE_PAPER_HTML_OUTPUTS)) + ($(REF_GUIDE_HTML_OUTPUTS)): + Turn targets into... + ($(srcdir)/$(TECHNICAL)) + ($(srcdir)/$(TUTORIAL)) + ($(srcdir)/$(WHITE_PAPER)) + ($(srcdir)/$(REF_GUIDE)): + ...this. + Adjust. + ($(TUTORIAL_HH)): Depend on $(srcdir)/$(TUTORIAL).stamp. + Adjust rule. + ($(REF_GUIDE_HH)): Depend on (srcdir)/$(REF_GUIDE).stamp. + Adjust rule. + (dist_html_DATA): Remove. + (DATA_html_dirs): New. + (EXTRA_DIST): Add $(DATA_html_dirs). + +2010-03-26 Roland Levillain <roland@lrde.epita.fr> + + No longer generate doc/technical/technical.hh. + + * doc/Makefile.am (TECHNICAL_HH): Remove variable. + ($(TECHNICAL_HH)): Remove rule. + (MAINTAINERCLEANFILES): Remove $(TECHNICAL_HH). + +2010-03-26 Roland Levillain <roland@lrde.epita.fr> + + Fix the regeneration of files in doc/. + + * doc/Makefile.am (regen-am): No longer invoke + regen-pbm-figures-mk, regen-pgm-figures-mk nor + regen-ppm-figures-mk. + +2010-03-23 Roland Levillain <roland@lrde.epita.fr> + + Fix the Milena distribution. + + * doc/Makefile.am (EXTRA_DIST): Remove $(TECHNICAL_HH). + * tests/transform/Makefile.am (check_PROGRAMS): Remove kht. + (kht_SOURCES): Remove. + +2010-03-23 Roland Levillain <roland@lrde.epita.fr> + + Do not distribute the developer (Doxygen) reference manual. + + * doc/Makefile.am (EXTRA_DIST): Remove + $(srcdir)/devel-refman.stamp. + +2010-03-23 Roland Levillain <roland@lrde.epita.fr> + + Fix the name of the developer (Doxygen) PDF reference manual. + + * doc/Makefile.am (DEVEL_REFMAN_PDF): + s/devel-refman-pdf/devel-refman.pdf/. + +2010-03-23 Roland Levillain <roland@lrde.epita.fr> + + Use finer installation variables. + + * doc/Makefile.am (dist_doc_DATA): Remove variable. + (dist_html_DATA, dist_pdf_DATA): New variables. + (MAINTAINERCLEANFILES): + Remove $(TECHNICAL_HTML_OUTPUTS), $(TECHNICAL_PDF), + $(TUTORIAL_HTML_OUTPUTS), $(TUTORIAL_PDF), + $(WHITE_PAPER_HTML_OUTPUTS), $(WHITE_PAPER_PDF), + $(REF_GUIDE_HTML_OUTPUTS), $(REF_GUIDE_PDF) and + $(USER_REFMAN_PDF). + Add $(dist_html_DATA) and $(dist_pdf_DATA). + +2010-03-23 Roland Levillain <roland@lrde.epita.fr> + + Simplify doc/Makefile.am. + + * doc/Makefile.am: + (DOC_SRCDIR, OUTPUTS_SRCDIR, SPLIT_OUTPUTS_SRCDIR, FIGURES_SRCDIR) + (EXAMPLES_SRCDIR, SPLIT_EXAMPLES_SRCDIR, IMG_SRCDIR, doc_dir): + Remove variables. + Adjust. + +2010-03-23 Roland Levillain <roland@lrde.epita.fr> + + * doc/Makefile.am: Update FIXMEs. + +2010-03-23 Roland Levillain <roland@lrde.epita.fr> + + Remove Make aliases in the documentation. + + * doc/Makefile.am (doc, doc-user, doc-devel) + (doc-pdf, doc-html, doc-devel-pdf, doc-devel-html) + (ref-doc, ref-doc-pdf, ref-doc-devel, ref-doc-devel-pdf) + (tutorial-pdf, white-paper-pdf, ref-guide-pdf) + (tutorial-html, white-paper-html, ref-guide-html): + Remove (phony) targets. + * Makefile.am (doc, tutorial): Likewise. + +2010-03-22 Roland Levillain <roland@lrde.epita.fr> + + Regen documentation products. + + * doc/examples/split/ima2d-rot-1.cc.raw, + * doc/figures/fill-subdomain-2.ppm, + * doc/figures/fill-subdomain-3.ppm, + * doc/figures/labeling-compute-2.ppm, + * doc/figures/tuto3_colorize-2.ppm, + * doc/figures/tuto4_genericity_and_algorithms-1.ppm, + * doc/figures/tuto4_genericity_and_algorithms-5.ppm: + Regen + * doc/figures/tuto4_genericity_and_algorithms-7.pgm, + * doc/figures/tuto4_genericity_and_algorithms-7.ppm, + * doc/figures/tuto4_genericity_and_algorithms-8.pgm, + * doc/figures/tuto4_genericity_and_algorithms-8.ppm, + * doc/figures/tuto4_genericity_and_algorithms-9.pgm, + * doc/figures/tuto4_genericity_and_algorithms-9.ppm: + Delete. + * doc/outputs/ima-load.txt, + * doc/outputs/tuto3_first_routine.txt, + * doc/outputs/tuto4_image.txt: + New. + +2010-03-22 Roland Levillain <roland@lrde.epita.fr> + + Have doc/gen-figures-mk generate more Makefile bits. + + * doc/gen-figures-mk: Generate Make variables PBM_FIGURES, + PGM_FIGURES and PPM_FIGURES in output. + * doc/figures.mk: Regen. + * doc/Makefile.am: No longer include $(srcdir)/pbm-figures.mk, + $(srcdir)/pgm-figures.mk nor $(srcdir)/ppm-figures.mk. + ($(srcdir)/pbm-figures.mk, regen-pbm-figures-mk) + ($(srcdir)/pgm-figures.mk, regen-pgm-figures-mk) + ($(srcdir)/ppm-figures.mk, regen-ppm-figures-mk): + Remove rules. + (EXTRA_DIST): Add $(FIGURES). + Remove $(PBM_FIGURES), $(PGM_FIGURES) and $(PPM_FIGURES). + * doc/pbm-figures.mk, + * doc/pgm-figures.mk, + * doc/ppm-figures.mk: + Remove. + +2010-03-22 Roland Levillain <roland@lrde.epita.fr> + + Rework doc/gen-figures-mk a bit. + + * doc/gen-figures-mk (gen_var): New function. + Use to factor the emission of the Make variable at the end of the + output. + Aesthetic changes. + +2010-03-22 Roland Levillain <roland@lrde.epita.fr> + + Distribute doc/gen-split-outputs-mk. + + * doc/Makefile.am (EXTRA_DIST): Add gen-split-outputs-mk. + Aesthetic changes. + +2010-03-22 Roland Levillain <roland@lrde.epita.fr> + + Make a more portable use of mktemp. + + * doc/gen-split-examples-mk, + * doc/gen-split-outputs-mk: + Here. + +2010-03-22 Roland Levillain <roland@lrde.epita.fr> + + Sort inputs of generators to make them deterministic w.r.t. outputs. + + * doc/gen-split-examples-mk, + * doc/gen-split-outputs-mk: + Here. + * doc/split-examples.mk: Regen. + +2010-03-22 Roland Levillain <roland@lrde.epita.fr> + + Generate the list of figures in the documentation. + + * doc/Makefile.am ($(srcdir)/figures.mk): New rule. + (regen-figures-mk): New phony target. + (regen-am): Invoke regen-figures-mk. + * doc/figures.mk: Regen. + +2010-03-20 Roland Levillain <roland@lrde.epita.fr> + + Add a script to generate doc/figures.mk. + + * doc/gen-figures-mk: New script. + * doc/Makefile.am (EXTRA_DIST): Add gen-figures-mk. + +2010-03-20 Roland Levillain <roland@lrde.epita.fr> + + Use a more uniform style in doc/figures.mk. + + * doc/figures.mk: Here. + Reorder items. + +2010-03-20 Roland Levillain <roland@lrde.epita.fr> + + Prepare doc examples for the automated generation of figures.mk. + + * doc/examples/ima2d-rot.cc (main): Pass a literal string as + second argument to doc::ppmsave to help gen-figures-mk. + * doc/examples/labeling-compute.cc (main): Have calls to + doc::ppmsave fit on a single line to help gen-figures-mk. + +2010-03-18 Roland Levillain <roland@lrde.epita.fr> + + Typo in doc/. + + * doc/examples/accu-right-instanciation.cc: Rename as... + * doc/examples/accu-right-instantiation.cc: ...this. + * doc/examples/accu-wrong-instanciation.cc.raw, + * doc/examples/split/accu-right-instanciation-1.cc.raw, + * doc/outputs/accu-right-instanciation.txt: + Likewise, rename as... + * doc/examples/accu-wrong-instantiation.cc.raw, + * doc/examples/split/accu-right-instantiation-1.cc.raw, + * doc/outputs/accu-right-instantiation.txt: + ...these. + * doc/ref_guide/ref_guide.tex, + * doc/programs-examples.mk, + * doc/Makefile.am (MORE_EXAMPLES): + s/instanciation/instantiation/. + * doc/examples-outputs.mk, + * doc/examples.mk, + * doc/outputs.mk, + * doc/split-examples.mk: + Regen. + +2010-03-18 Roland Levillain <roland@lrde.epita.fr> + + Fix dependencies in doc/. + + * doc/Makefile.am (refman_dependencies): + Remove $(SPLIT_EXAMPLES) and $(SPLIT_OUTPUTS). + (technical_dependencies): Add $(TECHNICAL_EXAMPLES). + (tutorial_dependencies, ref_guide_dependencies): + Add $(EXAMPLES) and $(OUTPUTS). + +2010-03-18 Roland Levillain <roland@lrde.epita.fr> + + Distribute non generated figures in the documentation. + + * doc/Makefile.am (MORE_FIGURES): New variable. + Add figures/accu_image_morpher_big_picture.pdf. + (EXTRA_DIST): Add $(MORE_FIGURES). + +2010-03-18 Roland Levillain <roland@lrde.epita.fr> + + Distribute non generated examples in the documentation. + + * doc/Makefile.am (TECHNICAL_EXAMPLES, MORE_EXAMPLES): + New variables. + (EXTRA_DIST): Add $(TECHNICAL_EXAMPLES) and $(MORE_EXAMPLES). + +2010-03-18 Roland Levillain <roland@lrde.epita.fr> + + Have ``make maintainer-clean'' remove generated figures in doc/. + + * doc/figures.mk + (EXTEND_FIGURES) + (FILL_FIGURES) + (FILL_SUBDOMAIN_FIGURES) + (FILL_IMAGEIF_CFUN_FIGURES) + (IMA2D_ROT_FIGURES) + (IMA_SAVE_FIGURES) + (LABELING_COMPUTE_FIGURES) + (LOGICAL_NOT_FIGURES) + (TUTO2_FIRST_IMAGE_FIGURES) + (TUTO3_COLORIZE_FIGURES) + (TUTO3_RW_IMAGE_FIGURES) + (TUTO4_GENERICITY_AND_ALGORITHMS_FIGURES): + New variables. + Use them to simplify rules. + (FIGURES): New variable. + * doc/Makefile.am (MAINTAINERCLEANFILES): Add $(FIGURES). + +2010-03-18 Roland Levillain <roland@lrde.epita.fr> + + Generate the list of split outputs in the documentation. + + * doc/Makefile.am ($(srcdir)/split-outputs.mk): New rule. + (regen-split-outputs-mk): New (phony) target. + ($(srcdir)/split-outputs.stamp): Remove rule. + (refman_dependencies) + (tutorial_dependencies) + (ref_guide_dependencies) + (EXTRA_DIST, MAINTAINERCLEANFILES): + Remove $(srcdir)/split-outputs.stamp + Add $(SPLIT_OUTPUTS). + (regen-am): Remake regen-split-outputs-mk. + * doc/gen-split-outputs-mk: New script. + Use it to generate... + * doc/split-outputs.mk: ...this (new) Make helper. + +2010-03-18 Roland Levillain <roland@lrde.epita.fr> + + Prepare doc source files for the automation of output splitting. + + * doc/examples/tuto3/println.cc, + * doc/examples/tuto4/site_set_create.cc: + Use doc::begin_output and doc::end_output instead of hand-made + delimiters. + +2010-03-17 Roland Levillain <roland@lrde.epita.fr> + + Have split_sample.sh announce the right number of output files. + + * doc/tools/split_sample.sh: Here. + +2010-03-17 Roland Levillain <roland@lrde.epita.fr> + + Fix programs in doc/examples/. + + * doc/examples/ima-save.cc: Add a FIXME. + * doc/examples/ima-load.cc: Likewise. + Avoid hard-coded paths. + * doc/examples/tuto4/image.cc: Make it compile. + * doc/img/small.pbm: New symbolic link to img/small.pbm. + * doc/examples/split/ima-load-1.cc.raw: Regen. + * doc/examples/fill-imageif-cfun.cc, + * figures.mk, + * ppm-figures.mk: + s/fill-subimage-cfun/fill-imageif-cfun/. + +2010-03-17 Roland Levillain <roland@lrde.epita.fr> + + Update PNG-to-EPS conversion rule. + + * doc/Makefile.am (.png.eps): No longer try to build figures/ in + the build directory. + +2010-03-17 Roland Levillain <roland@lrde.epita.fr> + + Remove useless paths in texi2dvi invocations. + + * doc/Makefile.am (TEXI2DVI_FLAGS): + Remove -I $(DOC_SRCDIR)/white_paper. + +2010-03-17 Roland Levillain <roland@lrde.epita.fr> + + Update cleaning rules in doc/. + + * doc/Makefile.am (maintainer-clean-local): + Remove outdated actions. + +2010-03-17 Roland Levillain <roland@lrde.epita.fr> + + Add missing dependencies. + + * doc/Makefile.am (DOC_PACKAGES): Strip useless $(srcdir) prefixes. + (technical_dependencies) + (tutorial_dependencies) + (ref_guide_dependencies): + Add $(DOC_PACKAGES). + +2010-03-17 Roland Levillain <roland@lrde.epita.fr> + + Ship non generated outputs. + + * doc/Makefile.am (EXTRA_DIST): Add $(MORE_OUTPUTS). + +2010-03-17 Roland Levillain <roland@lrde.epita.fr> + + Generate the list of outputs in the documentation. + + * doc/Makefile.am (OUTPUTS): Remove this variable that used to be + populated by hand. + Include $(srcdir)/outputs.mk. + No longer include $(srcdir)/outputs/outputs.mk. + $(srcdir)/outputs.mk: New target. + (EXTRA_DIST): Add $(OUTPUTS). + (regen-outputs-mk): New (phony) target. + (regen-am): Remake regen-outputs-mk. + Do not recreate $(srcdir)/headers.stamp.tmp. + (EXTRA_DIST): Remove headers.stamp. + ($(srcdir)/outputs/outputs.mk) + ($(srcdir)/headers.stamp): + Remove rules. + (outputs/outputs.mk): Remove this Make helper. + Supersed by... + (outputs.mk): ...this (new) Make helper. + +2010-03-17 Roland Levillain <roland@lrde.epita.fr> + + Handle dependencies of generated figures. + + * doc/figures.mk: New Make helper. + Include it... + * doc/Makefile.am: ...here. + +2010-03-17 Roland Levillain <roland@lrde.epita.fr> + + * doc/examples-outputs.mk: Regen. + +2010-03-17 Roland Levillain <roland@lrde.epita.fr> + + Prepare for the generation of multiple outputs from doc/ programs. + + * doc/gen-examples-outputs-mk: Split generated rules in two so + that they produce a timestamp that outputs (and soon generated + figures) depend on. + +2010-03-17 Roland Levillain <roland@lrde.epita.fr> + + Generate doc/examples-outputs.mk using sources in lieu of programs. + + * doc/gen-examples-outputs-mk: Take sources as input instead of + programs. + * doc/examples-outputs.mk: Regen. + * doc/Makefile.am ($(DOC_SRCDIR)/examples-outputs.mk): + Adjust caller. + Use `find' to get inputs instead of relying on + $(PROGRAMS_examples). + Rename target as... + ($(srcdir)/examples-outputs.mk): ...this. + Depend only on $(srcdir)/gen-examples-outputs-mk, and no longer on + $(srcdir)/Makefile.am. + (regen-examples-outputs-mk): Adjust as well. + * doc/programs-examples.mk: Adjust comments. + +2010-03-17 Roland Levillain <roland@lrde.epita.fr> + + Move bits about programs out of doc/Makefile.am to improve readability. + + * doc/Makefile.am (PROGRAMS_examples) + (accu_right_instanciation_SOURCES) + (borderthickness_SOURCES) + (box2d_bbox_SOURCES) + (domain_display_SOURCES) + (dpoint_1_SOURCES) + (estim_sites_SOURCES) + (extend_SOURCES) + (extension_ignore_SOURCES) + (fill_SOURCES) + (fill_call_1_SOURCES) + (fill_imageif_cfun_SOURCES) + (fill_part_image_SOURCES) + (fill_subdomain_SOURCES) + (fill_subdomain_shorter_SOURCES) + (first_routine_SOURCES) + (forall_piter_SOURCES) + (fun_p2v_1_SOURCES) + (graph_data_SOURCES) + (graph_iter_SOURCES) + (ima2d_1_SOURCES) + (ima2d_2_SOURCES) + (ima2d_3_SOURCES) + (ima2d_4_SOURCES) + (ima2d_5_SOURCES) + (ima2d_6_clone_SOURCES) + (ima2d_7_SOURCES) + (ima2d_rot_SOURCES) + (ima_has_SOURCES) + (ima_save_SOURCES) + (ima_size_SOURCES) + (labeling_compute_SOURCES) + (logical_not_SOURCES) + (mln_var_SOURCES) + (parray_append_SOURCES) + (parray_bbox_SOURCES) + (paste_SOURCES) + (paste_call_1_SOURCES) + (point_1_SOURCES) + (predicate_1_SOURCES) + (tuto2_first_image_SOURCES) + (tuto3_colorize_SOURCES) + (tuto3_println_SOURCES) + (tuto3_rw_image_SOURCES) + (tuto3_trace_SOURCES) + (tuto4_genericity_and_algorithms_SOURCES) + (tuto4_point2d_SOURCES) + (tuto4_site_set_create_SOURCES) + (win_create_1_SOURCES) + (win_create_2_SOURCES): + Move variables... + * doc/programs-examples.mk: ...here (new file). + (PROGRAMS_examples): Rename first_routine as tuto3_first_routine. + Add ima-load and tuto4_image. + (first_routine_SOURCES): Remove this variable. + Superseded by... + (tuto3_first_routine_SOURCES): ...this (new) variable. + (ima_load_SOURCES, tuto4_image_SOURCES): New variables. + * doc/Makefile.am: Include $(srcdir)/programs-examples.mk. + +2010-03-16 Roland Levillain <roland@lrde.epita.fr> + + Generate the list of split examples in the documentation. + + * doc/gen-split-examples-mk: New script. + * doc/Makefile.am: Include ($(srcdir)/split-examples.mk). + ($(srcdir)/split-examples.mk): New target. + (EXTRA_DIST, MAINTAINERCLEANFILES): Add $(SPLIT_EXAMPLES). + (refman_dependencies) + (tutorial_dependencies) + (ref_guide_dependencies): + Remove $(doc_dir)/split-examples.stamp. + Add $(SPLIT_EXAMPLES). + (regen-split-examples-mk): New (phony) target. + (regen-am): Remake regen-split-examples-mk instead of using + generate_dist_files.sh. + ($(srcdir)/headers.stamp): No longer call generate_dist_files.sh + to regen doc/examples/examples.mk. + No longer include $(srcdir)/examples/examples.mk. + ($(srcdir)/examples/examples.mk, $(srcdir)/split-examples.stamp): + Remove rules. + (EXTRA_DIST, MAINTAINERCLEANFILES): + Remove $(srcdir)/split-examples.stamp. + (EXTRA_DIST): Add gen-split-examples-mk. + * doc/split-examples.mk: New (generated) Make helper. + * doc/examples/examples.mk: Remove. + +2010-03-16 Roland Levillain <roland@lrde.epita.fr> + + Generate the list of examples in the documentation. + + * doc/Makefile.am (EXAMPLES): Remove this variable that used to be + populated by hand. + Include ($(srcdir)/examples.mk). + ($(srcdir)/examples.mk): New target. + (EXTRA_DIST): Add $(EXAMPLES). + (regen-examples-mk): New (phony) target. + (regen-am): Remake regen-examples-mk. + * doc/examples.mk: New (generated) Make helper. + +2010-03-16 Roland Levillain <roland@lrde.epita.fr> + + Revamp the conversion of images in the documentation. + + * gen-make-variable: New script. + * doc/Makefile.am: Include $(srcdir)/pbm-figures.mk, + ($(srcdir)/pgm-figures.mk and $(srcdir)/ppm-figures.mk. + ($(srcdir)/pbm-figures.mk) + ($(srcdir)/pgm-figures.mk) + ($(srcdir)/ppm-figures.mk): + New targets. + (EXTRA_DIST): Add $(PBM_FIGURES), $(PGM_FIGURES), $(PPM_FIGURES). + (regen-pbm-figures-mk) + (regen-pgm-figures-mk) + (regen-ppm-figures-mk): + New (phony target). + (regen-am): Remake regen-pbm-figures-mk, regen-pgm-figures-mk and + regen-ppm-figures-mk instead of calling generate_dist_files.sh to + convert figures. + ($(srcdir)/headers.stamp): No longer call generate_dist_files.sh to + convert figures. + (convert_to_png): New variable. + (SUFFIXES): Add .pbm, .pgm, .ppm and .png. + (.pbm.png, .pgm.png, .ppm.png): New suffix rules. + (PNG_FIGURES): New variable. + (EXTRA_DIST, MAINTAINERCLEANFILES): Add $(PNG_FIGURES). + (refman_dependencies): + Remove $(srcdir)/figures.stamp. + Add $(PNG_FIGURES). + (technical_dependencies) + (tutorial_dependencies) + (ref_guide_dependencies): + Likewise. + No longer include $(srcdir)/figures/figures.mk. + ($(srcdir)/figures/figures.mk, $(srcdir)/figures.stamp): + Remove rules. + (EXTRA_DIST, MAINTAINERCLEANFILES): + Remove $(srcdir)/figures.stamp. + (EXTRA_DIST): Add gen-make-variable. + * pbm-figures.mk, pgm-figures.mk, ppm-figures.mk: + New (generated) Make helpers. + * figures/figures.mk: Remove. + +2010-03-17 Roland Levillain <roland@lrde.epita.fr> + + Add a rule to forcefully regen doc/examples-outputs.mk. + + * doc/Makefile.am (regen-examples-outputs-mk): New (phony) target. + (regen-am): Invoke regen-examples-outputs-mk. + +2010-03-16 Roland Levillain <roland@lrde.epita.fr> + + Ship doc/gen-examples-outputs-mk. + + * doc/Makefile.am (EXTRA_DIST): Add gen-examples-outputs-mk. + +2010-03-18 Roland Levillain <roland@lrde.epita.fr> + + Fix the regeneration of HTML outputs. + + * doc/Makefile.am + ($(TECHNICAL_HTML_OUTPUTS)) + ($(TUTORIAL_HTML_OUTPUTS)) + ($(WHITE_PAPER_HTML_OUTPUTS)) + ($(REF_GUIDE_HTML_OUTPUTS)): + Fix tests on targets. + +2010-03-15 Roland Levillain <roland@lrde.epita.fr> + + Distribute and clean documentation timestamps. + + * doc/Makefile.am (EXTRA_DIST, MAINTAINERCLEANFILES): + Add $(srcdir)/user-refman.stamp, $(srcdir)/devel-refman.stamp, + $(srcdir)/figures.stamp, $(srcdir)/split-examples.stamp and + $(srcdir)/split-outputs.stamp. + +2010-03-15 Roland Levillain <roland@lrde.epita.fr> + + Improve doc/'s cleaning rules. + + * doc/Makefile.am (CLEANFILES): Remove + $(technical_dir)/technical.haux, + $(tutorial_dir)/tutorial.haux, + $(ref_guide_dir)/ref_guide.haux and + $(ref_guide_dir)/ref_guide.htoc. + (clean-local): Remove (phony) target. + ($(EPSS)): Move... + (MAINTAINERCLEANFILES): ...here. + Add $(TECHNICAL_PDF), $(TECHNICAL_HH), + $(TUTORIAL_PDF), $(TUTORIAL_HH), + $(WHITE_PAPER_PDF) + $(REF_GUIDE_PDF) and $(REF_GUIDE_HH). + +2010-03-15 Roland Levillain <roland@lrde.epita.fr> + + Prevent todoxygen.sh from generating incomplete outputs. + + * doc/tools/todoxygen.sh: Take an output file as second argument + instead of an output directory. + * doc/Makefile.am + ($(TECHNICAL_HH), $(TUTORIAL_HH), $(REF_GUIDE_HH)): Adjust. + Use a temporary file to prevent todoxygen.sh from generating + incomplete outputs. + +2010-03-15 Roland Levillain <roland@lrde.epita.fr> + + Adjust todoxygen.sh to TeX4ht outputs. + + * doc/tools/todoxygen.sh: Here. + +2010-03-15 Roland Levillain <roland@lrde.epita.fr> + + Adapt HTML generation to TeX4ht. + + * doc/Makefile.am + (TECHNICAL_HTML_OUTPUTS, TUTORIAL_HTML_OUTPUTS) + (WHITE_PAPER_HTML_OUTPUTS, REF_GUIDE_HTML_OUTPUTS): + New variables. + ($(TECHNICAL_HTML), $(TUTORIAL_HTML)) + ($(WHITE_PAPER_HTML), $(REF_GUIDE_HTML)): + Remove these targets. + Superseded by... + ($(TECHNICAL_HTML).stamp, $(TECHNICAL_HTML_OUTPUTS)) + ($(TUTORIAL_HTML).stamp, $(TUTORIAL_HTML_OUTPUTS)) + ($(WHITE_PAPER_HTML).stamp, $(WHITE_PAPER_HTML_OUTPUTS)) + ($(REF_GUIDE_HTML).stamp, $(REF_GUIDE_HTML_OUTPUTS)): + ...these (new) targets. + (EXTRA_DIST, MAINTAINERCLEANFILES): Add $(TECHNICAL_HTML).stamp, + ($(TUTORIAL_HTML).stamp, $(WHITE_PAPER_HTML).stamp and + $(REF_GUIDE_HTML).stamp. + (dist_doc_DATA, MAINTAINERCLEANFILES): Remove $(TECHNICAL_HTML), + $(TUTORIAL_HTML), $(WHITE_PAPER_HTML) and $(REF_GUIDE_HTML). + Add $(TECHNICAL_HTML_OUTPUTS), $(TUTORIAL_HTML_OUTPUTS), + $(WHITE_PAPER_HTML_OUTPUTS) and $(REF_GUIDE_HTML_OUTPUTS). + +2010-03-15 Roland Levillain <roland@lrde.epita.fr> + + Use texi2dvi to produce HTML from LaTeX. + + * doc/Makefile.am + (TEXI2DVI_FLAGS): Add -I $(DOC_SRCDIR)/white_paper. + ($(TECHNICAL_PDF), $(TUTORIAL_PDF)) + ($(WHITE_PAPER_PDF), $(REF_GUIDE_PDF)): + Reduce these rules to a list of extra dependencies and let the + generic tex-to-html rule do the job. + +2010-03-12 Roland Levillain <roland@lrde.epita.fr> + + Split LaTeX-to-HTML rules to clear things up. + + * doc/tools/todoxygen.sh: Take a HTML file as input instead of a + LaTeX one. + * doc/Makefile.am (DOC_PACKAGES): New variable. + (TECHNICAL_HTML, TUTORIAL_HTML, REF_GUIDE_HTML): + New variables. + ($(TECHNICAL_HTML), $(TUTORIAL_HTML), $(REF_GUIDE_HTML)): + New targets. + (dist_doc_DATA): Add $(TECHNICAL_HTML), $(TUTORIAL_HTML) and + $(REF_GUIDE_HTML). + ($(TECHNICAL_HH)): Depend on and process $(TECHNICAL_HTML) instead + of $(technical_dir)/technical.tex. + ($(TUTORIAL_HH)): Depend on and process $(TUTORIAL_HTML) instead + of $(tutorial_dir)/tutorial.tex. + ($(REF_GUIDE_HH)): Depend on and process $(REF_GUIDE_HTML) instead + of $(ref_guide_dir)/ref_guide.tex. + (CLEANFILES): Remove now useless patterns. + (clean-local): Likewise. + Adjust paths. + +2010-03-12 Roland Levillain <roland@lrde.epita.fr> + + List non generated documentation outputs separately. + + * doc/Makefile.am (OUTPUTS, EXAMPLES): + Sort in lexicographical order. + Remove $(srcdir)/outputs/ima2d-decl-2.txt + Move $(srcdir)/outputs/graph-output-1.txt, + $(srcdir)/outputs/ima2d-display-1.txt, + $(srcdir)/outputs/ima2d-display-2.txt, + $(srcdir)/outputs/ima2d-display-output-1.txt, + $(srcdir)/outputs/ima2d-display-output-2.txt, + $(srcdir)/outputs/parray-display-1.txt and + $(srcdir)/outputs/win-create-1-display.txt... + (MORE_OUTPUTS): ...here (new variable). + * doc/outputs/ima2d-decl-2.txt: Remove. + +2010-03-12 Roland Levillain <roland@lrde.epita.fr> + + Use texi2dvi to produce PDF from LaTeX. + + * doc/Makefile.am: Include $(top_srcdir)/build-aux/tex.mk. + (TEXI2DVI_FLAGS): Append -I $(DOC_SRCDIR), -I $(OUTPUTS_SRCDIR), + -I $(SPLIT_OUTPUTS_SRCDIR), -I $(IMG_SRCDIR) and -I + $(SPLIT_EXAMPLES_SRCDIR). + (technical_TEXINPUTS, tutorial_TEXINPUTS) + (white_paper_TEXINPUTS, ref_guide_TEXINPUTS): + Remove variables. + ($(TECHNICAL_PDF), $(TUTORIAL_PDF)) + ($(WHITE_PAPER_PDF), $(REF_GUIDE_PDF)): + Reduce these rules to a list of extra dependencies and let the + generic tex-to-pdf rule do the job. + ($(WHITE_PAPER_HTML)): Adjust rule. + +2010-03-12 Roland Levillain <roland@lrde.epita.fr> + + Merge doc/ Makefile helpers into doc/Makefile.am. + + * milena/doc/doc.mk, + * milena/doc/examples/make.mk, + * milena/doc/ref_guide/ref_guide.mk, + * milena/doc/technical/technical.mk, + * milena/doc/tutorial/tutorial.mk, + * milena/doc/white_paper/white_paper.mk: + Remove and inline these files... + * doc/Makefile.am: ...here. + Do not include $(top_srcdir)/milena/tests/tests.mk. + (AM_CPPFLAGS): Add -I$(top_srcdir)/milena and + -I$(top_builddir)/milena. + ($(DOC_SRCDIR)/examples-outputs.mk): Depend on + $(srcdir)/Makefile.am instead of $(srcdir)/examples/make.mk. + +2010-03-12 Roland Levillain <roland@lrde.epita.fr> + + Improve dependencies of some documentation products. + + * doc/ref_guide/ref_guide.mk (ref_guide_dependencies): + New variable. + Use it to define dependencies of... + ($(REF_GUIDE_HH), $(REF_GUIDE_PDF)): + ...these targets. + * doc/technical/technical.mk (technical_dependencies): + New variable. + Use it to define dependencies of... + ($(TECHNICAL_HH), $(TECHNICAL_PDF)): + ...these targets. + * doc/tutorial/tutorial.mk (tutorial_dependencies): + New variable. + Use it to define dependencies of... + ($(TUTORIAL_HH), $(TUTORIAL_PDF)): + ...these targets. + +2010-03-12 Roland Levillain <roland@lrde.epita.fr> + + Revamp the Makefile machinery in milena/doc/examples/. + + * doc/gen-examples-outputs-mk: New script. + * doc/examples/make.mk (PROGRAMS_examples): + Sort and remove duplicates. + (examples_dir): Remove variable. + (accu_right_instanciation_SOURCES) + (borderthickness_SOURCES) + (box2d_bbox_SOURCES) + (domain_display_SOURCES) + (dpoint_1_SOURCES) + (estim_sites_SOURCES) + (extend_SOURCES) + (extension_ignore_SOURCES) + (fill_SOURCES) + (fill_call_1_SOURCES) + (fill_imageif_cfun_SOURCES) + (fill_part_image_SOURCES) + (fill_subdomain_SOURCES) + (fill_subdomain_shorter_SOURCES) + (first_routine_SOURCES) + (forall_piter_SOURCES) + (fun_p2v_1_SOURCES) + (graph_data_SOURCES) + (graph_iter_SOURCES) + (ima2d_1_SOURCES) + (ima2d_2_SOURCES) + (ima2d_3_SOURCES) + (ima2d_4_SOURCES) + (ima2d_5_SOURCES) + (ima2d_6_clone_SOURCES) + (ima2d_7_SOURCES) + (ima2d_rot_SOURCES) + (ima_has_SOURCES) + (ima_save_SOURCES) + (ima_size_SOURCES) + (labeling_compute_SOURCES) + (logical_not_SOURCES) + (mln_var_SOURCES) + (parray_append_SOURCES) + (parray_bbox_SOURCES) + (paste_SOURCES) + (paste_call_1_SOURCES) + (point_1_SOURCES) + (predicate_1_SOURCES) + (win_create_1_SOURCES) + (win_create_2_SOURCES) + (tuto2_first_image_SOURCES) + (tuto3_rw_image_SOURCES) + (tuto4_genericity_and_algorithms_SOURCES) + (tuto3_colorize_SOURCES) + (tuto3_println_SOURCES) + (tuto3_trace_SOURCES) + (tuto4_point2d_SOURCES) + (tuto4_site_set_create_SOURCES): + Adjust. + (data-regen, examples, run-examples) + Remove (phony) targets. + (split-examples, split-outputs): + Likewise. + Superseded by... + ($(srcdir)/split-examples.stamp, $(srcdir)/split-outputs.stamp): + ...these (new) targets. + (OUTPUTS, EXAMPLES): New variable. + ($(DOC_SRCDIR)/examples-outputs.mk): New target. + Include $(DOC_SRCDIR)/examples-outputs.mk. + (MAINTAINERCLEANFILES): Ad $(OUTPUTS). + (diff-data, fix-refdata): Remove these (phony) targets, as they + duplicate services provided by the SCM (Git). + (clean-local, clean-figures): Remove these targets and add their + actions... + * doc/Makefile.am (maintainer-clean-local): ...to this rule. + (EXTRA_DEPS): Remove variable. + Superseded by... + (refman_dependencies): ...this (new) variable. + ($(srcdir)/user-refman.stamp) + ($(srcdir)/devel-refman.stamp): + Adjust targets' dependencies. + (fig-convert): Remove (phony) target. + Clean up. + * milena/doc/examples-outputs.mk: New (generated file). + +2010-03-12 Roland Levillain <roland@lrde.epita.fr> + + Have documentation's examples not depend on hard-coded paths. + + * doc/tools/data.hh.in: New file. + Use it... + * doc/examples/ima-save.cc: + ...here, to avoid hard-coded paths. + * doc/tools/sample_utils.hh: Likewise. + Adjust header guards. + * doc/examples/split/ima-save-1.cc.raw: Regen. + +2010-03-08 Roland Levillain <roland@lrde.epita.fr> + + Update the documentation's copyright header. + + * mln/core/concept/object.hh: Here. + +2010-03-08 Roland Levillain <roland@lrde.epita.fr> + + Have Doxygen generate its outputs in the build directory. + + * doc/Doxyfile.in (OUTPUT_DIRECTORY): + s,@srcdir@/user/,@builddir@/user-refman.tmp,. + (EXCLUDE): Adjust. + * doc/Makefile.am (edit_devel): Adjust. + ($(srcdir)/user-refman.stamp) + ($(srcdir)/devel-refman.stamp) + (maintainer-clean-local): + Adjust targets. + +2010-03-08 Roland Levillain <roland@lrde.epita.fr> + + Reorganize doc/Makefile.am. + + * doc/Makefile.am (edit, $(DOXYFILE_USER)): + Move these definitions closer to their use site. + (edit_devel, $(DOXYFILE_DEVEL)): Likewise. + +2010-03-08 Roland Levillain <roland@lrde.epita.fr> + + Have Doxyfile.in generate the user documentation. + + * doc/Doxyfile.in: Switch settings to generate the user + documentation. + * doc/Makefile.am (edit_user): Remove variable. + (edit_devel): New variable. + ($(DOXYFILE_USER)): Generate it directly from + $(srcdir)/$(DOXYFILE).in. + ($(DOXYFILE_DEVEL)): Adjust to use edit_devel. + +2010-03-08 Roland Levillain <roland@lrde.epita.fr> + + Generate the HTML and LaTeX Doxygen documentation in a single pass. + + * doc/Doxyfile.in (GENERATE_LATEX): Enable. + (EXCLUDE): Adjust. + * doc/Makefile.am (ref-doc-html, ref-doc-devel-html): + Remove (phony) targets. + (ref-doc, ref-doc-devel): + New (phony) targets. + (doc-html, doc-devel-html): + Adjust targets. + (DOXYFILE_USER_PDF, DOXYFILE_USER_HTML) + (DOXYFILE_DEVEL_PDF, DOXYFILE_DEVEL_HTML): + Remove variables. + (DOXYFILE_USER_PDF, DOXYFILE_DEVEL): + New variables. + (USER_REFMAN_LATEX, USER_REFMAN_HTML) + (DEVEL_REFMAN_LATEX, DEVEL_REFMAN_HTML): + Remove variables. + (USER_REFMAN): New variable. + (all-local): Adjust. + ($(srcdir)/user-refman-latex.stamp) + ($(srcdir)/$(USER_REFMAN_LATEX)) + ($(srcdir)/user-refman-html.stamp) + ($(srcdir)/$(USER_REFMAN_HTML)) + ($(srcdir)/devel-refman-latex.stamp) + ($(srcdir)/$(DEVEL_REFMAN_LATEX)) + ($(srcdir)/devel-refman-html.stamp) + ($(srcdir)/$(DEVEL_REFMAN_HTML)): + Remove targets. + ($(srcdir)/user-refman.stamp) + ($(srcdir)/$(USER_REFMAN)) + ($(srcdir)/devel-refman.stamp) + ($(srcdir)/$(DEVEL_REFMAN)): + New targets. + ($(srcdir)/$(USER_REFMAN_PDF), $(srcdir)/$(DEVEL_REFMAN_PDF)): + Adjust targets. + (regen-doc, regen-devel-doc): New (phony) targets. + (clean-user-refman-latex, clean-user-refman-html) + (clean-devel-refman-latex, clean-devel-refman-html): + Remove (phony) targets. + (maintainer-clean-local): Adjust. + (edit_pdf): Remove variable. + (EXTRA_DIST): Remove $(USER_REFMAN_HTML). + Add $(USER_REFMAN)/html. + (install-data-local, uninstall-local): Adjust. + (CLEANFILES): Remove Doxyfile_user, Doxyfile_user_pdf, + Doxyfile_devel, Doxyfile_devel_pdf, devel and user. + (MAINTAINERCLEANFILES): Add Doxyfile_user and Doxyfile_devel. + ($(DOXYFILE_USER_PDF), $(DOXYFILE_USER_HTML)) + ($(DOXYFILE_DEVEL_PDF), $(DOXYFILE_DEVEL_HTML)): + Remove targets. + ($(DOXYFILE_USER), $(DOXYFILE_DEVEL)): + New targets. + +2010-03-08 Roland Levillain <roland@lrde.epita.fr> + + Shorten the list of files visited by Doxygen. + + * doc/Doxyfile.in (STRIP_FROM_PATH, INPUT, IMAGE_PATH): + Remove all paths from the build directory. + (EXCLUDE): Add paths to generated documentation and generated unit + tests. + +2010-03-08 Roland Levillain <roland@lrde.epita.fr> + + * apps/graph-morpho/morpho.hh: Help Doxygen compile LaTeX formulas. + +2010-03-04 Roland Levillain <roland@lrde.epita.fr> + + Clean up Doxygen-related Make rules in milena/doc/. + + * doc/Makefile.am (DOXYFILE) + (DOXYFILE_USER_PDF, DOXYFILE_USER_HTML) + (DOXYFILE_DEVEL_PDF, DOXYFILE_DEVEL_HTML): + New variables. + (USER_REFMAN_LATEX) + (DEVEL_REFMAN_PDF, DEVEL_REFMAN_LATEX, DEVEL_REFMAN_HTML): + New variables. + (all-local): Depend on $(srcdir)/$(USER_REFMAN_PDF), + $(srcdir)/user-refman-html.stamp. + ($(srcdir)/$(USER_REFMAN_PDF)): Split these targets and move the + generation of the LaTeX sources... + ($(srcdir)/user-refman-latex.stamp) + ($(srcdir)/$(USER_REFMAN_LATEX)) + ($(srcdir)/devel-refman-latex.stamp) + ($(srcdir)/$(DEVEL_REFMAN_LATEX)): + ...here (new targets). + ($(srcdir)/$(USER_REFMAN_HTML)) + ($(srcdir)/$(DEVEL_REFMAN_HTML)): + Delegate the actions to... + ($(srcdir)/user-refman-html.stamp) + ($(srcdir)/devel-refman-html.stamp): + ...these (new) targets. + (clean-user-refman-latex, clean-user-refman-html) + (clean-devel-refman-latex, clean-devel-refman-html): + New (phony) targets. + (maintainer-clean-local): Depend on clean-user-refman-latex, + clean-user-refman-html, clean-devel-refman-latex and + clean-devel-refman-html. + (EXTRA_DIST): Disable Doxyfile_devel_html, Doxyfile_devel_pdf, + Doxyfile_user_html and Doxyfile_user_pdf. + Add $(DOXYFILE).in. + ($(srcdir)/Doxyfile_user, $(srcdir)/Doxyfile_user_pdf) + ($(srcdir)/Doxyfile_devel, $(srcdir)/Doxyfile_devel_pdf): + Rename targets as... + ($(DOXYFILE_USER_HTML), $(DOXYFILE_USER_PDF)) + ($(DOXYFILE_DEVEL_HTML), $(DOXYFILE_DEVEL_PDF)): + ...these. + +2010-03-03 Roland Levillain <roland@lrde.epita.fr> + + Stop make from recurring in doc/examples. + + * doc/Makefile.am: Include + $(top_srcdir)/milena/doc/examples/make.mk. + (SUBDIRS): Remove variable. + (examples, data-regen, fig-convert): Remove (phony) targets. + * doc/examples/Makefile.am: Rename as... + * doc/examples/make.mk: ...this. + Adjust. + * doc/examples/ima-save.cc, + * doc/tools/sample_utils.hh: + Adjust as well. + * milena/doc/examples/split/ima-save-1.cc.raw: Regen. + +2010-03-03 Roland Levillain <roland@lrde.epita.fr> + + Stop make from recurring in doc/white_paper. + + * doc/white_paper/Makefile.am: Rename as... + * doc/white_paper/white_paper.mk: ...this. + Adjust. + * doc/Makefile.am: Include $(srcdir)/white_paper/white_paper.mk. + (SUBDIRS): Remove white_paper. + (white-paper-pdf, white-paper-html): Remove (phony) targets. + +2010-03-03 Roland Levillain <roland@lrde.epita.fr> + + Stop make from recurring in doc/technical. + + * doc/technical/Makefile.am: Rename as... + * doc/technical/technical.mk: ...this. + Adjust. + * doc/Makefile.am: Include $(srcdir)/technical/technical.mk. + (SUBDIRS): Remove technical. + +2010-03-03 Roland Levillain <roland@lrde.epita.fr> + + Stop make from recurring in doc/tutorial. + + * doc/tutorial/Makefile.am: Rename as... + * doc/tutorial/tutorial.mk: ...this. + Adjust. + * doc/Makefile.am: Include $(srcdir)/tutorial/tutorial.mk. + (SUBDIRS): Remove tutorial. + ($(srcdir)/tutorial/tutorial.hh): Remove target. + (tutorial-pdf, tutorial-html): Remove (phony) targets. + +2010-03-23 Roland Levillain <roland@lrde.epita.fr> + + Fix apps/mesh-segm-skel/io.hh. + + * apps/mesh-segm-skel/io.hh: Include cstdio. + +2010-03-15 Roland Levillain <roland@lrde.epita.fr> + + Aesthetic changes. + + * tests/tests.mk, + * tests/tests-recursive.mk: + Here. + Help Emacs find out the nature of these files. + +2010-03-02 Roland Levillain <roland@lrde.epita.fr> + + Stop make from recurring in doc/ref_guide. + + * doc/ref_guide/Makefile.am: Rename as... + * doc/ref_guide/ref_guide.mk: ...this. + Adjust. + * doc/doc.mk (doc_dir): New variable. + * doc/Makefile.am: Include doc/ref_guide/ref_guide.mk. + (SUBDIRS): Remove ref_guide. + ($(srcdir)/ref_guide/ref_guide.hh): Remove target. + (ref-guide-pdf, ref-guide-html): Remove (phony) targets. + +2010-03-02 Roland Levillain <roland@lrde.epita.fr> + + Get rid of Make targets `fake-doc' and `void-doc'. + + * doc/Makefile.am, + * doc/ref_guide/Makefile.am, + * doc/technical/Makefile.am, + * doc/tutorial/Makefile.am, + * doc/white_paper/Makefile.am + (fake-doc, void-doc): Remove targets. + +2010-03-02 Roland Levillain <roland@lrde.epita.fr> + + Regen Milena's Makefile helpers. + + * headers.mk, tests/unit_test/unit-tests.mk: Here. + 2009-11-18 Guillaume Lazzara <z@lrde.epita.fr> * doc/white_paper/white_paper.tex: Fix an invalid URL. diff --cc milena/doc/tutorial.tex index 7ddbb60,0000000..5a61461 mode 100644,000000..100644 --- a/milena/doc/tutorial.tex +++ b/milena/doc/tutorial.tex @@@ -1,1642 -1,0 +1,1646 @@@ +%% Copyright (C) 2008, 2009 EPITA Research and Development Laboratory +%% (LRDE) +%% +%% This file is part of Olena. +%% +%% Olena is free software: you can redistribute it and/or modify it under +%% the terms of the GNU General Public License as published by the Free +%% Software Foundation, version 2 of the License. +%% +%% Olena is distributed in the hope that it will be useful, +%% but WITHOUT ANY WARRANTY; without even the implied warranty of +%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +%% General Public License for more details. +%% +%% You should have received a copy of the GNU General Public License +%% along with Olena. If not, see <http://www.gnu.org/licenses/>. + + +%%%%%%%%%%%%%%%%%%%%%% +% Milena's tutorial. % +%%%%%%%%%%%%%%%%%%%%%% + +\documentclass{report} + +%\usepackage{hevea} + + +\usepackage{html} +\usepackage{graphicx} +\usepackage{makeidx} +\usepackage{xcolor} +\usepackage{color} +\usepackage{hyperref} +\usepackage{pgf} +\usepackage{doxyfuns} +\usepackage{milena} + +% FIXME: Consider using the package FiXme from Didier Verna instead. +%\newcommand{\tofix}[1]{{\color{red}(FIXME: #1)}} +\newcommand{\tofix}[1]{} + + +\title{Olena -- Tutorial} +\author{LRDE} +\date{} +\makeindex + + + +\begin{document} + +% Doxygen use only - Generate the left menu. +%Write foreword below. +\begin{htmlonly} +\backslash endhtmlonly + +\backslash page tutorial Tutorial +- \backslash subpage tuto1 +- \backslash subpage tuto2 +- \backslash subpage tuto3 +- \backslash subpage tuto4 +- \backslash subpage tuto5 +- \backslash subpage tuto6 +- \backslash subpage tuto7 +- \backslash subpage tuto8 + +\backslash htmlonly +\end{htmlonly} + +\begin{latexonly} +\maketitle + +%==================================== +\chapter*{Copyright} + +Copyright (C) 2009 EPITA Research and Development Laboratory (LRDE). + + +This document is part of Olena. + + +Olena is free software: you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, version 2 of the License. + + +Olena is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + + +You should have received a copy of the GNU General Public License +along with Olena. If not, see $<$http://www.gnu.org/licenses/$>$. + + +\tableofcontents + +\end{latexonly} + + +%==================================== +\doxychapter{tuto1}{Welcome} + +Welcome to Milena's tutorial. + + + + + +%************************** +\doxysection{tuto1howotlearn}{How to learn Milena} + +Milena is only a subpart of Olena but tends to be a large system too. +Therefore it is not possible to present all the functionalities in a +tutorial. + + +Milena targets several audiences: \textit{assemblers}, +\textit{designers}, \textit{providers} and +\textit{architects}. \textit{Assemblers} want to apply and assemble +algorithms to solve image processing, pattern recognition or computer +vision problems, \textit{designers} build new algorithms, +\textit{providers} are interested in developing their own data +structures and extend an existing library and \textit{architects} are +basically developpers extending the core library. + + +Whatever the kind of user you are, the key to learning how to use +Milena is to become familiar with its palette of objects and the way +of combining them. + +As an \textit{assemblers}, you may start with this simple tutorial and the Quick +tour \tofix{ref}. They describe and illustrate the key features of the library. +\textit{Assemblers} getting familiar with Milena and \textit{designers}, should +take a look at the Quick Reference Guide \tofix{ref!}. +It is a more detailed explanations of the library's features. + +\textit{Assemblers} and \textit{designers} may be also interested by all the +examples provided with the documentation and the tutorial. The source code is +available in \hpath{milena/doc/examples} \tofix{ref} and is usually pointed +out and commented by the documentation. + +Taking a look at the test suite is also a good idea. The tests usually focus on +a single functionality and handle several use cases which may overlap your needs. +The test suite is located in \hpath{milena/tests} \tofix{ref?}. + +Still not enough information? More information about all the routines is +available in the User HTML documentation \tofix{ref}. +It mainly targets \textit{designers} and \textit{providers}. +The latter may also be interested by the Developer HTML documentation +(not available yet). + + + +%************************** +\doxysection{tuto1obtainingthelib}{Obtaining the library} + +There are two ways of getting Milena on the web: +\begin{itemize} + \item Download a tarball/package from the website, + \item Checkout the SVN repository. +\end{itemize} + +Downloading a package or a tarball is the best choice for a new user. Except +for nightly builds which are packages generated every night from the SVN repository, +packages and tarballs contain only a released version of Milena. It guaranties a +certain quality: no building issues, no bugs (ok, maybe some...), \ldots + +This tutorial is based on the latest released version of Milena. Therefore, +if you decide to use the SVN version, you may notice different behaviors or results +compared to what it is described in this document. + +Using the SVN version implies some drawbacks: the code might crash, not +compile or produce incorrect results. +Besides, The SVN version is always up to date and you may find new functionalities, +bug fixes and new syntax improvements. +This version targets users familiar with build systems and compilation issues. +We strongly advise you to not use it for production use. + + + +%************************** +\doxysection{tuto1downloading}{Downloading the library} + + + +%download page. + +%-------------------------- +\doxysubsection{tuto1downloadingsvn}{Downloading from SVN} + +First, be sure that SVN is already installed on your system. +Open a terminal and type: + +\begin{verbatim} +$ svn --version --quiet +1.4.6 +\end{verbatim} + +You should see your version of SVN installed. If you read 'Command not found' +then you need to install SVN. + +Usually, systems providing packages reference SVN's package as 'subversion'. + +To install SVN on Debian or Ubuntu, run: + +\begin{verbatim} +$ sudo apt-get install subversion +\end{verbatim} + +For other distributions, please refer to the user documentation of your system. + +Once you have SVN installed, go to the directory where you would like to +download Olena and create a new directory. + +\begin{verbatim} +$ cd $HOME +$ mkdir olena +$ cd olena +\end{verbatim} + +Then 'checkout' (download) the repository with the following command. + +\begin{verbatim} +$ svn co https://svn.lrde.epita.fr/svn/oln/trunk +\end{verbatim} + +Enter the 'trunk' directory. + +\begin{verbatim} +$ cd trunk +\end{verbatim} + +You are now ready to configure the directory and install Milena as described +in section \ref{tuto2}. +We invite you to take a look at the description of the directory structure +(section \ref{tuto1dirstruct}). +If you encounter any issues in the installation process or if you have any +question, do not forget to join the mailing lists (section \ref{tuto1mailinglists}) +and/or use the other documentations resources (section ref{tuto1documentation}). + + + + + +%-------------------------- +\doxysubsection{tuto1downloadingpackages}{Downloading packaged releases} + +%details. + +Milena's packages can be downloaded from: + +\href{http://www.lrde.epita.fr/Olena/Download}{http://www.lrde.epita.fr/Olena/Download} + +On this page you will find the latest and past releases. +Currently, we provide only '.tar.gz' and 'tar.bz2' archives. + +Once downloaded, you just need to uncompress the archive. + +For the '.tar.gz' archive: +\begin{verbatim} +$ tar zxvf olena.tar.gz +\end{verbatim} + +For the '.tar.bz2' archive: +\begin{verbatim} +$ tar jxvf olena.tar.bz2 +\end{verbatim} + +Then, enter the new created directory: +\begin{verbatim} +$ cd olena +\end{verbatim} + + +You are now ready to configure the directory and install Milena as described +in section \ref{tuto2}. +We invite you to take a look at the description of the directory structure +(section \ref{tuto1dirstruct}). +If you encounter any issues in the installation process or if you have any +question, do not forget to join the mailing lists (section +\ref{tuto1mailinglists}) and/or use the other documentations resources +(section \ref{tuto1documentation})). + + + +%************************** +\doxysection{tuto1mailinglists}{Join the mailing lists} + +Regardless your use of Olena, we strongly advise you to join our mailing lists. +This is the best way to keep up to date about new releases, bug +notifications/fixes and future updates. +This is also a good opportunity to tell us what you would like to find in +Milena and what could be improved. + +Currently four mailing-lists are available: + +\begin{tabular}{l l} +\textbf{Olena} & Discussion about the project Olena \\ +\textbf{Olena-bugs} & Bugs from Olena projects \\ +\textbf{Olena-core} & Internal list for the Olena project \\ +\textbf{Olena-patches} & patches for the Olena project \\ +\end{tabular} + +You can subscribe to these mailing lists at the following address: + +\begin{center} +\begin{verbatim} +https://www.lrde.epita.fr/mailman/listinfo/ +\end{verbatim} +\end{center} + +Just click on the name of the mailing list you want to subscribe to and fill +out the form. + + + +%************************** +\doxysection{tuto1dirstruct}{Directory structure} + +Milena's directory is composed of several subdirectories. In order to help +you finding what you need, you will find a description of all these +subdirectories. + + +\vspace{0.5cm} +List of \hpath{milena}'s subdirectories: +\begin{itemize} + +\item \dir{apps} --- A full example of a 3D mesh visualisation tool. It + uses milena. + +\item \dir{doc} --- THE directory you must know. Contains all the + documentation material. + +\item \dir{img} --- A set of common test images. They are used in the + test suite. Feel free to use it in your programs. + +\item \dir{mesh} --- A set of 3D meshes. They can be used with the full + example located in \hpath{milena/apps}. + +\item \dir{mln} --- The core of the library. Contains all the library headers. + +\item \dir{tests} --- The test suite. Is it subdivided in sub directories. + The directory hierarchy respects \hpath{milena/mln}'s. + +\item \dir{tools} --- Small tools written with milena. They can be used as examples. + +\end{itemize} + + +\vspace{0.5cm} +List of \hpath{mln}'s subdirectories: +\begin{itemize} + \item \dir{accu} --- Set of Accumulators. + \item \dir{algebra} --- Algebraic structures like vectors or matrices. + \item \dir{arith} --- Arithmetical operators. + \item \dir{binarization} --- Routines to binarize an image. + \item \dir{border} --- Image border related routines. + \item \dir{canvas} --- Generic canvas. They define generic ways of browsing + an image, compute data, \dots. + \item \dir{convert} --- Automatic conversion mechanism. + \item \dir{core} --- Core of the library. Here you can find the image types, + the site set types and basic concepts. + \item \dir{data} --- Routines that modify image data. + \item \dir{debug} --- Debug related routines. + \item \dir{display} --- Display images on the screen. + \item \dir{draw} --- Draw geometric objects in an image. + \item \dir{essential} --- Set of essential headers for 1,2,3-D manipulations. + \item \dir{estim} --- Compute data on image values. + \item \dir{extension} --- Image extension manipulation. +% \item \dir{extract} --- FIXME: extract will be removed and replaced by thru(). + \item \dir{fun} --- Set of functions applying on sites, values, \ldots + \item \dir{geom} --- Functions related to image geometry. + \item \dir{graph} --- Graph related routines. + \item \dir{histo} --- Histogram related functions. + \item \dir{io} --- I/O related routines. + \item \dir{labeling} --- Labeling related routines. +% \item \dir{level} --- Point-wise operators on levels. + \item \dir{linear} --- Linear operators. + \item \dir{literal} --- Generic image values such as zero, black, white \ldots + \item \dir{logical} --- Logical operators. + \item \dir{make} --- Small routines to construct images, windows, \ldots + \item \dir{math} --- Mathematical functions. + \item \dir{metal} --- Metallic macros/structures. Static library helping + developing doing static tests. + \item \dir{morpho} --- Mathematical morphology. + \item \dir{norm} --- Norm computation. + \item \dir{opt} --- Optional routines. Routines which may work on a + specific image type only. + \item \dir{pw} --- Point-wise image related routines. + \item \dir{registration} -- Registration related routine. + \item \dir{set} --- Set related routines. + \item \dir{subsampling} --- Sub-sampling related algorithms. + \item \dir{tag} --- Tag traits. + \item \dir{test} --- Definition of predicates. + \item \dir{topo} --- Complex related structures. + \item \dir{trace} --- Debug trace mechanism. + \item \dir{trait} --- Internal traits mechanism. + \item \dir{transform} --- Algorithms based on the data::transform. + \item \dir{util} --- Various utilitarian classes. + \item \dir{value} --- Set of value types which can be used in an image. + \item \dir{win} --- Set of various window kinds. +\end{itemize} + + +The source code and the material of the documentation is available in \hpath{ +milena/doc}. +List of \hpath{doc}'s subdirectories: +\begin{itemize} +\item \dir{examples} --- All the source code of the documentation examples. +\item \dir{benchmark} --- Some benchmarks. +\item \dir{tools} --- Small tools used for generating documentation / + building examples. + +\item \dir{tutorial} --- Tutorial sources. +\item \dir{white\_paper} --- White paper sources. +%\item \dir{technical} --- Technical documentation. (DEPRECATED) +\item \dir{ref\_guide} --- Reference guide sources. +\item \dir{figures} --- Reference figures for documentation generation. +\item \dir{outputs} --- Reference outputs for documentation examples. + +\end{itemize} + + + + +%************************** +\doxysection{tuto1documentation}{Documentation} + +This tutorial is not the only documentation of Milena. Other documents are available: + +\begin{itemize} + \item \dir{White paper} --- A small document of few pages presenting the key + features of the library. It intents to give a big picture of the library. + + \item \dir{Quick tour} --- It aims at giving an overview of Milena's possibilities. + It does not only give the concepts but illustrate them with small sample + codes. + + \item \dir{Quick reference guide} --- Presents in details all the main + functionalities of Milena. + Hints and full examples are also provided. The sample codes are commented + and each concept in the library is detailed. This is the reference document for any + \textit{assembler} and \textit{algorithm designer}. + + \item \dir{HTML user doc} --- The full documentation of the library. The full + API is described in details. Each part of the library is classified by + categories and the source code is directly accessible from the documentation. + This is the reference document for any \textit{algorithm designer} and/or + \textit{provider of data structures}. + + \item \dir{Header files} --- Every object or algorithm is declared in a '.hh' file. + The documentation is provided as comments in these file. +\end{itemize} + + +%************************** +\doxysection{tuto1community}{Community and Support} + +Even though Milena is currently developed by the LRDE in EPITA, we are open +for new contributors. + +\begin{itemize} + \item If you are a user, please send us feedback about the library. + Did you find what you wanted? Do you miss something? + + \item Please report bugs and defects in the API. Mailing lists are the best + way for reporting that (section \ref{tuto1mailinglists}). + + \item Developers, if you write cool open source programs or algorithms with Milena, + send them to us. We may ship your code with Olena and/or add it to + our download page. + + \item Educators, if you use Olena for your courses and you are ready to + share your materials, you can send it to us through our mailing-lists. + + \item We are also interested in partnership or commercial use of Milena. + If you are interested, contact us directly (\ref{tuto1contacts}). + +\end{itemize} + + +%************************** +\doxysection{tuto1projectstatus}{Project status} + +If you want to stay tuned to Milena's development, the best way is probably +the mailing-lists (section \ref{tuto1mailinglists}). + +There are other ways to get to know what is the status of the project. + +\begin{itemize} +\item Olena's trac\\ + \href{https://trac.lrde.org/olena}{https://trac.lrde.org/olena} \\ + Here is the road-map, the current open tickets/bugs/improvements which + are taken in consideration. A source browser is also available. + +\item Olena's Buildfarm \\ + \href{https://buildfarm.lrde.org/buildfarm/oln/}{https://buildfarm.lrde.org/buildfarm/oln/} \\ + The official build-farm. Every night and after each commit, tests + are compiled and run. The build-farm can show you whether it is safe + to update your svn copy of Milena or not\ldots + +\item Test failures \\ + \href{http://www.lrde.epita.fr/dload/olena/test-failures-daily.html}{http://www.lrde.epita.fr/dload/olena/test-failures-daily.html} \\ + Through this page, you can see exactly which tests do not compile or pass. + This page is updated every night. + +\end{itemize} + + +%************************** +\doxysection{tuto1briefhistory}{A brief history of Milena} + +The Olena project aims at building a scientific computation platform oriented +towards image processing, image recognition, and artificial vision. +This environment is composed of a high performance generic library (Milena), +a set of tools for shell scripts, together with, in the more distant future, +an interpreter (a la Octave, MatLab etc.) and a visual programming environment. + +The Olena project started in 2000 from a small prototype on 2-D images. +From November 2001 to April 2004, this prototype evolved from version 0.1 to 0.10. +More image types were supported and the level of genericity expected from the +library was partially obtained. During these three years, the prototype was used +to experiment with genericity and to try to meet our objectives. +In February 2007, Olena 0.11 was released to conform modern C++ compilers. +At that time, the code was not enough readable though and the compilation time +was too long. + +Since June 2007 up to now, The library of the Olena platform is called Milena +and the library has been rewritten. The programming paradigm has been +simplified: the code is more readable and the compilation time is acceptable. +The level of genericity still meets our objectives though. + +Milena is now getting ready for being considered as stable and distributable. +The core of the library is getting frozen and we aim at enriching the library, +its documentation and the related tools. + + +%************************** +\doxysection{tuto1contacts}{Contacts} + +If you want to reach us directly, you can contact one of the following people: + +\begin{itemize} + \item Thierry Geraud - Project Manager - thierry.geraud@lrde.epita.fr ++ \item Jonathan Fabrizio - jonathan.fabrizio@lrde.epita.fr ++ \item Yann Jacquelet - yann.jacquelet@lrde.epita.fr ++ \item Guillaume Lazzara - guillaume.lazzara@lrde.epita.fr ++ \item Roland Levillain - roland.levillain@lrde.epita.fr +\end{itemize} + + + +\vspace{2cm} +\begin{center} + \tutotocnext{tuto2} +\end{center} + + + +%==================================== +\doxychapter{tuto2}{Installation} + +%pre-requis/compatibility +This section describes the installation process of Milena. +Do not forget that Milena is a library, not a program. Therefore, no program +will be installed. + +Milena's examples and tests are compiled on the following platforms: +\begin{itemize} + \item Apple Tiger Darwin 8, PowerPC, GCC 4.0.1 + \item Apple Leopard Darwin 10.5, X86-64, GCC 4.0.1, 4.2 + \item Linux, i486, GCC 3.3, 4.1, 4.2, 4.3 + \item Linux, x86-64, GCC 4.1 +\end{itemize} + +We guaranty that Milena compiles on these platforms, e.g. Linux and Unix +platforms. It may compiles on other platforms though but we have not tested. +If you did, and you succeeded, please let us know in order to update this +section. + +Milena is known NOT to work with GCC-2.95. + + +Milena is actively developed under Unix systems. As a result, the build system +is based on the Autotools. +Autotools make sure that every dependencies are resolved before compiling +or installing a program. + +Milena is different from usual libraries in a way that nothing needs to be +compiled to use it. The library itself is composed of headers which must be +included when you need them. +Then, your application will be compiled with the parts of the library used in +that program. That's all. + +So, why do we have a build system? It is useful for installing the library on +your system, generating the doc and compiling the test suite and the examples. + + + +%************************** +\doxysection{tuto2bootstrap}{Bootstrap (SVN Sources)} + +If you got the sources from a package/tarball, you can skip this section. Go +to section \ref{tuto2configure}. + +If you downloaded the sources from the SVN repository, you must launch a +script before configuring the build directory. + +Run the following: +\begin{verbatim} +$ cd /my/path/to/olena +$ ./bootstrap +\end{verbatim} + +Running 'bootstrap' can take a while. Some files are generated during this +process. +When it's done, you are ready to configure the build directory. + + + +%************************** +\doxysection{tuto2configure}{Configure} + +First, make sure you are at the root directory of the milena source: + +\begin{verbatim} +$ cd /my/path/to/olena +\end{verbatim} + +First, create and enter a build directory: +\begin{verbatim} +$ mkdir build +$ cd build +\end{verbatim} + +We are now about to configure the build directory. This process will create +the necessary files to compile documentation, examples and tools and prepare the +installation. + +Note that once the configuration ends the build directory cannot be +moved elsewhere without following the following steps again. + +\textbf{Important Note}: the installation path prefix must be chosen at this step. +By default, Milena will be installed in /usr/local but you may like to install +it elsewhere. To do so, pass the option \textit{-{}-prefix=/installation/path/prefix} +to the configure script (see below). Replace '/installation/path/prefix' with the +wanted installation path prefix. + +now, you can run: +\begin{verbatim} +$ ../configure +\end{verbatim} +OR +\begin{verbatim} +$ ../configure --prefix=/installation/path/prefix +\end{verbatim} + +The configure script will perform various tests. If there is no dependency +issues, the last lines shown before the prompt are: + +\begin{verbatim} +config.status: creating config.h +config.status: executing depfiles commands +$ +\end{verbatim} + +And if you type the following command, a '0' is printed out. +\begin{verbatim} +$ echo $? +0 +$ +\end{verbatim} + +The build directory is now configured, the library can be installed. + + + +%************************** +\doxysection{tuto2install}{Install} + +First, be sure to be in the build directory. If you followed the previous +steps, the build directory should be in the Milena sources root directory. + +\begin{verbatim} +$ cd /my/path/to/olena/build +\end{verbatim} + +If you did not change the default install path prefix, set to +\hpath{/usr/local}, you will need to have administrator privileges to +perform the installation. Then, you may type: +\begin{verbatim} +$ sudo make install +\end{verbatim} +You will be prompted for the administrator password. + +Otherwise, if you set the install path prefix to a directory own by your +user, simply type: +\begin{verbatim} +$ make install +\end{verbatim} + +When the installation is finished, you are done. Milena is installed on your +system. But maybe you would like to build the examples? This is described +in section \ref{tuto2optionalcomp}. + +A description of the installation content is also available in section +\ref{tuto2installcontent}. + + + +%************************** +\doxysection{tuto2optionalcomp}{Optional compilation} + +The library itself does not need to be compiled, therefore installing +Milena does not require compilation. + +Though, some examples and tools are provided with the library and must be +compiled if you want to use them. + +\doxysubsection{tuto2examples}{Examples} + +Examples are part of the documentation. The sources are located in +\hpath{milena/doc/examples}. + +To compile the examples simply run: +\begin{verbatim} +$ cd /my/path/to/olena/build/milena/doc/examples +$ make +\end{verbatim} + +These examples can produce outputs and images. May be you would like +to run all the examples and take a look at the outputs? To do so, run: +\begin{verbatim} +$ cd /my/path/to/olena/build/milena/doc/examples +$ make examples +\end{verbatim} + +Text and image outputs will be respectively stored in +\hpath{build/milena/doc/outputs} and \hpath{build/milena/doc/figures}. + + + +\doxysubsection{tuto2tools}{Tools} + +Few tools are provided with Milena. They can be considered as full program +examples. + +Currently two tools are available: \\ + +\begin{tabular}{l l} +area\_flooding.cc & \tofix{description} \\ +\hline +seed2tiling.cc & \tofix{description} \\ +\end{tabular} + +% +\bigskip +% + +To build these tools, run: +\begin{verbatim} +$ cd /my/path/to/olena/build/milena/tools +$ make +\end{verbatim} + + +\doxysubsection{tuto2tests}{Tests} + +The test suite used for Milena's development is shipped with the library. +It is usually useless for simple users and tends to be used by developers +extending the library. + +In order to build and run it, just do the following: +\begin{verbatim} +$ cd /my/path/to/olena/build/milena/tests +$ make check +\end{verbatim} + +Running the test suite is memory and CPU consuming and will take a while. + + +%************************** +\doxysection{tuto2installcontent}{Installation content} + +Once installed, Milena's files are located in the installed path prefix +you passed to the configure script or in the default path /usr/local. + +In the installation path prefix, Milena's files are located in: + +\begin{itemize} + \item include/mln/ --- The library. All the headers are located here. + \item share/olena/images --- Mesh sample files which may be used with + example programs. + \item share/olena/doc --- HTML and PDF documentation. +\end{itemize} + +\vspace{2cm} +\begin{center} + \tutotoc{tuto1}{tuto3} +\end{center} + + +%==================================== +\doxychapter{tuto3}{Getting started with Milena} + +%************************** +\doxysection{tuto3getfamiliargen}{Getting familiar with genericity} + +One of Milena's main features is its genericity. In order to understand how to +take benefit of it, let's see what genericity really means for us and how it is +illustrated in the library. + +A \B{Generic algorithm} is written once, without duplicates, and works on +different kinds of input. + +Let's have a look to a small example. In any image processing library, we may be +interested in a small routine to fill an image with data. A common +implementation would look like this one: + +\doxyrawcode{tuto3/fill_non_generic} + +See milena/doc/examples/tuto3/fill\_non\_generic.cc. + + +In this example, there are a lot of \B{implicit} assumptions about the input: +\begin{itemize} + \item The input image has to be 2D; + \item Its definition domain has to be a rectangle starting at (0,0); + \item Data cannot be of a different type than \type{unsigned char}; + \item Image data need to be stored as a 2D array in RAM. +\end{itemize} +So, what would happen if we would like to use it for 3D images, use rgb8 as +value or even work on a region of interest? + +This implementation would require to be re-implemented and the user would have to +deal with the various versions of the fill routine. For the developer, it is error +prone, redundant and hard to maintain. For the user, it is confusing and forces +to always think about what he is manipulating. +According to our definition, this algorithm is clearly \B{not} generic. + +This is not acceptable and that's why Milena is developed considering +genericity and user/developer friendliness. + +With Milena, the previous example would be written as follow: + +\doxycode{fill} + +In this version, the routine can take any kind of image types as arguments. So +it is for the values: the expected type depends on the value used in the +given image. +The \code{for\_all} loop is also significantly generic to support any kind of +images since the iterator guarantees it will pass through every sites. + +This code is more generic and remains really close to the common description of +the generic algorithm. + +As a result, with this algorithm we can fill an image,... +\doxycode[3]{fill} +\doxyfigure[2]{fill}{3cm} + +... Or fill only a region of interest (a set of points). +\doxycode[2]{fill} +\doxyfigure[1]{fill}{3cm} + + + +%************************** +\doxysection{tuto3firstgenalgo}{First generic algorithm} +In this section, we will introduce several routines/tools which are useful while +writing generic algorithms. It is more important to focus on these +routines/tools than what this program actually does. + + +Here is the full example: + +\doxycode[1]{tuto3_first_routine} +Let's see the different parts of the algorithm. + + +\doxycode[2]{tuto3_first_routine} +The prototype is restrictive enough, readable and still generic. +We use concepts to statically check that the generic type passed as +parameter is what the routine expects. The ``exact'' image type is \type{I}. For +instance an image of type \type{image2d} inherits from \type{Image$<$image2d$>$}. So +an \type{image2d} is an \type{Image$<$I$>$}. +Note that the return type of this function is defined by a macro. +\code{mln\_concrete} is a macro hiding tricky mechanisms (traits) used in Milena. +The important point to remember is that a generic function should not return +\type{I} directly but \code{mln\_concrete(I)} instead. + + +\doxycode[3]{tuto3_first_routine} +Like any Milena's routine, note that we use \code{trace}. This debugging tool +will be detailed in section \ref{tuto3debughints}. + + +\doxycode[4]{tuto3_first_routine} +Since the function take some arguments as concept objects, these object cannot +be used as such. Indeed, concepts are empty shells only used for dispatching and +concept checking, that's the reason why they are parameterized with their exact +type. The exact type let us know what is the real type of the object. To get an +object with the exact type, simply call \code{exact()}. +Of course, it is always a good idea to add few preconditions to help during +debug. + + +\doxycode[5]{tuto3_first_routine} +In this portion of code, the image is labeled and the number of sites per label +is computed. This code does not depend on the image type at all. Again, a macro +\code{mln\_ch\_value} (``mln change value'') helps us. \code{labeling::blobs} is +a routine returning an image of the same kind as the input image but with a +different value. \code{mln\_ch\_value} enables the possibility of doing that, +whatever the image type \type{I} and whatever its value type, it returns the +same image type with a different value type. + + +\doxycode[6]{tuto3_first_routine} +The output image is declared here. Like any variable, it must be initialized at +some point. To do so, \code{initialize()} is provided. It is a generic routine +which can initialize the geometry of any image kind with another image of the +same kind. +After this call, \var{output} has a valid domain and is valid. It can be used in +an algorithm, here \code{data::fill}, to have its values modified. +Note that the value passed to \code{data::fill} is also generic. The library +includes few generic common values from which any value type can convert to. +\code{literal::one} is one of them. It is a generic one value which can convert +to every value type in the library. + + +\doxycode[7]{tuto3_first_routine} +In this part, every region from the labeled image, of which cardinality is lower +than 10 sites, is set to \val{literal::zero} in \var{output}. +Once again, a generic value is used in order to avoid constraints on the image +value type. + + +\doxycode[8]{tuto3_first_routine} +Don't forget to close the trace before exiting the function. Then return the +result. + + + +%FIXME: add an example to show how a routine behavior depends on its arguments. +% => cf. des images etendues ou non et un parcours de voisinage. + + +%************************** +\doxysection{tuto3compilhints}{Compilation} + +\doxysubsection{tuto3howtocompile}{Include path} + +If Milena has been installed in a custom directory, e.g. not /usr/include or +/usr/local/include, the path to the library headers must be passed to the +compiler. + +With g++ and MinGW, the option is \B{-I$<$path$>$}. +\begin{verbatim} +$ g++ -Ipath/to/mln my_program.cc +\end{verbatim} + +For other compilers, please look at the documentation and search for ``include +path''. + + +\doxysubsection{tuto3liblink}{Library linking} +As it is usually expected when using a library, no library linking is needed for +the library itself. +Milena is a ``header only'' library and is compiled ``on demand'' with your +program. + +If you use specific input/output you may need to link your program with the +right graphic library. For more information, please refer to section +\doxyref{inputoutput} in the Quick Reference Guide. + + +\doxysubsection{tuto3compildndebug}{Disable Debug} +By default, Olena enables a lot of internal pre and post conditions. Usually, +this is a useful feature and it should be enabled. It can heavily slow down a +program though and these tests can be disabled by compiling using -DNDEBUG: + +\begin{verbatim} +$ g++ -DNDEBUG -Ipath/to/mln my_program.cc +\end{verbatim} + +\doxysubsection{tuto3compoptimflags}{Compiler optimization flags} + +In this section you will find remarks about the compiler optimization flags and +their impact on the compilation and execution time. + + +\doxysubsubsection{tuto3compoptimgcc}{GCC} + +\begin{itemize} + \item \B{-O0}, combined with -DNDEBUG, it leads to the fastest compilation + time. The execution is somewhat slow though since dispatch functions and one + line members are not inlined by the compiler. + \item \B{-O1}, best compromise between compilation time and execution time. + \item \B{-O2}, \B{-O3}, combined with -DNDEBUG, it leads to the best execution + time. However these optimizations dramatically slow down the compilation and + requires much more memory at compile time. +\end{itemize} + +\doxysubsubsection{tuto3compoptimother}{Other compilers} + +Currently, we have not tested different optimization flags with other +compilers. If you did, please report us your results. + + + +%************************** +\doxysection{tuto3debughints}{Debug hints} + +\doxysubsection{tuto3gdbhints}{Using assertions and GDB} +As said above, Milena already includes a lot of post and pre conditions. +Thus, if you made a mistake in your code there is a high probability that it +will be detected at run time. If an assertion fails, we advice you to compile +with the following options: + +\begin{verbatim} +$ g++ -ggdb -Ipath/to/mln my_program.cc +\end{verbatim} + +Note that you \B{MUST NOT} compile with \var{-DNDEBUG} since assertions will be +disabled. +Once compiled, restart the program with GDB. + +\begin{verbatim} +$ gdb ./my_program +\end{verbatim} + +In the GDB console, run it again. +\begin{verbatim} +(gdb) run <any parameter you may want to pass to the program> +\end{verbatim} + +When an assertion fails, in the GDB console simply type: +\begin{verbatim} +(gdb) bt +\end{verbatim} + +The full backtrace will be printed out and you will be able to find from where +the error come from. The filenames, the line numbers and the parameters values +are printed out in the backtrace as you can see in the following example: + +\begin{verbatim} +#0 0xffffe410 in __kernel_vsyscall () +#1 0xb7d00640 in raise () from /lib/i686/cmov/libc.so.6 +#2 0xb7d02018 in abort () from /lib/i686/cmov/libc.so.6 +#3 0xb7cf95be in __assert_fail () from /lib/i686/cmov/libc.so.6 +#4 0x0804e094 in mln::image2d<bool>::has (this=0xbff32f34, p=@0xbff32f3c) + at /lrde/stockholm/lazzara/svn/olena/git/oln/milena/mln/core/image/image2d.hh:442 +#5 0x0804e6d7 in mln::image2d<bool>::operator() (this=0xbff32f34, p=@0xbff32f3c) + at /lrde/stockholm/lazzara/svn/olena/git/oln/milena/mln/core/image/image2d.hh:460 +#6 0x080490b0 in main () at test.cc:18 +\end{verbatim} + + + +\doxysubsection{tuto3traces}{Traces} +Sometimes, compiling for GDB without optimization flags and with debug +assertions enabled could lead to execution time dramatically high. +If the function parameter values are not necessary for debugging, +a good alternative is the trace system provided in Milena. +Each time a routine is called, a trace log is written. + +This trace allows to follow the stack trace at runtime. It also provides the +time passed in each function call if the call last at least 10ms. + +In order to enable traces in a program, set the related global variable to +true: +\begin{verbatim} +... +trace::quiet = true; +... +\end{verbatim} + +Since it's a global variable, at anytime in the source code, the trace can be +enabled/disabled. + +Traces are enabled: +\doxycode[1]{tuto3_trace} +\code{labeleling::blobs} is run and the debug is then disabled. +\doxycode[2]{tuto3_trace} + +The previous code will produce the following trace: + +\begin{verbatim} +labeling::blobs { + core::initialize {} + data::fill { + data::fill_with_value { + data::impl::fill_with_value_one_block { + data::memset_ { + data::impl::memset_ {} + } data::memset_ + } data::impl::fill_with_value_one_block + } data::fill_with_value + } data::fill +} labeling::blobs - 0.08s +\end{verbatim} + +As you can see, \code{labeling::blobs} is located just after having set +\var{trace::quiet} to \val{true} so its trace is part of the output. +\code{geom::bbox}'s trace is not part of the output though since traces have +been disabled just before it is called. + + +\doxysubsection{tuto3debugroutines}{Debug routines} +Milena also provides a lot of debug tools. Here is a small list of the tools: +\begin{itemize} + \item mln::debug::println, print an image in the console. + \doxycode[1]{tuto3_println} + \doxymoutput[1]{tuto3_println} + + \item mln::debug::println\_with\_border, print an image in the console withs + its border. + \doxycode[2]{tuto3_println} + \doxymoutput[2]{tuto3_println} + + \item mln::labeling::colorize, colorize a label image with random colors. + \doxycode[1]{tuto3_colorize} + + \begin{center} + \begin{tabular}{c c c} + \doxyfigure[1]{tuto3_colorize}{3cm} & ~\huge{$\rightarrow$}~ & + \doxyfigure[2]{tuto3_colorize}{3cm} \\ + \end{tabular} + \end{center} + + + \item mln::labeling::superpose, Superpose two images. + + \item mln::labeling::filename, easily format debug file names. + +\end{itemize} + + +%A very simple processing chain; the target is the end-user! +% +%OR (?) +%this chain plus a sample tiny generic algorithm +% +%** misc +%/!\ step by step... +%compilation time w.r.t compilation options (O1, DNDEBUG). + +\vspace{2cm} +\begin{center} + \tutotoc{tuto2}{tuto4} +\end{center} + + +%==================================== +\doxychapter{tuto4}{Data representation} + +This chapter aims at explaining how images are stored and which objects compose +an image in Milena. We will start to talk about the localization of a pixel and +then the image itself which stores the values. + + +%************************** +\doxysection{tuto4sites}{Sites} + +A pixel is an element having both information, localization and +value. In Milena, we make a difference between a pixel, a pixel value and a pixel +location. Thus, in order to refer to a pixel location, we have the site concept. +A site can be any kind of localization element. +For instance, in an image defined on a 2D regular grid, it is a 2D point with +\var{row} and \var{col} coordinates. + +\doxycode{tuto4_point2d} + +Output: +\doxyoutput{tuto4_point2d} + +The image site type is defined by its underlying site set. + + +%************************** +\doxysection{tuto4sitesets}{Site sets} + +Site sets are mainly used to define image domains. They hold all the available +sites in an image, consequently they do not store any values. + +Site sets can used as standalone containers. + +A list of available site sets is available in section \ref{siteset}. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% MOVE PARTS OF THE NEXT CHAPTERS RIGHT HERE. % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%-------------------------- +\doxysubsection{tuto4createsiteset}{Creating a site set} + +In this section, we will detail how to create common site sets. + +The most used site set is \type{mln::box}. The main reason is that +common images have this kind of domain. Since it is a plain set only +two sites are needed to define a box: the top left corner, \var{pmin}, +and the bottom right corner, \var{pmax}. + +By default, \var{pmin} is set to \val{(0,0)} so a box can be +constructed from given \var{pmax} coordinates: + +\doxycode[1]{tuto4_site_set_create} + +This box is defined from \val{(0,0)} to \val{(4,4)} : + +\doxymoutput[1]{tuto4_site_set_create} + +A box can also starts from a site different from \val{(0,0)}. + +\doxycode[4]{tuto4_site_set_create} + +This box is defined from \val{(0,0)} to \val{(4,4)} : + +\doxymoutput[3]{tuto4_site_set_create} + + +Another common site set is \type{p\_array}. It contains only sites which have been added to it. + +\doxycode[2]{tuto4_site_set_create} + +This site only contains : + +\doxymoutput[2]{tuto4_site_set_create} + + +%-------------------------- +\doxysubsection{tuto4accesstosites}{Getting access to sites} + + + +%************************** +\doxysection{tuto4images}{Images} + +In milena, an image is seen as a composition of both a site set and a function +mapping a site to a value. + +%-------------------------- +\doxysubsection{tuto4createimate}{Creating an image} + +In this section, we will detail how to create common images. + +%-------------------------- +\doxysubsection{tuto4readimage}{Reading an image from a file} + +%-------------------------- +\doxysubsection{tuto4accessdata}{Accessing data} + + + +\vspace{2cm} +\begin{center} + \tutotoc{tuto3}{tuto5} +\end{center} + + + +%==================================== +\doxychapter{tuto5}{Load and save images} + +After this step you should know how to: +\begin{itemize} +\item load an image, +\item save an image. +\end{itemize} + +\vspace{2cm} +Currently, Olena supports the following input image formats: +\begin{itemize} + \item PBM + \item PFM + \item PGM + \item PNM + \item PPM +\end{itemize} + +This support is provided through two headers for each type, \header{save.hh} and +\header{load.hh}. +They are located in \hpath{mln/io/$<$image-format$>$/}. + +Once the right header is included, the image can be loaded: + +\doxycode{ima-load} + +If you wan to save an image, simply call the save routine in the proper namespace: +\doxycode{ima-save} + +According to the image value type, the proper file format must be chosen. +The supported file formats and their associated image value types are listed +in section \doxyref{imaio}. + +\vspace{2cm} +\tutotoc{tuto4}{tuto6} + + + +%==================================== +\doxychapter{tuto6}{Create your first image} + +After this step you should know how to: + \begin{itemize} + \item create an image, + \item display an image in console mode. + \end{itemize} + +\doxysee{tuto2_first_image.cc} + + +\vspace{2cm} +First, declare an array of bool which will represent the image grid. Each each +cell in this grid is a site and each cell contains a value, \val{true} or +\val{false}. +\doxycode[1]{tuto2_first_image} + +From that grid, simply call make::image to get an image initialized with that +data. +\doxycode[2]{tuto2_first_image} +This way of initializing an image is the most common one. However, there are +several other ways described in section \doxyref{imacreate}. + + +To be sure that the data is correctly initialized, it is possible to display the +image in the standard output using debug::println. +\doxycode[3]{tuto2_first_image} +Output: +\doxyoutput{tuto2_first_image} + +Finally, you may want to save the image. Since we use bool as image value, the +PBM format is the best choice. Therefore, we use io::pbm::save. +\doxycode[4]{tuto2_first_image} + +The output image looks like the following: \\ + +\doxyfigure{tuto2_first_image}{3cm} + +In this first step we used a boolean image. Many other value types are available +though. A more detailed description can be found in section +\doxyref{imapossvalues}. + +\vspace{2cm} +\begin{center} + \tutotoc{tuto5}{tuto7} +\end{center} + + +%==================================== +\doxychapter{tuto7}{Read and write images} + +After this step you should know how to: + \begin{itemize} + \item modify/initialize image values, + \item copy and paste data to an image. + \end{itemize} + + +\doxysee{tuto3_rw_image.cc} + +\vspace{2cm} +First create an empty color image with a \var{box2d} of 40x40 as domain. +\doxycode[1]{tuto3_rw_image} + +If you want to initialize the image with the color red, simply call data::fill as follows: +\doxycode[2]{tuto3_rw_image} + +Updating a site value is also possible using \code{operator()} or the +\code{opt::at()} routine. Here we create a blue square of 10x10 pixels from site +(20, 20) to (30, 30). +\doxycode[3]{tuto3_rw_image} +\doxycode[4]{tuto3_rw_image} + +The corresponding image: \\ + +\doxyfigure[1]{tuto3_rw_image}{3cm} + +An image can also be initialized/modified thanks to another image. +Let's load a new image. +\doxycode[5]{tuto3_rw_image} +\var{lena} looks like: \\ + +\doxyimg{small-enlarged}{3cm} + +If we want to initialize \var{ima} with \var{lena}, we can use \code{data::fill}: +\doxycode[6]{tuto3_rw_image} +Output: \\ + +\doxyfigure[2]{tuto3_rw_image}{3cm} \\ +Note that to fill an image with some data, the image domain \must be smaller +or equal to the data. + +Likewise, it is possible to paste data from an image to another: +\doxycode[7]{tuto3_rw_image} +Output: \\ + +\doxyfigure[3]{tuto3_rw_image}{3cm} + +More details can be found in sections \doxyref{imaaccessmodval}, \doxyref{fillop} and \doxyref{pasteop} in +the reference guide. + +\vspace{2cm} +\begin{center} + \tutotoc{tuto6}{tuto8} +\end{center} + + +%==================================== +\doxychapter{tuto8}{Regions of interest} + +After this step you should know how to: + \begin{itemize} + \item take benefit of Olena's genericity, + \item work only on a region of interest in an image. + \end{itemize} + +\doxysee{tuto4_genericity_and_algorithms.cc} +\vspace{2cm} + +In the previous step, we used the routine \code{data::fill} in order to change +the values of an image. It was convenient since we did not need to write any +loop by hand. The problem was that we could not specify which region to fill +with data. This point leads us to talk about the genericity in Olena. +All along this example we will use the routine \code{data::fill} to illustrate +the possibilities in Olena but note that every image types passed to the +routine in this example could be passed to any algorithm in the library +expecting an image. + +One main feature of Olena is to be able to easily work on regions of interest in +images. According to the way a region of interest is defined, a specific image +type is associated. Therefore, each algorithm knows exactly what it is working +on and can behave differently in order to be the most efficient as possible. + + +All along this step, we will use the following image \var{lena} declared as +follow: + +\doxycode[1]{tuto4_genericity_and_algorithms} +\doxyimg{small-enlarged}{3cm} + +\code{data::fill} has the following prototype: +\doxyrawcode{fill-proto} +So keep in mind that the first argument we will try to construct in each +example is an image. Note that this image \must be writable, e.g. non-const. + + +%************************** +\doxysection{tuto4imadomainsiteset}{Image domain restricted by a site set} + +Here, we would like to fill a small square with green in \var{lena}. We want +this square to be of size 20x20 and to be located at (20,20). +First, we just need to declare this square which is actually a site set, a +\type{box2d}. +\doxycode[2]{tuto4_genericity_and_algorithms} + +Then, we just need to tell \code{data::fill} that we would like to fill the +image \var{lena} but only in this restricted part of the image domain. +\doxycode[3]{tuto4_genericity_and_algorithms} +Operator '$|$' can be read 'restricted to'. So below, we wrote 'image \var{lena} +restricted to the region of interest \var{roi}'. Actually this is not directly +\var{lena} which is restricted but its domain. + +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{rw()} +is a workaround to make it read-write. + +\begin{center} + \begin{tabular}{c c c} + \doxyimg{small-enlarged}{3cm} & ~\huge{$\rightarrow$}~ & \doxyfigure[1]{tuto4_genericity_and_algorithms}{3cm} \\ + \multicolumn{3}{c}{Fill with blue a region of interest defined by a + \type{box2d}.} \\ + \end{tabular} +\end{center} + + +%************************** +\doxysection{tuto4imadomainfun}{Image domain restricted by a function} + +Sometimes it may not be easy to construct a site set to restrict an image. For +instance, if we would like to fill with green one point out of two in the whole +image, we \textbf{do not want} to write anyloop or construct any site set by hand: +\doxycode[4]{tuto4_genericity_and_algorithms} +\doxycode[5]{tuto4_genericity_and_algorithms} + +A shorter way to get exactly the same result, is to define that behavior by a +function. In Milena, a function \code{fun::p2b::chess} is available and does +exactly what we want. Like if it was a site set, simply restrict the image with +the function. + +% +%Paste code of p2b::chess? +% + +\doxycode[6]{tuto4_genericity_and_algorithms} +\begin{center} + \begin{tabular}{c c c} + \doxyimg{small-enlarged}{3cm} & ~\huge{$\rightarrow$}~ & \doxyfigure[2]{tuto4_genericity_and_algorithms}{3cm} \\ + \multicolumn{3}{c}{Fill with green a region of interest defined by a + \type{Function}.} \\ + \end{tabular} +\end{center} + +Note that the functions provided by default in Olena are actually functors. +Thus, they must be constructed like any object which why it is written +\code{lena $|$ fun::p2v::chess()} and not \code{lena $|$ fun::p2v::chess}. + + +%FIXME: Talk about C functions once it is possible in Milena. + + +%************************** +\doxysection{tuto4imadomainmask}{Image domain restricted by a mask} + +Sometimes instead of having a site site or a function defining the regions of +interest we want to work on, we may have a binary image, e.g. a mask. When a +site has its value set to true, it means it will be considered as part of the +masked image domain. Otherwise, it will not. + +We construct a mask, \var{mask}. It is initialized with the same geometry properties as +\var{lena} +(domain, extension...). +\doxycode[7]{tuto4_genericity_and_algorithms} + +Then, we cannot restrict directly \var{lena} with \var{mask}. These two images +have the same domain, so \code{lena $|$ mask.domain()} would not do anything. +\var{mask} is a classical image, there is not specific type for mask images. +Therefore, we need to express that we want that binary image to be considered as +a mask. +\doxycode[8]{tuto4_genericity_and_algorithms} +\code{pw::value(mask)} makes explicit the fact that \var{mask} is actually a +mask. It means, that for each site of \var{mask}, if its value is set to +\val{true}, then the value associated to this site in \var{lena} must be set +to green. +In this example, we use two images for two different use case: \var{lena} store +the result and the modifications make by the algorithm and \var{mask} allows the +algorithm to know whether it must treat a site or not. + +\begin{center} + \begin{tabular}{c c c c} + \doxyimg{small-enlarged}{3cm} & + \doxyfigure[3]{tuto4_genericity_and_algorithms}{3cm} & + ~\huge{$\rightarrow$}~ & + \doxyfigure[4]{tuto4_genericity_and_algorithms}{3cm} \\ + \multicolumn{4}{c}{Fill with green a region of interest defined by a mask + image.} \\ + \end{tabular} +\end{center} + + +%************************** +\doxysection{tuto4imadomainpredicate}{Image domain restricted by a predicate} + +Restricting by a predicate is exactly like restricting with a function. We want +to talk about that separately in order to present the small routines available. +They enable the user to write quick and efficient predicate/function. + +The two routines are : +\begin{itemize} + \item pw::value(Image), as seen in a previous section, it is a way to express + 'for each site value in Image'. + \item pw::cst(Value), it is a way to specify a value to which a site value can + be compared. +\end{itemize} + +Let's see a common use case. +First, we binarize lena according to specific criterions, only site values with +specific colors are set to true in \var{lena\_bw}. Others are set to false. This +image will be used in order to label the components. +Let's consider a labeled image \var{label}. Each component of \var{lena} is labeled with a unique index. +Now, we consider that that our region of interest is a component with id 16. +Then we want to express 'for each site \var{fill} its value in \var{lena} if its +value in \var{label} is equal to 16'. +\doxycode[9]{tuto4_genericity_and_algorithms} + + +\doxycode[10]{tuto4_genericity_and_algorithms} + +\begin{center} + \begin{tabular}{c c c c} + \doxyimg{small-enlarged}{3cm} & + \doxyfigure[5]{tuto4_genericity_and_algorithms}{3cm} & + ~\huge{$\rightarrow$}~ & + \doxyfigure[6]{tuto4_genericity_and_algorithms}{3cm} \\ + \multicolumn{4}{c}{Fill with green a region of interest defined by its + label.} \\ + \end{tabular} +\end{center} + + +%Disabled until thru_image/fun_image provide working read/write access. +% +%%************************** +%\doxysection{tuto4component}{Image component restricted to a domain} +% +%%FIXME: be more verbose? +% +%It is also possible to restrict an image to one of its component and apply +%various operators upon it. In the following code, the green component of +%this color image is extracted and filled with the maximum value allowed. +%Other components such as red and blue are left unchanged. +% +%\doxycode[11]{tuto4_genericity_and_algorithms} +% +%\begin{center} +% \begin{tabular}{c c c c} +% \doxyimg{small-enlarged}{3cm} & +%% \doxyfigure[7]{tuto4_genericity_and_algorithms}{3cm} & +% ~\huge{$\rightarrow$}~ & +% \doxyfigure[8]{tuto4_genericity_and_algorithms}{3cm} \\ +% \multicolumn{4}{c}{Set the image green component to its maximum value.} \\ +% \end{tabular} +%\end{center} +% +% +%Thanks to Milena's genericity, it is also possible to combine this operator +%with others. Here the green component is extracted from a region of interest +%and only that part is modified. +% +%\doxycode[12]{tuto4_genericity_and_algorithms} +% +%\begin{center} +% \begin{tabular}{c c c c} +% \doxyimg{small-enlarged}{3cm} & +% ~\huge{$\rightarrow$}~ & +% \doxyfigure[9]{tuto4_genericity_and_algorithms}{3cm} \\ +% \multicolumn{4}{c}{Set the green component of a region of interest +% to its maximum value.} \\ +% \end{tabular} +%\end{center} + + + +\vspace{2cm} +\begin{center} + \tutotocprev{tuto7} +\end{center} + + +%\end{htmlonly} + + +\end{document} diff --cc scribo/ChangeLog index 9506589,9ce6390..5f23386 --- a/scribo/ChangeLog +++ b/scribo/ChangeLog @@@ -1,119 -1,684 +1,800 @@@ + 2010-03-18 Guillaume Lazzara <z@lrde.epita.fr> + + Cleanup binarization tools. + + * binarization/binarize.hh, + * binarization/simple.hh, + * binarization/sauvola_threshold.hh, + * src/binarization/simple.cc, + * src/binarization/sauvola_pgm.cc, + * src/binarization/sauvola_ms.cc, + * src/binarization/sauvola.cc: Rename as... + + + * binarization/local_threshold.hh, + * binarization/global_threshold_auto.hh, + * binarization/sauvola_threshold_image.hh, + * src/binarization/pgm_global_threshold_auto.cc, + * src/binarization/pgm_sauvola.cc, + * src/binarization/pgm_sauvola_ms.cc, + * src/binarization/ppm_sauvola.cc: ... this. + + * binarization/global_threshold.hh, + * binarization/sauvola_ms_split.hh, + * src/binarization/ppm_fg_sauvola_ms.cc, + * src/binarization/ppm_sauvola_ms.cc, + * src/binarization/ppm_sauvola_ms_split.cc: New. + + * binarization/internal/first_pass_functor.hh: Fix an include. + + * binarization/sauvola.hh: Update code according to last renaming. + + * binarization/sauvola_ms.hh: Invert threshold test and add + documentation. + + * src/binarization/Makefile.am: Add new targets. + + * tests/Makefile.am, + * tests/binarization/Makefile.am, + * tests/binarization/global_threshold.cc, + * tests/binarization/local_threshold.cc: New tests. + + 2010-03-17 Guillaume Lazzara <z@lrde.epita.fr> + + Update AFP's toolchain according to last changes in core classes. + + * core/object_groups.hh: Add duplicate(). + + * primitive/group/apply.hh: Preserve components ids. + + * draw/groups_bboxes.hh, + * filter/object_groups_with_holes.hh, + * primitive/regroup/from_single_left_link.hh: New. + + * src/text_in_photo_ppm_fast.cc: Make it work with the new core + classes. Fix component ids issues when relabeling. + + 2010-03-11 Guillaume Lazzara <z@lrde.epita.fr> + + Add a new example for finding text in pictures. + + * src/Makefile.am: Add new target. + + * src/text_in_photo_pbm_fast.cc: New. + + 2010-03-11 Guillaume Lazzara <z@lrde.epita.fr> + + First draft of the dematerialization wizard. + + * demo/shared/icons/Symbols-Delete-icon.png, + * demo/shared/icons/accept-icon.png, + * demo/shared/icons/close.gif, + * demo/shared/icons/crop-icon.png, + * demo/shared/icons/image-add-icon.png, + * demo/shared/icons/image-edit-icon.png, + * demo/shared/icons/image-multi-icon.png, + * demo/shared/icons/image-next-icon.png, + * demo/shared/icons/image-remove-icon.png, + * demo/shared/icons/next-icon.png, + * demo/shared/icons/page-down-icon.png, + * demo/shared/icons/page-search-icon.png, + * demo/shared/icons/rotate_ccw.png, + * demo/shared/icons/rotate_cw.png, + * demo/shared/icons/search-add-icon.png, + * demo/shared/icons/search-remove-icon.png, + * demo/shared/shared.qrc, + * demo/shared/src/bak/crop_item.cc, + * demo/shared/src/bak/crop_item.hh, + * demo/shared/src/bak/image_viewer.cc, + * demo/shared/src/bak/image_viewer.hh, + * demo/shared/src/bak/types.hh, + * demo/shared/src/browse_widget.cc, + * demo/shared/src/browse_widget.hh, + * demo/shared/src/crop_item.cc, + * demo/shared/src/crop_item.hh, + * demo/shared/src/image_viewer.cc, + * demo/shared/src/image_viewer.hh, + * demo/shared/src/internal.bak/interactive_scene.cc, + * demo/shared/src/internal.bak/interactive_scene.hh, + * demo/shared/src/internal.bak/selection_rectangle.cc, + * demo/shared/src/internal.bak/selection_rectangle.hh, + * demo/shared/src/internal/interactive_scene.cc, + * demo/shared/src/internal/interactive_scene.hh, + * demo/shared/src/internal/selection_rectangle.cc, + * demo/shared/src/internal/selection_rectangle.hh, + * demo/shared/src/to_mln_image.hh, + * demo/shared/src/types.hh, + * demo/shared/ui/browse_widget.ui, + * demo/shared/ui/crop_widget.ui, + * demo/shared/ui/image_viewer.ui, + * demo/shared/ui/interactive_scene.cc, + * demo/shared/ui/interactive_scene.hh, + * demo/shared/ui/rotate_widget.ui, + * demo/wizard/images/dematerialization.png, + * demo/wizard/src/crop_page.cc, + * demo/wizard/src/crop_page.hh, + * demo/wizard/src/crop_widget.cc, + * demo/wizard/src/crop_widget.hh, + * demo/wizard/src/doc_type.hh, + * demo/wizard/src/doc_type_page.cc, + * demo/wizard/src/doc_type_page.hh, + * demo/wizard/src/doc_type_widget.cc, + * demo/wizard/src/doc_type_widget.hh, + * demo/wizard/src/load_page.cc, + * demo/wizard/src/load_page.hh, + * demo/wizard/src/load_widget.cc, + * demo/wizard/src/load_widget.hh, + * demo/wizard/src/main.cc, + * demo/wizard/src/main_window.cc, + * demo/wizard/src/main_window.hh, + * demo/wizard/src/mln_widgets.cc, + * demo/wizard/src/preprocessing_page.cc, + * demo/wizard/src/preprocessing_page.hh, + * demo/wizard/src/preprocessing_task.hh, + * demo/wizard/src/preprocessing_widget.cc, + * demo/wizard/src/preprocessing_widget.hh, + * demo/wizard/src/process_page.cc, + * demo/wizard/src/process_page.hh, + * demo/wizard/src/process_widget.cc, + * demo/wizard/src/process_widget.hh, + * demo/wizard/src/rotate_page.cc, + * demo/wizard/src/rotate_page.hh, + * demo/wizard/src/rotate_widget.cc, + * demo/wizard/src/rotate_widget.hh, + * demo/wizard/src/runner.cc, + * demo/wizard/src/runner.hh, + * demo/wizard/src/test.cc, + * demo/wizard/ui/doc_type_widget.ui, + * demo/wizard/ui/load_widget.ui, + * demo/wizard/ui/main_window.ui, + * demo/wizard/ui/preprocessing_widget.ui, + * demo/wizard/wizard.pro, + * demo/wizard/wizard.qrc: New. + + 2010-03-11 Guillaume Lazzara <z@lrde.epita.fr> + + Update examples. + + * src/text_in_photo_ppm_fast.cc, + * src/debug/show_links_bottom_aligned.cc, + * src/debug/show_links_top_aligned.cc: Update calls to routines. + + * src/preprocessing/trash.cc, + * src/text_in_photo_ppm_fast_2.cc, + * src/preprocessing/split_bg_fg_ms.cc, + * src/preprocessing/denoising.cc: Removed. + + * src/preprocessing/denoise.cc, + * src/preprocessing/homogeneous_contrast.ccm, + * src/preprocessing/subsample.cc: New. + + * src/preprocessing/Makefile.am: Add new files as target. + + * src/preprocessing/split_bg_fg.cc: Fix usage. + + * src/text_in_article.cc: Update processing chain. + + 2010-03-11 Guillaume Lazzara <z@lrde.epita.fr> + + Improve text line merging algorithm. + + * text/merging.hh: Change merge rules and improve integration with + Scribo line structures. + + 2010-03-11 Guillaume Lazzara <z@lrde.epita.fr> + + Add a reconstruction algorithm. + + * primitive/internal/rd.hh: New. + + 2010-03-11 Guillaume Lazzara <z@lrde.epita.fr> + + Small fixes. + + * binarization/sauvola_ms.hh: Add a missing include. + + * binarization/sauvola_threshold.hh: Remove debug and useless + comments. + + * preprocessing/unskew.hh: Fix invalid guards. + + * primitive/extract/components.hh: Fill image extension. + + * primitive/extract/lines_pattern.hh: Adjust and fill image + extension. + + * primitive/extract/lines_v_thick.hh: Fix traces. + + 2010-03-11 Guillaume Lazzara <z@lrde.epita.fr> + + Add new preprocessing routines. + + * preprocessing/denoise.hh, + * preprocessing/denoise_bg.hh, + * preprocessing/denoise_fg.hh, + * preprocessing/homogeneous_contrast.hh, + * preprocessing/rotate_90.hh: New routines. + + * fun/v2b/label_to_bool.hh: New function. + + * tests/preprocessing/Makefile.am, + * tests/preprocessing/rotate_90.cc: New test. + + 2010-03-11 Guillaume Lazzara <z@lrde.epita.fr> + + Update code according to last changes in Scribo core classes. + + * draw/bounding_box_links.hh, + * primitive/internal/init_link_array.hh, + * primitive/internal/is_link_valid.hh, + * primitive/link/internal/link_single_dmax_base.hh, + * src/afp/link.hh: Update the use of object_link class. + + * draw/bounding_boxes.hh, + * filter/objects_with_holes.hh, + * src/afp/regroup.hh: Update for_all macro. + + * estim/object_groups_v_thickness.hh, + * filter/object_groups_small.hh, + * filter/object_groups_v_thickness.hh, + * text/recognition.hh: Update access to component_set. + + * filter/object_links_bbox_h_ratio.hh, + * filter/object_links_bbox_overlap.hh, + * filter/object_links_bbox_ratio.hh, + * filter/object_links_bottom_aligned.hh, + * filter/object_links_non_aligned_simple.hh, + * filter/object_links_top_aligned.hh, + * primitive/group/apply.hh, + * primitive/group/from_single_link.hh, + * primitive/link/merge_double_link.hh, + * primitive/link/with_single_right_link_bottom.hh, + * primitive/link/with_single_right_link_dmax_ratio.hh, + * primitive/link/with_single_right_link_top.hh: Improve routine + prototypes. + + * primitive/link/internal/link_functor_base.hh: Make use of + separators if exist. + + 2010-03-11 Guillaume Lazzara <z@lrde.epita.fr> + + Improve debug routines in Scribo. + + * debug/bboxes_enlarged_image.hh, + * debug/looks_like_a_text_line_image.hh, + * debug/mean_and_base_lines_image.hh: New routines. + + * debug/alignment_decision_image.hh, + * debug/decision_image.hh, + * debug/save_bboxes_image.hh: Update code according to last + changes in core classes. + + * debug/usage.hh: Make the description optional. + + 2010-03-11 Guillaume Lazzara <z@lrde.epita.fr> + + Improve core classes in Scribo. + + * core/component_info.hh, + * core/component_set.hh: Add new methods and an output operator. + + * core/line_info.hh: Add new methods and improve stats computation. + + * core/line_set.hh: Add new methods. + + * core/macros.hh: Add more specific macros. + + * core/tag/component.hh, + * core/tag/line.hh: Add output operators. + + 2010-03-09 Guillaume Lazzara <z@lrde.epita.fr> + + Share internal data in groups and links structures. + + * core/object_groups.hh, + * core/object_links.hh: Share internal data using a tracked + pointer. + + 2010-03-02 Guillaume Lazzara <z@lrde.epita.fr> + + * text/merging.hh (scribo): Update code with lastest Theo's + changes. + + 2010-02-19 Guillaume Lazzara <z@lrde.epita.fr> + + Add a small tool to recognize text in a binary image. + + * src/text/Makefile.am: New target. + + * src/text/pbm_recognition.cc: New. + + * text/recognition.hh: Add an overload taking an image as + argument. + + 2010-02-19 Guillaume Lazzara <z@lrde.epita.fr> + + Add a subsampling algorithm. + + * subsampling/integral.hh: New. Compute a subsample image and an + integral image at the same time. + + 2010-02-19 Guillaume Lazzara <z@lrde.epita.fr> + + Add a first draft of a text line merging algorithm. + + * text/merging.hh: New. + + 2010-02-19 Guillaume Lazzara <z@lrde.epita.fr> + + Add and update examples. + + * src/Makefile.am, + * src/binarization/Makefile.am, + * src/preprocessing/Makefile.am: Add new targets. + + * src/preprocessing/denoising.cc: New. + + * src/preprocessing/split_bg_fg.cc: Fix usage. + + * src/text_in_article.cc, + * src/text_in_photo_ppm_fast.cc: Update code according last + changes in core classes. + + * src/text_in_photo_ppm_fast_2.cc: New example. + + 2010-02-19 Guillaume Lazzara <z@lrde.epita.fr> + + Small fixes. + + * binarization/sauvola_ms.hh: Remove a useless include. + + * debug/usage.hh: Move description output. + + * io/xml/save_text_lines.hh: Fix invalid xml output. + + * primitive/link/internal/link_ms_dmax_ratio_base.hh, + * primitive/link/internal/link_single_dmax_ratio_base.hh: update + distance criterion. + + * scribo.mk: Change compilation flags. + + * src/afp/components.hh: Merge data in only one array. + + * tests/filter/Makefile.am, + * tests/filter/objects_with_holes.cc: New test. + + * text/clean.hh: use upsampling::hq4x instead of upsampling::hq2x. + + 2010-02-19 Guillaume Lazzara <z@lrde.epita.fr> + + Keep updating code according to last changed in core classes. + + * debug/decision_image.hh, + * debug/save_linked_bboxes_image.hh, + * draw/bounding_boxes.hh, + * estim/object_groups_v_thickness.hh, + * filter/common/objects_photo.hh, + * filter/internal/compute.hh, + * filter/object_groups_size_ratio.hh, + * filter/object_groups_small.hh, + * filter/object_groups_v_thickness.hh, + * filter/object_links_bbox_overlap.hh, + * filter/object_links_bottom_aligned.hh, + * filter/object_links_non_aligned_simple.hh, + * filter/objects_thick.hh, + * filter/objects_thin.hh, + * filter/objects_with_holes.hh, + * primitive/group/apply.hh, + * primitive/group/from_double_link.hh, + * primitive/group/from_single_link.hh, + * primitive/link/internal/link_single_dmax_base.hh, + * primitive/link/with_single_left_link.hh, + * primitive/link/with_single_right_link.hh, + * src/afp/link.hh, + * src/afp/regroup.hh, + * text/recognition.hh: Update the use of core classes. Replace the + use of object_image with component_set. + + 2010-02-19 Guillaume Lazzara <z@lrde.epita.fr> + + Improve core classes. + + * core/component_info.hh, + * core/component_set.hh, + * core/line_info.hh, + * core/line_set.hh, + * core/object_groups.hh: Add more methods and constructors. + + * core/macros.hh: Add a new macro. + + * core/tag/line.hh: Add more enums. + + 2010-02-19 Guillaume Lazzara <z@lrde.epita.fr> + + * io/xml/save_text_lines.hh: New. Add partial support for + PageContent XML format. + + 2010-03-11 Guillaume Lazzara <z@lrde.epita.fr> + + Introduce new Scribo core classes and start using them. + + * core/component_info.hh, + * core/component_set.hh, + * core/line_info.hh, + * core/line_set.hh, + * core/macros.hh, + * core/object_groups.hh, + * core/object_links.hh, + * core/tag/anchor.hh, + * core/tag/component.hh, + * core/tag/line.hh: New core classes. + + * core/object_image.hh: Remove. + + * core/anchors.hh + * primitive/extract/objects.hh: Rename as... + + * primitive/link/internal/compute_anchor.hh, + * primitive/extract/components.hh: ... this. + + * draw/bounding_box_links.hh, + * filter/object_links_bbox_h_ratio.hh, + * filter/object_links_bbox_ratio.hh, + * filter/objects_small.hh, + * fun/v2b/objects_small_filter.hh, + * primitive/group/apply.hh, + * primitive/group/from_single_link.hh, + * primitive/internal/find_root.hh, + * primitive/internal/init_link_array.hh, + * primitive/link/compute.hh, + * primitive/link/internal/find_link.hh, + * primitive/link/internal/find_several_links.hh, + * primitive/link/internal/link_functor_base.hh, + * primitive/link/internal/link_several_dmax_base.hh, + * primitive/link/internal/link_single_dmax_base.hh, + * primitive/link/internal/link_single_dmax_ratio_base.hh, + * primitive/link/merge_double_link.hh, + * primitive/link/with_single_left_link_dmax_ratio.hh, + * primitive/link/with_single_right_link_bottom.hh, + * primitive/link/with_single_right_link_dmax_ratio.hh, + * primitive/link/with_single_right_link_top.hh: Make use of + the new core classes. + + 2010-02-19 Guillaume Lazzara <z@lrde.epita.fr> + + Add anchor support in debug routines. + + * debug/alignment_decision_image.hh, + * debug/links_decision_image.hh, + * debug/save_linked_bboxes_image.hh, + * draw/bounding_box_links.hh: Make use of anchor points to + draw debug outputs. + + 2010-02-19 Guillaume Lazzara <z@lrde.epita.fr> + + Add new link filters. + + * filter/object_links_non_aligned_simple.hh: Handle new + cases. + + * filter/object_links_left_aligned.hh, + * filter/object_links_right_aligned.hh: New filters. + + 2010-02-19 Guillaume Lazzara <z@lrde.epita.fr> + + Improve object linking backend. + + * primitive/internal/find_left_link.hh, + * primitive/internal/find_right_link.hh, + * primitive/internal/is_invalid_link.hh: Remove. + + * primitive/link/internal/compute_anchor.hh, + * primitive/link/internal/link_ms_dmax_base.hh, + * primitive/link/internal/link_ms_dmax_ratio_base.hh, + * primitive/link/internal/link_single_dmax_base.hh, + * primitive/link/internal/link_single_dmax_ratio_base.hh, + * primitive/link/with_single_down_link.hh, + * primitive/link/with_single_left_link.hh, + * primitive/link/with_single_left_link_dmax_ratio.hh, + * primitive/link/with_single_right_link.hh, + * primitive/link/with_single_right_link_dmax_ratio.hh, + * primitive/link/with_single_up_link.hh: Introduce the + anchor concept and make use of it. + + 2010-02-19 Guillaume Lazzara <z@lrde.epita.fr> + + * filter/objects_with_holes.hh: New component filter. + + 2010-02-19 Guillaume Lazzara <z@lrde.epita.fr> + + * draw/bounding_boxes.hh: Do not draw box centers anymore. + + 2010-02-19 Guillaume Lazzara <z@lrde.epita.fr> + + Add dedicated routines for AFP's use case. + + * src/afp/components.hh, + * src/afp/link.hh, + * src/afp/regroup.hh: New. + + 2010-02-19 Guillaume Lazzara <z@lrde.epita.fr> + + Add new tools in Scribo. + + * src/preprocessing/Makefile.am, + * src/filter/Makefile.am, + * src/debug/Makefile.am: Add new targets. + + * src/debug/show_info_median_inter_characters.cc, + * src/debug/show_info_x_height.cc, + * src/debug/show_links_single_down.cc, + * src/debug/show_links_single_down_left_aligned.cc, + * src/debug/show_links_single_down_right_aligned.cc, + * src/debug/show_links_single_up.cc, + * src/debug/show_links_single_up_left_aligned.cc, + * src/debug/show_links_single_up_right_aligned.cc, + * src/filter/objects_with_holes.cc, + * src/filter/objects_with_holes_pgm.cc, + * src/pbm_lines_in_doc.cc, + * src/preprocessing/split_bg_fg_ms.cc, + * src/text_in_article.cc, + * src/text_in_photo_ppm_fast.cc: New tools. + + * src/debug/show_left_right_links_validation.cc: Rename as... + * src/debug/show_links_left_right_links_validation.cc: ...this. + + * src/debug/show_links_bbox_h_ratio.cc: Add a missing argument. + + 2010-02-19 Guillaume Lazzara <z@lrde.epita.fr> + + * src/text_in_photo_ppm.cc: Improve output. + + 2010-02-19 Guillaume Lazzara <z@lrde.epita.fr> + + Cleanup and avoid warnings in Sauvola related files. + + * binarization/sauvola_ms.hh, + * binarization/sauvola_threshold.hh, + * canvas/integral_browsing.hh, + * src/binarization/sauvola_ms.cc, + * src/binarization/sauvola_pgm.cc,x + * subsampling/integral_single_image.hh: Cleanup and avoir + warnings. + + 2009-12-15 Guillaume Lazzara <z@lrde.epita.fr> + + Add a new test for object_image. + + * tests/Makefile.am, + * tests/core/Makefile.am: Update build system. + + * tests/core/object_image.cc: New test. + + 2009-12-15 Guillaume Lazzara <z@lrde.epita.fr> + + * primitive/extract/objects.hh: Compute and store mass centers. + + 2009-12-14 Guillaume Lazzara <z@lrde.epita.fr> + + Fix object links filters. + + * filter/object_links_bottom_aligned.hh, + * filter/object_links_center_aligned.hh, + * filter/object_links_non_aligned_simple.hh, + * filter/object_links_top_aligned.hh: Pass the proper dimension as + routine argument. + + 2009-12-14 Guillaume Lazzara <z@lrde.epita.fr> + + Cleanup Sauvola's binarization code. + + * binarization/sauvola_threshold.hh, + * binarization/sauvola.hh: Use fun::v2v::rgb_to_int_u8. + + * binarization/sauvola_ms.hh: New. Sauvola multi-scale routine. + + * src/binarization/sauvola.cc: Make the window size a program + argument. + + * src/binarization/sauvola_ms.cc: Use Sauvola multi-scale routine. + + 2009-12-14 Guillaume Lazzara <z@lrde.epita.fr> + + * core/object_image.hh: Make use of mln::labeled_image_base. + + 2009-12-14 Guillaume Lazzara <z@lrde.epita.fr> + + Improve linking routines. + + * core/anchors.hh: New. Add anchor types. + + * filter/objects_thin.hh: Use filter::internal::compute. + + * primitive/link/internal/find_several_links.hh, + * primitive/link/internal/find_link.hh, + * primitive/link/compute.hh: Update functor interface in order to + specify anchors. + + * primitive/link/compute_several.hh: Fix an invalid namespace. + + * primitive/link/internal/anchors_3.hh: Move... + + * primitive/link/internal/compute_anchor.hh: ... here. + + * primitive/link/internal/link_functor_base.hh: Use anchor type. + + * primitive/link/internal/link_several_dmax_base.hh: New. + + * primitive/link/internal/link_center_dmax_base.hh, + * primitive/link/internal/link_center_dmax_ratio_base.hh: Removed. + + * primitive/link/with_several_right_links_overlap.hh: Fix includes. + + * primitive/link/with_single_right_link_bottom.hh, + * primitive/link/with_single_right_link_top.hh, + * primitive/link/with_single_left_link.hh, + * primitive/link/with_single_right_link.hh: Use + link_single_dmax_base functor. + + * src/debug/show_links_several_right_overlap.cc, + * src/debug/show_links_single_left.cc, + * src/debug/show_links_single_left_dmax_ratio.cc, + * src/debug/show_links_single_right.cc, + * src/debug/show_links_single_right_dmax_ratio.cc: Update functor + interface. + + 2009-12-11 Guillaume Lazzara <z@lrde.epita.fr> + + Improve Sauvola Multi-scale. + + * binarization/internal/first_pass_functor.hh: Use + sauvola_threshold routine. + + * binarization/sauvola_threshold.hh: Remove debug and fix invalid + read in integral image. + + * canvas/integral_browsing.hh, + * subsampling/integral_single_image.hh: Fix stats computation. + + * src/binarization/sauvola_ms.cc: Fix window parameter and make + debug output optional. + + 2009-12-04 Guillaume Lazzara <z@lrde.epita.fr> + + Optimize Sauvola's multiscale binarization. + + * core/init_integral_image.hh: New. + + * src/binarization/sauvola_ms.cc: Optimize and make it more + robust. + + * canvas/integral_browsing.hh: New canvas to browse and compute + data in an integral image. + + * binarization/internal/first_pass_functor.hh: New functor to be + used in the integral browsing. + + * binarization/sauvola_threshold.hh: Add new overloads. + + * subsampling/integral_single_image.hh: Subsample an image and + compute integral images at the same time. + +2010-04-23 Roland Levillain <roland@lrde.epita.fr> + + Get C++ compiler flags for Scribo from configure. + + * scribo.mk (SCRIBO_CXXFLAGS): New. + (AM_CXXFLAGS): Set to $(SCRIBO_CXXFLAGS). + * tests/tests.mk (SCRIBO_TESTS_CXXFLAGS): New. + (AM_CXXFLAGS): Set to $(SCRIBO_TESTS_CXXFLAGS). + +2010-06-03 Roland Levillain <roland@lrde.epita.fr> + + Clean up a bit Scribo's Makefiles. + + * Makefile.am, + * demo/Makefile.am, + * src/Makefile.am, + * src/binarization/Makefile.am, + * src/debug/Makefile.am, + * src/filter/Makefile.am, + * src/misc/Makefile.am, + * src/multi_scale/Makefile.am, + * src/preprocessing/Makefile.am, + * src/primitive/Makefile.am, + * src/primitive/extract/Makefile.am, + * src/primitive/find/Makefile.am, + * src/primitive/group/Makefile.am, + * src/table/Makefile.am, + * src/text/Makefile.am, + * tests/Makefile.am, + * tests/filter/Makefile.am, + * tests/preprocessing/Makefile.am, + * tests/table/Makefile.am, + * tests/text/Makefile.am, + * tests/unit_test/Makefile.am: + Here. + +2010-05-12 Roland Levillain <roland@lrde.epita.fr> + + Add missing copyright headers in Scribo. + + * scribo/Doxyfile, + * scribo/Doxyfile_tex, + * scribo/demo/Makefile.am: + Here. + +2010-04-27 Roland Levillain <roland@lrde.epita.fr> + + Help g++ 3.3 compile Scribo code. + + * text/clean.hh (scribo::text::clean): Help g++ 3.3 type-check a + pointer on template function. + +2010-04-26 Roland Levillain <roland@lrde.epita.fr> + + Clean Scribo's tests' outputs. + + * tests/preprocessing/Makefile.am (MOSTLYCLEANFILES): New. + Add unskew.pbm + +2010-04-21 Roland Levillain <roland@lrde.epita.fr> + + Fix the Scribo distribution. + + * tests/unit_test/Makefile.am (EXTRA_DIST): + Add build_unit_test.sh and disabled_tests. + +2010-04-21 Roland Levillain <roland@lrde.epita.fr> + + Have Scribo's unit tests pass. + + * tests/unit_test/disabled_tests: + Add scribo/primitive/link/compute_several.hh and + scribo/primitive/link/internal/find_several_links.hh, as they + do not pass the unit tests. + * tests/unit_test/unit-tests.mk: Regen. + +2010-04-21 Roland Levillain <roland@lrde.epita.fr> + + Update Scribo's unit tests generator. + + * tests/unit_test/build_unit_test.sh: Catch up with Milena's + version of this script. + * tests/unit_test/Makefile.am (regen-am, $(srcdir)/unit-tests.mk): + Adjust. + * tests/unit_test/disabled_tests: New. + +2010-04-09 Roland Levillain <roland@lrde.epita.fr> + + Help g++ 4.1 compile Scribo. + + * binarization/sauvola_threshold.hh: Help g++ 4.1 find an + unambiguous overload of std::pow. + +2010-03-31 Roland Levillain <roland@lrde.epita.fr> + + Have Scribo compile again. + + * core/object_image.hh (object_image): Add prefix `mln::'. + * primitive/link/internal/anchors_3.hh: Include mln/util/array.hh. + Add missing `mln::' prefixes. + * src/binarization/sauvola_ms.cc: + s/influence_zone_geodesic/influence_zone_geodesic_saturated/. + * table/internal/connect_lines.hh: Likewise. + Remove a duplicated header inclusion. + * src/debug/Makefile.am + (bin_PROGRAMS, show_links_several_right_overlap_SOURCES): Disable + show_links_several_right_overlap. + * src/primitive/group/Makefile.am + (bin_PROGRAMS, group_from_rag_SOURCES): Disable group_from_rag. + +2010-03-02 Roland Levillain <roland@lrde.epita.fr> + + Regen SCRIBO's Makefile helpers. + + * headers.mk, tests/unit_test/unit-tests.mk: Here. + 2009-11-03 Guillaume Lazzara <z@lrde.epita.fr> Add a new example in Scribo. diff --cc scribo/demo/Makefile.am index 9fcd083,0000000..5030e1e mode 100644,000000..100644 --- a/scribo/demo/Makefile.am +++ b/scribo/demo/Makefile.am @@@ -1,25 -1,0 +1,26 @@@ - # Copyright (C) 2009, 2010 EPITA Research and Development Laboratory (LRDE). ++# Copyright (C) 2009, 2010 EPITA Research and Development Laboratory ++# (LRDE). +# +# This file is part of Olena. +# +# Olena is free software: you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, version 2 of the License. +# +# Olena is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Olena. If not, see <http://www.gnu.org/licenses/>. + +include $(top_srcdir)/scribo/scribo.mk + +.PHONY : demo + +Makefile.demo: + qmake-qt4 $(srcdir)/demo/demo.pro -o Makefile.demo + +demo: Makefile.demo + make -f Makefile.demo all diff --cc scribo/scribo.mk index 1912e42,13520d4..c08bbec --- a/scribo/scribo.mk +++ b/scribo/scribo.mk @@@ -1,4 -1,4 +1,5 @@@ - # Copyright (C) 2009, 2010 EPITA Research and Development Laboratory (LRDE). -# Copyright (C) 2009 EPITA Research and Development Laboratory (LRDE). ++# Copyright (C) 2009, 2010 EPITA Research and Development Laboratory ++# (LRDE). # # This file is part of Olena. # diff --cc scribo/src/binarization/Makefile.am index 4adf1a6,ccedd77..6a073cc --- a/scribo/src/binarization/Makefile.am +++ b/scribo/src/binarization/Makefile.am @@@ -1,4 -1,4 +1,5 @@@ --# Copyright (C) 2009 EPITA Research and Development Laboratory (LRDE). ++# Copyright (C) 2009, 2010 EPITA Research and Development Laboratory ++# (LRDE). # # This file is part of Olena. # @@@ -17,12 -20,63 +18,65 @@@ include $(top_srcdir)/scribo/scribo.mk bin_PROGRAMS = \ - sauvola \ - sauvola_ms \ - sauvola_pgm \ - simple - - sauvola_SOURCES = sauvola.cc - sauvola_ms_SOURCES = sauvola_ms.cc - sauvola_pgm_SOURCES = sauvola_pgm.cc - simple_SOURCES = simple.cc + pgm_global_threshold_auto \ + pgm_sauvola \ + pgm_sauvola_ms \ + ppm_sauvola \ + ppm_fg_sauvola_ms \ + ppm_sauvola_ms \ + ppm_sauvola_ms_split + ++ + pgm_global_threshold_auto_SOURCES = pgm_global_threshold_auto.cc + pgm_sauvola_SOURCES = pgm_sauvola.cc + pgm_sauvola_ms_SOURCES = pgm_sauvola_ms.cc + ppm_sauvola_SOURCES = ppm_sauvola.cc + ppm_fg_sauvola_ms_SOURCES = ppm_fg_sauvola_ms.cc + ppm_sauvola_ms_SOURCES = ppm_sauvola_ms.cc + ppm_sauvola_ms_split_SOURCES = ppm_sauvola_ms_split.cc + + + if HAVE_MAGICKXX + bin_PROGRAMS += \ + fg_sauvola_ms \ + sauvola \ + sauvola_debug \ + sauvola_ms \ + sauvola_ms_static \ + sauvola_ms_split + + fg_sauvola_ms_SOURCES = fg_sauvola_ms.cc + fg_sauvola_ms_CPPFLAGS = $(AM_CPPFLAGS) \ + $(MAGICKXX_CPPFLAGS) + fg_sauvola_ms_LDFLAGS = $(AM_LDFLAGS) \ + $(MAGICKXX_LDFLAGS) + + sauvola_SOURCES = sauvola.cc + sauvola_CPPFLAGS = $(AM_CPPFLAGS) \ + $(MAGICKXX_CPPFLAGS) + sauvola_LDFLAGS = $(AM_LDFLAGS) \ + $(MAGICKXX_LDFLAGS) + + sauvola_debug_SOURCES = sauvola_debug.cc + sauvola_debug_CPPFLAGS = $(AM_CPPFLAGS) \ + $(MAGICKXX_CPPFLAGS) + sauvola_debug_LDFLAGS = $(AM_LDFLAGS) \ + $(MAGICKXX_LDFLAGS) + + + sauvola_ms_SOURCES = sauvola_ms.cc + sauvola_ms_CPPFLAGS = $(AM_CPPFLAGS) \ + $(MAGICKXX_CPPFLAGS) + sauvola_ms_LDFLAGS = $(AM_LDFLAGS) \ + $(MAGICKXX_LDFLAGS) + + + sauvola_ms_split_SOURCES = sauvola_ms_split.cc + sauvola_ms_split_CPPFLAGS = $(AM_CPPFLAGS) \ + $(MAGICKXX_CPPFLAGS) + sauvola_ms_split_LDFLAGS = $(AM_LDFLAGS) \ + $(MAGICKXX_LDFLAGS) + + + endif HAVE_MAGICKXX ++ diff --cc scribo/src/debug/Makefile.am index 7ec5669,bb55bfb..6695113 --- a/scribo/src/debug/Makefile.am +++ b/scribo/src/debug/Makefile.am @@@ -1,4 -1,4 +1,5 @@@ --# Copyright (C) 2009 EPITA Research and Development Laboratory (LRDE). ++# Copyright (C) 2009, 2010 EPITA Research and Development Laboratory ++# (LRDE). # # This file is part of Olena. # diff --cc scribo/tests/Makefile.am index 163ecae,61570c8..11e7cf5 --- a/scribo/tests/Makefile.am +++ b/scribo/tests/Makefile.am @@@ -16,7 -16,11 +16,9 @@@ include $(srcdir)/tests.mk -## Process this file through Automake to create Makefile.in. - SUBDIRS = \ + binarization \ + core \ filter \ preprocessing \ table \ diff --cc scribo/tests/preprocessing/Makefile.am index dc139fa,4a6790c..f6ff62a --- a/scribo/tests/preprocessing/Makefile.am +++ b/scribo/tests/preprocessing/Makefile.am @@@ -17,10 -20,10 +17,12 @@@ include $(top_srcdir)/scribo/tests/tests.mk check_PROGRAMS = \ - unskew + unskew \ + rotate_90 unskew_SOURCES = unskew.cc + rotate_90_SOURCES = rotate_90.cc TESTS = $(check_PROGRAMS) + +MOSTLYCLEANFILES = unskew.pbm hooks/post-receive -- Olena, a generic and efficient image processing platform