17 static std::vector<double>
splitDouble(std::string str,
char delimiter) {
18 std::vector<double>
internal;
19 std::stringstream ss(str);
22 while (getline(ss, tok, delimiter)) {
23 std::stringstream s2(tok);
25 internal.push_back(val);
31 static std::vector<unsigned int>
splitUInt(std::string str,
char delimiter) {
32 std::vector<unsigned int>
internal;
33 std::stringstream ss(str);
36 while (getline(ss, tok, delimiter)) {
37 std::stringstream s2(tok);
39 internal.push_back(val);
45 int main(
int argc,
char* argv[])
65 std::map<std::string, us::Any> parsedArgs = parser.
parseArguments(argc, argv);
67 if (parsedArgs.size() == 0)
71 if (parsedArgs.count(
"help") || parsedArgs.count(
"h"))
77 if (parsedArgs.count(
"single-rate") + parsedArgs.count(
"class-rate") + parsedArgs.count(
"single-number") + parsedArgs.count(
"class-number") < 1)
79 std::cout <<
"Please specify the sampling rate or number of voxels to be labeled" << std::endl << std::endl;
84 if (parsedArgs.count(
"single-rate") + parsedArgs.count(
"class-rate") + parsedArgs.count(
"single-number") + parsedArgs.count(
"class-number") > 2)
86 std::cout <<
"Please specify only one way for the sampling rate or number of voxels to be labeled" << std::endl << std::endl;
92 std::string inputName =
us::any_cast<std::string>(parsedArgs[
"input"]);
93 std::string outputName =
us::any_cast<std::string>(parsedArgs[
"output"]);
97 filter->SetInput(image);
99 if (parsedArgs.count(
"single-rate"))
102 auto rate =
splitDouble(parsedArgs[
"single-rate"].ToString(),
';');
103 if (rate.size() != 1)
105 std::cout <<
"Please specify a single double value for single-rate, for example 0.3." << std::endl << std::endl;
109 filter->SetAcceptanceRate(rate[0]);
112 else if (parsedArgs.count(
"class-rate"))
115 auto rate =
splitDouble(parsedArgs[
"class-rate"].ToString(),
';');
118 std::cout <<
"Please specify at least two, semicolon separated values for class-rate, for example '0.3;0.2' ." << std::endl << std::endl;
122 filter->SetAcceptanceRateVector(rate);
125 else if (parsedArgs.count(
"single-number"))
128 auto rate =
splitUInt(parsedArgs[
"single-number"].ToString(),
';');
129 if (rate.size() != 1)
131 std::cout <<
"Please specify a single double value for single-number, for example 100." << std::endl << std::endl;
135 filter->SetNumberOfSamples(rate[0]);
138 else if (parsedArgs.count(
"class-number"))
141 auto rate =
splitUInt(parsedArgs[
"class-number"].ToString(),
';');
144 std::cout <<
"Please specify at least two, semicolon separated values for class-number, for example '100;200' ." << std::endl << std::endl;
148 filter->SetNumberOfSamplesVector(rate);
static std::vector< double > splitDouble(std::string str, char delimiter)
void setContributor(std::string contributor)
ValueType * any_cast(Any *operand)
void addArgument(const std::string &longarg, const std::string &shortarg, Type type, const std::string &argLabel, const std::string &argHelp=std::string(), const us::Any &defaultValue=us::Any(), bool optional=true, bool ignoreRest=false, bool deprecated=false, mitkCommandLineParser::Channel channel=mitkCommandLineParser::Channel::None)
std::map< std::string, us::Any > parseArguments(const StringContainerType &arguments, bool *ok=nullptr)
std::string helpText() const
void setCategory(std::string category)
mitk::Image::Pointer image
void setArgumentPrefix(const std::string &longPrefix, const std::string &shortPrefix)
static void Save(const mitk::BaseData *data, const std::string &path, bool setPathProperty=false)
Save a mitk::BaseData instance.
int main(int argc, char *argv[])
void setTitle(std::string title)
static std::vector< unsigned int > splitUInt(std::string str, char delimiter)
void setDescription(std::string description)