32 #include "DGtal/base/Common.h"
33 #include "DGtal/helpers/StdDefs.h"
34 #include "DGtal/images/ImageContainerBySTLVector.h"
38 #include "DGtal/images/ImageAdapter.h"
39 #include "DGtal/io/colormaps/GrayscaleColorMap.h"
40 #include "DGtal/io/readers/PNMReader.h"
41 #include "DGtal/io/boards/Board2D.h"
43 #include "ConfigTest.h"
47 using namespace DGtal;
54 unsigned int nbok = 0;
62 for (VImage::Iterator it = image.begin(); it != image.end(); ++it)
65 trace.
info() <<
"Original image: " << image << endl;
74 MyImageAdapter restimage(image, domain, idD, idV, idVm1);
75 trace.
info() <<
"Restricted Image: " << restimage <<
" " << restimage.domain() << std::endl;
77 nbok += (restimage(
Z2i::Point(3,3)) == 10) ? 1 : 0;
79 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
80 <<
" read access on restricted Image" << endl;
83 nbok += (restimage(
Z2i::Point(3,3)) == 5) ? 1 : 0;
85 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
86 <<
" write on restricted Image" << endl;
90 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
91 <<
" written on original image" << endl;
107 template <
typename TValue>
128 template <
typename TInput>
130 Value operator()(
const TInput& aInput)
const
132 return aInput+myValue;
145 unsigned int nbok = 0;
153 for (VImage::Iterator it = image.begin(); it != image.end(); ++it)
156 trace.
info() <<
"Original image: " << image << endl;
165 MyImageAdapter restimage(image, domain, idD, idV, idVm1);
166 trace.
info() <<
"Restricted Image: " << restimage <<
" " << restimage.domain() << std::endl;
168 nbok += (restimage(
Z2i::Point(3,3)) == 3) ? 1 : 0;
170 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
171 <<
" read access on restricted Image" << endl;
179 MyImageAdapter2 restimage2(image, domain, idD_2, idV_2, idVm1_2);
183 nbok += (restimage2(
Z2i::Point(2,2)) == 1) ? 1 : 0;
185 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
186 <<
" write on restricted Image 2" << endl;
192 nbok += (restimage2(
Z2i::Point(2,2)) == 0) ? 1 : 0;
194 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
195 <<
" write on restricted Image 2" << endl;
203 DefaultFunctor idV_3;
204 DefaultFunctor idVm1_3;
206 MyImageAdapter3 restimage3(image, domain, idD_3, idV_3, idVm1_3);
209 nbok += (image(
Z2i::Point(4,4)) == 5) ? 1 : 0;
211 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
212 <<
" write on restricted Image 3" << endl;
223 bool test_range_constRange()
225 unsigned int nbok = 0;
233 for (VImage::Iterator it = image.begin(); it != image.end(); ++it)
236 trace.
info() <<
"Original image: " << image << endl;
245 MyImageAdapter restimage(image, domain, idD, idV, idVm1);
246 trace.
info() <<
"Restricted Image: " << restimage <<
" " << restimage.domain() << std::endl;
249 const int maximalValue = domain.size();
250 MyImageAdapter::Range::OutputIterator it = restimage.range().outputIterator();
251 for (
int i = 0; i < maximalValue; ++i)
255 MyImageAdapter::ConstRange r = restimage.constRange();
256 std::copy( r.begin(), r.end(), std::ostream_iterator<int>(cout,
", ") );
259 std::vector<int> to_vector(9);
260 std::copy(r.begin(), r.end(), to_vector.begin());
261 for (
int i = 0; i < 9; i++)
266 nbok +=
true ? 1 : 0; nb++;
271 nbok +=
false ? 1 : 0; nb++;
282 bool testImageAdapter()
284 unsigned int nbok = 0;
292 string filename = testPath +
"samples/church-small.pgm";
294 trace.
info() <<
"Imported image: " << image << endl;
298 Display2DFactory::drawImage<Gray>(aBoard, image, (
unsigned char)0, (
unsigned char)255);
301 aBoard.saveCairo(
"church.png", Board2D::CairoPNG);
307 nbok +=
true ? 1 : 0;
317 MyImageAdapter bell_tower(image, domain_bell_tower, idbtD, idbtV, idbtVm1);
320 trace.
info() <<
"ImageAdapter: " << bell_tower <<
" " << bell_tower.domain() << std::endl;
322 nbok += bell_tower.isValid() ? 1 : 0;
326 Display2DFactory::drawImage<Gray>(aBoard, bell_tower, (
unsigned char)0, (
unsigned char)255);
327 aBoard.saveSVG(
"bell_tower.svg");
329 aBoard.saveCairo(
"bell_tower.png", Board2D::CairoPNG);
340 MyImageAdapter cars(image, domain_cars, idcD, idcV, idcVm1);
342 trace.
info() <<
"ImageAdapter: " << cars <<
" " << cars.domain() << std::endl;
344 nbok += cars.isValid() ? 1 : 0;
348 Display2DFactory::drawImage<Gray>(aBoard, cars, (
unsigned char)0, (
unsigned char)255);
349 aBoard.saveSVG(
"cars.svg");
351 aBoard.saveCairo(
"cars.png", Board2D::CairoPNG);
355 typename MyImageAdapter::Domain::ConstIterator bt_it = bell_tower.domain().begin();
356 typename MyImageAdapter::Domain::ConstIterator bt_itEnd = bell_tower.domain().end();
357 for (; bt_it != bt_itEnd; ++bt_it)
359 bell_tower.setValue(*bt_it, 255);
363 Display2DFactory::drawImage<Gray>(aBoard, bell_tower, (
unsigned char)0, (
unsigned char)255);
364 aBoard.saveSVG(
"bell_tower_after_filling.svg");
366 aBoard.saveCairo(
"bell_tower_after_filling.png", Board2D::CairoPNG);
370 typename MyImageAdapter::Domain::ConstIterator c_it = cars.domain().begin();
371 typename MyImageAdapter::Domain::ConstIterator c_itEnd = cars.domain().end();
372 for (; c_it != c_itEnd; ++c_it)
374 cars.setValue(*c_it, 55);
378 Display2DFactory::drawImage<Gray>(aBoard, cars, (
unsigned char)0, (
unsigned char)255);
379 aBoard.saveSVG(
"cars_after_filling.svg");
381 aBoard.saveCairo(
"cars_after_filling.png", Board2D::CairoPNG);
395 it != domain_floor_lamp.end();
399 mySet.insertNew( *it );
408 DefaultFunctor idflD, idflV, idflVm1;
409 MyImageAdapter2 floor_lamp(image, my_specific_domain_floor_lamp, idflD, idflV, idflVm1);
412 trace.
info() <<
"ImageAdapter: " << floor_lamp <<
" " << floor_lamp.domain() << std::endl;
414 nbok += floor_lamp.isValid() ? 1 : 0;
418 Display2DFactory::drawImage<Gray>(aBoard, floor_lamp, (
unsigned char)0, (
unsigned char)255);
419 aBoard.saveSVG(
"floor_lamp.svg");
421 aBoard.saveCairo(
"floor_lamp.png", Board2D::CairoPNG);
424 typename MyImageAdapter2::Domain::ConstIterator f_it = floor_lamp.domain().begin();
425 typename MyImageAdapter2::Domain::ConstIterator f_itEnd = floor_lamp.domain().end();
426 for (; f_it != f_itEnd; ++f_it)
428 floor_lamp.setValue(*f_it, 0);
432 Display2DFactory::drawImage<Gray>(aBoard, floor_lamp, (
unsigned char)0, (
unsigned char)255);
433 aBoard.saveSVG(
"floor_lamp_after_filling.svg");
435 aBoard.saveCairo(
"floor_lamp_after_filling.png", Board2D::CairoPNG);
439 Display2DFactory::drawImage<Gray>(aBoard, image, (
unsigned char)0, (
unsigned char)255);
440 aBoard.saveSVG(
"church_after_filling.svg");
442 aBoard.saveCairo(
"church_after_filling.png", Board2D::CairoPNG);
445 trace.
info() <<
"(" << nbok <<
"/" << nb <<
") "
446 <<
"true == true" << endl;
456 int main(
int argc,
char** argv )
460 for (
int i = 0; i < argc; ++i )
464 bool res = testSimple() && test_g_f_fm1() && test_range_constRange() && testImageAdapter();
466 trace.
emphase() << ( res ?
"Passed." :
"Error." ) << endl;