* lazzara/igr/irm/irm_seg_with_mm_and_rag.cc: rename as...
* lazzara/igr/irm/grad_clo: ... this.
* lazzara/igr/irm/wst_rag.cc,
* lazzara/igr/registration_3d.cc: make it compile.
---
milena/sandbox/ChangeLog | 10 +++++
...seg_with_mm_and_rag.cc => grad_clo_and_wshd.cc} | 8 ++--
milena/sandbox/lazzara/igr/irm/wst_rag.cc | 37 +++++++++++---------
milena/sandbox/lazzara/igr/registration_3d.cc | 28 ++++++++++-----
4 files changed, 53 insertions(+), 30 deletions(-)
rename milena/sandbox/lazzara/igr/irm/{irm_seg_with_mm_and_rag.cc =>
grad_clo_and_wshd.cc} (89%)
diff --git a/milena/sandbox/ChangeLog b/milena/sandbox/ChangeLog
index d1fba6c..6d60f7a 100644
--- a/milena/sandbox/ChangeLog
+++ b/milena/sandbox/ChangeLog
@@ -1,3 +1,13 @@
+2009-03-04 Guillaume Lazzara <z(a)lrde.epita.fr>
+
+ Cleanup IGR's code.
+
+ * lazzara/igr/irm/irm_seg_with_mm_and_rag.cc: rename as...
+ * lazzara/igr/irm/grad_clo: ... this.
+
+ * lazzara/igr/irm/wst_rag.cc,
+ * lazzara/igr/registration_3d.cc: make it compile.
+
2009-03-03 Fabien Freling <fabien.freling(a)lrde.epita.fr>
Create small tools for IGR.
diff --git a/milena/sandbox/lazzara/igr/irm/irm_seg_with_mm_and_rag.cc
b/milena/sandbox/lazzara/igr/irm/grad_clo_and_wshd.cc
similarity index 89%
rename from milena/sandbox/lazzara/igr/irm/irm_seg_with_mm_and_rag.cc
rename to milena/sandbox/lazzara/igr/irm/grad_clo_and_wshd.cc
index 9647986..960d03f 100644
--- a/milena/sandbox/lazzara/igr/irm/irm_seg_with_mm_and_rag.cc
+++ b/milena/sandbox/lazzara/igr/irm/grad_clo_and_wshd.cc
@@ -22,7 +22,7 @@
#include <mln/convert/to_fun.hh>
#include <mln/morpho/gradient.hh>
-#include <mln/morpho/closing_area.hh>
+#include <mln/morpho/closing/area.hh>
#include <mln/morpho/meyer_wst.hh>
#include <mln/fun/l2l/wrap.hh>
@@ -64,11 +64,11 @@ int main(int argc, char *argv[])
image2d<int_u8> grad = morpho::gradient(irm, win_c4p());
io::pgm::save(grad, "tmp_grad_c4p.pgm");
-// image2d<int_u8> clo = morpho::closing_area(grad, c4(), atoi(argv[3]));
-// io::pgm::save(clo, "tmp_clo_a100.pgm");
+ image2d<int_u8> clo = morpho::closing::area(grad, c4(), atoi(argv[3]));
+ io::pgm::save(clo, "tmp_clo_a100.pgm");
label_16 nbasins;
- image2d<label_16> wshed = morpho::meyer_wst(grad, c4(), nbasins);
+ image2d<label_16> wshed = morpho::meyer_wst(clo, c4(), nbasins);
std::cout << "nbasins = " << nbasins << std::endl;
io::pgm::save(level::transform(wshed, fun::l2l::wrap<int_u8>()),
diff --git a/milena/sandbox/lazzara/igr/irm/wst_rag.cc
b/milena/sandbox/lazzara/igr/irm/wst_rag.cc
index b88b8ec..c88b435 100644
--- a/milena/sandbox/lazzara/igr/irm/wst_rag.cc
+++ b/milena/sandbox/lazzara/igr/irm/wst_rag.cc
@@ -12,7 +12,6 @@
#include <mln/core/alias/dpoint2d.hh>
#include <mln/draw/box.hh>
#include <mln/level/stretch.hh>
-#include <mln/canvas/morpho/algebraic_union_find.hh>
#include <mln/fun/v2v/id.hh>
#include <mln/core/image/line_graph_elt_neighborhood.hh>
#include <mln/morpho/elementary/dilation.hh>
@@ -20,6 +19,7 @@
#include <mln/extension/adjust_fill.hh>
#include <mln/extract/all.hh>
#include <mln/make/region_adjacency_graph.hh>
+#include <mln/make/graph.hh>
// Given a color image and a wshed image, computes the component graph.
// Vertex values are computed thanks to a RGB image.
@@ -223,20 +223,20 @@ int main(int argc, char *argv[])
I input;
io::ppm::load(input, argv[1]);
-// image2d<rgb16> input = level::convert(rgb16(), input_);
- J vol;
- io::dump::load(vol, argv[2]);
+ J wsd;
+ io::dump::load(wsd, argv[2]);
label_16 nbasins = atoi(argv[3]);
std::cout << "nbasins = " << nbasins << std::endl;
- util::graph g = make::graph(vol, c4(), nbasins);
-
- // Compute value distances with a RGB image.
- mln_VAR(ima_v, make_vertex_graph_image(g, input, vol, nbasins));
+ /// Build graph
+ util::graph g = make::graph(wsd, c4(), nbasins);
+ // Build graph images and compute distance values with a RGB image.
+ mln_VAR(ima_v, make_vertex_graph_image(g, input, wsd, nbasins));
mln_VAR(ima_e, make_edge_graph_image(ima_v, g));
+
//DEBUG
io::ppm::save(make_debug_graph_image(input, ima_v, ima_e, box_size, literal::white),
"wst_rag_graph_image_white.ppm");
@@ -244,6 +244,7 @@ int main(int argc, char *argv[])
"wst_rag_graph_image_black.ppm");
+ /// Try to merge vertices.
mln_piter_(ima_e_t) e(ima_e.domain());
util::array<label_16> parent(g.v_nmax());
for (unsigned i = 0; i < parent.nelements(); ++i)
@@ -272,21 +273,23 @@ int main(int argc, char *argv[])
mln_invariant(f(0) == 0u);
--nbasins2; //nbasins2 does not count the basin with label 0.
std::cout << "nbasins2 = " << nbasins2 << std::endl;
+ J wsd2 = level::transform(wsd, f);
+
- J vol2 = level::transform(vol, f);
- util::graph g2 = make::graph(vol2, c4(), nbasins2);
- // Compute value distances with a RGB image.
- mln_VAR(ima_v2, make_vertex_graph_image(g2, input, vol2, nbasins2));
+ /// Reconstruct a graph from the simplified image.
+ util::graph g2 = make::graph(wsd2, c4(), nbasins2);
+ // Compute distance values with a RGB image.
+ mln_VAR(ima_v2, make_vertex_graph_image(g2, input, wsd2, nbasins2));
mln_VAR(ima_e2, make_edge_graph_image(ima_v2, g2));
- mln_VAR(vol2_,
- morpho::elementary::dilation(extend(vol2 | (pw::value(vol2) == 0u),
- vol2),
+ mln_VAR(wsd2_,
+ morpho::elementary::dilation(extend(wsd2 | (pw::value(wsd2) == 0u),
+ wsd2),
c8()));
- data::fill((vol2 | (pw::value(vol2) == 0u)).rw(), vol2_);
+ data::fill((wsd2 | (pw::value(wsd2) == 0u)).rw(), wsd2_);
- io::ppm::save(labeling::mean_values(input, vol2, nbasins2),
+ io::ppm::save(labeling::mean_values(input, wsd2, nbasins2),
"wst_rag_mean_colors.ppm");
io::ppm::save(make_debug_graph_image(input, ima_v2, ima_e2, box_size, literal::white),
"wst_rag_graph_image2_white.ppm");
diff --git a/milena/sandbox/lazzara/igr/registration_3d.cc
b/milena/sandbox/lazzara/igr/registration_3d.cc
index f049d88..d144b5c 100644
--- a/milena/sandbox/lazzara/igr/registration_3d.cc
+++ b/milena/sandbox/lazzara/igr/registration_3d.cc
@@ -16,33 +16,43 @@ int main(int, char *argv[])
arr_t ref;
io::cloud::load(ref, argv[2]);
+ box3d bbox = geom::bbox(ref);
+ bbox.enlarge(1, bbox.nrows() / 2);
+ bbox.enlarge(2, bbox.ncols() / 2);
+ bbox.enlarge(0, bbox.nslis() / 2);
+
+
// Starting registration.
util::timer t;
t.start();
-
typedef fun::x2x::rotation<3u,float> rot_t;
typedef fun::x2x::translation<3u,float> trans_t;
- fun::x2x::composed<trans_t,rot_t> qk = registration::registration3(in, ref);
+ fun::x2x::composed<trans_t,rot_t> qk = registration::registration2(bbox, in,
ref);
std::cout << "igr.cc - Registration - " << t <<
"s" << std::endl;
- box3d bbox = geom::bbox(ref);
- bbox.enlarge(1, 50);
- bbox.enlarge(2, 50);
image3d<value::rgb8> ima_in(bbox);
data::fill(ima_in, literal::black);
data::fill((ima_in | in).rw(), literal::green);
- mln_VAR(ext_ima, extended_with(ima_in, pw::cst(value::rgb8(literal::black))));
+ mln_VAR(ext_ima, extend(ima_in, pw::cst(value::rgb8(literal::black))));
mln_VAR(trima, transposed_image(bbox, ext_ima, qk));
+ p_array<point3d> arr;
+ mln_VAR(tmp, (ima_in | in));
+ mln_piter_(tmp_t) p(tmp.domain());
+ for_all(p)
+ arr.insert(qk(p));
+ std::cout << arr.nsites() << std::endl;
+ io::cloud::save(arr, "registered.txt");
+
image3d<value::rgb8> ima_ref(geom::bbox(ref));
- mln_VAR(ext_ima_ref, extended_with(ima_ref, pw::cst(value::rgb8(literal::black))));
+ mln_VAR(ext_ima_ref, extend(ima_ref, pw::cst(value::rgb8(literal::black))));
data::fill(ext_ima_ref, literal::black);
data::fill((ext_ima_ref | ref).rw(), literal::white);
data::fill((ext_ima_ref | pw::value(trima) == pw::cst(literal::green)).rw(),
literal::green);
-// io::cloud::save(res, "registered.txt");
+// io::cloud::save(trima, "registered.txt");
- io::ppm::save(debug::slices_2d(ima_ref, 5, 3, literal::black),
"registration_3d.ppm");
+// io::ppm::save(debug::slices_2d(ima_ref, 5, 3, literal::black),
"registration_3d.ppm");
}
--
1.5.6.5