DGtal  1.4.beta
testImage.cpp File Reference
#include <cstdio>
#include <cmath>
#include <iostream>
#include "DGtal/base/Common.h"
#include "DGtal/kernel/SpaceND.h"
#include "DGtal/kernel/domains/HyperRectDomain.h"
#include "DGtal/images/CImage.h"
#include "DGtal/images/ImageContainerBySTLVector.h"
#include "DGtal/images/ImageContainerBySTLMap.h"
#include "DGtal/images/ImageContainerByHashTree.h"
#include "DGtal/images/Image.h"
Include dependency graph for testImage.cpp:

Go to the source code of this file.

Functions

template<typename Image >
bool testImage (const Image &aImage)
 
int main (int argc, char **argv)
 

Detailed Description

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Author
David Coeurjolly (david.nosp@m..coe.nosp@m.urjol.nosp@m.ly@l.nosp@m.iris..nosp@m.cnrs.nosp@m..fr )
Date
2010/05/25
Author
Tristan Roussillon (trist.nosp@m.an.r.nosp@m.oussi.nosp@m.llon.nosp@m.@liri.nosp@m.s.cn.nosp@m.rs.fr ) Laboratoire d'InfoRmatique en Image et Systèmes d'information - LIRIS (CNRS, UMR 5205), CNRS, France
Date
2012/02/13

This file is part of the DGtal library

Definition in file testImage.cpp.

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)

domain

image types

tests

Definition at line 145 of file testImage.cpp.

146 {
147 
148  trace.beginBlock ( "Testing image classes" );
149  trace.info() << "Args:";
150  for ( int i = 0; i < argc; ++i )
151  trace.info() << " " << argv[ i ];
152  trace.info() << endl;
153 
155  typedef DGtal::int64_t Integer;
156  typedef SpaceND<2,Integer> Space;
157  typedef Space::Point Point;
159 
160  const Integer size = 5;
161  Point p = Point::diagonal(0);
162  Point q = Point::diagonal(size-1);
163  Domain d(p,q);
164 
166  typedef short Value;
169  // TODO typedef experimental::ImageContainerByHashTree<Domain,Value> HImage;
170  // TODO typedef Image<VImage > LImage;
171 
173  VImage vi(d);
174  bool res = testImage(vi);
175 
176  MImage mi(d);
177  res = res && testImage(mi);
178 
179  // TODO
180  // HImage hi(3, p, q, 0);
181  // res = res && testImage(hi);
182 
183  // LImage li( new VImage(d) );
184  // res = res && testImage(li);
185 
186  trace.emphase() << ( res ? "Passed." : "Error." ) << endl;
187  trace.endBlock();
188  return res ? 0 : 1;
189 }
void beginBlock(const std::string &keyword="")
std::ostream & emphase()
std::ostream & info()
double endBlock()
boost::int64_t int64_t
signed 94-bit integer.
Definition: BasicTypes.h:74
Trace trace
Definition: Common.h:153
MyPointD Point
Definition: testClone2.cpp:383
bool testImage(const Image &aImage)
Definition: testImage.cpp:57
HyperRectDomain< Space > Domain

References DGtal::Trace::beginBlock(), DGtal::Trace::emphase(), DGtal::Trace::endBlock(), DGtal::Trace::info(), testImage(), and DGtal::trace.

◆ testImage()

template<typename Image >
bool testImage ( const Image aImage)

Image tests.

Definition at line 57 of file testImage.cpp.

58 {
59 
60  BOOST_CONCEPT_ASSERT(( concepts::CImage<Image> ));
61 
62  int nb = 0;
63  int nbok = 0;
64 
66  trace.beginBlock ( "Main services, range" );
67 
68  Image img(aImage);
69  Image img2 = img; //copy
70 
71  //fill
72  typename Image::Domain::ConstIterator dit = img.domain().begin();
73  typename Image::Domain::ConstIterator ditEnd = img.domain().end();
74  for (int i = 0; ( (dit != ditEnd)&&(i < 5) ); ++dit, ++i)
75  {
76  img.setValue(*dit, i);
77  }
78  Image img3(img2);
79  img3 = img; //assignment
80 
81  //ranges comparison
82  typename Image::ConstRange rimg = img.constRange();
83  typename Image::ConstRange rimg2 = img2.constRange();
84  typename Image::ConstRange rimg3 = img3.constRange();
85 
86  bool flag2 = std::equal(rimg.begin(), rimg.end(), rimg2.begin());
87  bool flag3 = std::equal(rimg.begin(), rimg.end(), rimg3.begin());
88  bool flag23 = std::equal(rimg2.begin(), rimg2.end(), rimg3.begin());
89 
90  nbok += ( (!flag2) && flag3 && (!flag23) )?1:0;
91  nb++;
92  trace.info() << "(" <<nbok << "/" << nb << ")" << std::endl;
93  trace.endBlock();
94 
96  trace.beginBlock ( "Output iterator" );
97  std::copy(rimg.begin(), rimg.end(), img2.range().outputIterator());
98 
99  //rimg2 is invalid if Image is a proxy image
100  //because its iterators point to the data of aImage
101  //instead of pointing to the data of img2
102  rimg2 = img2.constRange();
103  flag2 = std::equal(rimg.begin(), rimg.end(), rimg2.begin());
104  nbok += (flag2)?1:0;
105  nb++;
106  trace.info() << "(" <<nbok << "/" << nb << ")" << std::endl;
107  trace.endBlock();
108 
110  trace.beginBlock ( " Getters / setters " );
111  typename Image::Domain::Point p = img.domain().upperBound();
112 
113  //local comparison
114  img.setValue( p, 128 );
115  bool flag4 = ( img(p) == 128 );
116 
117  //range comparison
118  rimg = img.constRange();
119  rimg2 = img2.constRange();
120  rimg3 = img3.constRange();
121  std::copy( rimg.begin(), rimg.end(), std::ostream_iterator<int>(cout,", ") );
122  cout << endl;
123  flag2 = std::equal(rimg.begin(), rimg.end(), rimg2.begin());
124  std::copy( rimg2.begin(), rimg2.end(), std::ostream_iterator<int>(cout,", ") );
125  cout << endl;
126  flag3 = std::equal(rimg.begin(), rimg.end(), rimg3.begin());
127  std::copy( rimg3.begin(), rimg3.end(), std::ostream_iterator<int>(cout,", ") );
128  cout << endl;
129 
130  nbok += ( flag4 && (!flag2) && (!flag3) )?1:0;
131  nb++;
132  trace.info() << "(" <<nbok << "/" << nb << ")" << std::endl;
133  trace.endBlock();
134 
136  trace.beginBlock ( " Display " );
137  trace.info() << img << std::endl;
138  trace.info() << img2 << std::endl;
139  trace.info() << img3 << std::endl;
140  trace.endBlock();
141 
142  return ( img.isValid() && img2.isValid() && img3.isValid() && (nbok == nb) );
143 }
Aim: implements association bewteen points lying in a digital domain and values.
Definition: Image.h:70
Range range()
Definition: Image.h:214
const Domain & domain() const
Definition: Image.h:192
ConstRange constRange() const
Definition: Image.h:203
bool isValid() const
Definition: Image.h:266
Aim: model of CConstBidirectionalRangeFromPoint that adapts any range of elements bounded by two iter...
Aim: Defines the concept describing a read/write image, having an output iterator.
Definition: CImage.h:103

References DGtal::SimpleRandomAccessConstRangeFromPoint< TConstIterator, DistanceFunctor >::begin(), DGtal::Trace::beginBlock(), DGtal::Image< TImageContainer >::constRange(), DGtal::Image< TImageContainer >::domain(), DGtal::SimpleRandomAccessConstRangeFromPoint< TConstIterator, DistanceFunctor >::end(), DGtal::Trace::endBlock(), DGtal::Trace::info(), DGtal::Image< TImageContainer >::isValid(), DGtal::SimpleRandomAccessRangeFromPoint< TConstIterator, TIterator, DistanceFunctor >::outputIterator(), DGtal::Image< TImageContainer >::range(), and DGtal::trace.

Referenced by main().