DGtal  1.5.beta
ctopo-2-3d.cpp File Reference
#include <iostream>
#include "DGtal/base/Common.h"
#include "DGtal/helpers/StdDefs.h"
#include "DGtal/topology/KhalimskySpaceND.h"
#include "DGtal/topology/helpers/Surfaces.h"
#include "DGtal/io/viewers/Viewer3D.h"
#include "DGtal/io/readers/VolReader.h"
#include "DGtal/io/DrawWithDisplay3DModifier.h"
#include "DGtal/images/ImageSelector.h"
#include "DGtal/images/imagesSetsUtils/SetFromImage.h"
#include "DGtal/io/Color.h"
#include "DGtal/io/colormaps/GradientColorMap.h"
#include "ConfigExamples.h"
Include dependency graph for ctopo-2-3d.cpp:

Go to the source code of this file.

Functions

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
Bertrand Kerautret (kerau.nosp@m.tre@.nosp@m.loria.nosp@m..fr ) LORIA (CNRS, UMR 7503), University of Nancy, France
Date
2011/05/22

An example file named ctopo-2-3d.

This file is part of the DGtal library.

Definition in file ctopo-2-3d.cpp.

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 53 of file ctopo-2-3d.cpp.

54 {
55  trace.beginBlock ( "Example ctopo-2-3d" );
56  // for 3D display with Viewer3D
57  QApplication application(argc,argv);
58 
60  std::string inputFilename = examplesPath + "samples/cat10.vol";
61  Image image = VolReader<Image>::importVol(inputFilename);
62  Z3i::DigitalSet set3d (image.domain());
64 
65  // Construct the Khalimsky space from the image domain
66  Z3i::KSpace ks;
67  bool space_ok = ks.init( image.domain().lowerBound(), image.domain().upperBound(), true );
68 
69  if (!space_ok)
70  {
71  trace.error() << "Error in the Khamisky space construction."<<std::endl;
72  return 2;
73  }
74 
75  std::vector<Z3i::SCell> vectBdrySCell;
76  std::vector<Z3i::SCell> vectBdrySCell2;
77  std::set<Z3i::SCell> vectBdrySCellALL;
78  SurfelAdjacency<3> SAdj( true );
79 
80 
81 
82  //Extract an initial boundary cell
84  trace.info() << "Tracking Boundary.."<<std::endl;
85  // Extracting all boundary surfels which are connected to the initial boundary Cell.
86  Surfaces<Z3i::KSpace>::trackBoundary( vectBdrySCellALL,
87  ks,SAdj, set3d, aCell );
88 
89  // Extract the bondary contour associated to the initial surfel in its first direction
91  ks, *(ks.sDirs( aCell )), SAdj,
92  set3d, aCell );
93 
94  // Extract the bondary contour associated to the initial surfel in its second direction
96  ks, *(++(ks.sDirs( aCell ))), SAdj,
97  set3d, aCell );
98 
99 
100  // Displaying all the surfels in transparent mode
102  MyViewer viewer(ks);
103  viewer.show();
104 
105  trace.info() << "Displaying the surfels.."<<std::endl;
106  viewer << SetMode3D((*(vectBdrySCellALL.begin())).className(), "Transparent");
107  for( std::set<Z3i::SCell>::iterator it=vectBdrySCellALL.begin();
108  it!= vectBdrySCellALL.end(); it++){
109  viewer<< *it;
110  }
111  trace.info()<<"done"<<std::endl;
112  // Displaying First surfels cut with gradient colors.;
113  GradientColorMap<int> cmap_grad(0, (const int)vectBdrySCell2.size());
114  cmap_grad.addColor( Color( 50, 50, 255 ) );
115  cmap_grad.addColor( Color( 255, 0, 0 ) );
116  cmap_grad.addColor( Color( 255, 255, 10 ) );
117 
118  // Need to avoid surfel superposition (the surfel size in increased)
119  viewer << Viewer3D<Z3i::Space,Z3i::KSpace>::shiftSurfelVisu;
120  viewer << SetMode3D((*(vectBdrySCell2.begin())).className(), "");
121  viewer.setFillColor(Color(180, 200, 25, 255));
122 
123  int d=0;
124  for( std::vector<Z3i::SCell>::iterator it=vectBdrySCell2.begin();
125  it!= vectBdrySCell2.end(); it++){
126  Color col= cmap_grad(d);
127  viewer.setFillColor(Color(col.red(),col.green() ,col.blue(), 255));
128  viewer<< *it;
129  d++;
130  }
131 
132  GradientColorMap<int> cmap_grad2(0, (const int)vectBdrySCell.size());
133  cmap_grad2.addColor( Color( 50, 50, 255 ) );
134  cmap_grad2.addColor( Color( 255, 0, 0 ) );
135  cmap_grad2.addColor( Color( 255, 255, 10 ) );
136  viewer << Viewer3D<>::shiftSurfelVisu;
137 
138  d=0;
139  for( std::vector<Z3i::SCell>::iterator it=vectBdrySCell.begin();
140  it!= vectBdrySCell.end(); it++){
141  Color col= cmap_grad2(d);
142  viewer.setFillColor(Color(col.red(),col.green() ,col.blue(), 255));
143  viewer<< *it;
144  d++;
145  }
146 
147  // On need once again to avoid superposition.
148  viewer << MyViewer::shiftSurfelVisu;
149  viewer.setFillColor(Color(18, 200, 25, 255));
150  viewer << aCell ;
151  viewer << MyViewer::updateDisplay;
152 
153  return application.exec();
154 }
Structure representing an RGB triple with alpha component.
Definition: Color.h:68
void green(const unsigned char aGreenValue)
void red(const unsigned char aRedValue)
void blue(const unsigned char aBlueValue)
Aim: A wrapper class around a STL associative container for storing sets of digital points within som...
Aim: This class template may be used to (linearly) convert scalar values in a given range into a colo...
Aim: implements association bewteen points lying in a digital domain and values.
Definition: Image.h:70
Aim: This class is a model of CCellularGridSpaceND. It represents the cubical grid as a cell complex,...
bool init(const Point &lower, const Point &upper, bool isClosed)
Specifies the upper and lower bounds for the maximal cells in this space.
DirIterator sDirs(const SCell &p) const
Given a signed cell [p], returns an iterator to iterate over each coordinate the cell spans.
Aim: A utility class for constructing surfaces (i.e. set of (n-1)-cells).
Definition: Surfaces.h:79
Aim: Represent adjacencies between surfel elements, telling if it follows an interior to exterior ord...
std::ostream & error()
void beginBlock(const std::string &keyword="")
std::ostream & info()
Trace trace
Definition: Common.h:153
Aim: Define utilities to convert a digital set into an image.
Definition: SetFromImage.h:64
Modifier class in a Display3D stream. Useful to choose your own mode for a given class....
Represents a signed cell in a cellular grid space by its Khalimsky coordinates and a boolean value.
Aim: implements methods to read a "Vol" file format.
Definition: VolReader.h:90
ImageContainerBySTLVector< Domain, Value > Image

References DGtal::GradientColorMap< PValue, PDefaultPreset, PDefaultFirstColor, PDefaultLastColor >::addColor(), DGtal::Trace::beginBlock(), DGtal::Color::blue(), DGtal::Trace::error(), DGtal::Color::green(), DGtal::Trace::info(), DGtal::KhalimskySpaceND< dim, TInteger >::init(), DGtal::Color::red(), DGtal::KhalimskySpaceND< dim, TInteger >::sDirs(), DGtal::Display3D< Space, KSpace >::setFillColor(), DGtal::Viewer3D< TSpace, TKSpace >::show(), and DGtal::trace.