34 #include <mln/core/image/image2d.hh>
36 #include <mln/io/magick/load.hh>
38 #include <scribo/toolchain/content_in_hdoc.hh>
39 #include <scribo/toolchain/text_in_doc_preprocess.hh>
41 #include <scribo/core/document.hh>
43 #include <scribo/debug/usage.hh>
44 #include <scribo/debug/logger.hh>
46 #include <scribo/preprocessing/crop_without_localization.hh>
47 #include <scribo/preprocessing/crop.hh>
49 #include <scribo/io/xml/save.hh>
50 #include <scribo/io/img/save.hh>
53 #include <mln/core/alias/neighb2d.hh>
54 #include <mln/labeling/compute.hh>
55 #include <mln/labeling/foreground.hh>
56 #include <mln/util/timer.hh>
60 const char *args_desc[][2] =
62 {
"input.tif",
"An image." },
63 {
"output_dir",
"Output directory." },
69 int main(
int argc,
char* argv[])
71 using namespace scribo;
76 "Document Image Analysis in Historical Documents",
77 "input.tif output_dir",
103 const box2d& b = input.domain();
104 for_all_ncomponents(e, nlabels)
105 if (bbox(e).pmin().row() == b.pmin().row()
106 || bbox(e).pmax().row() == b.pmax().row()
107 || bbox(e).pmin().col() == b.pmin().col()
108 || bbox(e).pmax().col() == b.pmax().col())
109 data::
fill(((input_preproc | bbox(e)).rw() | (pw::
value(lbl) == pw::cst(e))).rw(), false);
114 std::
string language = "";
115 bool find_line_seps = true;
116 bool find_whitespace_seps = true;
121 std::cout << "Analysing
document..." << std::endl;
123 doc = scribo::toolchain::
content_in_hdoc(input, input_preproc, denoise,
124 find_line_seps, find_whitespace_seps,
125 !language.empty(), language);
127 doc.set_filename(basename(argv[1]));
130 image2d<
bool> output(input.domain());
131 for_all_paragraphs(p, par_set)
138 for (
unsigned i = 0; i < nelements; ++i)
141 const line_info<L>& current_line = par_set.lines()(line_id);
143 scribo::draw::line_components(output, par_set.lines(), current_line,
false);
146 std::stringstream ss;
147 ss << argv[2] <<
"/" << basename(argv[1]) <<
"." << p <<
".pbm";