26 template<
typename TPixel,
unsigned int VImageDimension>
30 typedef itk::Image<TPixel, VImageDimension>
ImageType;
31 typedef itk::Image<TPixel, VImageDimension> MaskType;
33 typedef typename FilterType::RunLengthFeaturesFilterType TextureFilterType;
35 typename MaskType::Pointer maskImage = MaskType::New();
38 typename FilterType::Pointer filter = FilterType::New();
39 typename FilterType::Pointer filter2 = FilterType::New();
41 typename FilterType::OffsetVector::Pointer newOffset = FilterType::OffsetVector::New();
42 auto oldOffsets = filter->GetOffsets();
43 auto oldOffsetsIterator = oldOffsets->Begin();
44 while (oldOffsetsIterator != oldOffsets->End())
46 bool continueOuterLoop =
false;
47 typename FilterType::OffsetType
offset = oldOffsetsIterator->Value();
48 for (
unsigned int i = 0; i < VImageDimension; ++i)
52 continueOuterLoop =
true;
60 newOffset->push_back(offset);
65 if (continueOuterLoop)
67 newOffset->push_back(offset);
69 filter->SetOffsets(newOffset);
70 filter2->SetOffsets(newOffset);
74 typename FilterType::FeatureNameVectorPointer requestedFeatures = FilterType::FeatureNameVector::New();
75 requestedFeatures->push_back(TextureFilterType::ShortRunEmphasis);
76 requestedFeatures->push_back(TextureFilterType::LongRunEmphasis);
77 requestedFeatures->push_back(TextureFilterType::GreyLevelNonuniformity);
78 requestedFeatures->push_back(TextureFilterType::GreyLevelNonuniformityNormalized);
79 requestedFeatures->push_back(TextureFilterType::RunLengthNonuniformity);
80 requestedFeatures->push_back(TextureFilterType::RunLengthNonuniformityNormalized);
81 requestedFeatures->push_back(TextureFilterType::LowGreyLevelRunEmphasis);
82 requestedFeatures->push_back(TextureFilterType::HighGreyLevelRunEmphasis);
83 requestedFeatures->push_back(TextureFilterType::ShortRunLowGreyLevelEmphasis);
84 requestedFeatures->push_back(TextureFilterType::ShortRunHighGreyLevelEmphasis);
85 requestedFeatures->push_back(TextureFilterType::LongRunLowGreyLevelEmphasis);
86 requestedFeatures->push_back(TextureFilterType::LongRunHighGreyLevelEmphasis);
87 requestedFeatures->push_back(TextureFilterType::RunPercentage);
88 requestedFeatures->push_back(TextureFilterType::NumberOfRuns);
89 requestedFeatures->push_back(TextureFilterType::GreyLevelVariance);
90 requestedFeatures->push_back(TextureFilterType::RunLengthVariance);
91 requestedFeatures->push_back(TextureFilterType::RunEntropy);
93 filter->SetInput(itkImage);
94 filter->SetMaskImage(maskImage);
95 filter->SetRequestedFeatures(requestedFeatures);
96 filter2->SetInput(itkImage);
97 filter2->SetMaskImage(maskImage);
98 filter2->SetRequestedFeatures(requestedFeatures);
99 int numberOfBins = params.
Bins;
100 if (numberOfBins < 2)
106 filter->SetPixelValueMinMax(minRange, maxRange);
107 filter->SetNumberOfBinsPerAxis(numberOfBins);
108 filter2->SetPixelValueMinMax(minRange, maxRange);
109 filter2->SetNumberOfBinsPerAxis(numberOfBins);
111 filter->SetDistanceValueMinMax(0, numberOfBins);
112 filter2->SetDistanceValueMinMax(0, numberOfBins);
114 filter2->CombinedFeatureCalculationOn();
119 auto featureMeans = filter->GetFeatureMeans ();
120 auto featureStd = filter->GetFeatureStandardDeviations();
121 auto featureCombined = filter2->GetFeatureMeans();
123 for (std::size_t i = 0; i < featureMeans->size(); ++i)
127 case TextureFilterType::ShortRunEmphasis :
128 featureList.push_back(std::make_pair(params.
featurePrefix +
"Short run emphasis Means",featureMeans->ElementAt(i)));
129 featureList.push_back(std::make_pair(params.
featurePrefix +
"Short run emphasis Std.", featureStd->ElementAt(i)));
130 featureList.push_back(std::make_pair(params.
featurePrefix +
"Short run emphasis Comb.", featureCombined->ElementAt(i)));
132 case TextureFilterType::LongRunEmphasis :
133 featureList.push_back(std::make_pair(params.
featurePrefix +
"Long run emphasis Means", featureMeans->ElementAt(i)));
134 featureList.push_back(std::make_pair(params.
featurePrefix +
"Long run emphasis Std.", featureStd->ElementAt(i)));
135 featureList.push_back(std::make_pair(params.
featurePrefix +
"Long run emphasis Comb.", featureCombined->ElementAt(i)));
137 case TextureFilterType::GreyLevelNonuniformity :
138 featureList.push_back(std::make_pair(params.
featurePrefix +
"Grey level nonuniformity Means", featureMeans->ElementAt(i)));
139 featureList.push_back(std::make_pair(params.
featurePrefix +
"Grey level nonuniformity Std.", featureStd->ElementAt(i)));
140 featureList.push_back(std::make_pair(params.
featurePrefix +
"Grey level nonuniformity Comb.", featureCombined->ElementAt(i)));
142 case TextureFilterType::GreyLevelNonuniformityNormalized :
143 featureList.push_back(std::make_pair(params.
featurePrefix +
"Grey level nonuniformity normalized Means", featureMeans->ElementAt(i)));
144 featureList.push_back(std::make_pair(params.
featurePrefix +
"Grey level nonuniformity normalized Std.", featureStd->ElementAt(i)));
145 featureList.push_back(std::make_pair(params.
featurePrefix +
"Grey level nonuniformity normalized Comb.", featureCombined->ElementAt(i)));
147 case TextureFilterType::RunLengthNonuniformity :
148 featureList.push_back(std::make_pair(params.
featurePrefix +
"Run length nonuniformity Means", featureMeans->ElementAt(i)));
149 featureList.push_back(std::make_pair(params.
featurePrefix +
"Run length nonuniformity Std.", featureStd->ElementAt(i)));
150 featureList.push_back(std::make_pair(params.
featurePrefix +
"Run length nonuniformity Comb.", featureCombined->ElementAt(i)));
152 case TextureFilterType::RunLengthNonuniformityNormalized :
153 featureList.push_back(std::make_pair(params.
featurePrefix +
"Run length nonuniformity normalized Means", featureMeans->ElementAt(i)));
154 featureList.push_back(std::make_pair(params.
featurePrefix +
"Run length nonuniformity normalized Std.", featureStd->ElementAt(i)));
155 featureList.push_back(std::make_pair(params.
featurePrefix +
"Run length nonuniformity normalized Comb.", featureCombined->ElementAt(i)));
157 case TextureFilterType::LowGreyLevelRunEmphasis :
158 featureList.push_back(std::make_pair(params.
featurePrefix +
"Low grey level run emphasis Means", featureMeans->ElementAt(i)));
159 featureList.push_back(std::make_pair(params.
featurePrefix +
"Low grey level run emphasis Std.", featureStd->ElementAt(i)));
160 featureList.push_back(std::make_pair(params.
featurePrefix +
"Low grey level run emphasis Comb.", featureCombined->ElementAt(i)));
162 case TextureFilterType::HighGreyLevelRunEmphasis :
163 featureList.push_back(std::make_pair(params.
featurePrefix +
"High grey level run emphasis Means", featureMeans->ElementAt(i)));
164 featureList.push_back(std::make_pair(params.
featurePrefix +
"High grey level run emphasis Std.", featureStd->ElementAt(i)));
165 featureList.push_back(std::make_pair(params.
featurePrefix +
"High grey level run emphasis Comb.", featureCombined->ElementAt(i)));
167 case TextureFilterType::ShortRunLowGreyLevelEmphasis :
168 featureList.push_back(std::make_pair(params.
featurePrefix +
"Short run low grey level emphasis Means", featureMeans->ElementAt(i)));
169 featureList.push_back(std::make_pair(params.
featurePrefix +
"Short run low grey level emphasis Std.", featureStd->ElementAt(i)));
170 featureList.push_back(std::make_pair(params.
featurePrefix +
"Short run low grey level emphasis Comb.", featureCombined->ElementAt(i)));
172 case TextureFilterType::ShortRunHighGreyLevelEmphasis :
173 featureList.push_back(std::make_pair(params.
featurePrefix +
"Short run high grey level emphasis Means", featureMeans->ElementAt(i)));
174 featureList.push_back(std::make_pair(params.
featurePrefix +
"Short run high grey level emphasis Std.", featureStd->ElementAt(i)));
175 featureList.push_back(std::make_pair(params.
featurePrefix +
"Short run high grey level emphasis Comb.", featureCombined->ElementAt(i)));
177 case TextureFilterType::LongRunLowGreyLevelEmphasis :
178 featureList.push_back(std::make_pair(params.
featurePrefix +
"Long run low grey level emphasis Means", featureMeans->ElementAt(i)));
179 featureList.push_back(std::make_pair(params.
featurePrefix +
"Long run low grey level emphasis Std.", featureStd->ElementAt(i)));
180 featureList.push_back(std::make_pair(params.
featurePrefix +
"Long run low grey level emphasis Comb.", featureCombined->ElementAt(i)));
182 case TextureFilterType::LongRunHighGreyLevelEmphasis :
183 featureList.push_back(std::make_pair(params.
featurePrefix +
"Long run high grey level emphasis Means", featureMeans->ElementAt(i)));
184 featureList.push_back(std::make_pair(params.
featurePrefix +
"Long run high grey level emphasis Std.", featureStd->ElementAt(i)));
185 featureList.push_back(std::make_pair(params.
featurePrefix +
"Long run high grey level emphasis Comb.", featureCombined->ElementAt(i)));
187 case TextureFilterType::RunPercentage :
188 featureList.push_back(std::make_pair(params.
featurePrefix +
"Run percentage Means", featureMeans->ElementAt(i)));
189 featureList.push_back(std::make_pair(params.
featurePrefix +
"Run percentage Std.", featureStd->ElementAt(i)));
190 featureList.push_back(std::make_pair(params.
featurePrefix +
"Run percentage Comb.", featureCombined->ElementAt(i) / newOffset->size()));
192 case TextureFilterType::NumberOfRuns :
193 featureList.push_back(std::make_pair(params.
featurePrefix +
"Number of runs Means", featureMeans->ElementAt(i)));
194 featureList.push_back(std::make_pair(params.
featurePrefix +
"Number of runs Std.", featureStd->ElementAt(i)));
195 featureList.push_back(std::make_pair(params.
featurePrefix +
"Number of runs Comb.", featureCombined->ElementAt(i)));
197 case TextureFilterType::GreyLevelVariance :
198 featureList.push_back(std::make_pair(params.
featurePrefix +
"Grey level variance Means", featureMeans->ElementAt(i)));
199 featureList.push_back(std::make_pair(params.
featurePrefix +
"Grey level variance Std.", featureStd->ElementAt(i)));
200 featureList.push_back(std::make_pair(params.
featurePrefix +
"Grey level variance Comb.", featureCombined->ElementAt(i)));
202 case TextureFilterType::RunLengthVariance :
203 featureList.push_back(std::make_pair(params.
featurePrefix +
"Run length variance Means", featureMeans->ElementAt(i)));
204 featureList.push_back(std::make_pair(params.
featurePrefix +
"Run length variance Std.", featureStd->ElementAt(i)));
205 featureList.push_back(std::make_pair(params.
featurePrefix +
"Run length variance Comb.", featureCombined->ElementAt(i)));
207 case TextureFilterType::RunEntropy :
208 featureList.push_back(std::make_pair(params.
featurePrefix +
"Run length entropy Means", featureMeans->ElementAt(i)));
209 featureList.push_back(std::make_pair(params.
featurePrefix +
"Run length entropy Std.", featureStd->ElementAt(i)));
210 featureList.push_back(std::make_pair(params.
featurePrefix +
"Run length entropy Comb.", featureCombined->ElementAt(i)));
274 MITK_INFO <<
"Start calculating Run-length";
276 featureList.insert(featureList.end(), localResults.begin(), localResults.end());
277 MITK_INFO <<
"Finished calculating Run-length";
#define AccessByItk_3(mitkImage, itkImageTypeFunction, arg1, arg2, arg3)
FeatureListType CalculateFeatures(const Image::Pointer &image, const Image::Pointer &feature) override
Calculates the Cooccurence-Matrix based features for this class.
std::string featurePrefix
std::vector< std::string > FeatureNameListType
itk::Image< unsigned char, 3 > ImageType
virtual void SetLongName(std::string _arg)
void AddArguments(mitkCommandLineParser &parser) override
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)
FeatureNameListType GetFeatureNames() override
Returns a list of the names of all features that are calculated from this class.
virtual void SetShortName(std::string _arg)
void CalculateGrayLevelRunLengthFeatures(itk::Image< TPixel, VImageDimension > *itkImage, mitk::Image::Pointer mask, mitk::GIFGreyLevelRunLength::FeatureListType &featureList, mitk::GIFGreyLevelRunLength::ParameterStruct params)
std::vector< std::pair< std::string, double > > FeatureListType
std::string GetCurrentFeatureEncoding() override
Adds an additional Separator to the name of the feature, which encodes the used parameters.
std::string QuantifierParameterString()
std::string FeatureDescriptionPrefix()
Returns a string that encodes the feature class name.
This class computes run length descriptions from an image.
virtual std::string GetLongName() const
std::string GetOptionPrefix() const
virtual int GetDirection() const
mitk::Image::Pointer image
void CalculateFeaturesUsingParameters(const Image::Pointer &feature, const Image::Pointer &mask, const Image::Pointer &maskNoNAN, FeatureListType &featureList) override
Calculates the feature of this abstact interface. Does not necessarily considers the parameter settin...
void AddQuantifierArguments(mitkCommandLineParser &parser)
virtual void SetFeatureClassName(std::string _arg)
void MITKCORE_EXPORT CastToItkImage(const mitk::Image *mitkImage, itk::SmartPointer< ItkOutputImageType > &itkOutputImage)
Cast an mitk::Image to an itk::Image with a specific type.
mitk::Image::Pointer mask
virtual IntensityQuantifier::Pointer GetQuantifier()
void InitializeQuantifierFromParameters(const Image::Pointer &feature, const Image::Pointer &mask, unsigned int defaultBins=256)
void InitializeQuantifier(const Image::Pointer &feature, const Image::Pointer &mask, unsigned int defaultBins=256)
virtual ParameterTypes GetParameter() const