45 #include "DGtal/base/Common.h" 46 #include "DGtal/helpers/StdDefs.h" 47 #include "DGtal/io/colormaps/GrayscaleColorMap.h" 48 #include "DGtal/io/colormaps/HueShadeColorMap.h" 49 #include "DGtal/io/colormaps/TickedColorMap.h" 50 #include "DGtal/io/colormaps/GradientColorMap.h" 51 #include "DGtal/io/boards/Board2D.h" 52 #include "DGtal/images/ImageSelector.h" 53 #include "DGtal/images/SimpleThresholdForegroundPredicate.h" 54 #include "DGtal/geometry/volumes/distance/DistanceTransformation.h" 64 using namespace DGtal;
75 for (
Image::Iterator it = image.begin(), itend = image.end();it != itend; ++it)
79 image.setValue(
Point(16,2), 0);
80 image.setValue(
Point(2,11), 0);
81 image.setValue(
Point(30,15), 0);
89 Display2DFactory::drawImage<Gray>(board, image, (
unsigned int)0, (
unsigned int)129);
90 board.
saveSVG(
"toric-inputShape.svg");
95 PointPredicate predicate(image,0);
103 DTL2 dtL2(image.domain(), predicate, l2Metric);
105 DTL2Toric dtL2Toric(image.domain(), predicate, l2Metric, {{
true,
true}} );
113 DTL2ToricX dtL2ToricX( image.domain(), predicate, l2Metric, {{
true,
false}} );
115 DTL2ToricY dtL2ToricY( image.domain(), predicate, l2Metric, {{
false,
true}} );
119 const DTL2::Value maxv2 = * (std::max_element(dtL2.constRange().begin(), dtL2.constRange().end()));
120 const DTL2Toric::Value maxvtoric = * (std::max_element(dtL2Toric.constRange().begin(), dtL2Toric.constRange().end()));
121 const DTL2ToricX::Value maxvtoricX = * (std::max_element(dtL2ToricX.constRange().begin(), dtL2ToricX.constRange().end()));
122 const DTL2ToricY::Value maxvtoricY = * (std::max_element(dtL2ToricY.constRange().begin(), dtL2ToricY.constRange().end()));
125 const auto maxvall =
std::max( { maxv2, maxvtoric, maxvtoricX, maxvtoricY } );
134 Display2DFactory::drawImage<HueTwice>(board, dtL2, 0.0, maxvall + 1);
135 board.
saveSVG (
"toric-example-DT-L2.svg" );
137 trace.
warning() <<
"Full toric maxValue= " << maxvtoric << endl;
139 Display2DFactory::drawImage<HueTwice>(board, dtL2Toric, 0.0, maxvall + 1);
140 board.
saveSVG (
"toric-example-DT-L2-toric.svg" );
142 trace.
warning() <<
"1th dimension periodic maxValue= " << maxvtoricX << endl;
144 Display2DFactory::drawImage<HueTwice>(board, dtL2ToricX, 0.0, maxvall + 1);
145 board.
saveSVG (
"toric-example-DT-L2-toricX.svg" );
147 trace.
warning() <<
"2nd dimension periodic maxValue= " << maxvtoricY << endl;
149 Display2DFactory::drawImage<HueTwice>(board, dtL2ToricY, 0.0, maxvall + 1);
150 board.
saveSVG (
"toric-example-DT-L2-toricY.svg" );
157 ticked.
colormap()->addColor( Color::Red );
158 ticked.
colormap()->addColor( Color::Black );
160 for (
auto it = dtL2.domain().begin(), itend = dtL2.domain().end();it != itend; ++it)
165 board.
saveSVG(
"toric-example-DT-L2-ticked.svg");
168 for (
auto it = dtL2Toric.domain().begin(), itend = dtL2Toric.domain().end();it != itend; ++it)
173 board.
saveSVG(
"toric-example-DT-L2-ticked-toric.svg");
176 for (
auto it = dtL2ToricX.domain().begin(), itend = dtL2ToricX.domain().end();it != itend; ++it)
181 board.
saveSVG(
"toric-example-DT-L2-ticked-toricX.svg");
184 for (
auto it = dtL2ToricY.domain().begin(), itend = dtL2ToricY.domain().end();it != itend; ++it)
189 board.
saveSVG(
"toric-example-DT-L2-ticked-toricY.svg");
193 board << dtL2.domain();
194 for (
auto it = dtL2.domain().begin(), itend = dtL2.domain().end();it != itend; ++it)
195 if ( dtL2.getVoronoiVector(*it) != *it )
197 board.
saveSVG(
"toric-example-Voro-L2.svg");
200 board << dtL2Toric.domain();
201 for (
auto it = dtL2Toric.domain().begin(), itend = dtL2Toric.domain().end();it != itend; ++it)
202 if ( dtL2Toric.getVoronoiVector(*it) != *it )
204 board.
saveSVG(
"toric-example-Voro-L2-toric.svg");
207 board << dtL2Toric.domain();
208 for (
auto it = dtL2Toric.domain().begin(), itend = dtL2Toric.domain().end();it != itend; ++it)
209 if ( dtL2Toric.getVoronoiVector(*it) != *it )
211 board.
saveSVG(
"toric-example-Voro-L2-toric-projected.svg");
214 board << dtL2ToricX.domain();
215 for (
auto it = dtL2ToricX.domain().begin(), itend = dtL2ToricX.domain().end();it != itend; ++it)
216 if ( dtL2ToricX.getVoronoiVector(*it) != *it )
218 board.
saveSVG(
"toric-example-Voro-L2-toricX.svg");
221 board << dtL2ToricY.domain();
222 for (
auto it = dtL2ToricY.domain().begin(), itend = dtL2ToricY.domain().end();it != itend; ++it)
223 if ( dtL2ToricY.getVoronoiVector(*it) != *it )
225 board.
saveSVG(
"toric-example-Voro-L2-toricY.svg");
void beginBlock(const std::string &keyword="")
HyperRectDomain< Space > Domain
std::vector< Value >::iterator Iterator
Aim: implements association bewteen points lying in a digital domain and values.
Custom style class redefining the pen color and the fill color. You may use Board2D::Color::None for ...
Aim: This class template may be used to (linearly) convert scalar values in a given range into a colo...
void saveSVG(const char *filename, PageSize size=Board::BoundingBox, double margin=10.0) const
ColorMap * colormap() const
Aim: This class template may be used to (linearly) convert scalar values in a given range into gray l...
Aim: Define a simple Foreground predicate thresholding image values given a single thresold....
void clear(const DGtal::Color &color=DGtal::Color::None)
void addRegularTicks(const unsigned int nbTicks, const Value thickness)
DGtal is the top-level namespace which contains all DGtal functions and types.
ImageContainerBySTLVector< Domain, Value > Image
Aim: This class adapts any colormap to add "ticks" in the colormap colors.
void draw(const Iterator &itb, const Iterator &ite, Board &aBoard)
Aim: This class specializes a 'Board' class so as to display DGtal objects more naturally (with <<)....