+ // IO
+ InputImageType::Pointer input=coeffs[0];
+ std::vector<itk::Image<itk::Vector<double, 3>, 3>::Pointer > new_coeffs;
+
+ // Split vector field
+ typedef itk::ExtractImageFilter<InputImageType,OutputImageType> FilterType;
+ unsigned int splitDimension=3;
+
+ // Make new file names
+ std::vector<std::string> new_filenames;
+ std::string base = filenames[0];
+
+ // Set the extract region
+ InputImageType::SizeType size=input->GetLargestPossibleRegion().GetSize();
+ size[splitDimension]=0;
+ InputImageType::RegionType extracted_region;
+ extracted_region.SetSize(size);
+ InputImageType::IndexType index=input->GetLargestPossibleRegion().GetIndex();
+
+
+ // Loop
+ for (unsigned int i=0;i<input->GetLargestPossibleRegion().GetSize()[splitDimension];i++)
+ {
+
+ // Skip?
+ if (m_ArgsInfo.skip_given && i==(unsigned int) m_ArgsInfo.skip_arg) continue;
+
+ // extract dvf
+ FilterType::Pointer filter= FilterType::New();
+ filter->SetInput(input);
+ index[splitDimension]=i;
+ extracted_region.SetIndex(index);
+ filter->SetExtractionRegion(extracted_region);
+ filter->Update();
+ new_coeffs.push_back(filter->GetOutput());
+
+ // make name
+ std::ostringstream number_dvf;
+ number_dvf << i;
+ std::string number = number_dvf.str();
+ new_filenames.push_back(base+"_"+number);
+ }
+
+ // Update
+ this->UpdateCoeffsWithDim<3>(new_coeffs, new_filenames);
+
+ }