DGtalTools 2.1.0
Loading...
Searching...
No Matches
volAddBorder.cpp
1
27#include <iostream>
28#include <DGtal/base/Common.h>
29#include <DGtal/io/readers/VolReader.h>
30#include <DGtal/io/writers/VolWriter.h>
31#include <DGtal/helpers/StdDefs.h>
32#include <DGtal/images/Image.h>
33#include <DGtal/images/ImageContainerBySTLVector.h>
34
35#include "CLI11.hpp"
36
37using namespace std;
38using namespace DGtal;
39using namespace Z3i;
40
84void missingParam ( std::string param )
85{
86 trace.error() <<" Parameter: "<<param<<" is required..";
87 trace.info() <<std::endl;
88 exit ( 1 );
89}
90
91
92int main(int argc, char**argv)
93{
94
95 // parse command line using CLI ----------------------------------------------
96 CLI::App app;
97 std::string inputFileName;
98 std::string outputFileName {"result.vol"};
99 bool addInside {false};
100
101 app.description("Add a border of one voxel with value 0 around a vol file.\n \tvolAddBorder --input <volFileName> --o <volOutputFileName>\n Example: \n \t volAddBorder -i $DGtal/examples/samples/Al.100.vol -o Al.100border.vol");
102
103 app.add_option("-i,--input,1", inputFileName, "Input vol file." )
104 ->required()
105 ->check(CLI::ExistingFile);
106 app.add_flag("--inside", addInside , "Sets zero value to domain boundary voxels without changing the domain extent.");
107 app.add_option("--output,-o,2", outputFileName, "Output filename.");
108
109 app.get_formatter()->column_width(40);
110 CLI11_PARSE(app, argc, argv);
111 // END parse command line using CLI ----------------------------------------------
112
113
114 typedef ImageContainerBySTLVector<Z3i::Domain, unsigned char> MyImageC;
115
116 MyImageC imageC = VolReader< MyImageC >::importVol ( inputFileName );
117 Z3i::Domain rDom ( imageC.domain().lowerBound() - Vector().diagonal(addInside ? 0: 1),
118 imageC.domain().upperBound() + Vector().diagonal(addInside ? 0: 1));
119 MyImageC outputImage(rDom);
120 Z3i::Domain iDom ( imageC.domain().lowerBound() + Vector().diagonal( 1),
121 imageC.domain().upperBound() - Vector().diagonal( 1));
122
123 //Fast Copy
124 for(MyImageC::Domain::ConstIterator it = imageC.domain().begin(),
125 itend = imageC.domain().end(); it != itend; ++it){
126 if(!addInside){
127 outputImage.setValue( *it , imageC(*it));
128 }
129 else
130 {
131 if (!iDom.isInside(*it)){
132 imageC.setValue( *it , 0);
133 }
134 }
135
136 }
137 bool res = true;
138 if (!addInside) {
139 res= VolWriter< MyImageC>::exportVol(outputFileName, outputImage);
140 }
141 else{
142 res= VolWriter< MyImageC>::exportVol(outputFileName, imageC);
143 }
144 if (res) return 0; else return 1;
145}
DGtal::LinearOperator< Calculus, dim, duality, dim, duality > diagonal(const DGtal::KForm< Calculus, dim, duality > &kform)
Definition ATu0v1.h:57