35 #include "vtkImageData.h"
52 if (mImage->getModality().contains(
"CT") || mImage->getModality().contains(
"MR"))
53 mImage->setShadingOn(
true);
61 double_pair range = this->guessInitialScalarRange();
62 double smin = range.first;
63 double smax = range.second;
66 opacity[fullRange.first - 1] = 0;
67 opacity[fullRange.first] = 255;
68 tf->resetAlpha(opacity);
71 colors[smin] = QColor(Qt::black);
72 colors[smax] = QColor(Qt::white);
73 tf->resetColor(colors);
80 int myround(
double val)
90 double_pair range = this->guessInitialScalarRange();
92 double smin = range.first;
93 double smax = range.second;
94 double srange = smax - smin;
100 opacity[smin + myround(0.5*srange)] = 255;
101 opacity[smin + myround(0.3*srange)] = 255.0 * 0.7;
102 opacity[smin + myround(0.1*srange)] = 0;
103 tf->resetAlpha(opacity);
106 colors[smin] = QColor(Qt::black);
107 colors[smax] = QColor(Qt::white);
108 tf->resetColor(colors);
113 bool ImageDefaultTFGenerator::hasValidInitialWindow()
const
115 return mImage->getInitialWindowWidth()>0;
118 double_pair ImageDefaultTFGenerator::guessInitialScalarRange()
const
122 if (this->hasValidInitialWindow())
124 srange = this->getInitialWindowRange();
127 if (!this->hasValidInitialWindow())
129 if (this->isUnsignedChar())
134 if (this->looksLikeBinaryImage())
140 if (mImage->getModality().contains(
"CT"))
142 srange = this->guessCTRange();
144 if (mImage->getModality().contains(
"MR"))
146 srange = this->guessMRRange();
150 srange = this->ensureNonZeroRoundedRange(srange);
154 bool ImageDefaultTFGenerator::isUnsignedChar()
const
156 return mImage->getBaseVtkImageData()->GetScalarType() == VTK_UNSIGNED_CHAR;
159 bool ImageDefaultTFGenerator::looksLikeBinaryImage()
const
168 range.first = int(range.first+0.5);
169 range.second = int(range.second+0.5);
170 range.second = std::max(range.second, range.first+1);
174 double_pair ImageDefaultTFGenerator::getFullScalarRange()
const
176 double smin = mImage->getBaseVtkImageData()->GetScalarRange()[0];
177 double smax = mImage->getBaseVtkImageData()->GetScalarRange()[1];
178 return std::make_pair(smin, smax);
181 double_pair ImageDefaultTFGenerator::getInitialWindowRange()
const
183 double smin = mImage->getInitialWindowLevel() - mImage->getInitialWindowWidth()/2;
184 double smax = mImage->getInitialWindowLevel() + mImage->getInitialWindowWidth()/2;
185 return std::make_pair(smin, smax);
188 double_pair ImageDefaultTFGenerator::guessCTRange()
const
194 if (0 >= mImage->getMin())
196 int ct_signed2unsigned = 1024;
197 smin += ct_signed2unsigned;
198 smax += ct_signed2unsigned;
200 return std::make_pair(smin, smax);
203 double_pair ImageDefaultTFGenerator::guessMRRange()
const
206 srange.second *= 0.25;
Handler for the transfer functions used in 3d image volumes.
std::map< int, QColor > ColorMap
ImageDefaultTFGenerator(ImagePtr image)
boost::shared_ptr< class Image > ImagePtr
Handling of color and opacity for 2D slices.
std::pair< double, double > double_pair
bool similar(const DoubleBoundingBox3D &a, const DoubleBoundingBox3D &b, double tol)
boost::shared_ptr< class ImageLUT2D > ImageLUT2DPtr
ImageLUT2DPtr generate2DTFPreset()
std::map< int, int > IntIntMap
ImageTF3DPtr generate3DTFPreset()
boost::shared_ptr< class ImageTF3D > ImageTF3DPtr