22 #include <itkMinimumMaximumImageCalculator.h> 27 template<
typename TPixel,
unsigned int VImageDimension>
31 typedef itk::Image<TPixel, VImageDimension>
ImageType;
32 typedef itk::Image<TPixel, VImageDimension> MaskType;
34 typedef itk::MinimumMaximumImageCalculator<ImageType> MinMaxComputerType;
35 typedef typename FilterType::NeighbourhoodGreyLevelDifferenceFeaturesFilterType TextureFilterType;
37 typename MaskType::Pointer maskImage = MaskType::New();
40 typename FilterType::Pointer filter = FilterType::New();
42 typename FilterType::OffsetVector::Pointer newOffset = FilterType::OffsetVector::New();
43 auto oldOffsets = filter->GetOffsets();
44 auto oldOffsetsIterator = oldOffsets->Begin();
45 while (oldOffsetsIterator != oldOffsets->End())
47 bool continueOuterLoop =
false;
48 typename FilterType::OffsetType
offset = oldOffsetsIterator->Value();
49 for (
unsigned int i = 0; i < VImageDimension; ++i)
53 continueOuterLoop =
true;
61 newOffset->push_back(offset);
66 if (continueOuterLoop)
68 newOffset->push_back(offset);
70 filter->SetOffsets(newOffset);
74 typename FilterType::FeatureNameVectorPointer requestedFeatures = FilterType::FeatureNameVector::New();
75 requestedFeatures->push_back(TextureFilterType::Coarseness);
76 requestedFeatures->push_back(TextureFilterType::Contrast);
77 requestedFeatures->push_back(TextureFilterType::Busyness);
78 requestedFeatures->push_back(TextureFilterType::Complexity);
79 requestedFeatures->push_back(TextureFilterType::Strength);
81 typename MinMaxComputerType::Pointer minMaxComputer = MinMaxComputerType::New();
82 minMaxComputer->SetImage(itkImage);
83 minMaxComputer->Compute();
85 filter->SetInput(itkImage);
86 filter->SetMaskImage(maskImage);
87 filter->SetRequestedFeatures(requestedFeatures);
88 int rangeOfPixels = params.
m_Range;
89 if (rangeOfPixels < 2)
94 filter->SetPixelValueMinMax((TPixel)(-1024.5),(TPixel)(3096.5));
95 filter->SetNumberOfBinsPerAxis(3096.5+1024.5);
98 filter->SetPixelValueMinMax(minMaxComputer->GetMinimum(),minMaxComputer->GetMaximum());
99 filter->SetNumberOfBinsPerAxis(rangeOfPixels);
102 filter->SetDistanceValueMinMax(0,rangeOfPixels);
106 auto featureMeans = filter->GetFeatureMeans ();
107 auto featureStd = filter->GetFeatureStandardDeviations();
109 std::ostringstream ss;
111 std::string strRange = ss.str();
112 for (std::size_t i = 0; i < featureMeans->size(); ++i)
116 case TextureFilterType::Coarseness :
117 featureList.push_back(std::make_pair(
"NeighbourhoodGreyLevelDifference ("+ strRange+
") Coarseness Means",featureMeans->ElementAt(i)));
119 case TextureFilterType::Contrast :
120 featureList.push_back(std::make_pair(
"NeighbourhoodGreyLevelDifference ("+ strRange+
") Contrast Means",featureMeans->ElementAt(i)));
122 case TextureFilterType::Busyness :
123 featureList.push_back(std::make_pair(
"NeighbourhoodGreyLevelDifference ("+ strRange+
") Busyness Means",featureMeans->ElementAt(i)));
125 case TextureFilterType::Complexity :
126 featureList.push_back(std::make_pair(
"NeighbourhoodGreyLevelDifference ("+ strRange+
") Complexity Means",featureMeans->ElementAt(i)));
128 case TextureFilterType::Strength :
129 featureList.push_back(std::make_pair(
"NeighbourhoodGreyLevelDifference ("+ strRange+
") Strength Means",featureMeans->ElementAt(i)));
138 m_Range(1.0), m_UseCtRange(false)
161 featureList.push_back(
"NeighbourhoodGreyLevelDifference. Coarseness Means");
162 featureList.push_back(
"NeighbourhoodGreyLevelDifference. Coarseness Std.");
163 featureList.push_back(
"NeighbourhoodGreyLevelDifference. Contrast Means");
164 featureList.push_back(
"NeighbourhoodGreyLevelDifference. Contrast Std.");
165 featureList.push_back(
"NeighbourhoodGreyLevelDifference. Busyness Means");
166 featureList.push_back(
"NeighbourhoodGreyLevelDifference. Busyness Std.");
167 featureList.push_back(
"NeighbourhoodGreyLevelDifference. Complexity Means");
168 featureList.push_back(
"NeighbourhoodGreyLevelDifference. Complexity Std.");
169 featureList.push_back(
"NeighbourhoodGreyLevelDifference. Strength Means");
170 featureList.push_back(
"NeighbourhoodGreyLevelDifference. Strength Std.");
182 parser.
addArgument(name +
"::direction", name +
"::dir",
mitkCommandLineParser::String,
"Int",
"Allows to specify the direction for Cooc and RL. 0: All directions, 1: Only single direction (Test purpose), 2,3,4... without dimension 0,1,2... ",
us::Any());
194 if (parsedArgs.count(name +
"::direction"))
196 direction =
SplitDouble(parsedArgs[name +
"::direction"].ToString(),
';')[0];
198 std::vector<double> ranges;
199 if (parsedArgs.count(name +
"::range"))
201 ranges =
SplitDouble(parsedArgs[name +
"::range"].ToString(),
';');
208 for (std::size_t i = 0; i < ranges.size(); ++i)
210 MITK_INFO <<
"Start calculating Neighbourhood Grey Level Difference with range " << ranges[i] <<
"....";
214 featureList.insert(featureList.end(), localResults.begin(), localResults.end());
215 MITK_INFO <<
"Finished calculating coocurence with range " << ranges[i] <<
"....";
#define AccessByItk_3(mitkImage, itkImageTypeFunction, arg1, arg2, arg3)
virtual void SetRange(double _arg)
void CalculateGrayLevelNeighbourhoodGreyLevelDifferenceFeatures(itk::Image< TPixel, VImageDimension > *itkImage, mitk::Image::Pointer mask, mitk::GIFNeighbourhoodGreyLevelDifference::FeatureListType &featureList, mitk::GIFNeighbourhoodGreyLevelDifference::ParameterStruct params)
std::vector< std::string > FeatureNameListType
itk::Image< unsigned char, 3 > ImageType
virtual void SetLongName(std::string _arg)
void AddArguments(mitkCommandLineParser &parser) override
virtual void SetDirection(int _arg)
FeatureNameListType GetFeatureNames() override
Returns a list of the names of all features that are calculated from this class.
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)
This class computes run length descriptions from an image.
virtual void SetShortName(std::string _arg)
std::vector< std::pair< std::string, double > > FeatureListType
GIFNeighbourhoodGreyLevelDifference()
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...
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.
FeatureListType CalculateFeatures(const Image::Pointer &image, const Image::Pointer &feature) override
Calculates the Cooccurence-Matrix based features for this class.
mitk::Image::Pointer mask
virtual ParameterTypes GetParameter() const