
* demo.pro: Include new files. * src/display.cc, * src/display.hh, * ui/display.ui: New tab widget. * src/display_seg.cc, * src/display_seg.hh: Improve display. * src/edit_seg.cc, * src/edit_seg.hh: Improve segmentation editing. * src/widgets.cc: Include new file. * ui/main_window.ui: Add a new tab. --- milena/sandbox/ChangeLog | 20 +++ milena/sandbox/lazzara/igr/gui/demo.pro | 4 +- .../igr/gui/src/{display_seg.cc => display.cc} | 55 ++------- .../igr/gui/src/{display_seg.hh => display.hh} | 20 +-- milena/sandbox/lazzara/igr/gui/src/display_seg.cc | 8 +- milena/sandbox/lazzara/igr/gui/src/display_seg.hh | 3 +- milena/sandbox/lazzara/igr/gui/src/edit_seg.cc | 128 +++++++++++++------ milena/sandbox/lazzara/igr/gui/src/edit_seg.hh | 17 ++- milena/sandbox/lazzara/igr/gui/src/widgets.cc | 1 + milena/sandbox/lazzara/igr/gui/ui/display.ui | 88 ++++++++++++++ milena/sandbox/lazzara/igr/gui/ui/main_window.ui | 21 +++- scribo/headers.mk | 7 +- 12 files changed, 248 insertions(+), 124 deletions(-) copy milena/sandbox/lazzara/igr/gui/src/{display_seg.cc => display.cc} (70%) copy milena/sandbox/lazzara/igr/gui/src/{display_seg.hh => display.hh} (82%) create mode 100644 milena/sandbox/lazzara/igr/gui/ui/display.ui diff --git a/milena/sandbox/ChangeLog b/milena/sandbox/ChangeLog index 94935e2..08e7332 100644 --- a/milena/sandbox/ChangeLog +++ b/milena/sandbox/ChangeLog @@ -1,3 +1,23 @@ +2009-10-28 Guillaume Lazzara <z@lrde.epita.fr> + + Update IGR's GUI. + + * demo.pro: Include new files. + + * src/display.cc, + * src/display.hh, + * ui/display.ui: New tab widget. + + * src/display_seg.cc, + * src/display_seg.hh: Improve display. + + * src/edit_seg.cc, + * src/edit_seg.hh: Improve segmentation editing. + + * src/widgets.cc: Include new file. + + * ui/main_window.ui: Add a new tab. + 2009-10-28 Thierry Geraud <thierry.geraud@lrde.epita.fr> Add the reconstruction on set by union-find canvas. diff --git a/milena/sandbox/lazzara/igr/gui/demo.pro b/milena/sandbox/lazzara/igr/gui/demo.pro index 5d1b3b0..26e1a06 100644 --- a/milena/sandbox/lazzara/igr/gui/demo.pro +++ b/milena/sandbox/lazzara/igr/gui/demo.pro @@ -11,6 +11,6 @@ LIBS += -L/lrde/dev/linux-x86/stable/gdcm/lib -lgdcmCommon -lgdcmDICT -lgdcmDSED #CONFIG += debug # Input -HEADERS += src/main_window.hh src/image_viewer.hh src/display_seg.hh src/edit_seg.hh src/internal/interactive_scene.hh -FORMS += ui/main_window.ui ui/image_viewer.ui ui/display_seg.ui ui/edit_seg.ui +HEADERS += src/main_window.hh src/image_viewer.hh src/display_seg.hh src/edit_seg.hh src/internal/interactive_scene.hh src/display.hh +FORMS += ui/main_window.ui ui/image_viewer.ui ui/display_seg.ui ui/edit_seg.ui ui/display.ui SOURCES += src/main.cc src/main_window.cc src/image_viewer.cc src/widgets.cc src/internal/interactive_scene.cc diff --git a/milena/sandbox/lazzara/igr/gui/src/display_seg.cc b/milena/sandbox/lazzara/igr/gui/src/display.cc similarity index 70% copy from milena/sandbox/lazzara/igr/gui/src/display_seg.cc copy to milena/sandbox/lazzara/igr/gui/src/display.cc index eae64a9..050644d 100644 --- a/milena/sandbox/lazzara/igr/gui/src/display_seg.cc +++ b/milena/sandbox/lazzara/igr/gui/src/display.cc @@ -28,7 +28,7 @@ #include <QtGui> # define INCLUDE_MLN_FILES -#include <src/display_seg.hh> +#include <src/display.hh> #include <src/image_viewer.hh> #include <src/to_qimage.hh> @@ -61,7 +61,7 @@ namespace mln namespace demo { - display_seg::display_seg(QWidget *parent) + display::display(QWidget *parent) : QWidget(parent) { setupUi(this); @@ -70,14 +70,14 @@ namespace mln this, SLOT(compute_image(int))); } - display_seg::~display_seg() + display::~display() { } // Private slots - void display_seg::on_browseBtn_clicked(bool) + void display::on_browseBtn_clicked(bool) { QString filename = QFileDialog::getOpenFileName(this, @@ -89,39 +89,19 @@ namespace mln filepath->setText(filename); } - - void display_seg::on_browseSegBtn_clicked(bool) - { - QString - filename = QFileDialog::getOpenFileName(this, - tr("Open Image."), - QString(), - tr("Images (*.dump)")); - - if (!filename.isEmpty()) - segfilepath->setText(filename); - } - - - void display_seg::compute_image(int sli) + void display::compute_image(int sli) { slice_image<dcm_ima_t> sl_ima = slice(dcm_ima, sli); - mln_piter_(result_t) p(result.domain()); - for_all(p) - result(p).lum() = (sl_ima(p) / static_cast<float>(mln_max(value::int_u8))) / 2.0; - - QImage ima = to_qimage(data::convert(value::rgb8(), result)); + QImage ima = to_qimage(data::convert(value::rgb8(), sl_ima)); viewer->update_image(ima); } - void display_seg::on_loadBtn_clicked(bool) + void display::on_loadBtn_clicked(bool) { load_dicom(filepath->text()); - load_seg(segfilepath->text()); - setup_result(); viewer->set_image_layer_count(geom::nslis(dcm_ima)); } @@ -130,24 +110,7 @@ namespace mln // Private members - void display_seg::setup_result() - { - initialize(result, seg_ima); - mln_piter_(result_t) p(result.domain()); - for_all(p) - { - result(p).hue() = ((seg_ima(p) * 10) % 359) + 1; - result(p).sat() = 1; - } - } - - void display_seg::load_seg(const QString& filename) - { - io::dump::load(seg_ima, filename.toStdString()); - } - - - void display_seg::load_dicom(const QString& filename) + void display::load_dicom(const QString& filename) { image3d<value::int_u12> tmp; io::dicom::load(tmp, filename.toStdString()); @@ -156,7 +119,7 @@ namespace mln template <typename I> - mln_ch_value(I, value::int_u8) display_seg::to_int_u8(const Image<I>& ima_) + mln_ch_value(I, value::int_u8) display::to_int_u8(const Image<I>& ima_) { const I& ima = exact(ima_); mln_precondition(ima.is_valid()); diff --git a/milena/sandbox/lazzara/igr/gui/src/display_seg.hh b/milena/sandbox/lazzara/igr/gui/src/display.hh similarity index 82% copy from milena/sandbox/lazzara/igr/gui/src/display_seg.hh copy to milena/sandbox/lazzara/igr/gui/src/display.hh index c559b0d..a329daf 100644 --- a/milena/sandbox/lazzara/igr/gui/src/display_seg.hh +++ b/milena/sandbox/lazzara/igr/gui/src/display.hh @@ -23,7 +23,7 @@ // exception does not however invalidate any other reasons why the // executable file might be covered by the GNU General Public License. -#ifndef MLN_DEMO_SRC_DISPLAY_SEG_HH +#ifndef MLN_DEMO_SRC_DISPLAY_HH # include <QDir> # include <QTimer> @@ -31,7 +31,7 @@ # include <QProcess> # include <QtGui> # include <QProgressDialog> -# include <ui_display_seg.h> +# include <ui_display.h> # ifndef INCLUDE_MLN_FILES # define MLN_INCLUDE_ONLY @@ -50,29 +50,24 @@ namespace mln namespace demo { - class display_seg : public QWidget, private Ui::DisplaySeg + class display : public QWidget, private Ui::Display { Q_OBJECT typedef image3d<value::int_u8> dcm_ima_t; - typedef image2d<value::int_u16> seg_ima_t; - typedef image2d<value::hsl_f> result_t; public: - display_seg(QWidget *parent = 0); - ~display_seg(); + display(QWidget *parent = 0); + ~display(); private slots: void on_browseBtn_clicked(bool); - void on_browseSegBtn_clicked(bool); void compute_image(int sli); void on_loadBtn_clicked(bool); private: // Members - void setup_result(); - void load_seg(const QString& filename); void load_dicom(const QString& filename); template <typename I> @@ -82,9 +77,6 @@ namespace mln private: // Attributes dcm_ima_t dcm_ima; - seg_ima_t seg_ima; - value::int_u8 nlabels_; - result_t result; }; @@ -93,4 +85,4 @@ namespace mln } // end of namespace mln -#endif // ! MLN_DEMO_SRC_DISPLAY_SEG_HH +#endif // ! MLN_DEMO_SRC_DISPLAY_HH diff --git a/milena/sandbox/lazzara/igr/gui/src/display_seg.cc b/milena/sandbox/lazzara/igr/gui/src/display_seg.cc index eae64a9..9d36ca2 100644 --- a/milena/sandbox/lazzara/igr/gui/src/display_seg.cc +++ b/milena/sandbox/lazzara/igr/gui/src/display_seg.cc @@ -42,7 +42,6 @@ #include <mln/value/hsl.hh> #include <mln/value/rgb8.hh> #include <mln/value/int_u12.hh> -#include <mln/value/int_u8.hh> #include <mln/value/int_u32.hh> #include <mln/value/int_u8.hh> #include <mln/data/convert.hh> @@ -109,7 +108,7 @@ namespace mln mln_piter_(result_t) p(result.domain()); for_all(p) - result(p).lum() = (sl_ima(p) / static_cast<float>(mln_max(value::int_u8))) / 2.0; + result(p).lum() = (sl_ima(p) / static_cast<float>(mln_max(value::int_u8))) * 0.7; QImage ima = to_qimage(data::convert(value::rgb8(), result)); @@ -132,11 +131,12 @@ namespace mln void display_seg::setup_result() { - initialize(result, seg_ima); + slice_image<seg_ima_t> sl_ima = slice(seg_ima, 0); + initialize(result, sl_ima); mln_piter_(result_t) p(result.domain()); for_all(p) { - result(p).hue() = ((seg_ima(p) * 10) % 359) + 1; + result(p).hue() = ((sl_ima(p) * 10) % 359) + 1; result(p).sat() = 1; } } diff --git a/milena/sandbox/lazzara/igr/gui/src/display_seg.hh b/milena/sandbox/lazzara/igr/gui/src/display_seg.hh index c559b0d..45207c0 100644 --- a/milena/sandbox/lazzara/igr/gui/src/display_seg.hh +++ b/milena/sandbox/lazzara/igr/gui/src/display_seg.hh @@ -40,7 +40,6 @@ # include <mln/core/image/image3d.hh> # include <mln/core/image/image2d.hh> # include <mln/value/int_u8.hh> -# include <mln/value/int_u16.hh> # include <mln/value/rgb8.hh> # include <mln/value/hsl.hh> @@ -55,7 +54,7 @@ namespace mln Q_OBJECT typedef image3d<value::int_u8> dcm_ima_t; - typedef image2d<value::int_u16> seg_ima_t; + typedef image3d<value::int_u8> seg_ima_t; typedef image2d<value::hsl_f> result_t; public: diff --git a/milena/sandbox/lazzara/igr/gui/src/edit_seg.cc b/milena/sandbox/lazzara/igr/gui/src/edit_seg.cc index 14e58b5..ef22ba8 100644 --- a/milena/sandbox/lazzara/igr/gui/src/edit_seg.cc +++ b/milena/sandbox/lazzara/igr/gui/src/edit_seg.cc @@ -32,12 +32,14 @@ #include <mln/core/image/image3d.hh> #include <mln/core/image/imorph/labeled_image.hh> +#include <mln/core/image/dmorph/slice_image.hh> #include <mln/core/concept/function.hh> +#include <mln/geom/nslis.hh> + #include <mln/data/wrap.hh> #include <mln/data/transform_inplace.hh> -#include <mln/value/int_u16.hh> #include <mln/value/int_u8.hh> #include <mln/io/ppm/save.hh> @@ -46,9 +48,12 @@ #include <mln/literal/colors.hh> #include <mln/labeling/colorize.hh> +#include <mln/labeling/relabel.hh> #include <mln/fun/v2v/wrap.hh> +#include <mln/accu/stat/max.hh> + namespace mln { @@ -57,23 +62,23 @@ namespace mln // struct merge_component : Function_v2v<merge_component> // { -// typedef value::int_u16 result; +// typedef value::int_u8 result; -// merge_component(const value::int_u16& replaced, -// const value::int_u16& by) +// merge_component(const value::int_u8& replaced, +// const value::int_u8& by) // : replaced_(replaced), by_(by) // { // } -// value::int_u16 operator()(const value::int_u16& v) const +// value::int_u8 operator()(const value::int_u8& v) const // { // if (v == replaced_) // return by_; // return v; // } -// value::int_u16 replaced_; -// value::int_u16 by_; +// value::int_u8 replaced_; +// value::int_u8 by_; // }; // } // end of namespace mln::internal @@ -91,7 +96,7 @@ namespace mln setupUi(this); connect(viewer, SIGNAL(slider_valueChanged(int)), - this, SLOT(compute_image())); + this, SLOT(compute_image(int))); connect(viewer, SIGNAL(mouse_draw_line(const QPointF&, const QPointF&)), this, SLOT(join_components(const QPointF&, const QPointF&))); @@ -102,38 +107,60 @@ namespace mln edit_seg::~edit_seg() { - } void edit_seg::on_browseBtn_clicked(bool) { QString - filename = QFileDialog::getOpenFileName(this, + filename = QFileDialog::getOpenFileName(0, tr("Open Image."), QString(), tr("Images (*.dump)")); if (!filename.isEmpty()) + { filepath->setText(filename); - // Initial load. - image2d<value::int_u16> tmp; - io::dump::load(tmp, filepath->text().toStdString()); - seg_ = labeled_image<image2d<value::int_u16> >(tmp); + // Release memory + seg_.destroy(); + seg_rgb8_.destroy(); + + io::dump::load(seg_, filepath->text().toStdString()); - selected_.resize(seg_.nlabels(), false); + mln_assertion(seg_.is_valid()); - image2d<value::int_u8> tmp2 = data::wrap(value::int_u8(), seg_); - seg_rgb8_ = data::convert(value::rgb8(), tmp2); + nlabels_ = data::compute(accu::meta::stat::max(), seg_); - viewer->set_image_layer_count(1); + fselected_.resize(nlabels_, false); + selected_.clear(); + + seg_rgb8_ = data::convert(value::rgb8(), + data::wrap(value::int_u8(), seg_)); + + viewer->set_image_layer_count(geom::nslis(seg_)); + } } - void edit_seg::compute_image() + void edit_seg::compute_image(int sli) { - QImage ima = to_qimage(seg_rgb8_); + current_sli_ = sli; + + slice_image<image3d<value::int_u8> > sl_ima = slice(seg_, sli); + + bboxes_ = labeling::compute(accu::meta::shape::bbox(), sl_ima, nlabels_); + + + slice_image<image3d<value::rgb8> > sl_ima_rgb = slice(seg_rgb8_, sli); + for (unsigned i = 0; i < selected_.nelements(); ++i) + if (selected_[i] < bboxes_.nelements() + && bboxes_(selected_[i]).is_valid()) + data::fill(((sl_ima_rgb | bboxes_(selected_[i])).rw() + | (pw::value(sl_ima) == pw::cst(selected_[i]))).rw(), + literal::red); + + QImage ima = to_qimage(duplicate(sl_ima_rgb)); viewer->update_image(ima); } @@ -160,42 +187,61 @@ namespace mln void edit_seg::on_saveBtn_clicked(bool) { QString - filename = QFileDialog::getOpenFileName(this, + filename = QFileDialog::getSaveFileName(this, tr("Save Image."), QString(), tr("Images (*.dump)")); + if (!filename.isEmpty()) + { + value::int_u8 new_nlabels; + image3d<value::int_u8> + out = labeling::relabel(seg_, nlabels_, + new_nlabels, fselected_); - image2d<value::int_u16> - out = data::transform(seg_.unmorph_(), selected_); + io::dump::save(out, filename.toStdString()); + } - io::dump::save(out, filename.toStdString()); } void edit_seg::select_component(const QPointF& p) { - point2d - mln_p = point2d(p.y(), p.x()); + point3d + mln_p(current_sli_, p.y(), p.x()); + + slice_image<image3d<value::rgb8> > + sl_ima_rgb = slice(seg_rgb8_, current_sli_); + slice_image<image3d<value::int_u8> > + sl_ima = slice(seg_, current_sli_); - if (seg_.domain().has(mln_p) - && !selected_(seg_(mln_p)) - && seg_(mln_p) != 0) // Not the wsl + if (seg_.domain().has(mln_p)) { - selected_(seg_(mln_p)) = true; - data::fill((seg_rgb8_ | seg_.subdomain(seg_(mln_p))).rw(), - literal::red); + value::int_u8 v = seg_(mln_p); + + if (!fselected_(v) && v != 0) // Not the wsl + { + fselected_(v) = true; + selected_.insert(v); + data::fill(((sl_ima_rgb | bboxes_(v)).rw() + | (pw::value(sl_ima) == pw::cst(v))).rw(), + literal::red); + } + else + { + fselected_(v) = false; + selected_.remove(v); + +// fun::v2v::wrap<value::int_u8> f; +// value::int_u8 v8 = f(v); + value::rgb8 v_rgb(v, v, v); + data::fill(((sl_ima_rgb | bboxes_(v)).rw() + | (pw::value(sl_ima) == pw::cst(v))).rw(), v_rgb); + } } - else - { - selected_(seg_(mln_p)) = false; - value::rgb8 - v = convert::to<value::rgb8>(fun::v2v:wrap<value::int_u8>(seg_(mln_p))); - value::rgb8 v(seg_(mln_p), seg_(mln_p), seg_(mln_p)); - data::fill((seg_rgb8_ | seg_.subdomain(seg_(mln_p))).rw(), v); - } - compute_image(); + saveBtn->setEnabled(selected_.nelements() > 0); + compute_image(current_sli_); } diff --git a/milena/sandbox/lazzara/igr/gui/src/edit_seg.hh b/milena/sandbox/lazzara/igr/gui/src/edit_seg.hh index 0d22db5..708eb2c 100644 --- a/milena/sandbox/lazzara/igr/gui/src/edit_seg.hh +++ b/milena/sandbox/lazzara/igr/gui/src/edit_seg.hh @@ -39,9 +39,10 @@ # include <mln/core/image/image2d.hh> # include <mln/core/image/imorph/labeled_image.hh> -# include <mln/value/int_u16.hh> +# include <mln/value/int_u8.hh> # include <mln/value/rgb8.hh> # include <mln/util/array.hh> +# include <mln/util/set.hh> namespace mln { @@ -61,7 +62,7 @@ namespace mln private slots: void on_browseBtn_clicked(bool); void on_saveBtn_clicked(bool); - void compute_image(); + void compute_image(int sli); void join_components(const QPointF& p1, const QPointF& p2); void select_component(const QPointF& p); @@ -69,9 +70,15 @@ namespace mln private: // Attributes - labeled_image<image2d<value::int_u16> > seg_; - image2d<value::rgb8> seg_rgb8_; - mln::util::array<bool> selected_; + image3d<value::int_u8> seg_; + value::int_u8 nlabels_; + image3d<value::rgb8> seg_rgb8_; + mln::util::array<box2d> bboxes_; + + mln::util::array<bool> fselected_; + mln::util::set<value::int_u8> selected_; + + int current_sli_; }; diff --git a/milena/sandbox/lazzara/igr/gui/src/widgets.cc b/milena/sandbox/lazzara/igr/gui/src/widgets.cc index 5968dc4..0171f61 100644 --- a/milena/sandbox/lazzara/igr/gui/src/widgets.cc +++ b/milena/sandbox/lazzara/igr/gui/src/widgets.cc @@ -1,3 +1,4 @@ // FIXME: UGLY!!! Avoir multiple definition of Milena's code. # include "src/display_seg.cc" # include "src/edit_seg.cc" +# include "src/display.cc" diff --git a/milena/sandbox/lazzara/igr/gui/ui/display.ui b/milena/sandbox/lazzara/igr/gui/ui/display.ui new file mode 100644 index 0000000..7766e27 --- /dev/null +++ b/milena/sandbox/lazzara/igr/gui/ui/display.ui @@ -0,0 +1,88 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Display</class> + <widget class="QWidget" name="Display"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Image</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="filepath"/> + </item> + <item> + <widget class="QPushButton" name="browseBtn"> + <property name="text"> + <string>&Browse</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>48</width> + <height>17</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="loadBtn"> + <property name="text"> + <string>&Load</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="mln::demo::image_viewer" name="viewer" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>mln::demo::image_viewer</class> + <extends>QWidget</extends> + <header>src/image_viewer.hh</header> + <container>1</container> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> diff --git a/milena/sandbox/lazzara/igr/gui/ui/main_window.ui b/milena/sandbox/lazzara/igr/gui/ui/main_window.ui index 75f3327..bab9d23 100644 --- a/milena/sandbox/lazzara/igr/gui/ui/main_window.ui +++ b/milena/sandbox/lazzara/igr/gui/ui/main_window.ui @@ -15,18 +15,23 @@ <widget class="QWidget" name="centralwidget" > <layout class="QGridLayout" name="gridLayout" > <item row="0" column="0" > - <widget class="QTabWidget" name="tabWidget" > + <widget class="QTabWidget" name="display" > <property name="currentIndex" > <number>0</number> </property> - <widget class="mln::demo::display_seg" name="Visualization" > + <widget class="mln::demo::display" name="display" > <attribute name="title" > - <string>Visualization</string> + <string>Display</string> </attribute> </widget> - <widget class="mln::demo::edit_seg" name="Edition" > + <widget class="mln::demo::display_seg" name="displaySeg" > <attribute name="title" > - <string>Edition</string> + <string>Display segmentation</string> + </attribute> + </widget> + <widget class="mln::demo::edit_seg" name="editSeg" > + <attribute name="title" > + <string>Edit segmentation</string> </attribute> </widget> </widget> @@ -58,6 +63,12 @@ <header>src/edit_seg.hh</header> <container>1</container> </customwidget> + <customwidget> + <class>mln::demo::display</class> + <extends>QWidget</extends> + <header>src/display.hh</header> + <container>1</container> + </customwidget> </customwidgets> <resources/> <connections/> diff --git a/scribo/headers.mk b/scribo/headers.mk index 6c8d0cf..15d9b2a 100644 --- a/scribo/headers.mk +++ b/scribo/headers.mk @@ -24,8 +24,9 @@ nobase_scribo_HEADERS = \ ./draw/bounding_boxes.hh \ ./estim/object_groups_v_thickness.hh \ ./filter/all.hh \ +./filter/common/object_groups_photo.hh \ +./filter/common/object_links_photo.hh \ ./filter/common/objects_photo.hh \ -./filter/object_groups_size_ratio.hh \ ./filter/object_groups_small.hh \ ./filter/object_groups_v_thickness.hh \ ./filter/object_links_bbox_h_ratio.hh \ @@ -37,13 +38,10 @@ nobase_scribo_HEADERS = \ ./filter/object_links_non_aligned_simple.hh \ ./filter/object_links_non_h_aligned.hh \ ./filter/object_links_non_v_aligned.hh \ -./filter/objects_h_thin.hh \ ./filter/objects_large.hh \ -./filter/objects_size_ratio.hh \ ./filter/objects_small.hh \ ./filter/objects_thick.hh \ ./filter/objects_thin.hh \ -./filter/objects_v_thin.hh \ ./fun/v2b/objects_small_filter.hh \ ./make/all.hh \ ./make/debug_filename.hh \ @@ -82,7 +80,6 @@ nobase_scribo_HEADERS = \ ./primitive/internal/find_root.hh \ ./primitive/internal/have_link_valid.hh \ ./primitive/internal/init_link_array.hh \ -./primitive/internal/is_invalid_link.hh \ ./primitive/internal/is_link_valid.hh \ ./primitive/internal/update_graph_link.hh \ ./primitive/internal/update_link_array.hh \ -- 1.5.6.5
participants (1)
-
Guillaume Lazzara