template<class TInput1, class TInput2, class TOutput>
{
public:
const TInput2& itB)
{
TOutput result = 0.0;
for (unsigned long pos = 0; pos < itA.Size(); ++pos)
{
result += static_cast<TOutput>(itA.GetPixel(pos) - itB.GetPixel(pos));
}
return static_cast<TOutput>(result / itA.Size());
}
};
template <class TInputImage1, class TInputImage2, class TOutputImage>
TInputImage1, TInputImage2, TOutputImage,
MyChangeDetector<
typename itk::ConstNeighborhoodIterator<TInputImage1>,
typename itk::ConstNeighborhoodIterator<TInputImage2>,
typename TOutputImage::PixelType> >
{
public:
TInputImage1, TInputImage2, TOutputImage,
typename TOutputImage::PixelType>
itkNewMacro(Self);
protected:
private:
};
int main(
int argc,
char* argv[])
{
if (argc < 5)
{
std::cerr << "Usage: " << std::endl;
std::cerr << argv[0] <<
" inputImageFile1 inputImageFile2 radius outputImageFile " << std::endl;
return -1;
}
const unsigned int Dimension = 2;
typedef float InternalPixelType;
typedef unsigned char OutputPixelType;
OutputImageType> RescalerType;
ReaderType1::Pointer reader1 = ReaderType1::New();
ReaderType2::Pointer reader2 = ReaderType2::New();
WriterType::Pointer writer = WriterType::New();
RescalerType::Pointer rescaler = RescalerType::New();
const char * inputFilename1 = argv[1];
const char * inputFilename2 = argv[2];
const char * outputFilename = argv[4];
reader1->SetFileName(inputFilename1);
reader2->SetFileName(inputFilename2);
writer->SetFileName(outputFilename);
rescaler->SetOutputMinimum(itk::NumericTraits<OutputPixelType>::min());
rescaler->SetOutputMaximum(itk::NumericTraits<OutputPixelType>::max());
filter->SetInput1(reader1->GetOutput());
filter->SetInput2(reader2->GetOutput());
filter->SetRadius(atoi(argv[3]));
rescaler->SetInput(filter->GetOutput());
writer->SetInput(rescaler->GetOutput());
CommandType::Pointer observer = CommandType::New();
try
{
writer->Update();
}
{
std::cout << "ExceptionObject caught !" << std::endl;
std::cout << err << std::endl;
return -1;
}
return EXIT_SUCCESS;
}