116 lines
2.6 KiB
C++
116 lines
2.6 KiB
C++
/*
|
|
*
|
|
* Copyright (C) 2002-2014, 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: dcmimage
|
|
*
|
|
* Author: Marco Eichelberg
|
|
*
|
|
* Purpose: class DcmQuantScaleTable
|
|
*
|
|
*/
|
|
|
|
|
|
#ifndef DIQTSTAB_H
|
|
#define DIQTSTAB_H
|
|
|
|
|
|
#include "dcmtk/config/osconfig.h"
|
|
#include "dcmtk/ofstd/ofcast.h"
|
|
#include "dcmtk/dcmimage/diqttype.h" /* for DcmQuantComponent */
|
|
|
|
#define INCLUDE_CSTDLIB
|
|
#define INCLUDE_CASSERT
|
|
#include "dcmtk/ofstd/ofstdinc.h"
|
|
|
|
|
|
/** this is a helper class used for temporarily reducing the image bit depth
|
|
* during calculation of an image histogram. An object of this class
|
|
* contains a look-up table that maps image pixel values to scaled-down
|
|
* image pixel values.
|
|
*/
|
|
class DCMTK_DCMIMAGE_EXPORT DcmQuantScaleTable
|
|
{
|
|
public:
|
|
|
|
/// constructor
|
|
DcmQuantScaleTable()
|
|
: table(NULL)
|
|
, numEntries(0)
|
|
{
|
|
}
|
|
|
|
/// destructor
|
|
~DcmQuantScaleTable()
|
|
{
|
|
cleanup();
|
|
}
|
|
|
|
/** array look-up operation.
|
|
* @param idx pixel value to look up. Object must be initialized
|
|
* (i.e. createTable() must have been called before) and idx must
|
|
* be less or equal to the parameter oldmaxval passed to createTable().
|
|
* @return scaled-down value from look-up table.
|
|
*/
|
|
inline DcmQuantComponent operator[](unsigned int idx) const
|
|
{
|
|
#ifdef DEBUG
|
|
assert(idx < numEntries);
|
|
#endif
|
|
return table[idx];
|
|
}
|
|
|
|
/** initializes the look-up table.
|
|
* @param oldmaxval maximum possible pixel value in source image
|
|
* @param newmaxval new desired maximum value, should be < oldmaxval
|
|
*/
|
|
void createTable(
|
|
unsigned long oldmaxval,
|
|
unsigned long newmaxval)
|
|
{
|
|
cleanup();
|
|
|
|
table = new DcmQuantComponent[oldmaxval+1];
|
|
if (table)
|
|
{
|
|
numEntries = OFstatic_cast(unsigned int, oldmaxval) + 1;
|
|
for (unsigned int i=0; i < numEntries; i++)
|
|
table[i] = OFstatic_cast(DcmQuantComponent, (OFstatic_cast(unsigned long, i) * newmaxval + oldmaxval/2) / oldmaxval);
|
|
}
|
|
}
|
|
|
|
private:
|
|
|
|
/// resets the object to the default-constructed state
|
|
inline void cleanup()
|
|
{
|
|
delete[] table;
|
|
table = NULL;
|
|
numEntries = 0;
|
|
}
|
|
|
|
/// private undefined copy constructor
|
|
DcmQuantScaleTable(const DcmQuantScaleTable& src);
|
|
|
|
/// private undefined copy assignment operator
|
|
DcmQuantScaleTable& operator=(const DcmQuantScaleTable& src);
|
|
|
|
/// array of pixel values
|
|
DcmQuantComponent *table;
|
|
|
|
/// number of entries in array
|
|
unsigned int numEntries;
|
|
};
|
|
|
|
|
|
#endif
|