diff --git a/Testing/Utilities/itkScaleInvariantFeatureImageFilterHistTest.cxx b/Testing/Utilities/itkScaleInvariantFeatureImageFilterHistTest.cxx
deleted file mode 100644
index f8ebb3addf9941a3e16d1a42206c77ab70d1d10d..0000000000000000000000000000000000000000
--- a/Testing/Utilities/itkScaleInvariantFeatureImageFilterHistTest.cxx
+++ /dev/null
@@ -1,419 +0,0 @@
-/*=========================================================================
-Program: ITK nSIFT Implemention - Command Line Wrapper
-Module: $RCSfile: testnD.cxx,v $
-Language: C++
-Date: $Date: 2007/11/25 15:51:48 $
-Version: $Revision: 1.0 $
-Copyright (c) 2005,2006,2007 Warren Cheung
-All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-* Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.
-* The name of the Insight Consortium, nor the names of any consortium members,
-nor of any contributors, may be used to endorse or promote products derived
-from this software without specific prior written permission.
-* Modified source versions must be plainly marked as such, and must not be
-misrepresented as being the original software.
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-=========================================================================*/
-
-#define VERBOSE
-//#define DEBUG
-//#define DEBUG_VERBOSE
-
-//#define SIFT_FEATURE
-//#define REORIENT
-
-#define GENERATE_KEYS 
-//#define SUBSAMPLE
-#define CROP
-//#define DO_DOUBLE
-
-#include "itkScaleInvariantFeatureImageFilter.h"
-#include "itkImageSeriesReader.h"
-#include "itkNumericSeriesFileNames.h"
-#include "itkPointSetToImageFilter.h"
-#include "itkImageFileWriter.h"
-#include <getopt.h>
-
-int itk2DScaleInvariantFeatureImageFilterHist( int argc, char *argv[] )
-{
-  // Command Line Arguments
-  unsigned int ARG_IMG1=2;
-  unsigned int ARG_IMG2=3;
-
-  const unsigned int    Dimension = 2;
-  
-  // Default scale is 1.0
-  double test_scale = 1.0;
-  float test_rotate = 0.0;  // 0 degrees
-  double test_crop = 0.5;
-  //  float test_rotate = 0.0874;  // 5 degrees
-  //float test_rotate = 0.1748;  // 10 degrees
-  int series_start = 1;
-  int series_end = 9;
-  int series_inc = 1;
-
-  int mode = 'i';  /* defaults to comparing 2 images */;
-  int rotate_middle=0; /* defaults to rotating around the origin */
-  
-#define OPT_SCALE 'x'
-#define OPT_ROTATE 'r'
-#define OPT_DIM 'd'
-#define OPT_CROP 'c'
-#define OPT_SERIES_START 's'
-#define OPT_SERIES_END 'e'
-#define OPT_SERIES_INC 'i'
-
-  /* new Getopt code */
-  while(1) {
-    static struct option long_options[] =
-      {
-	/* These options set a flag.   */
-	{"synthetic", 0, &mode, 's'},
-	{"image", 0, &mode, 'i'},
-	{"rotate-mid", 0, &rotate_middle, 1},
-	/* These options don't set a flag.
-	   We distinguish them by their indices.  */
-	{"scale", required_argument, 0, OPT_SCALE},
-	{"rotate", required_argument, 0, OPT_ROTATE},
-	{"crop", required_argument, 0, OPT_CROP},
-	{"series-start", required_argument, 0, OPT_SERIES_START},
-	{"series-end", required_argument, 0, OPT_SERIES_END},
-	{"series-inc", required_argument, 0, OPT_SERIES_INC},
-	//	{"dimension", required_argument, 0, OPT_DIM},
-	{0, 0, 0, 0}
-      };    
-
-    int optindex;
-    int val = getopt_long(argc, argv, "", long_options, &optindex);
-
-    if (val == -1)
-      break;
-
-    switch(val) {
-    case OPT_SCALE:
-      test_scale = atof(optarg);
-      break;
-    case OPT_ROTATE:
-      if (atof(optarg) >= 0.0 && atof(optarg) <= 360.0)
-      test_rotate = atof(optarg) * PI * 2.0 / 360.0;
-      break;
-    case OPT_CROP:
-      if (atof(optarg) <= 1.0) {
-	test_crop = atof(optarg);
-      }
-      break;
-    case OPT_SERIES_START:
-      series_start = atoi(optarg);
-      break;
-    case OPT_SERIES_END:
-      series_end = atoi(optarg);
-      break;
-    case OPT_SERIES_INC:
-      series_inc = atoi(optarg);
-      break;
-      /*
-    case OPT_DIM:
-      Dimension = atoi(optarg);
-      break;
-      */
-    }
-  }
-
-  ARG_IMG1 = optind;
-  ARG_IMG2 = optind+1;
-  
-  typedef  float  PixelType;
-  typedef itk::Image< PixelType, Dimension >  FixedImageType;
-  typedef itk::ScaleInvariantFeatureImageFilter<FixedImageType, Dimension> SiftFilterType;
-  typedef itk::Image<unsigned char, Dimension> OutputImageType;
-  
-  typedef itk::ImageSource< FixedImageType > ImageSourceType;
-
-  ImageSourceType::Pointer fixedImageReader, fixedImageReader2;
-
-  typedef itk::PointSetToImageFilter<SiftFilterType::PointSetType, OutputImageType> PointSetFilterType;
-  
-  if( static_cast<unsigned int>(argc) <= ARG_IMG1 || (mode == 'i' && static_cast<unsigned int>(argc) <= ARG_IMG2))
-    {
-      std::cerr << "Incorrect number of parameters " << std::endl;
-      std::cerr << std::endl;
-      std::cerr << "siftkeys program ( ";
-      std::cerr << Dimension << "D ";      
-#ifdef SIFT_FEATURE
-      std::cerr << "sift-feature ";
-#else
-      std::cerr << "histogram-feature ";
-#endif
-#ifdef REORIENT
-      std::cerr << "reoriented ";
-#endif
-      std::cerr << ")" << std::endl;
-
-      std::cerr << "Usage: \n";
-      std::cerr  << argv[0] << " [options] ImageFile [ImageFile2]\n"; 
-      std::cerr << "This program takes an input image file(s) and generates scale invariant features." << std::endl;
-      std::cerr << std::endl;
-      std::cerr << "Image Processing Options (Choose ONE):" << std::endl;
-      std::cerr << "--image" << std::endl;
-      std::cerr << " compare ImageFile and ImageFile2" << std::endl;
-      std::cerr << "\nOR\n" << std::endl;
-      std::cerr << "--synthetic" << std::endl;
-      std::cerr << " compare ImageFile to synthetically generated version" << std::endl;
-      std::cerr << "Synthetic Image Options:" << std::endl;
-      std::cerr << "--rotate value" << std::endl;
-      std::cerr << "  rotate synthetic image on first axis by value degrees" << std::endl;
-      std::cerr << "--rotate-middle" << std::endl;
-      std::cerr << "  centre of rotation at the centre of image (defaults to origin)" << std::endl;
-      std::cerr << "--scale value" << std::endl;
-      std::cerr << "  scale all axes of synthetic image by value" << std::endl;
-      std::cerr << "--tmp directory" << std::endl;
-      std::cerr << "  temporary directory" << std::endl;
-      std::cerr << std::endl;
-      return 1;
-    }
-
-  std::cerr << "Dimension = " << Dimension << "\n";
-  std::cerr << "Test Scale = " << test_scale << "\n";
-  std::cerr << "Test Rotate = " << test_rotate << "\n";
-  std::cerr << "Image Crop Ratio (first 3D) = " << test_crop << "\n";
-  std::cerr << "Mode = " << (char) mode << "\n";
-  std::cerr << "ImageFile1 = " << argv[optind] << "\n";
-  if (Dimension == 4) {
-    std::cerr << "Image Series Start = " << series_start << "\n";
-    std::cerr << "Image Series End = " << series_end << "\n";
-    std::cerr << "Image Series Inc = " << series_inc << "\n";
-  }
-
-#ifdef SIFT_FEATURE
-  std::cerr << "SIFT Feature\n" << std::endl;
-#else
-  std::cerr << "Histogram Feature\n" << std::endl;
-#endif
-
-#ifdef REORIENT
-  std::cerr << "Reorientation enabled\n" << std::endl;  
-#endif
-
-  if (Dimension == 4) {
-    /* Assume fileseries reader */
-    typedef itk::ImageSeriesReader< FixedImageType  > FixedImageReaderType;
-    FixedImageReaderType::Pointer tmpImageReader  = FixedImageReaderType::New();
-
-    typedef itk::NumericSeriesFileNames NameGeneratorType;
-    NameGeneratorType::Pointer nameGenerator = NameGeneratorType::New();
-    
-    nameGenerator->SetSeriesFormat( argv[ARG_IMG1] );
-    nameGenerator->SetStartIndex( series_start );
-    nameGenerator->SetEndIndex( series_end );
-    nameGenerator->SetIncrementIndex( series_inc );
-        
-    tmpImageReader->SetFileNames( nameGenerator->GetFileNames() );
-
-    fixedImageReader = tmpImageReader;
-  } else {
-    typedef itk::ImageFileReader< FixedImageType  > FixedImageReaderType;
-    FixedImageReaderType::Pointer tmpImageReader  = FixedImageReaderType::New();
-    tmpImageReader  = FixedImageReaderType::New();
-
-    tmpImageReader->SetFileName(  argv[ARG_IMG1] );
-    fixedImageReader=tmpImageReader;
-  }
-  fixedImageReader->Update();
-
-  typedef itk::ScalableAffineTransform< double, Dimension > ScaleType;
-#ifdef CROP
-  ScaleType::Pointer no_transform = ScaleType::New();
-  no_transform->SetIdentity();
-  
-  SiftFilterType::ResampleFilterType::Pointer cropper = SiftFilterType::ResampleFilterType::New();
-  cropper->SetInput(fixedImageReader->GetOutput());
-  FixedImageType::SizeType cropsize = 
-    fixedImageReader->GetOutput()->GetLargestPossibleRegion().GetSize();
-  for (unsigned int k = 0; k < Dimension; ++k) {
-    if (k < 4)
-      cropsize[k] = (int) (cropsize[k] * test_crop);
-  }
-  cropper->SetSize( cropsize );
-  cropper->SetOutputSpacing(fixedImageReader->GetOutput()->GetSpacing());
-  cropper->SetTransform(no_transform);
-  cropper->Update();
-  FixedImageType::Pointer fixedImage = cropper->GetOutput();
-#else
-  FixedImageType::Pointer fixedImage = fixedImageReader->GetOutput();  
-#endif
-
-  SiftFilterType::PointSetTypePointer keypoints1, keypoints2;
-  PointSetFilterType::Pointer pointSet1 = PointSetFilterType::New();
-  PointSetFilterType::Pointer pointSet2 = PointSetFilterType::New();
-
-  SiftFilterType siftFilter1, siftFilter2;
-  
-#ifdef DEBUG
-  siftFilter1.writeImage(fixedImage, "tmp0.png");
-  std::cout << std::endl << "Starting SIFT Feature Extraction...\n";
-#endif
-  
-  keypoints1 = siftFilter1.getSiftFeatures(fixedImage);
-  
-  pointSet1->SetInput(keypoints1);
-  pointSet1->SetOutsideValue(0);
-  pointSet1->SetInsideValue(255);
-  pointSet1->SetSize(fixedImageReader->GetOutput()->GetLargestPossibleRegion().GetSize());
-  
-  typedef itk::ImageFileWriter<OutputImageType> WriterType;
-  
-  WriterType::Pointer writer = WriterType::New();
-  writer->SetFileName("tmp0_keys.png");
-  writer->SetInput(pointSet1->GetOutput());
-  writer->Update();
-  
-  typedef itk::ScalableAffineTransform< double, Dimension > TestTransformType;
-  TestTransformType::Pointer inv_test_transform;
-  
-  // Synthetic test image
-  if (mode=='s') {
-    std::cerr << std::endl << "Synthetic image mode\n";  
-    TestTransformType::Pointer test_transform = TestTransformType::New();
-    
-    inv_test_transform = TestTransformType::New();
-           
-    TestTransformType::InputPointType translate_vector;
-            
-    test_transform->SetIdentity();
-    test_transform->Scale( 1.0 / test_scale);
-    if (rotate_middle) {
-      std::cerr << "Rotation centred at middle of image." << std::endl;    
-      /* Cycle through each dimension and shift by half*/
-      FixedImageType::SizeType size = 
-	fixedImage->GetLargestPossibleRegion().GetSize();
-      for (unsigned int k = 0; k < Dimension; ++k)
-	translate_vector[k] = size[k]/2.0;
-      test_transform->SetCenter( translate_vector);
-    } else {
-      std::cerr << "Rotation centred at origin." << std::endl;    
-    }
-#if 0
-    if (rotate_middle) {
-      std::cerr << "Rotation centred at middle of image." << std::endl;    
-      /* Cycle through each dimension and shift by half*/
-      FixedImageType::SizeType size = 
-	fixedImage->GetLargestPossibleRegion().GetSize();
-      for (unsigned int k = 0; k < Dimension; ++k)
-	translate_vector[k] = size[k]/2.0;
-      test_transform->Translate( translate_vector);
-    } else {
-      std::cerr << "Rotation centred at origin." << std::endl;    
-    }
-#endif 
-
-    test_transform->Rotate(0,1,test_rotate);
-
-#if 0
-    if (rotate_middle) {
-      /* Cycle through each dimension and shift back*/
-      for (unsigned int k = 0; k < Dimension; ++k)
-	translate_vector[k] = -translate_vector[k];
-      test_transform->Translate( translate_vector);
-    }
-#endif
-    
-    test_transform->GetInverse(inv_test_transform);
-    
-    {
-      FixedImageType::Pointer scaledImage;
-      
-      SiftFilterType::ResampleFilterType::Pointer scaler = SiftFilterType::ResampleFilterType::New();
-      scaler->SetInput(fixedImage);
-      FixedImageType::SizeType size = 
-	fixedImage->GetLargestPossibleRegion().GetSize();
-      for (unsigned int k = 0; k < Dimension; ++k)
-	size[k] = (unsigned int) floor(size[k] * test_scale);
-      scaler->SetSize( size );
-      scaler->SetOutputSpacing(fixedImage->GetSpacing());
-      scaler->SetTransform(test_transform);
-      scaler->Update();
-      scaledImage = scaler->GetOutput();
-      
-#ifdef DEBUG
-      siftFilter2.writeImage(scaledImage, "tmp1.png");
-      std::cout << std::endl;
-#endif
-      keypoints2 = siftFilter2.getSiftFeatures(scaledImage);
-    }
-    
-    std::cerr << "Test Image Scale: " << test_scale << std::endl;
-    // std::cerr << "Test Translate: " << test_translate << std::endl;
-    std::cerr << "Test Image Rotate: " << test_rotate << std::endl;    
-  } else if (mode == 'i') {
-    std::cerr << std::endl << "Image Comparison mode\n";  
-    inv_test_transform = NULL;
-
-    if (Dimension == 4) {
-      typedef itk::ImageSeriesReader< FixedImageType  > FixedImageReaderType;
-      FixedImageReaderType::Pointer tmpImageReader  = FixedImageReaderType::New();
-      tmpImageReader  = FixedImageReaderType::New();
-
-      typedef itk::NumericSeriesFileNames NameGeneratorType;
-      NameGeneratorType::Pointer nameGenerator = NameGeneratorType::New();
-      
-      nameGenerator->SetSeriesFormat( argv[ARG_IMG2] );
-      nameGenerator->SetStartIndex( series_start );
-      nameGenerator->SetEndIndex( series_end );
-      nameGenerator->SetIncrementIndex( series_inc );
-      
-      tmpImageReader->SetFileNames( nameGenerator->GetFileNames() );
-      fixedImageReader2 = tmpImageReader;
-    } else {      
-      typedef itk::ImageFileReader< FixedImageType  > FixedImageReaderType;
-      FixedImageReaderType::Pointer tmpImageReader  = FixedImageReaderType::New();
-      tmpImageReader  = FixedImageReaderType::New();
-
-      tmpImageReader->SetFileName(  argv[ARG_IMG2] );
-      fixedImageReader2 = tmpImageReader;
-    }
-    fixedImageReader2->Update();
-
-#ifdef CROP
-    SiftFilterType::ResampleFilterType::Pointer cropper2 = SiftFilterType::ResampleFilterType::New();
-    cropper2->SetInput(fixedImageReader2->GetOutput());
-    FixedImageType::SizeType cropsize2 = 
-      fixedImageReader2->GetOutput()->GetLargestPossibleRegion().GetSize();
-    for (unsigned int k = 0; k < Dimension; ++k) {
-      if (k < 4)
-	cropsize2[k] /= 2;
-    }
-    cropper2->SetSize( cropsize2 );
-    cropper2->SetOutputSpacing(fixedImageReader2->GetOutput()->GetSpacing());
-    cropper2->SetTransform(no_transform);
-    cropper2->Update();
-    FixedImageType::Pointer fixedImage2 = cropper2->GetOutput();
-#else
-    FixedImageType::Pointer fixedImage2 = fixedImageReader2->GetOutput();  
-#endif
-
-    keypoints2 = siftFilter2.getSiftFeatures(fixedImage2);
-  }
-  
-  std::cerr << std::endl << "Matching Keypoints\n";  
-  siftFilter2.MatchKeypointsPos(keypoints1, keypoints2, inv_test_transform);
-#ifdef GENERATE_KEYS
-  siftFilter2.MatchKeypointsFeatures(keypoints1, keypoints2, inv_test_transform);
-#endif
-  return 0;
-
-}
diff --git a/Testing/Utilities/itkScaleInvariantFeatureImageFilterRHistTest.cxx b/Testing/Utilities/itkScaleInvariantFeatureImageFilterRHistTest.cxx
deleted file mode 100644
index 68d2e7b41494bbbc63f75ba156a369e83351bf3b..0000000000000000000000000000000000000000
--- a/Testing/Utilities/itkScaleInvariantFeatureImageFilterRHistTest.cxx
+++ /dev/null
@@ -1,419 +0,0 @@
-/*=========================================================================
-Program: ITK nSIFT Implemention - Command Line Wrapper
-Module: $RCSfile: testnD.cxx,v $
-Language: C++
-Date: $Date: 2007/11/25 15:51:48 $
-Version: $Revision: 1.0 $
-Copyright (c) 2005,2006,2007 Warren Cheung
-All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-* Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.
-* The name of the Insight Consortium, nor the names of any consortium members,
-nor of any contributors, may be used to endorse or promote products derived
-from this software without specific prior written permission.
-* Modified source versions must be plainly marked as such, and must not be
-misrepresented as being the original software.
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-=========================================================================*/
-
-#define VERBOSE
-//#define DEBUG
-//#define DEBUG_VERBOSE
-
-//#define SIFT_FEATURE
-#define REORIENT
-
-#define GENERATE_KEYS 
-//#define SUBSAMPLE
-#define CROP
-//#define DO_DOUBLE
-
-#include "itkScaleInvariantFeatureImageFilter.h"
-#include "itkImageSeriesReader.h"
-#include "itkNumericSeriesFileNames.h"
-#include "itkPointSetToImageFilter.h"
-#include "itkImageFileWriter.h"
-#include <getopt.h>
-
-int itk2DScaleInvariantFeatureImageFilterRHist( int argc, char *argv[] )
-{
-  // Command Line Arguments
-  unsigned int ARG_IMG1=2;
-  unsigned int ARG_IMG2=3;
-
-  const unsigned int    Dimension = 2;
-  
-  // Default scale is 1.0
-  double test_scale = 1.0;
-  float test_rotate = 0.0;  // 0 degrees
-  double test_crop = 0.5;
-  //  float test_rotate = 0.0874;  // 5 degrees
-  //float test_rotate = 0.1748;  // 10 degrees
-  int series_start = 1;
-  int series_end = 9;
-  int series_inc = 1;
-
-  int mode = 'i';  /* defaults to comparing 2 images */;
-  int rotate_middle=0; /* defaults to rotating around the origin */
-  
-#define OPT_SCALE 'x'
-#define OPT_ROTATE 'r'
-#define OPT_DIM 'd'
-#define OPT_CROP 'c'
-#define OPT_SERIES_START 's'
-#define OPT_SERIES_END 'e'
-#define OPT_SERIES_INC 'i'
-
-  /* new Getopt code */
-  while(1) {
-    static struct option long_options[] =
-      {
-	/* These options set a flag.   */
-	{"synthetic", 0, &mode, 's'},
-	{"image", 0, &mode, 'i'},
-	{"rotate-mid", 0, &rotate_middle, 1},
-	/* These options don't set a flag.
-	   We distinguish them by their indices.  */
-	{"scale", required_argument, 0, OPT_SCALE},
-	{"rotate", required_argument, 0, OPT_ROTATE},
-	{"crop", required_argument, 0, OPT_CROP},
-	{"series-start", required_argument, 0, OPT_SERIES_START},
-	{"series-end", required_argument, 0, OPT_SERIES_END},
-	{"series-inc", required_argument, 0, OPT_SERIES_INC},
-	//	{"dimension", required_argument, 0, OPT_DIM},
-	{0, 0, 0, 0}
-      };    
-
-    int optindex;
-    int val = getopt_long(argc, argv, "", long_options, &optindex);
-
-    if (val == -1)
-      break;
-
-    switch(val) {
-    case OPT_SCALE:
-      test_scale = atof(optarg);
-      break;
-    case OPT_ROTATE:
-      if (atof(optarg) >= 0.0 && atof(optarg) <= 360.0)
-      test_rotate = atof(optarg) * PI * 2.0 / 360.0;
-      break;
-    case OPT_CROP:
-      if (atof(optarg) <= 1.0) {
-	test_crop = atof(optarg);
-      }
-      break;
-    case OPT_SERIES_START:
-      series_start = atoi(optarg);
-      break;
-    case OPT_SERIES_END:
-      series_end = atoi(optarg);
-      break;
-    case OPT_SERIES_INC:
-      series_inc = atoi(optarg);
-      break;
-      /*
-    case OPT_DIM:
-      Dimension = atoi(optarg);
-      break;
-      */
-    }
-  }
-
-  ARG_IMG1 = optind;
-  ARG_IMG2 = optind+1;
-  
-  typedef  float  PixelType;
-  typedef itk::Image< PixelType, Dimension >  FixedImageType;
-  typedef itk::ScaleInvariantFeatureImageFilter<FixedImageType, Dimension> SiftFilterType;
-  typedef itk::Image<unsigned char, Dimension> OutputImageType;
-  
-  typedef itk::ImageSource< FixedImageType > ImageSourceType;
-
-  ImageSourceType::Pointer fixedImageReader, fixedImageReader2;
-
-  typedef itk::PointSetToImageFilter<SiftFilterType::PointSetType, OutputImageType> PointSetFilterType;
-  
-  if( static_cast<unsigned int>(argc) <= ARG_IMG1 || (mode == 'i' && static_cast<unsigned int>(argc) <= ARG_IMG2))
-    {
-      std::cerr << "Incorrect number of parameters " << std::endl;
-      std::cerr << std::endl;
-      std::cerr << "siftkeys program ( ";
-      std::cerr << Dimension << "D ";      
-#ifdef SIFT_FEATURE
-      std::cerr << "sift-feature ";
-#else
-      std::cerr << "histogram-feature ";
-#endif
-#ifdef REORIENT
-      std::cerr << "reoriented ";
-#endif
-      std::cerr << ")" << std::endl;
-
-      std::cerr << "Usage: \n";
-      std::cerr  << argv[0] << " [options] ImageFile [ImageFile2]\n"; 
-      std::cerr << "This program takes an input image file(s) and generates scale invariant features." << std::endl;
-      std::cerr << std::endl;
-      std::cerr << "Image Processing Options (Choose ONE):" << std::endl;
-      std::cerr << "--image" << std::endl;
-      std::cerr << " compare ImageFile and ImageFile2" << std::endl;
-      std::cerr << "\nOR\n" << std::endl;
-      std::cerr << "--synthetic" << std::endl;
-      std::cerr << " compare ImageFile to synthetically generated version" << std::endl;
-      std::cerr << "Synthetic Image Options:" << std::endl;
-      std::cerr << "--rotate value" << std::endl;
-      std::cerr << "  rotate synthetic image on first axis by value degrees" << std::endl;
-      std::cerr << "--rotate-middle" << std::endl;
-      std::cerr << "  centre of rotation at the centre of image (defaults to origin)" << std::endl;
-      std::cerr << "--scale value" << std::endl;
-      std::cerr << "  scale all axes of synthetic image by value" << std::endl;
-      std::cerr << "--tmp directory" << std::endl;
-      std::cerr << "  temporary directory" << std::endl;
-      std::cerr << std::endl;
-      return 1;
-    }
-
-  std::cerr << "Dimension = " << Dimension << "\n";
-  std::cerr << "Test Scale = " << test_scale << "\n";
-  std::cerr << "Test Rotate = " << test_rotate << "\n";
-  std::cerr << "Image Crop Ratio (first 3D) = " << test_crop << "\n";
-  std::cerr << "Mode = " << (char) mode << "\n";
-  std::cerr << "ImageFile1 = " << argv[optind] << "\n";
-  if (Dimension == 4) {
-    std::cerr << "Image Series Start = " << series_start << "\n";
-    std::cerr << "Image Series End = " << series_end << "\n";
-    std::cerr << "Image Series Inc = " << series_inc << "\n";
-  }
-
-#ifdef SIFT_FEATURE
-  std::cerr << "SIFT Feature\n" << std::endl;
-#else
-  std::cerr << "Histogram Feature\n" << std::endl;
-#endif
-
-#ifdef REORIENT
-  std::cerr << "Reorientation enabled\n" << std::endl;  
-#endif
-
-  if (Dimension == 4) {
-    /* Assume fileseries reader */
-    typedef itk::ImageSeriesReader< FixedImageType  > FixedImageReaderType;
-    FixedImageReaderType::Pointer tmpImageReader  = FixedImageReaderType::New();
-
-    typedef itk::NumericSeriesFileNames NameGeneratorType;
-    NameGeneratorType::Pointer nameGenerator = NameGeneratorType::New();
-    
-    nameGenerator->SetSeriesFormat( argv[ARG_IMG1] );
-    nameGenerator->SetStartIndex( series_start );
-    nameGenerator->SetEndIndex( series_end );
-    nameGenerator->SetIncrementIndex( series_inc );
-        
-    tmpImageReader->SetFileNames( nameGenerator->GetFileNames() );
-
-    fixedImageReader = tmpImageReader;
-  } else {
-    typedef itk::ImageFileReader< FixedImageType  > FixedImageReaderType;
-    FixedImageReaderType::Pointer tmpImageReader  = FixedImageReaderType::New();
-    tmpImageReader  = FixedImageReaderType::New();
-
-    tmpImageReader->SetFileName(  argv[ARG_IMG1] );
-    fixedImageReader=tmpImageReader;
-  }
-  fixedImageReader->Update();
-
-  typedef itk::ScalableAffineTransform< double, Dimension > ScaleType;
-#ifdef CROP
-  ScaleType::Pointer no_transform = ScaleType::New();
-  no_transform->SetIdentity();
-  
-  SiftFilterType::ResampleFilterType::Pointer cropper = SiftFilterType::ResampleFilterType::New();
-  cropper->SetInput(fixedImageReader->GetOutput());
-  FixedImageType::SizeType cropsize = 
-    fixedImageReader->GetOutput()->GetLargestPossibleRegion().GetSize();
-  for (unsigned int k = 0; k < Dimension; ++k) {
-    if (k < 4)
-      cropsize[k] = (int) (cropsize[k] * test_crop);
-  }
-  cropper->SetSize( cropsize );
-  cropper->SetOutputSpacing(fixedImageReader->GetOutput()->GetSpacing());
-  cropper->SetTransform(no_transform);
-  cropper->Update();
-  FixedImageType::Pointer fixedImage = cropper->GetOutput();
-#else
-  FixedImageType::Pointer fixedImage = fixedImageReader->GetOutput();  
-#endif
-
-  SiftFilterType::PointSetTypePointer keypoints1, keypoints2;
-  PointSetFilterType::Pointer pointSet1 = PointSetFilterType::New();
-  PointSetFilterType::Pointer pointSet2 = PointSetFilterType::New();
-
-  SiftFilterType siftFilter1, siftFilter2;
-  
-#ifdef DEBUG
-  siftFilter1.writeImage(fixedImage, "tmp0.png");
-  std::cout << std::endl << "Starting SIFT Feature Extraction...\n";
-#endif
-  
-  keypoints1 = siftFilter1.getSiftFeatures(fixedImage);
-  
-  pointSet1->SetInput(keypoints1);
-  pointSet1->SetOutsideValue(0);
-  pointSet1->SetInsideValue(255);
-  pointSet1->SetSize(fixedImageReader->GetOutput()->GetLargestPossibleRegion().GetSize());
-  
-  typedef itk::ImageFileWriter<OutputImageType> WriterType;
-  
-  WriterType::Pointer writer = WriterType::New();
-  writer->SetFileName("tmp0_keys.png");
-  writer->SetInput(pointSet1->GetOutput());
-  writer->Update();
-  
-  typedef itk::ScalableAffineTransform< double, Dimension > TestTransformType;
-  TestTransformType::Pointer inv_test_transform;
-  
-  // Synthetic test image
-  if (mode=='s') {
-    std::cerr << std::endl << "Synthetic image mode\n";  
-    TestTransformType::Pointer test_transform = TestTransformType::New();
-    
-    inv_test_transform = TestTransformType::New();
-           
-    TestTransformType::InputPointType translate_vector;
-            
-    test_transform->SetIdentity();
-    test_transform->Scale( 1.0 / test_scale);
-    if (rotate_middle) {
-      std::cerr << "Rotation centred at middle of image." << std::endl;    
-      /* Cycle through each dimension and shift by half*/
-      FixedImageType::SizeType size = 
-	fixedImage->GetLargestPossibleRegion().GetSize();
-      for (unsigned int k = 0; k < Dimension; ++k)
-	translate_vector[k] = size[k]/2.0;
-      test_transform->SetCenter( translate_vector);
-    } else {
-      std::cerr << "Rotation centred at origin." << std::endl;    
-    }
-#if 0
-    if (rotate_middle) {
-      std::cerr << "Rotation centred at middle of image." << std::endl;    
-      /* Cycle through each dimension and shift by half*/
-      FixedImageType::SizeType size = 
-	fixedImage->GetLargestPossibleRegion().GetSize();
-      for (unsigned int k = 0; k < Dimension; ++k)
-	translate_vector[k] = size[k]/2.0;
-      test_transform->Translate( translate_vector);
-    } else {
-      std::cerr << "Rotation centred at origin." << std::endl;    
-    }
-#endif 
-
-    test_transform->Rotate(0,1,test_rotate);
-
-#if 0
-    if (rotate_middle) {
-      /* Cycle through each dimension and shift back*/
-      for (unsigned int k = 0; k < Dimension; ++k)
-	translate_vector[k] = -translate_vector[k];
-      test_transform->Translate( translate_vector);
-    }
-#endif
-    
-    test_transform->GetInverse(inv_test_transform);
-    
-    {
-      FixedImageType::Pointer scaledImage;
-      
-      SiftFilterType::ResampleFilterType::Pointer scaler = SiftFilterType::ResampleFilterType::New();
-      scaler->SetInput(fixedImage);
-      FixedImageType::SizeType size = 
-	fixedImage->GetLargestPossibleRegion().GetSize();
-      for (unsigned int k = 0; k < Dimension; ++k)
-	size[k] = (unsigned int) floor(size[k] * test_scale);
-      scaler->SetSize( size );
-      scaler->SetOutputSpacing(fixedImage->GetSpacing());
-      scaler->SetTransform(test_transform);
-      scaler->Update();
-      scaledImage = scaler->GetOutput();
-      
-#ifdef DEBUG
-      siftFilter2.writeImage(scaledImage, "tmp1.png");
-      std::cout << std::endl;
-#endif
-      keypoints2 = siftFilter2.getSiftFeatures(scaledImage);
-    }
-    
-    std::cerr << "Test Image Scale: " << test_scale << std::endl;
-    // std::cerr << "Test Translate: " << test_translate << std::endl;
-    std::cerr << "Test Image Rotate: " << test_rotate << std::endl;    
-  } else if (mode == 'i') {
-    std::cerr << std::endl << "Image Comparison mode\n";  
-    inv_test_transform = NULL;
-
-    if (Dimension == 4) {
-      typedef itk::ImageSeriesReader< FixedImageType  > FixedImageReaderType;
-      FixedImageReaderType::Pointer tmpImageReader  = FixedImageReaderType::New();
-      tmpImageReader  = FixedImageReaderType::New();
-
-      typedef itk::NumericSeriesFileNames NameGeneratorType;
-      NameGeneratorType::Pointer nameGenerator = NameGeneratorType::New();
-      
-      nameGenerator->SetSeriesFormat( argv[ARG_IMG2] );
-      nameGenerator->SetStartIndex( series_start );
-      nameGenerator->SetEndIndex( series_end );
-      nameGenerator->SetIncrementIndex( series_inc );
-      
-      tmpImageReader->SetFileNames( nameGenerator->GetFileNames() );
-      fixedImageReader2 = tmpImageReader;
-    } else {      
-      typedef itk::ImageFileReader< FixedImageType  > FixedImageReaderType;
-      FixedImageReaderType::Pointer tmpImageReader  = FixedImageReaderType::New();
-      tmpImageReader  = FixedImageReaderType::New();
-
-      tmpImageReader->SetFileName(  argv[ARG_IMG2] );
-      fixedImageReader2 = tmpImageReader;
-    }
-    fixedImageReader2->Update();
-
-#ifdef CROP
-    SiftFilterType::ResampleFilterType::Pointer cropper2 = SiftFilterType::ResampleFilterType::New();
-    cropper2->SetInput(fixedImageReader2->GetOutput());
-    FixedImageType::SizeType cropsize2 = 
-      fixedImageReader2->GetOutput()->GetLargestPossibleRegion().GetSize();
-    for (unsigned int k = 0; k < Dimension; ++k) {
-      if (k < 4)
-	cropsize2[k] /= 2;
-    }
-    cropper2->SetSize( cropsize2 );
-    cropper2->SetOutputSpacing(fixedImageReader2->GetOutput()->GetSpacing());
-    cropper2->SetTransform(no_transform);
-    cropper2->Update();
-    FixedImageType::Pointer fixedImage2 = cropper2->GetOutput();
-#else
-    FixedImageType::Pointer fixedImage2 = fixedImageReader2->GetOutput();  
-#endif
-
-    keypoints2 = siftFilter2.getSiftFeatures(fixedImage2);
-  }
-  
-  std::cerr << std::endl << "Matching Keypoints\n";  
-  siftFilter2.MatchKeypointsPos(keypoints1, keypoints2, inv_test_transform);
-#ifdef GENERATE_KEYS
-  siftFilter2.MatchKeypointsFeatures(keypoints1, keypoints2, inv_test_transform);
-#endif
-  return 0;
-
-}