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
00026 #include <mln/core/image/image2d.hh>
00027 #include <mln/io/pgm/all.hh>
00028 #include <mln/util/timer.hh>
00029 #include <mln/core/alias/neighb2d.hh>
00030 #include <mln/morpho/attribute/volume.hh>
00031 #include <mln/morpho/attribute/card.hh>
00032 #include <mln/morpho/leveling_filter.hh>
00033 #include <mln/morpho/algebraic_filter.hh>
00034
00035 #include "tests/data.hh"
00036
00037 int main(int argc, char** argv)
00038 {
00039 using namespace mln;
00040 using value::int_u8;
00041
00042 if (argc != 2)
00043 {
00044 std::cout << "Usage: ./connected_filter lambda" << std::endl;
00045 return 0;
00046 }
00047
00048 typedef mln::image2d<int_u8> I;
00049 I lena;
00050
00051 float elapsed;
00052 mln::util::timer chrono;
00053 mln::morpho::attribute::volume<I> c;
00054 mln::morpho::attribute::card<I> c2;
00055 int lambda = atoi(argv[1]);
00056
00057 mln::io::pgm::load(lena, MLN_IMG_DIR "/lena.pgm");
00058 I out;
00059
00060 std::cout << "Test with card attribute:" << std::endl;
00061 chrono.start();
00062 out = mln::canvas::morpho::attribute_filter(lena, c4(), c2, lambda, true);
00063 elapsed = chrono.stop();
00064 std::cout << "(Full auto) " << elapsed << "s" << std::endl;
00065 mln::io::pgm::save(out, "alg_auto.pgm");
00066
00067 chrono.start();
00068 out = mln::morpho::algebraic_filter(lena, c4(), c2, lambda, true);
00069 elapsed = chrono.stop();
00070 std::cout << "(Algebraic Auto) " << elapsed << "s" << std::endl;
00071 mln::io::pgm::save(out, "alg_algebraic.pgm");
00072
00073 chrono.start();
00074 out = mln::canvas::morpho::internal::attribute_filter_dispatch(metal::false_(), lena, c4(), c2, lambda, true);
00075 elapsed = chrono.stop();
00076 std::cout << "(Force Slow) " << elapsed << "s" << std::endl;
00077 mln::io::pgm::save(out, "alg_slow.pgm");
00078
00079
00080
00081
00082 std::cout << "Test with volume attribute:" << std::endl;
00083 chrono.start();
00084 out = mln::canvas::morpho::attribute_filter(lena, c4(), c, lambda, true);
00085 elapsed = chrono.stop();
00086 std::cout << "(Full auto) " << elapsed << "s" << std::endl;
00087 mln::io::pgm::save(out, "lev_auto.pgm");
00088
00089 chrono.start();
00090 out = mln::morpho::leveling_filter(lena, c4(), c, lambda, true);
00091 elapsed = chrono.stop();
00092 std::cout << "(Leveling Auto) " << elapsed << "s" << std::endl;
00093 mln::io::pgm::save(out, "lev_leveling.pgm");
00094
00095 chrono.start();
00096 out = mln::canvas::morpho::internal::attribute_filter_dispatch(metal::false_(), lena, c4(), c, lambda, true);
00097 elapsed = chrono.stop();
00098 std::cout << "(Force Slow) " << elapsed << "s" << std::endl;
00099 mln::io::pgm::save(out, "lev_slow.pgm");
00100
00101
00102
00103
00104
00105 }