create the filter that will be benchmarked
| 306 | } |
| 307 | // create the filter that will be benchmarked |
| 308 | static vtkThreadedImageAlgorithm* CreateFilter(const std::string& filterName, const int size[3]) |
| 309 | { |
| 310 | // filter name may be followed by colon and comma-separated args |
| 311 | std::vector<std::string> args; |
| 312 | size_t pos = filterName.find(':'); |
| 313 | if (pos == std::string::npos) |
| 314 | { |
| 315 | args.push_back(filterName); |
| 316 | } |
| 317 | else |
| 318 | { |
| 319 | args.push_back(filterName.substr(0, pos)); |
| 320 | do |
| 321 | { |
| 322 | pos++; |
| 323 | size_t endpos = filterName.find(':', pos); |
| 324 | args.push_back(filterName.substr(pos, endpos - pos)); |
| 325 | pos = endpos; |
| 326 | } while (pos != std::string::npos); |
| 327 | } |
| 328 | |
| 329 | //----- |
| 330 | // all the available filters and their options |
| 331 | //----- |
| 332 | if (args[0] == "median") |
| 333 | { |
| 334 | vtkSmartPointer<vtkImageMedian3D> filter = vtkSmartPointer<vtkImageMedian3D>::New(); |
| 335 | |
| 336 | int kernelsize = 3; |
| 337 | |
| 338 | if (args.size() > 1) |
| 339 | { |
| 340 | size_t n = args[1].find('='); |
| 341 | if (args[1].substr(0, n) != "kernelsize" || n == std::string::npos || |
| 342 | n + 1 == args[1].size() || args[1][n + 1] < '1' || args[1][n + 1] > '9' || args.size() > 2) |
| 343 | { |
| 344 | std::cerr << "median options: kernelsize=N\n"; |
| 345 | return nullptr; |
| 346 | } |
| 347 | std::string num = args[1].substr(n + 1); |
| 348 | VTK_FROM_CHARS_IF_ERROR_RETURN(num, kernelsize, nullptr); |
| 349 | } |
| 350 | |
| 351 | filter->SetKernelSize(kernelsize, kernelsize, kernelsize); |
| 352 | filter->Register(nullptr); |
| 353 | return filter; |
| 354 | } |
| 355 | //----- |
| 356 | else if (args[0] == "reslice") |
| 357 | { |
| 358 | vtkSmartPointer<vtkImageReslice> filter = vtkSmartPointer<vtkImageReslice>::New(); |
| 359 | |
| 360 | bool mask = false; |
| 361 | std::string kernel; |
| 362 | int kernelsize = 0; |
| 363 | double rotation[4] = { 0.0, 0.0, 0.0, 0.0 }; |
| 364 | |
| 365 | for (size_t k = 1; k < args.size(); k++) |
no test coverage detected