22 std::vector<mitk::Image::Pointer> &imageVector,
23 std::vector<mitk::Image::Pointer> &maskVector)
25 typedef itk::Image< double, 2 > FloatImage2DType;
26 typedef itk::Image< unsigned short, 2 > MaskImage2DType;
30 FloatImageType::Pointer itkFloat = FloatImageType::New();
31 MaskImageType::Pointer itkMask = MaskImageType::New();
39 idxA = 1; idxB = 2; idxC = 0;
42 idxA = 0; idxB = 2; idxC = 1;
45 idxA = 0; idxB = 1; idxC = 2;
48 idxA = 1; idxB = 2; idxC = 0;
52 auto imageSize = image->GetLargestPossibleRegion().GetSize();
53 FloatImageType::IndexType index3D;
54 FloatImage2DType::IndexType index2D;
55 FloatImage2DType::SpacingType spacing2D;
56 spacing2D[0] = itkFloat->GetSpacing()[idxA];
57 spacing2D[1] = itkFloat->GetSpacing()[idxB];
59 for (
unsigned int i = 0; i < imageSize[idxC]; ++i)
61 FloatImage2DType::RegionType region;
62 FloatImage2DType::IndexType start;
63 FloatImage2DType::SizeType size;
64 start[0] = 0; start[1] = 0;
65 size[0] = imageSize[idxA];
66 size[1] = imageSize[idxB];
67 region.SetIndex(start);
70 FloatImage2DType::Pointer image2D = FloatImage2DType::New();
71 image2D->SetRegions(region);
74 MaskImage2DType::Pointer mask2D = MaskImage2DType::New();
75 mask2D->SetRegions(region);
78 unsigned long voxelsInMask = 0;
80 for (
unsigned int a = 0; a < imageSize[idxA]; ++a)
82 for (
unsigned int b = 0; b < imageSize[idxB]; ++b)
89 image2D->SetPixel(index2D, itkFloat->GetPixel(index3D));
90 mask2D->SetPixel(index2D, itkMask->GetPixel(index3D));
91 voxelsInMask += (itkMask->GetPixel(index3D) > 0) ? 1 : 0;
96 image2D->SetSpacing(spacing2D);
97 mask2D->SetSpacing(spacing2D);
100 tmpFloatImage->InitializeByItk(image2D.GetPointer());
104 tmpMaskImage->InitializeByItk(mask2D.GetPointer());
107 if (voxelsInMask > 0)
109 imageVector.push_back(tmpFloatImage);
110 maskVector.push_back(tmpMaskImage);
119 std::vector<double>
internal;
120 std::stringstream ss(str);
123 while (std::getline(ss, tok, delimiter)) {
124 std::stringstream s2(tok);
126 internal.push_back(val);
147 unsigned int bins = 0;
155 bool useGlobal =
true;
156 if (parsedArgs.count(name +
"::ignore-global-histogram"))
167 if (parsedArgs.count(
"ignore-mask-for-histogram"))
169 bool tmp =
us::any_cast<
bool>(parsedArgs[
"ignore-mask-for-histogram"]);
172 if (parsedArgs.count(
"minimum-intensity"))
174 minimum =
us::any_cast<
float>(parsedArgs[
"minimum-intensity"]);
178 if (parsedArgs.count(
"maximum-intensity"))
180 maximum =
us::any_cast<
float>(parsedArgs[
"maximum-intensity"]);
184 if (parsedArgs.count(
"bins"))
190 if (parsedArgs.count(
"binsize"))
197 if (parsedArgs.count(name+
"::ignore-mask-for-histogram"))
199 bool tmp =
us::any_cast<
bool>(parsedArgs[name+
"::ignore-mask-for-histogram"]);
202 if (parsedArgs.count(name +
"::minimum"))
204 minimum =
us::any_cast<
float>(parsedArgs[name +
"::minimum"]);
208 if (parsedArgs.count(name +
"::maximum"))
210 maximum =
us::any_cast<
float>(parsedArgs[name +
"::maximum"]);
214 if (parsedArgs.count(name +
"::bins"))
219 if (parsedArgs.count(name +
"::binsize"))
221 binsize =
us::any_cast<
float>(parsedArgs[name +
"::binsize"]);
243 m_Quantifier->InitializeByImageAndBinsize(feature,
GetBinsize());
250 m_Quantifier->InitializeByImageRegionAndBinsize(feature, mask,
GetBinsize());
257 m_Quantifier->InitializeByImage(feature,
GetBins());
264 m_Quantifier->InitializeByImageRegion(feature, mask,
GetBins());
267 m_Quantifier->InitializeByImage(feature,
GetBins());
269 m_Quantifier->InitializeByImageRegion(feature, mask, defaultBins);
280 output = m_FeatureClassName +
"::";
281 if (m_EncodeParameters)
290 std::stringstream ss;
317 ss <<
"Bins-" <<
GetBins() <<
"_FullImage";
327 ss <<
"Bins-" <<
GetBins() <<
"_FullImage";
336 m_CalculateWithParameter =
true;
338 featureList.insert(featureList.end(), result.begin(), result.end());
343 std::vector<mitk::Image::Pointer> imageVector;
344 std::vector<mitk::Image::Pointer> maskVector;
347 std::vector<mitk::AbstractGlobalImageFeature::FeatureListType> statVector;
349 for (std::size_t index = 0; index < imageVector.size(); ++index)
351 if (m_CalculateWithParameter)
355 statVector.push_back(stat);
360 statVector.push_back(stat);
364 if (statVector.size() < 1)
368 for (std::size_t i = 0; i < statVector[0].size(); ++i)
370 auto cElement1 = statVector[0][i];
371 cElement1.first =
"SliceWise Mean " + cElement1.first;
372 cElement1.second = 0.0;
373 auto cElement2 = statVector[0][i];
374 cElement2.first =
"SliceWise Var. " + cElement2.first;
375 cElement2.second = 0.0;
376 statMean.push_back(cElement1);
377 statStd.push_back(cElement2);
379 for (
auto cStat : statVector)
381 for (std::size_t i = 0; i < cStat.size(); ++i)
383 statMean[i].second += cStat[i].second / (1.0*statVector.size());
387 for (
auto cStat : statVector)
389 for (std::size_t i = 0; i < cStat.size(); ++i)
391 statStd[i].second += (cStat[i].second - statMean[i].second)*(cStat[i].second - statMean[i].second) / (1.0*statVector.size());
395 for (
auto cStat : statVector)
397 std::copy(cStat.begin(), cStat.end(), std::back_inserter(result));
399 std::copy(statMean.begin(), statMean.end(), std::back_inserter(result));
400 std::copy(statStd.begin(), statStd.end(), std::back_inserter(result));
virtual void SetBins(int _arg)
virtual void SetMaximumIntensity(double _arg)
virtual double GetBinsize() const
virtual std::string GetCurrentFeatureEncoding()
Adds an additional Separator to the name of the feature, which encodes the used parameters.
static void ExtractSlicesFromImages(mitk::Image::Pointer image, mitk::Image::Pointer mask, int direction, std::vector< mitk::Image::Pointer > &imageVector, std::vector< mitk::Image::Pointer > &maskVector)
virtual bool GetIgnoreMask() const
virtual void SetUseBins(bool _arg)
ValueType * any_cast(Any *operand)
itk::Image< double, 3 > FloatImageType
virtual void SetUseBinsize(bool _arg)
void addArgument(const std::string &longarg, const std::string &shortarg, Type type, const std::string &argLabel, const std::string &argHelp=std::string(), const us::Any &defaultValue=us::Any(), bool optional=true, bool ignoreRest=false, bool deprecated=false, mitkCommandLineParser::Channel channel=mitkCommandLineParser::Channel::None)
virtual bool GetUseMaximumIntensity() const
virtual void SetMinimumIntensity(double _arg)
Image::Pointer GrabItkImageMemory(itk::SmartPointer< ItkOutputImageType > &itkimage, mitk::Image *mitkImage=nullptr, const BaseGeometry *geometry=nullptr, bool update=true)
Grabs the memory of an itk::Image (with a specific type) and puts it into an mitk::Image.The memory is managed by the mitk::Image after calling this function. The itk::Image remains valid until the mitk::Image decides to free the memory.
virtual int GetBins() const
virtual double GetMinimumIntensity() const
std::vector< std::pair< std::string, double > > FeatureListType
std::string QuantifierParameterString()
std::string FeatureDescriptionPrefix()
Returns a string that encodes the feature class name.
virtual bool GetUseBins() const
virtual bool GetUseBinsize() const
virtual FeatureListType CalculateFeatures(const Image::Pointer &feature, const Image::Pointer &mask)=0
Calculates the feature of this abstact interface. Does not necessarily considers the parameter settin...
std::string GetOptionPrefix() const
itk::Image< unsigned char, 3 > MaskImageType
virtual void SetUseMinimumIntensity(bool _arg)
virtual void CalculateFeaturesUsingParameters(const Image::Pointer &feature, const Image::Pointer &mask, const Image::Pointer &maskNoNAN, FeatureListType &featureList)=0
Calculates the feature of this abstact interface. Does not necessarily considers the parameter settin...
virtual void SetUseMaximumIntensity(bool _arg)
mitk::Image::Pointer image
virtual void SetIgnoreMask(bool _arg)
void AddQuantifierArguments(mitkCommandLineParser &parser)
FeatureListType CalculateFeaturesSlicewise(const Image::Pointer &feature, const Image::Pointer &mask, int sliceID)
Calculates the given feature Slice-wise. Might not be availble for an individual filter! ...
std::vector< double > SplitDouble(std::string str, char delimiter)
void MITKCORE_EXPORT CastToItkImage(const mitk::Image *mitkImage, itk::SmartPointer< ItkOutputImageType > &itkOutputImage)
Cast an mitk::Image to an itk::Image with a specific type.
virtual bool GetUseMinimumIntensity() const
mitk::Image::Pointer mask
virtual void CalculateFeaturesSliceWiseUsingParameters(const Image::Pointer &feature, const Image::Pointer &mask, int sliceID, FeatureListType &featureList)
Calculates the feature of this abstact interface. Does not necessarily considers the parameter settin...
void InitializeQuantifierFromParameters(const Image::Pointer &feature, const Image::Pointer &mask, unsigned int defaultBins=256)
virtual void SetBinsize(double _arg)
virtual double GetMaximumIntensity() const
void InitializeQuantifier(const Image::Pointer &feature, const Image::Pointer &mask, unsigned int defaultBins=256)
virtual ParameterTypes GetParameter() const