21 #ifndef __otbPrintableImageFilter_txx
22 #define __otbPrintableImageFilter_txx
29 template <
class TInputImage,
class TMaskImage>
34 m_Rescaler = VectorRescalerType::New();
35 m_Extractor = ChannelExtractorType::New();
37 m_Rescaler->SetInput(m_Extractor->GetOutput());
38 m_MaskFilter = FunctorFilterType::New();
43 m_ObjectColor.SetSize(3);
44 m_ObjectColor.Fill(255);
46 m_BackgroundMaskValue = 0;
49 template <
class TInputImage,
class TMaskImage>
54 m_ChannelList.push_back(channel);
55 m_Extractor->SetChannel(channel);
59 template <
class TInputImage,
class TMaskImage>
67 template <
class TInputImage,
class TMaskImage>
76 template <
class TInputImage,
class TMaskImage>
81 if (this->GetNumberOfInputs() < 2)
88 template <
class TInputImage,
class TMaskImage>
94 Superclass::GenerateOutputInformation();
97 outputPtr->SetNumberOfComponentsPerPixel(3);
100 template <
class TInputImage,
class TMaskImage>
105 if (m_Extractor->GetNbChannels() == 0 && m_ChannelList.size() > 3)
107 itkExceptionMacro(<<
"Invalid channel list (must be three channels instead of " << m_ChannelList.size());
109 if (m_Extractor->GetNbChannels() == 0 && m_Extractor->GetNbChannels() > 3)
111 itkExceptionMacro(<<
"Invalid channel list (must be three channels instead of " << m_Extractor->GetNbChannels());
113 if (m_ObjectColor.GetSize() != 3)
115 itkExceptionMacro(<<
"Invalid m_ObjectColor pixel size");
118 if (m_UseMask ==
true)
121 typename InputImageType::ConstPointer inputPtr = this->GetInput();
125 itkExceptionMacro(<<
"No mask detected");
127 if (inputMaskPtr->GetLargestPossibleRegion().GetSize() != inputPtr->GetLargestPossibleRegion().GetSize())
130 <<
"Input size (" << inputPtr->GetLargestPossibleRegion().GetSize() <<
") and Mask size (" <<
131 inputMaskPtr->GetLargestPossibleRegion().GetSize() <<
") must be the same");
140 template <
class TInputImage,
class TMaskImage>
145 this->BeforeGenerateData();
148 if (m_Extractor->GetNbChannels() == 0)
150 for (
unsigned int i = 0; i < m_ChannelList.size(); ++i)
151 m_Extractor->SetChannel(m_ChannelList[i]);
154 m_Extractor->SetInput(this->GetInput());
155 m_Extractor->UpdateOutputInformation();
157 typename TInputImage::PixelType minimum, maximum;
158 minimum.SetSize(m_Extractor->GetNbChannels());
159 maximum.SetSize(m_Extractor->GetNbChannels());
163 m_Rescaler->SetOutputMinimum(minimum);
164 m_Rescaler->SetOutputMaximum(maximum);
165 m_Rescaler->SetClampThreshold(0.01);
167 if (m_UseMask ==
false)
169 m_Rescaler->GraftOutput(this->GetOutput());
170 m_Rescaler->Update();
171 this->GraftOutput(m_Rescaler->GetOutput());
175 m_MaskFilter->SetInput1(m_Rescaler->GetOutput());
176 m_MaskFilter->SetInput2(this->GetInputMask());
177 m_MaskFilter->GraftOutput(this->GetOutput());
178 m_MaskFilter->Update();
179 this->GraftOutput(m_MaskFilter->GetOutput());
184 template <
class TInputImage,
class TMaskImage>
189 Superclass::PrintSelf(os, indent);