Skip to content

Commit c1039d5

Browse files
authored
Merge pull request #41 from blowekamp/AddMaskImageTypeTemplateArgument
ENH: Add template parameter to specify the mask image type
2 parents 624000d + 6152557 commit c1039d5

14 files changed

+87
-76
lines changed

include/itkCoocurrenceTextureFeaturesImageFilter.h

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,10 @@ namespace Statistics
8282
**/
8383

8484
template< typename TInputImage,
85-
typename TOutputImage>
86-
class ITK_TEMPLATE_EXPORT CoocurrenceTextureFeaturesImageFilter:public ImageToImageFilter< TInputImage, TOutputImage >
85+
typename TOutputImage,
86+
typename TMaskImage = Image< unsigned char, TInputImage::ImageDimension> >
87+
class ITK_TEMPLATE_EXPORT CoocurrenceTextureFeaturesImageFilter
88+
: public ImageToImageFilter< TInputImage, TOutputImage >
8789
{
8890
public:
8991
/** Standard typedefs */
@@ -100,7 +102,7 @@ class ITK_TEMPLATE_EXPORT CoocurrenceTextureFeaturesImageFilter:public ImageToIm
100102

101103
typedef TInputImage InputImageType;
102104
typedef TOutputImage OutputImageType;
103-
typedef TInputImage MaskImageType;
105+
typedef TMaskImage MaskImageType;
104106
typedef TInputImage DigitizedImageType;
105107

106108
typedef typename InputImageType::PixelType PixelType;
@@ -128,10 +130,10 @@ class ITK_TEMPLATE_EXPORT CoocurrenceTextureFeaturesImageFilter:public ImageToIm
128130
itkGetConstMacro(NeighborhoodRadius, NeighborhoodRadiusType);
129131

130132
/** Method to set the mask image */
131-
itkSetInputMacro(MaskImage, InputImageType);
133+
itkSetInputMacro(MaskImage, MaskImageType);
132134

133135
/** Method to get the mask image */
134-
itkGetInputMacro(MaskImage, InputImageType);
136+
itkGetInputMacro(MaskImage, MaskImageType);
135137

136138

137139
/** Specify the default number of bins per axis */
@@ -182,8 +184,8 @@ class ITK_TEMPLATE_EXPORT CoocurrenceTextureFeaturesImageFilter:public ImageToIm
182184
* Set the pixel value of the mask that should be considered "inside" the
183185
* object. Defaults to 1.
184186
*/
185-
itkSetMacro( InsidePixelValue, PixelType );
186-
itkGetConstMacro( InsidePixelValue, PixelType );
187+
itkSetMacro( InsidePixelValue, MaskPixelType );
188+
itkGetConstMacro( InsidePixelValue, MaskPixelType );
187189

188190
/** Set the calculator to normalize the histogram (divide all bins by the
189191
total frequency). Normalization is off by default. */
@@ -234,7 +236,7 @@ class ITK_TEMPLATE_EXPORT CoocurrenceTextureFeaturesImageFilter:public ImageToIm
234236
unsigned int m_NumberOfBinsPerAxis;
235237
PixelType m_HistogramMinimum;
236238
PixelType m_HistogramMaximum;
237-
PixelType m_InsidePixelValue;
239+
MaskPixelType m_InsidePixelValue;
238240
bool m_Normalize;
239241

240242

include/itkCoocurrenceTextureFeaturesImageFilter.hxx

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ namespace itk
2828
{
2929
namespace Statistics
3030
{
31-
template< typename TInputImage, typename TOutputImage>
32-
CoocurrenceTextureFeaturesImageFilter< TInputImage, TOutputImage >
31+
template< typename TInputImage, typename TOutputImage, typename TMaskImage>
32+
CoocurrenceTextureFeaturesImageFilter< TInputImage, TOutputImage, TMaskImage>
3333
::CoocurrenceTextureFeaturesImageFilter() :
3434
m_NumberOfBinsPerAxis( itkGetStaticConstMacro( DefaultBinsPerAxis ) ),
3535
m_HistogramMinimum( NumericTraits<PixelType>::NonpositiveMin() ),
3636
m_HistogramMaximum( NumericTraits<PixelType>::max() ),
37-
m_InsidePixelValue( NumericTraits<PixelType>::OneValue() )
37+
m_InsidePixelValue( NumericTraits<MaskPixelType>::OneValue() )
3838
{
3939
this->SetNumberOfRequiredInputs( 1 );
4040
this->SetNumberOfRequiredOutputs( 1 );
@@ -70,19 +70,19 @@ CoocurrenceTextureFeaturesImageFilter< TInputImage, TOutputImage >
7070
this->m_Normalize = false;
7171
}
7272

73-
template<typename TInputImage, typename TOutputImage>
73+
template<typename TInputImage, typename TOutputImage, typename TMaskImage>
7474
void
75-
CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage>
75+
CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage, TMaskImage>
7676
::SetOffset( const OffsetType offset )
7777
{
7878
OffsetVectorPointer offsetVector = OffsetVector::New();
7979
offsetVector->push_back( offset );
8080
this->SetOffsets( offsetVector );
8181
}
8282

83-
template<typename TInputImage, typename TOutputImage>
83+
template<typename TInputImage, typename TOutputImage, typename TMaskImage>
8484
void
85-
CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage>
85+
CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage, TMaskImage>
8686
::BeforeThreadedGenerateData()
8787
{
8888

@@ -100,8 +100,8 @@ CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage>
100100
typename FilterType::Pointer filter = FilterType::New();
101101
if (this->GetMaskImage() != ITK_NULLPTR)
102102
{
103-
typename TInputImage::Pointer mask = MaskImageType::New();
104-
mask->Graft(const_cast<TInputImage *>(this->GetMaskImage()));
103+
typename TMaskImage::Pointer mask = MaskImageType::New();
104+
mask->Graft(const_cast<TMaskImage *>(this->GetMaskImage()));
105105
filter->SetInput1(mask);
106106
}
107107
else
@@ -116,19 +116,19 @@ CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage>
116116
m_DigitizedInputImage = filter->GetOutput();
117117
}
118118

119-
template<typename TInputImage, typename TOutputImage>
119+
template<typename TInputImage, typename TOutputImage, typename TMaskImage>
120120
void
121-
CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage>
121+
CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage, TMaskImage>
122122
::AfterThreadedGenerateData()
123123
{
124124
// Free internal image
125125
this->m_DigitizedInputImage = ITK_NULLPTR;
126126
}
127127

128128

129-
template<typename TInputImage, typename TOutputImage>
129+
template<typename TInputImage, typename TOutputImage, typename TMaskImage>
130130
void
131-
CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage>
131+
CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage, TMaskImage>
132132
::ThreadedGenerateData(const OutputRegionType & outputRegionForThread,
133133
ThreadIdType threadId)
134134
{
@@ -250,9 +250,9 @@ CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage>
250250
}
251251
}
252252

253-
template<typename TInputImage, typename TOutputImage>
253+
template<typename TInputImage, typename TOutputImage, typename TMaskImage>
254254
void
255-
CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage>
255+
CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage, TMaskImage>
256256
::GenerateOutputInformation()
257257
{
258258
// Call superclass's version
@@ -269,9 +269,9 @@ CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage>
269269
}
270270
}
271271

272-
template<typename TInputImage, typename TOutputImage>
272+
template<typename TInputImage, typename TOutputImage, typename TMaskImage>
273273
bool
274-
CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage>
274+
CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage, TMaskImage>
275275
::IsInsideNeighborhood(const OffsetType &iteratedOffset)
276276
{
277277
bool insideNeighborhood = true;
@@ -287,9 +287,9 @@ CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage>
287287
return insideNeighborhood;
288288
}
289289

290-
template<typename TInputImage, typename TOutputImage>
290+
template<typename TInputImage, typename TOutputImage, typename TMaskImage>
291291
void
292-
CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage>
292+
CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage, TMaskImage>
293293
::ComputeFeatures( const vnl_matrix<unsigned int> &hist, const unsigned int totalNumberOfFreq,
294294
typename TOutputImage::PixelType &outputPixel)
295295
{
@@ -364,9 +364,9 @@ CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage>
364364
outputPixel[7] = haralickCorrelation;
365365
}
366366

367-
template<typename TInputImage, typename TOutputImage>
367+
template<typename TInputImage, typename TOutputImage, typename TMaskImage>
368368
void
369-
CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage>
369+
CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage, TMaskImage>
370370
::ComputeMeansAndVariances(const vnl_matrix<unsigned int> &hist,
371371
const unsigned int totalNumberOfFreq,
372372
double & pixelMean,
@@ -441,9 +441,9 @@ CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage>
441441
delete[] marginalSums;
442442
}
443443

444-
template<typename TInputImage, typename TOutputImage>
444+
template<typename TInputImage, typename TOutputImage, typename TMaskImage>
445445
void
446-
CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage>
446+
CoocurrenceTextureFeaturesImageFilter<TInputImage, TOutputImage, TMaskImage>
447447
::PrintSelf(std::ostream & os, Indent indent) const
448448
{
449449

include/itkRunLengthTextureFeaturesImageFilter.h

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,10 @@ namespace Statistics
9595
*/
9696

9797
template< typename TInputImage,
98-
typename TOutputImage>
99-
class ITK_TEMPLATE_EXPORT RunLengthTextureFeaturesImageFilter:public ImageToImageFilter< TInputImage, TOutputImage >
98+
typename TOutputImage,
99+
typename TMaskImage = Image< unsigned char, TInputImage::ImageDimension> >
100+
class ITK_TEMPLATE_EXPORT RunLengthTextureFeaturesImageFilter
101+
: public ImageToImageFilter< TInputImage, TOutputImage >
100102
{
101103
public:
102104
/** Standard typedefs */
@@ -113,10 +115,11 @@ class ITK_TEMPLATE_EXPORT RunLengthTextureFeaturesImageFilter:public ImageToImag
113115

114116
typedef TInputImage InputImageType;
115117
typedef TOutputImage OutputImageType;
116-
typedef TInputImage MaskImageType;
118+
typedef TMaskImage MaskImageType;
117119
typedef TInputImage DigitizedImageType;
118120

119121
typedef typename InputImageType::PixelType PixelType;
122+
typedef typename MaskImageType::PixelType MaskPixelType;
120123
typedef typename InputImageType::IndexType IndexType;
121124
typedef typename InputImageType::PointType PointType;
122125

@@ -140,10 +143,10 @@ class ITK_TEMPLATE_EXPORT RunLengthTextureFeaturesImageFilter:public ImageToImag
140143
itkGetConstMacro(NeighborhoodRadius, NeighborhoodRadiusType);
141144

142145
/** Method to set the mask image */
143-
itkSetInputMacro(MaskImage, InputImageType);
146+
itkSetInputMacro(MaskImage, MaskImageType);
144147

145148
/** Method to get the mask image */
146-
itkGetInputMacro(MaskImage, InputImageType);
149+
itkGetInputMacro(MaskImage, MaskImageType);
147150

148151

149152
/** Specify the default number of bins per axis */
@@ -211,8 +214,8 @@ class ITK_TEMPLATE_EXPORT RunLengthTextureFeaturesImageFilter:public ImageToImag
211214
* Set the pixel value of the mask that should be considered "inside" the
212215
* object. Defaults to 1.
213216
*/
214-
itkSetMacro( InsidePixelValue, PixelType );
215-
itkGetConstMacro( InsidePixelValue, PixelType );
217+
itkSetMacro( InsidePixelValue, MaskPixelType );
218+
itkGetConstMacro( InsidePixelValue, MaskPixelType );
216219

217220
typedef typename OutputImageType::PixelType OutputPixelType;
218221
typedef typename NumericTraits< OutputPixelType >::ScalarRealType OutputRealType;
@@ -256,7 +259,7 @@ class ITK_TEMPLATE_EXPORT RunLengthTextureFeaturesImageFilter:public ImageToImag
256259
PixelType m_HistogramValueMaximum;
257260
RealType m_HistogramDistanceMinimum;
258261
RealType m_HistogramDistanceMaximum;
259-
PixelType m_InsidePixelValue;
262+
MaskPixelType m_InsidePixelValue;
260263
typename TInputImage::SpacingType m_Spacing;
261264
};
262265
} // end of namespace Statistics

include/itkRunLengthTextureFeaturesImageFilter.hxx

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,15 @@ namespace itk
2828
{
2929
namespace Statistics
3030
{
31-
template< typename TInputImage, typename TOutputImage>
32-
RunLengthTextureFeaturesImageFilter< TInputImage, TOutputImage >
31+
template< typename TInputImage, typename TOutputImage, typename TMaskImage>
32+
RunLengthTextureFeaturesImageFilter< TInputImage, TOutputImage, TMaskImage>
3333
::RunLengthTextureFeaturesImageFilter() :
3434
m_NumberOfBinsPerAxis( itkGetStaticConstMacro( DefaultBinsPerAxis ) ),
3535
m_HistogramValueMinimum( NumericTraits<PixelType>::NonpositiveMin() ),
3636
m_HistogramValueMaximum( NumericTraits<PixelType>::max() ),
3737
m_HistogramDistanceMinimum( NumericTraits<RealType>::ZeroValue() ),
3838
m_HistogramDistanceMaximum( NumericTraits<RealType>::max() ),
39-
m_InsidePixelValue( NumericTraits<PixelType>::OneValue() ),
39+
m_InsidePixelValue( NumericTraits<MaskPixelType>::OneValue() ),
4040
m_Spacing( 1.0 )
4141
{
4242
this->SetNumberOfRequiredInputs( 1 );
@@ -71,19 +71,19 @@ RunLengthTextureFeaturesImageFilter< TInputImage, TOutputImage >
7171
this->m_NeighborhoodRadius = nhood.GetRadius( );
7272
}
7373

74-
template<typename TInputImage, typename TOutputImage>
74+
template<typename TInputImage, typename TOutputImage, typename TMaskImage>
7575
void
76-
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage>
76+
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage, TMaskImage>
7777
::SetOffset( const OffsetType offset )
7878
{
7979
OffsetVectorPointer offsetVector = OffsetVector::New();
8080
offsetVector->push_back( offset );
8181
this->SetOffsets( offsetVector );
8282
}
8383

84-
template<typename TInputImage, typename TOutputImage>
84+
template<typename TInputImage, typename TOutputImage, typename TMaskImage>
8585
void
86-
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage>
86+
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage, TMaskImage>
8787
::BeforeThreadedGenerateData()
8888
{
8989

@@ -101,8 +101,8 @@ RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage>
101101
typename FilterType::Pointer filter = FilterType::New();
102102
if (this->GetMaskImage() != ITK_NULLPTR)
103103
{
104-
typename TInputImage::Pointer mask = MaskImageType::New();
105-
mask->Graft(const_cast<TInputImage *>(this->GetMaskImage()));
104+
typename TMaskImage::Pointer mask = MaskImageType::New();
105+
mask->Graft(const_cast<TMaskImage *>(this->GetMaskImage()));
106106
filter->SetInput1(mask);
107107
}
108108
else
@@ -120,19 +120,19 @@ RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage>
120120
}
121121

122122

123-
template<typename TInputImage, typename TOutputImage>
123+
template<typename TInputImage, typename TOutputImage, typename TMaskImage>
124124
void
125-
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage>
125+
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage, TMaskImage>
126126
::AfterThreadedGenerateData()
127127
{
128128
// free internal image
129129
this->m_DigitizedInputImage = ITK_NULLPTR;
130130
}
131131

132132

133-
template<typename TInputImage, typename TOutputImage>
133+
template<typename TInputImage, typename TOutputImage, typename TMaskImage>
134134
void
135-
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage>
135+
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage, TMaskImage>
136136
::ThreadedGenerateData(const OutputRegionType & outputRegionForThread,
137137
ThreadIdType threadId)
138138
{
@@ -295,9 +295,9 @@ RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage>
295295

296296
}
297297

298-
template<typename TInputImage, typename TOutputImage>
298+
template<typename TInputImage, typename TOutputImage, typename TMaskImage>
299299
void
300-
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage>
300+
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage, TMaskImage>
301301
::GenerateOutputInformation()
302302
{
303303
Superclass::GenerateOutputInformation();
@@ -313,9 +313,9 @@ RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage>
313313
}
314314
}
315315

316-
template<typename TInputImage, typename TOutputImage>
316+
template<typename TInputImage, typename TOutputImage, typename TMaskImage>
317317
void
318-
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage>
318+
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage, TMaskImage>
319319
::NormalizeOffsetDirection(OffsetType &offset)
320320
{
321321
itkDebugMacro("old offset = " << offset << std::endl);
@@ -337,9 +337,9 @@ RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage>
337337
itkDebugMacro("new offset = " << offset << std::endl);
338338
}
339339

340-
template<typename TInputImage, typename TOutputImage>
340+
template<typename TInputImage, typename TOutputImage, typename TMaskImage>
341341
bool
342-
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage>
342+
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage, TMaskImage>
343343
::IsInsideNeighborhood(const OffsetType &iteratedOffset)
344344
{
345345
bool insideNeighborhood = true;
@@ -355,9 +355,9 @@ RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage>
355355
return insideNeighborhood;
356356
}
357357

358-
template<typename TInputImage, typename TOutputImage>
358+
template<typename TInputImage, typename TOutputImage, typename TMaskImage>
359359
void
360-
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage>
360+
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage, TMaskImage>
361361
::IncreaseHistogram(vnl_matrix<unsigned int> &histogram, unsigned int &totalNumberOfRuns,
362362
const PixelType &currentInNeighborhoodPixelIntensity,
363363
const OffsetType &offset, const unsigned int &pixelDistance)
@@ -377,9 +377,9 @@ RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage>
377377
}
378378
}
379379

380-
template<typename TInputImage, typename TOutputImage>
380+
template<typename TInputImage, typename TOutputImage, typename TMaskImage>
381381
void
382-
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage>
382+
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage, TMaskImage>
383383
::ComputeFeatures( vnl_matrix<unsigned int> &histogram, const unsigned int &totalNumberOfRuns,
384384
typename TOutputImage::PixelType &outputPixel)
385385
{
@@ -464,9 +464,9 @@ RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage>
464464

465465
}
466466

467-
template<typename TInputImage, typename TOutputImage>
467+
template<typename TInputImage, typename TOutputImage, typename TMaskImage>
468468
void
469-
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage>
469+
RunLengthTextureFeaturesImageFilter<TInputImage, TOutputImage, TMaskImage>
470470
::PrintSelf(std::ostream & os, Indent indent) const
471471
{
472472
Superclass::PrintSelf( os, indent );

0 commit comments

Comments
 (0)