1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
/*=========================================================================
Program: GDCM (Grassroots DICOM). A DICOM library
Copyright (c) 2006-2011 Mathieu Malaterre
All rights reserved.
See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#ifndef GDCMSPLITMOSAICFILTER_H
#define GDCMSPLITMOSAICFILTER_H
#include "gdcmFile.h"
#include "gdcmImage.h"
namespace gdcm
{
/*
* Everything done in this code is for the sole purpose of writing interoperable
* software under Sect. 1201 (f) Reverse Engineering exception of the DMCA.
* If you believe anything in this code violates any law or any of your rights,
* please contact us (gdcm-developers@lists.sourceforge.net) so that we can
* find a solution.
*/
/**
* \brief SplitMosaicFilter class
* \details Class to reshuffle bytes for a SIEMENS Mosaic image
* Siemens CSA Image Header
* CSA:= Common Siemens Architecture, sometimes also known as Common syngo Architecture
*
* \warning when private attributes are not found, the acquisition matrix is
* used to compute the NumberOfImagesInMosaic. This means trailing black slices
* will be considered in the volume (instead of discarded).
* CSA 0029,1010 is needed for correct NumberOfImagesInMosaic
* CSA 0029,1020 is needed to compute the correct origin
* without above info default are taken (may not be accurate).
*/
class GDCM_EXPORT SplitMosaicFilter
{
public:
SplitMosaicFilter();
~SplitMosaicFilter();
/// Split the SIEMENS MOSAIC image
bool Split();
/// Compute the new dimensions according to private information
/// stored in the MOSAIC header.
bool ComputeMOSAICDimensions(unsigned int dims[3]);
/// Extract the value for SliceNormalVector (CSA header)
bool ComputeMOSAICSliceNormal( double dims[3], bool & inverted );
/// Extract the value for ImagePositionPatient (requires inverted flag)
bool ComputeMOSAICSlicePosition( double pos[3], bool inverted );
void SetImage(const Image& image);
const Image &GetImage() const { return *I; }
Image &GetImage() { return *I; }
void SetFile(const File& f) { F = f; }
File &GetFile() { return *F; }
const File &GetFile() const { return *F; }
/// Get the Acquisition Matrix (non zero value):
static bool GetAcquisitionSize(unsigned int size[2], DataSet const & ds);
/// Return the value for NumberOfImagesInMosaic, or compute it from Acquisition Size
static unsigned int GetNumberOfImagesInMosaic( File const & file );
protected:
private:
SmartPointer<File> F;
SmartPointer<Image> I;
};
} // end namespace gdcm
#endif //GDCMSPLITMOSAICFILTER_H
|