00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00027
00028 #include <mln/core/image/image2d.hh>
00029 #include <mln/core/image/dmorph/image_if.hh>
00030 #include <mln/core/routine/duplicate.hh>
00031 #include <mln/core/site_set/p_array.hh>
00032 #include <mln/core/var.hh>
00033 #include <mln/core/alias/neighb2d.hh>
00034
00035 #include <mln/fun/p2b/chess.hh>
00036
00037 #include <mln/extract/green.hh>
00038
00039 #include <mln/accu/stat/max.hh>
00040
00041 #include <mln/geom/all.hh>
00042
00043 #include <mln/value/rgb8.hh>
00044 #include <mln/value/label_8.hh>
00045
00046 #include <mln/opt/at.hh>
00047
00048 #include <mln/data/fill.hh>
00049
00050 #include <mln/pw/all.hh>
00051
00052 #include <mln/binarization/threshold.hh>
00053
00054 #include <mln/labeling/colorize.hh>
00055 #include <mln/labeling/blobs.hh>
00056
00057 #include <mln/literal/colors.hh>
00058 #include <mln/literal/max.hh>
00059
00060
00061 #include <tests/data.hh>
00062 #include <doc/tools/sample_utils.hh>
00063
00064 struct keep_specific_colors : public mln::Function_v2b<keep_specific_colors>
00065 {
00066 bool operator()(const mln::value::rgb8& v) const
00067 {
00068 return v.green() < 200u && v.blue() > 100u;
00069 }
00070 };
00071
00072 int main()
00073 {
00074 using namespace mln;
00075
00076
00077 image2d<value::rgb8> lena;
00078 io::ppm::load(lena, MLN_IMG_DIR "/small.ppm");
00079
00080
00081
00082 image2d<value::rgb8> lena_bak = duplicate(lena);
00083
00084 box2d roi = make::box2d(20, 20, 39, 39);
00085
00086
00087 data::fill((lena | roi).rw(), literal::green);
00088
00089 doc::ppmsave(lena, "tuto4_genericity_and_algorithms");
00090
00091
00092
00093
00094 lena = duplicate(lena_bak);
00095
00096 p_array<point2d> arr;
00097 for (def::coord row = geom::min_row(lena); row < geom::max_row(lena); ++row)
00098 for (def::coord col = geom::min_row(lena); col < geom::max_col(lena); ++col)
00099 if (((row + col) % 2) == 0)
00100 arr.append(point2d(row, col));
00101
00102
00103 for (def::coord row = geom::min_row(lena); row < geom::max_row(lena); ++row)
00104 for (def::coord col = geom::min_row(lena); col < geom::max_col(lena); ++col)
00105 if (((row + col) % 2) == 0)
00106 opt::at(lena, row, col) = literal::green;
00107
00108
00109 data::fill((lena | fun::p2b::chess()).rw(), literal::green);
00110
00111 doc::ppmsave(lena, "tuto4_genericity_and_algorithms");
00112
00113
00114
00115
00116 lena = duplicate(lena_bak);
00117
00118 image2d<bool> mask;
00119 initialize(mask, lena);
00120 data::fill(mask, false);
00121 data::fill((mask | make::box2d(10, 10, 14, 14)).rw(), true);
00122 data::fill((mask | make::box2d(25, 15, 29, 18)).rw(), true);
00123 data::fill((mask | make::box2d(50, 50, 54, 54)).rw(), true);
00124
00125 doc::pbmsave(mask, "tuto4_genericity_and_algorithms");
00126
00127 data::fill((lena | pw::value(mask)).rw(), literal::green);
00128
00129 doc::ppmsave(lena, "tuto4_genericity_and_algorithms");
00130
00131
00132
00133
00134 lena = duplicate(lena_bak);
00135
00136 image2d<bool> lena_bw = binarization::binarization(lena, keep_specific_colors());
00137 value::label_8 nlabels;
00138 image2d<value::label_8> label = labeling::blobs(lena_bw, c8(), nlabels);
00139
00140 doc::ppmsave(labeling::colorize(value::rgb8(), label, nlabels), "tuto4_genericity_and_algorithms");
00141
00142
00143 data::fill((lena | (pw::value(label) == pw::cst(0u))).rw(), literal::blue);
00144
00145 doc::ppmsave(lena, "tuto4_genericity_and_algorithms");
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00170
00171
00172 }