+
+ // origin
+ typename InputImageType::PointType origin = image->GetOrigin();
+ value.str("");
+ value<<origin[0]<<'\\'<<origin[1]<<'\\'<<origin[2];
+ itk::EncapsulateMetaData<std::string>(*outputDict, "0020|0032", value.str());
+ DD(origin);
+
+ // orientation
+ typename InputImageType::DirectionType direction = image->GetDirection();
+ value.str("");
+ value<<direction[0][0]<<'\\'<<direction[0][1]<<'\\'<<direction[0][2]<<'\\'<<direction[1][0]<<'\\'<<direction[1][1]<<'\\'<<direction[1][2];
+ itk::EncapsulateMetaData<std::string>(*outputDict, "0020|0037", value.str());
+ DD(direction);
+
+ // size
+ typename InputImageType::SizeType imageSize = image->GetLargestPossibleRegion().GetSize();
+ //DD(imageSize);
+ int NbCols=imageSize[0]; // col
+ int NbRows=imageSize[1]; // row
+ int NbFrames=imageSize[2]; // frame
+ itk::EncapsulateMetaData<std::string>(*outputDict, "0028|0008", NumberToString(NbFrames));
+ itk::EncapsulateMetaData<std::string>(*outputDict, "0028|0010", NumberToString(NbRows));
+ itk::EncapsulateMetaData<std::string>(*outputDict, "0028|0011", NumberToString(NbCols));
+ DD(NbCols);
+ DD(NbRows);
+ DD(NbFrames);
+
+ // spacing
+ typename InputImageType::SpacingType Spacing = image->GetSpacing();
+ value.str("");
+ value<<Spacing[0]<<'\\'<<Spacing[1];
+ itk::EncapsulateMetaData<std::string>(*outputDict, "0028|0030", value.str());
+ value.str("");
+ value<<Spacing[2];
+ itk::EncapsulateMetaData<std::string>(*outputDict, "0018|0050", value.str());
+ DD(Spacing);
+
+ // offset
+ float offset = 0.;
+ value.str("");
+ value << offset;
+ for (int i=1; i<NbFrames ; i++){
+ offset+=Spacing[2];
+ value << '\\';
+ value << offset;
+ }
+ itk::EncapsulateMetaData<std::string>(*outputDict, "3004|000c", value.str());
+ DD(value.str());
+
+ // scaling
+ typename ImageCalculatorFilterType::Pointer imageCalculatorFilter = ImageCalculatorFilterType::New();
+ imageCalculatorFilter->SetImage(image);
+ imageCalculatorFilter->ComputeMaximum();
+ float highestValue=imageCalculatorFilter->GetMaximum();
+ double doseScaling = highestValue/(pow(2,16)-1);
+ value.str("");
+ value<<doseScaling;
+ itk::EncapsulateMetaData<std::string>(*outputDict, "3004|000e", value.str());
+ DD(value.str());
+
+ // image data
+ typename OutputImageType::Pointer imageOutput = OutputImageType::New();
+ imageOutput->SetRegions(image->GetLargestPossibleRegion());
+ imageOutput->SetSpacing(image->GetSpacing());
+ imageOutput->SetOrigin(image->GetOrigin());
+ imageOutput->SetDirection(image->GetDirection());
+ imageOutput->Allocate();
+
+ typename itk::ImageRegionConstIterator<InputImageType> imageIterator(image,image->GetLargestPossibleRegion());
+ typename itk::ImageRegionIterator<OutputImageType> imageOutputIterator(imageOutput,imageOutput->GetLargestPossibleRegion());
+ while(!imageIterator.IsAtEnd()) {
+ // Set the current pixel to white
+ imageOutputIterator.Set((signed short int)(imageIterator.Get()/doseScaling));
+
+ ++imageIterator;
+ ++imageOutputIterator;
+ }