123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285 |
- /*
- *
- * Copyright (C) 1996-2016, OFFIS e.V.
- * All rights reserved. See COPYRIGHT file for details.
- *
- * This software and supporting documentation were developed by
- *
- * OFFIS e.V.
- * R&D Division Health
- * Escherweg 2
- * D-26121 Oldenburg, Germany
- *
- *
- * Module: dcmimgle
- *
- * Author: Joerg Riesmeier
- *
- * Purpose: DicomMonochromeModality (Header)
- *
- */
- #ifndef DIMOMOD_H
- #define DIMOMOD_H
- #include "dcmtk/config/osconfig.h"
- #include "dcmtk/ofstd/ofcast.h"
- #include "dcmtk/dcmimgle/diluptab.h"
- #include "dcmtk/dcmimgle/diobjcou.h"
- /*------------------------*
- * forward declarations *
- *------------------------*/
- class DiDocument;
- class DiInputPixel;
- /*---------------------*
- * class declaration *
- *---------------------*/
- /** Class to handle modality specific transformations (incl. modality LUT)
- */
- class DCMTK_DCMIMGLE_EXPORT DiMonoModality
- : public DiObjectCounter
- {
- public:
- /** constructor
- *
- ** @param docu pointer to dataset (encapsulated)
- * @param pixel pointer to input pixel data
- */
- DiMonoModality(const DiDocument *docu,
- DiInputPixel *pixel);
- /** constructor, rescale
- *
- ** @param docu pointer to dataset (encapsulated)
- * @param pixel pointer to input pixel data
- * @param slope rescale slope (<> 0)
- * @param intercept rescale intercept
- */
- DiMonoModality(const DiDocument *docu,
- DiInputPixel *pixel,
- const double slope,
- const double intercept);
- /** constructor, LUT
- *
- ** @param docu pointer to dataset (encapsulated)
- * @param pixel pointer to input pixel data
- * @param data element containing the modality LUT data
- * @param descriptor element containing the modality LUT descriptor
- * @param explanation element containing the modality LUT explanation (optional)
- */
- DiMonoModality(const DiDocument *docu,
- DiInputPixel *pixel,
- const DcmUnsignedShort &data,
- const DcmUnsignedShort &descriptor,
- const DcmLongString *explanation);
- /** constructor, no modality transform
- *
- ** @param bits number of bits per pixel
- */
- DiMonoModality(const int bits);
- /** destructor
- */
- virtual ~DiMonoModality();
- /** get integer representation
- *
- ** @return integer representation
- */
- inline EP_Representation getRepresentation() const
- {
- return Representation;
- }
- /** get minimum pixel value after modality transform
- *
- ** @return minimum pixel value
- */
- inline double getMinValue() const
- {
- return MinValue;
- }
- /** get maximum pixel value after modality transform
- *
- ** @return maximum pixel value
- */
- inline double getMaxValue() const
- {
- return MaxValue;
- }
- /** get number of bits describing the width of output data
- *
- ** @return number of bits (might be 0)
- */
- inline unsigned int getBits() const
- {
- return Bits;
- }
- /** get number of bits actually used to store the output data.
- * (based on the range given by 'MinValue' and 'MaxValue')
- *
- ** @return number of used bits (might be 0)
- */
- inline unsigned int getUsedBits() const
- {
- return UsedBits;
- }
- /** get absolute (possible) minimum pixel value after modality transform
- *
- ** @return absolute minimum pixel value
- */
- inline double getAbsMinimum() const
- {
- return AbsMinimum;
- }
- /** get absolute (possible) maximum pixel value after modality transform
- *
- ** @return absolute maximum pixel value
- */
- inline double getAbsMaximum() const
- {
- return AbsMaximum;
- }
- /** get rescale intercept value
- *
- ** @return rescale intercept value
- */
- inline double getRescaleIntercept() const
- {
- return RescaleIntercept;
- }
- /** get rescale slope value
- *
- ** @return rescale slope value
- */
- inline double getRescaleSlope() const
- {
- return RescaleSlope;
- }
- /** get pointer to lookup table data
- *
- ** @return pointer to lookup table data or NULL if absent
- */
- inline const DiLookupTable *getTableData() const
- {
- return TableData;
- }
- /** get modality LUT explanation
- *
- ** @return modality LUT explanation or NULL if absent
- */
- inline const char *getExplanation() const
- {
- return (TableData != NULL) ? TableData->getExplanation() : OFstatic_cast(const char *, NULL);
- }
- /** check whether lookup table is present
- *
- ** @return true if lookup table is present, false otherwise
- */
- inline int hasLookupTable() const
- {
- return LookupTable;
- }
- /** check whether rescaling is present
- *
- ** @return true if rescaling is present, false otherwise
- */
- inline int hasRescaling() const
- {
- return Rescaling;
- }
- protected:
- /** initialize internal data structures and values
- *
- ** @param docu pointer to dataset (encapsulated)
- * @param pixel pointer to input pixel data
- *
- ** @return status, true if successful, false otherwise
- */
- int Init(const DiDocument *docu,
- DiInputPixel *pixel);
- /** check lookup table for validity (and possibly correct it)
- */
- void checkTable();
- /** check rescaling for validity (and possibly correct it)
- *
- ** @param pixel pointer to input pixel data
- */
- void checkRescaling(const DiInputPixel *pixel);
- /** determine integer representation used for the output data
- *
- ** @param docu pointer to dataset (encapsulated)
- */
- void determineRepresentation(const DiDocument *docu);
- private:
- /// integer representation
- EP_Representation Representation;
- /// minimum pixel value
- double MinValue;
- /// maximum pixel value
- double MaxValue;
- /// number of bits
- unsigned int Bits;
- /// number of used bits
- unsigned int UsedBits;
- /// absolute minimum pixel value
- double AbsMinimum;
- /// absolute maximum pixel value
- double AbsMaximum;
- /// rescale intercept
- double RescaleIntercept;
- /// rescale slope
- double RescaleSlope;
- /// status flag: lookup table present
- int LookupTable;
- /// status flag: rescaling present
- int Rescaling;
- /// pointer to modality lookup table
- DiLookupTable *TableData;
- // --- declarations to avoid compiler warnings
- DiMonoModality(const DiMonoModality &);
- DiMonoModality &operator=(const DiMonoModality &);
- };
- #endif
|