54 int main(
int argc,
char *argv[])
59 std::cerr <<
"Missing parameters. " << std::endl;
60 std::cerr <<
"Usage: " << std::endl;
62 <<
" inputImageFile outputImageFile startX startY sizeX sizeY"
75 const unsigned int Dimension = 2;
77 typedef unsigned char PixelType;
96 ImageType::RegionType inputRegion;
98 ImageType::RegionType::IndexType inputStart;
99 ImageType::RegionType::SizeType size;
101 inputStart[0] = ::atoi(argv[3]);
102 inputStart[1] = ::atoi(argv[4]);
104 size[0] = ::atoi(argv[5]);
105 size[1] = ::atoi(argv[6]);
107 inputRegion.SetSize(size);
108 inputRegion.SetIndex(inputStart);
120 ImageType::RegionType outputRegion;
122 ImageType::RegionType::IndexType outputStart;
127 outputRegion.SetSize(size);
128 outputRegion.SetIndex(outputStart);
131 ReaderType::Pointer reader = ReaderType::New();
132 reader->SetFileName(argv[1]);
139 std::cerr <<
"ExceptionObject caught !" << std::endl;
140 std::cerr << err << std::endl;
145 if (!reader->GetOutput()->GetRequestedRegion().IsInside(inputRegion))
147 std::cerr <<
"Error" << std::endl;
148 std::cerr <<
"The region " << inputRegion <<
149 "is not contained within the input image region "
150 << reader->GetOutput()->GetRequestedRegion() << std::endl;
169 ImageType::Pointer outputImage = ImageType::New();
170 outputImage->SetRegions(outputRegion);
171 const ImageType::SpacingType& spacing = reader->GetOutput()->GetSpacing();
172 const ImageType::PointType& inputOrigin = reader->GetOutput()->GetOrigin();
173 double outputOrigin[Dimension];
175 for (
unsigned int i = 0; i < Dimension; ++i)
177 outputOrigin[i] = inputOrigin[i] + spacing[i] * inputStart[i];
180 outputImage->SetSpacing(spacing);
181 outputImage->SetOrigin(outputOrigin);
182 outputImage->Allocate();
198 ConstIteratorType inputIt(reader->GetOutput(), inputRegion);
199 IteratorType outputIt(outputImage, outputRegion);
201 for (inputIt.GoToBegin(), outputIt.GoToBegin(); !inputIt.IsAtEnd();
202 ++inputIt, ++outputIt)
204 outputIt.Set(inputIt.Get());
219 WriterType::Pointer writer = WriterType::New();
220 writer->SetFileName(argv[2]);
221 writer->SetInput(outputImage);
229 std::cerr <<
"ExceptionObject caught !" << std::endl;
230 std::cerr << err << std::endl;