Repository: KCL-BMEIS/niftyreg (language: python)

Issue:
Need to update CMake files and CD environment
This links to #62, #79, #81, #82 


Discussion / hints:

Fix patch:
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..18137650
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,41 @@
+# Prerequisites
+*.d
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+*.smod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.out
+*.app
+
+# IDE
+.idea
+
+# Mac trash folder 
+.DS_Store
+
+# Build
+build
\ No newline at end of file
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
deleted file mode 100644
index 798d6fd9..00000000
--- a/.gitlab-ci.yml
+++ /dev/null
@@ -1,301 +0,0 @@
-# .gitlab-ci.yml
-
-stages:
-  - build
-  - test
-  - cleanup
-
-
-before_script:
-  - export src_dir="${CI_PROJECT_DIR}"
-  - export git_hash="${CI_COMMIT_SHA:0:6}"
-  - export pb_dir="${CI_PROJECT_DIR}-build-${git_hash}"
-  - hostname
-  - whoami
-  - pwd
-  - echo "Sources - ${src_dir}"
-  - echo "Commit - ${git_hash}"
-  - echo "Project build - ${pb_dir}"
-
-##############################################################
-### BUILD
-
-
-Mac-build:
-
-  stage: build
-
-  script:
-    - mkdir -p ${pb_dir}/llvm
-    - cd ${pb_dir}/llvm
-    - cmake
-          -DCMAKE_CXX_COMPILER=g++
-          -DCMAKE_C_COMPILER=gcc
-          -DCMAKE_BUILD_TYPE=Release
-          -DBUILD_ALL_DEP=ON
-          -DUSE_CUDA=ON
-          -DUSE_OPENCL=ON
-          -DUSE_SSE=ON
-          -DUSE_OPENMP=OFF
-          -DBUILD_TESTING=ON
-          -DTESTING_2D_FILE=${src_dir}/reg-test/target_2D.nii.gz
-          -DTESTING_3D_FILE=${src_dir}/reg-test/target_3D.nii.gz
-          ${src_dir}
-    - cmake
-          -DCMAKE_CXX_COMPILER=g++
-          -DCMAKE_C_COMPILER=gcc
-          -DCMAKE_BUILD_TYPE=Release
-          -DBUILD_ALL_DEP=ON
-          -DUSE_CUDA=ON
-          -DUSE_OPENCL=ON
-          -DUSE_SSE=ON
-          -DUSE_OPENMP=OFF
-          -DBUILD_TESTING=ON
-          -DTESTING_2D_FILE=${src_dir}/reg-test/target_2D.nii.gz
-          -DTESTING_3D_FILE=${src_dir}/reg-test/target_3D.nii.gz
-          ${src_dir}
-    - make -j 4
-    - mkdir -p ${pb_dir}/gnu
-    - mkdir -p ${pb_dir}/gnu/reg-test
-    - cd ${pb_dir}/gnu
-    - cp -R ${pb_dir}/llvm/reg-test/test-data ${pb_dir}/gnu/reg-test/test-data
-    - cmake
-          -DCMAKE_CXX_COMPILER=g++-7
-          -DCMAKE_C_COMPILER=gcc-7
-          -DCMAKE_BUILD_TYPE=Release
-          -DBUILD_ALL_DEP=ON
-          -DUSE_CUDA=ON
-          -DCUDA_HOST_COMPILER=/usr/bin/clang
-          -DUSE_OPENCL=ON
-          -DUSE_SSE=ON
-          -DUSE_OPENMP=ON
-          -DBUILD_TESTING=ON
-          -DTESTING_2D_FILE=${src_dir}/reg-test/target_2D.nii.gz
-          -DTESTING_3D_FILE=${src_dir}/reg-test/target_3D.nii.gz
-          ${src_dir}
-    - cmake
-          -DCMAKE_CXX_COMPILER=g++-7
-          -DCMAKE_C_COMPILER=gcc-7
-          -DCMAKE_BUILD_TYPE=Release
-          -DBUILD_ALL_DEP=ON
-          -DUSE_CUDA=ON
-          -DCUDA_HOST_COMPILER=/usr/bin/clang
-          -DUSE_OPENCL=ON
-          -DUSE_SSE=ON
-          -DUSE_OPENMP=ON
-          -DBUILD_TESTING=ON
-          -DTESTING_2D_FILE=${src_dir}/reg-test/target_2D.nii.gz
-          -DTESTING_3D_FILE=${src_dir}/reg-test/target_3D.nii.gz
-          ${src_dir}
-    - make -j 4
-
-  only:
-    - branches
-
-  tags:
-    - mac
-
-
-Linux-build:
-
-  stage: build
-
-  script:
-    - mkdir -p ${pb_dir}
-    - cd ${pb_dir}
-    - cmake
-          -DCMAKE_BUILD_TYPE=Release
-          -DBUILD_ALL_DEP=ON
-          -DUSE_CUDA=ON
-          -DUSE_OPENCL=ON
-          -DUSE_SSE=ON
-          -DUSE_OPENMP=ON
-          -DBUILD_TESTING=ON
-          -DTESTING_2D_FILE=${src_dir}/reg-test/target_2D.nii.gz
-          -DTESTING_3D_FILE=${src_dir}/reg-test/target_3D.nii.gz
-          ${src_dir}
-    - cmake
-          -DCMAKE_BUILD_TYPE=Release
-          -DBUILD_ALL_DEP=ON
-          -DUSE_CUDA=ON
-          -DUSE_OPENCL=ON
-          -DUSE_SSE=ON
-          -DUSE_OPENMP=ON
-          -DBUILD_TESTING=ON
-          -DTESTING_2D_FILE=${src_dir}/reg-test/target_2D.nii.gz
-          -DTESTING_3D_FILE=${src_dir}/reg-test/target_3D.nii.gz
-          ${src_dir}
-    - make -j 4
-
-  only:
-    - branches
-
-  tags:
-    - linux
-
-
-Windows-build:
-
-  stage: build
-
-  before_script:
-    - set src_dir="%CI_PROJECT_DIR%"
-    - set git_hash="%CI_COMMIT_SHA:~0,6%"
-    - set pb_dir="%CI_PROJECT_DIR%-build-%git_hash%"
-    - hostname
-    - whoami
-    - echo %cd%
-    - echo "Sources - %src_dir%"
-    - echo "Commit - %git_hash%"
-    - echo "Project build - %pb_dir%"
-
-  script:
-    - if not exist %pb_dir% mkdir -p %pb_dir%
-    - cd %pb_dir%
-    - set cmake="C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin/cmake.exe"
-    - call %cmake%
-          -G "Visual Studio 15 2017 Win64"
-          -DCMAKE_BUILD_TYPE=Release
-          -DBUILD_ALL_DEP=ON
-          -DUSE_CUDA=ON
-          -DUSE_OPENCL=ON
-          -DUSE_SSE=ON
-          -DUSE_OPENMP=ON
-          -DBUILD_TESTING=ON
-          -DTESTING_2D_FILE="%src_dir%/reg-test/target_2D.nii.gz"
-          -DTESTING_3D_FILE="%src_dir%/reg-test/target_3D.nii.gz"
-          %src_dir%
-    - set msbuild="C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin/MSBuild.exe"
-    - echo "%msbuild%"
-    - call %msbuild% NiftyReg.sln /t:Build /p:Configuration=Release
-
-  only:
-    - branches
-
-  tags:
-    - windows
-
-##############################################################
-### TEST
-
-
-Mac-test:
-
-  stage: test
-
-  script:
-    - cd ${pb_dir}/llvm
-    - ctest -V
-    - cd ${pb_dir}/gnu
-    - ctest -V
-
-  only:
-    - branches
-
-  tags:
-    - mac
-
-
-Linux-test:
-
-  stage: test
-
-  script:
-    - cd ${pb_dir}
-    - ctest -V
-
-  only:
-    - branches
-
-  tags:
-    - mac
-
-
-Windows-test:
-
-  stage: test
-
-  before_script:
-    - set src_dir="%CI_PROJECT_DIR%"
-    - set git_hash="%CI_COMMIT_SHA:~0,6%"
-    - set pb_dir="%CI_PROJECT_DIR%-build-%git_hash%"
-    - hostname
-    - whoami
-    - echo %cd%
-    - echo "Sources - %src_dir%"
-    - echo "Commit - %git_hash%"
-    - echo "Project build - %pb_dir%"
-
-  script:
-    - cd %pb_dir%
-    - set ctest="C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin/ctest.exe"
-    - call %ctest% -V
-
-  only:
-    - branches
-
-  tags:
-    - windows
-
-
-##############################################################
-### CLEAN
-
-
-Mac-cleanup:
-
-  stage: cleanup
-
-  script:
-    - rm -rf ${pb_dir}
-
-  when: always
-
-  only:
-    - branches
-
-  tags:
-    - mac
-
-
-Linux-cleanup:
-
-  stage: cleanup
-
-  script:
-    - rm -rf ${pb_dir}
-
-  when: always
-
-  only:
-    - branches
-
-  tags:
-    - linux
-
-
-Windows-cleanup:
-
-  stage: cleanup
-
-  before_script:
-    - set src_dir="%CI_PROJECT_DIR%"
-    - set git_hash="%CI_COMMIT_SHA:~0,6%"
-    - set pb_dir="%CI_PROJECT_DIR%-build-%git_hash%"
-    - hostname
-    - whoami
-    - echo %cd%
-    - echo "Sources - %src_dir%"
-    - echo "Commit - %git_hash%"
-    - echo "Project build - %pb_dir%"
-
-  script:
-    - call rd /s /q %pb_dir%
-
-  when: always
-
-  only:
-    - branches
-
-  tags:
-    - windows
diff --git a/CTestConfig.cmake b/CTestConfig.cmake
deleted file mode 100644
index 2d5a5869..00000000
--- a/CTestConfig.cmake
+++ /dev/null
@@ -1,13 +0,0 @@
-SET(CTEST_PROJECT_NAME "NiftyReg")
-SET(CTEST_NIGHTLY_START_TIME "22:00:00 GMT")
-SET(CTEST_TEST_TIMEOUT "3600")
-
-IF(NOT DEFINED CTEST_DROP_METHOD)
-	SET(CTEST_DROP_METHOD "http")
-ENDIF(NOT DEFINED CTEST_DROP_METHOD)
-
-IF(CTEST_DROP_METHOD STREQUAL "http")
-	SET(CTEST_DROP_SITE "cdash.cmiclab.cs.ucl.ac.uk")
-	SET(CTEST_DROP_LOCATION "/submit.php?project=NiftyReg")
-	SET(CTEST_DROP_SITE_CDASH TRUE)
-ENDIF(CTEST_DROP_METHOD STREQUAL "http")
diff --git a/niftyreg_build_version.txt b/niftyreg_build_version.txt
index 39f5b693..d61f00d8 100644
--- a/niftyreg_build_version.txt
+++ b/niftyreg_build_version.txt
@@ -1,1 +1,1 @@
-71
+90
diff --git a/reg-lib/AladinContent.cpp b/reg-lib/AladinContent.cpp
index 4d66931a..bab532ef 100755
--- a/reg-lib/AladinContent.cpp
+++ b/reg-lib/AladinContent.cpp
@@ -170,6 +170,8 @@ void AladinContent::AllocateDeformationField(size_t bytes)
 
 	this->CurrentDeformationField = nifti_copy_nim_info(this->CurrentReference);
 	this->CurrentDeformationField->dim[0] = this->CurrentDeformationField->ndim = 5;
+    if (this->CurrentReference->dim[0] == 2)
+        this->CurrentDeformationField->dim[3] = this->CurrentDeformationField->nz = 1;
 	this->CurrentDeformationField->dim[4] = this->CurrentDeformationField->nt = 1;
 	this->CurrentDeformationField->pixdim[4] = this->CurrentDeformationField->dt = 1.0;
 	if (this->CurrentReference->nz == 1)
diff --git a/reg-lib/cl/CMakeLists.txt b/reg-lib/cl/CMakeLists.txt
index a5c06673..0f46b947 100755
--- a/reg-lib/cl/CMakeLists.txt
+++ b/reg-lib/cl/CMakeLists.txt
@@ -1,24 +1,22 @@
 #-----------------------------------------------------------------------------
-set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
-#-----------------------------------------------------------------------------
 # Find the OpenCL package
-find_package(OPENCL REQUIRED)
-if(NOT OPENCL_FOUND)
-  set(USE_OPENCL OFF CACHE BOOL "To use the OpenCL platform" FORCE)
-  message(SEND_ERROR "OpenCL not found. The USE_OPENCL flag is turned OFF")
+find_package(OpenCL REQUIRED)
+if(NOT OpenCL_FOUND)
+  set(USE_OpenCL OFF CACHE BOOL "To use the OpenCL platform" FORCE)
+  message(SEND_ERROR "OpenCL not found. The USE_OpenCL flag is turned OFF")
   return()
-else(NOT OPENCL_FOUND)
+else(NOT OpenCL_FOUND)
   message(STATUS "Found OpenCL")
-endif(NOT OPENCL_FOUND)
+endif(NOT OpenCL_FOUND)
 #-----------------------------------------------------------------------------
 set(SOURCE_PATH ${CMAKE_BINARY_DIR})
 #-----------------------------------------------------------------------------
 configure_file(config.h.in ${CMAKE_BINARY_DIR}/config.h IMMEDIATE)
-mark_as_advanced(_OPENCL_CPP_INCLUDE_DIRS)
+mark_as_advanced(_OpenCL_CPP_INCLUDE_DIRS)
 #-----------------------------------------------------------------------------
 include_directories(${CMAKE_BINARY_DIR})
 include_directories(${CMAKE_SOURCE_DIR}/reg-lib/cl)
-include_directories(${OPENCL_INCLUDE_DIRS})
+include_directories(${OpenCL_INCLUDE_DIRS})
 #-----------------------------------------------------------------------------
 # Build the _reg_opencl_kernels library
 set(NAME _reg_opencl_kernels)
@@ -34,7 +32,7 @@ add_library(${NAME} ${NIFTYREG_LIBRARY_TYPE}
   ../AladinContent.cpp
   ../Platform.cpp
 )
-target_link_libraries(${NAME} ${OPENCL_LIBRARIES})
+target_link_libraries(${NAME} ${OpenCL_LIBRARIES})
 install(TARGETS ${NAME}
   RUNTIME DESTINATION lib
   LIBRARY DESTINATION lib
@@ -53,7 +51,7 @@ install(FILES resampleKernel.cl affineDeformationKernel.cl blockMatchingKernel.c
 #-----------------------------------------------------------------------------
 set(NAME _reg_openclinfo)
 add_library(${NAME} ${NIFTYREG_LIBRARY_TYPE} ${NAME}.cpp ${NAME}.h InfoDevice.h CLContextSingletton.cpp)
-target_link_libraries(${NAME} ${OPENCL_LIBRARIES})
+target_link_libraries(${NAME} ${OpenCL_LIBRARIES})
 install(TARGETS ${NAME}
   RUNTIME DESTINATION lib
   LIBRARY DESTINATION lib


Test patch:
diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml
new file mode 100644
index 00000000..9f701478
--- /dev/null
+++ b/.github/workflows/build_and_test.yml
@@ -0,0 +1,106 @@
+name: build-and-test
+on: [push, pull_request]
+jobs:
+  build:
+    runs-on: ${{ matrix.os }}
+    strategy: 
+      max-parallel: 3
+      matrix:
+        os: [ubuntu-20.04, macos-11, windows-2022]
+        include:
+          - os: ubuntu-20.04
+            c-compiler: "gcc"
+            cxx-compiler: "g++"
+            use_cuda: "OFF"
+            use_opencl: "OFF"
+            use_openmp: "ON"
+          - os: macos-11
+            c-compiler: "gcc"
+            cxx-compiler: "g++"
+            use_cuda: "OFF"
+            use_opencl: "OFF"
+            use_openmp: "OFF"
+          - os: windows-2022
+            c-compiler: "cl.exe"
+            cxx-compiler: "cl.exe"
+            use_cuda: "OFF"
+            use_opencl: "OFF"
+            use_openmp: "ON"
+            vcvars64: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
+    steps:
+      - uses: actions/checkout@v3
+
+      - name: Get CMake
+        uses: lukka/get-cmake@latest
+
+      - name: Install Catch2
+        if: matrix.os != 'windows-2022'
+        run:  |
+          git clone https://github.com/catchorg/Catch2.git
+          cd Catch2
+          cmake -Bbuild -H. -DBUILD_TESTING=OFF
+          sudo cmake --build build/ --target install --config Release
+        shell: bash
+
+      - name: Install Catch2 (windows)
+        if: matrix.os == 'windows-2022'
+        run:  |
+          call "${{ matrix.vcvars64 }}"
+          git clone https://github.com/catchorg/Catch2.git
+          cd Catch2
+          cmake -Bbuild -H. -DBUILD_TESTING=OFF
+          cmake --build build/ --target install --config Release
+        shell: cmd
+
+      - name: Configure NiftyReg
+        if: matrix.os != 'windows-2022'
+        run: |
+          mkdir build
+          cd build
+          cmake -DCMAKE_CXX_COMPILER=${{ matrix.cxx-compiler }} \
+                -DCMAKE_C_COMPILER=${{ matrix.c-compiler }} \
+                -DCMAKE_BUILD_TYPE=Release \
+                -DBUILD_ALL_DEP=ON \
+                -DUSE_CUDA=${{ matrix.use_cuda }} \
+                -DUSE_OPENCL=${{ matrix.use_opencl }} \
+                -DUSE_SSE=ON \
+                -DUSE_OPENMP=${{ matrix.use_openmp }} \
+                -DBUILD_TESTING=ON \
+                ..
+        shell: bash
+
+      - name: Configure NiftyReg (windows)
+        if: matrix.os == 'windows-2022'
+        run: |
+          mkdir build
+          cd build
+          call "${{ matrix.vcvars64 }}"
+          cmake -DCMAKE_CXX_COMPILER=${{ matrix.cxx-compiler }} -DCMAKE_C_COMPILER=${{ matrix.c-compiler }} -DCMAKE_BUILD_TYPE=Release -DBUILD_ALL_DEP=ON -DUSE_CUDA=${{ matrix.use_cuda }} -DUSE_OPENCL=${{ matrix.use_opencl }} -DUSE_SSE=ON  -DUSE_OPENMP=${{ matrix.use_openmp }}  -DBUILD_TESTING=ON ..
+        shell: cmd
+
+      - name: Build NiftyReg
+        if: matrix.os != 'windows-2022'
+        run: cmake --build build --config Release
+        shell: bash
+
+      - name: Build NiftyReg (windows)
+        if: matrix.os == 'windows-2022'
+        run: |
+          call "${{ matrix.vcvars64 }}"
+          cmake --build build --config Release
+        shell: cmd
+
+      - name: Run tests
+        if: matrix.os != 'windows-2022'
+        run: ctest -V
+        working-directory: build
+        shell: bash
+
+      - name: Run tests (windows)
+        if: matrix.os == 'windows-2022'
+        run: |
+          call "${{ matrix.vcvars64 }}"
+          ctest -V
+        working-directory: build
+        shell: cmd
+
diff --git a/reg-test/CMakeLists.txt b/reg-test/CMakeLists.txt
index adc66d1d..df71281f 100755
--- a/reg-test/CMakeLists.txt
+++ b/reg-test/CMakeLists.txt
@@ -1,110 +1,11 @@
-#-----------------------------------------------------------------------------
-#-----------------------------------------------------------------------------
-# Define the folder to use to store all data
-set(DFOLDER ${CMAKE_BINARY_DIR}/reg-test/test-data)
-#-----------------------------------------------------------------------------
-# Set the 2D image input file
-if(EXISTS "${DFOLDER}/refImg2D.nii.gz")
-  set(TESTING_2D_FILE "${DFOLDER}/refImg2D.nii.gz" CACHE FILEPATH "2D nifti file used to generate testing data")
-else(EXISTS "${DFOLDER}/refImg2D.nii.gz")
-  set(TESTING_2D_FILE "" CACHE FILEPATH "2D nifti file used to generate testing data")
-endif(EXISTS "${DFOLDER}/refImg2D.nii.gz")
-if(NOT EXISTS "${TESTING_2D_FILE}" AND NOT EXISTS "${DFOLDER}/refImg2D.nii.gz")
-  set(BUILD_TESTING OFF CACHE BOOL "To build the unit tests" FORCE)
-  message(STATUS "The specified 2D image file does not exists")
-  message(STATUS "TESTING_2D_FILE=${TESTING_2D_FILE}")
-  message(SEND_ERROR "The BUILD_TESTING flag is turned OFF")
-  return()
-endif(NOT EXISTS "${TESTING_2D_FILE}" AND NOT EXISTS "${DFOLDER}/refImg2D.nii.gz")
-#-----------------------------------------------------------------------------
-# Set the 3D image input file
-if(EXISTS "${DFOLDER}/refImg3D.nii.gz")
-  set(TESTING_3D_FILE "${DFOLDER}/refImg3D.nii.gz" CACHE FILEPATH "3D nifti file used to generate testing data")
-else(EXISTS "${DFOLDER}/refImg3D.nii.gz")
-  set(TESTING_3D_FILE "" CACHE FILEPATH "3D nifti file used to generate testing data")
-endif(EXISTS "${DFOLDER}/refImg3D.nii.gz")
-if(NOT EXISTS "${TESTING_3D_FILE}" AND NOT EXISTS "${DFOLDER}/refImg3D.nii.gz")
+find_package(Catch2 3)
+if(NOT Catch2_FOUND)
   set(BUILD_TESTING OFF CACHE BOOL "To build the unit tests" FORCE)
-  message(STATUS "The specified 3D image file does not exists")
-  message(STATUS "TESTING_3D_FILE=${TESTING_3D_FILE}")
-  message(SEND_ERROR "The BUILD_TESTING flag is turned OFF")
+  message(STATUS "Catch2 not found")
+  message(SEND_ERROR "Catch2 is required to generate the unit test.
+  The BUILD_TESTING flag is turned OFF")
   return()
-endif(NOT EXISTS "${TESTING_3D_FILE}" AND NOT EXISTS "${DFOLDER}/refImg3D.nii.gz")
-#-----------------------------------------------------------------------------
-# Run the matlab command if required
-if(NOT EXISTS "${DFOLDER}/refImg2D.nii.gz" OR NOT EXISTS "${DFOLDER}/refImg3D.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/affine_mat2D.txt" OR NOT EXISTS "${DFOLDER}/affine_mat3D.txt" OR
-   NOT EXISTS "${DFOLDER}/affine_def2D.nii.gz" OR NOT EXISTS "${DFOLDER}/affine_def3D.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/bspline_def2D.nii.gz" OR NOT EXISTS "${DFOLDER}/bspline_def3D.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/bspline_grid2D.nii.gz" OR NOT EXISTS "${DFOLDER}/bspline_grid3D.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/refImg2D_uchar.nii.gz" OR NOT EXISTS "${DFOLDER}/refImg3D_uchar.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/refImg2D_float.nii.gz" OR NOT EXISTS "${DFOLDER}/refImg3D_float.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/refImg2D_double.nii.gz" OR NOT EXISTS "${DFOLDER}/refImg3D_double.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/warped_nearest2D.nii.gz" OR NOT EXISTS "${DFOLDER}/warped_nearest3D.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/warped_linear2D.nii.gz" OR NOT EXISTS "${DFOLDER}/warped_linear3D.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/warped_cubic2D.nii.gz" OR NOT EXISTS "${DFOLDER}/warped_cubic3D.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/expectedBlockMatching_mat2D.txt" OR NOT EXISTS "${DFOLDER}/expectedBlockMatching_mat3D.txt" OR
-   NOT EXISTS "${DFOLDER}/warpedBlockMatchingImg2D.nii.gz" OR NOT EXISTS "${DFOLDER}/warpedBlockMatchingImg3D.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/inputSVDMatrix.txt" OR NOT EXISTS "${DFOLDER}/expectedSMatrix.txt" OR
-   NOT EXISTS "${DFOLDER}/inputMatrix1.txt" OR NOT EXISTS "${DFOLDER}/inputMatrix2.txt" OR
-   NOT EXISTS "${DFOLDER}/expectedVMatrix.txt" OR NOT EXISTS "${DFOLDER}/expectedUMatrix.txt" OR
-   NOT EXISTS "${DFOLDER}/expectedSubMatrix.txt" OR NOT EXISTS "${DFOLDER}/expectedAddMatrix.txt" OR
-   NOT EXISTS "${DFOLDER}/expectedMulMatrix.txt" OR NOT EXISTS "${DFOLDER}/expectedInvMatrix.txt" OR
-   NOT EXISTS "${DFOLDER}/expectedLogMatrix.txt" OR NOT EXISTS "${DFOLDER}/expectedExpMatrix.txt" OR
-   NOT EXISTS "${DFOLDER}/expectedRigidLTS_2D_70.txt" OR NOT EXISTS "${DFOLDER}/expectedRigidLTS_3D_70.txt" OR
-   NOT EXISTS "${DFOLDER}/expectedRigidLTS_2D_100.txt" OR NOT EXISTS "${DFOLDER}/expectedRigidLTS_3D_100.txt" OR
-   NOT EXISTS "${DFOLDER}/expectedAffineLTS_2D_70.txt" OR NOT EXISTS "${DFOLDER}/expectedAffineLTS_3D_70.txt" OR
-   NOT EXISTS "${DFOLDER}/expectedAffineLTS_2D_100.txt" OR NOT EXISTS "${DFOLDER}/expectedAffineLTS_3D_100.txt" OR
-   NOT EXISTS "${DFOLDER}/expectedMINDDescriptor2D_1.nii.gz" OR NOT EXISTS "${DFOLDER}/expectedMINDDescriptor3D_1.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/expectedMINDDescriptor2D_2.nii.gz" OR NOT EXISTS "${DFOLDER}/expectedMINDDescriptor3D_2.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/P1_2D.txt" OR NOT EXISTS "${DFOLDER}/P1_3D.txt" OR
-   NOT EXISTS "${DFOLDER}/P2_2D.txt" OR NOT EXISTS "${DFOLDER}/P2_3D.txt" OR
-   NOT EXISTS "${DFOLDER}/expectedSSDValue2D.txt" OR NOT EXISTS "${DFOLDER}/expectedSSDValue3D.txt" OR
-   NOT EXISTS "${DFOLDER}/expectedMINDSSDValue2D.txt" OR NOT EXISTS "${DFOLDER}/expectedMINDSSDValue3D.txt" OR
-   NOT EXISTS "${DFOLDER}/expectedMINDSSCDescriptor2D_1.nii.gz" OR NOT EXISTS "${DFOLDER}/expectedMINDSSCDescriptor3D_1.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/expectedMINDSSCDescriptor2D_2.nii.gz" OR NOT EXISTS "${DFOLDER}/expectedMINDSSCDescriptor3D_2.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/expectedImageGradient2D.nii.gz" OR NOT EXISTS "${DFOLDER}/expectedImageGradient3D.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/convolution2D_mea.nii.gz" OR NOT EXISTS "${DFOLDER}/convolution3D_mea.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/convolution2D_lin.nii.gz" OR NOT EXISTS "${DFOLDER}/convolution3D_lin.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/convolution2D_gau.nii.gz" OR NOT EXISTS "${DFOLDER}/convolution3D_gau.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/convolution2D_spl.nii.gz" OR NOT EXISTS "${DFOLDER}/convolution3D_spl.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/le_spline_approx2D.txt" OR NOT EXISTS "${DFOLDER}/le_spline_approx3D.txt" OR
-   NOT EXISTS "${DFOLDER}/le_spline_dense2D.txt" OR NOT EXISTS "${DFOLDER}/le_spline_dense3D.txt" OR
-   NOT EXISTS "${DFOLDER}/le_field_dense2D.txt" OR NOT EXISTS "${DFOLDER}/le_field_dense3D.txt" OR
-   NOT EXISTS "${DFOLDER}/le_grad_spline_approx2D.nii.gz" OR NOT EXISTS "${DFOLDER}/le_grad_spline_approx3D.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/le_grad_spline_dense2D.nii.gz" OR NOT EXISTS "${DFOLDER}/le_grad_spline_dense3D.nii.gz" OR
-   NOT EXISTS "${DFOLDER}/le_grad_field_dense2D.nii.gz" OR NOT EXISTS "${DFOLDER}/le_grad_field_dense3D.nii.gz"
-  )
-  # Generate the test data using matlab
-  find_package(Matlab)
-  if(NOT Matlab_FOUND)
-    set(BUILD_TESTING OFF CACHE BOOL "To build the unit tests" FORCE)
-    message(STATUS "Matlab not found")
-    message(SEND_ERROR "Matlab is required to generate the test data. The BUILD_TESTING flag is turned OFF")
-    return()
-  else(NOT Matlab_FOUND)
-    message(STATUS "Found Matlab")
-  endif(NOT Matlab_FOUND)
-  message(STATUS "Generating the test data - Takes several minutes")
-  if(MSVC)
-    execute_process(COMMAND
-      ${Matlab_ROOT_DIR}/bin/matlab -noFigureWindows -nosplash -wait -r "create_test_data('${TESTING_2D_FILE}', '${TESTING_3D_FILE}', '${DFOLDER}');exit"
-      WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/reg-test/matlab_tests"
-      OUTPUT_VARIABLE MATLAB_CMD_OUTPUT
-      )
-  else(MSVC)
-    execute_process(COMMAND
-      ${Matlab_ROOT_DIR}/bin/matlab "-nodisplay -nosplash -nodesktop -r \";create_test_data(\'${TESTING_2D_FILE}\',\'${TESTING_3D_FILE}\',\'${DFOLDER}\');exit\""
-      WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/reg-test/matlab_tests"
-      OUTPUT_VARIABLE MATLAB_CMD_OUTPUT
-      )
-  endif(MSVC)
-
-  message(STATUS "Maltab command output:")
-  message(STATUS "${MATLAB_CMD_OUTPUT}")
-else()
-  message(STATUS "All test data already exists")
-endif()
+endif(NOT Catch2_FOUND)
 #-----------------------------------------------------------------------------
 #-----------------------------------------------------------------------------
 # Build the coverage test
@@ -153,200 +54,20 @@ endif(NOT MSVC)
 mark_as_advanced(BUILDNAME)
 #-----------------------------------------------------------------------------
 #-----------------------------------------------------------------------------
-set(PLATFORM_LIST 0)
-if(USE_CUDA)
-  set(PLATFORM_LIST ${PLATFORM_LIST} 1)
-endif(USE_CUDA)
-if(USE_OPENCL)
-  set(PLATFORM_LIST ${PLATFORM_LIST} 2)
-endif(USE_OPENCL)
-#-----------------------------------------------------------------------------
-#-----------------------------------------------------------------------------
-set(EXEC reg_test_affine_deformation_field)
-add_executable(${EXEC} ${EXEC}.cpp)
-target_link_libraries(${EXEC} _reg_aladin)
-foreach(CURRENT_PLATFORM ${PLATFORM_LIST})
-  add_test(${EXEC}_2D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/affine_mat2D.txt ${DFOLDER}/affine_def2D.nii.gz ${CURRENT_PLATFORM})
-  add_test(${EXEC}_3D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/affine_mat3D.txt ${DFOLDER}/affine_def3D.nii.gz ${CURRENT_PLATFORM})
-endforeach(CURRENT_PLATFORM)
-#-----------------------------------------------------------------------------
-set(EXEC reg_test_bspline_deformation_field)
-add_executable(${EXEC} ${EXEC}.cpp)
-target_link_libraries(${EXEC} _reg_f3d)
-foreach(CURRENT_PLATFORM "0")
-  add_test(${EXEC}_2D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/bspline_grid2D.nii.gz ${DFOLDER}/bspline_def2D.nii.gz 0 ${CURRENT_PLATFORM})
-  add_test(${EXEC}_3D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/bspline_grid3D.nii.gz ${DFOLDER}/bspline_def3D.nii.gz 0 ${CURRENT_PLATFORM})
-  add_test(${EXEC}_comp_2D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/bspline_grid2D.nii.gz ${DFOLDER}/bspline_def2D.nii.gz 1 ${CURRENT_PLATFORM})
-  add_test(${EXEC}_comp_3D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/bspline_grid3D.nii.gz ${DFOLDER}/bspline_def3D.nii.gz 1 ${CURRENT_PLATFORM})
-endforeach(CURRENT_PLATFORM)
-#-----------------------------------------------------------------------------
-set(EXEC reg_test_blockMatching)
-add_executable(${EXEC} ${EXEC}.cpp)
-target_link_libraries(${EXEC} _reg_aladin)
-foreach(CURRENT_PLATFORM ${PLATFORM_LIST})
-  add_test(${EXEC}_2D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/warpedBlockMatchingImg2D.nii.gz ${DFOLDER}/expectedBlockMatching_mat2D.txt ${CURRENT_PLATFORM})
-  add_test(${EXEC}_3D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/warpedBlockMatchingImg3D.nii.gz ${DFOLDER}/expectedBlockMatching_mat3D.txt ${CURRENT_PLATFORM})
-endforeach(CURRENT_PLATFORM)
-#-----------------------------------------------------------------------------
-  set(EXEC reg_test_changeDataType)
-  add_executable(${EXEC} ${EXEC}.cpp)
-  target_link_libraries(${EXEC} _reg_aladin)
-  add_test(${EXEC}_uchar_2D  ${EXEC} ${DFOLDER}/refImg2D.nii.gz uchar  ${DFOLDER}/refImg2D_uchar.nii.gz)
-  add_test(${EXEC}_float_2D  ${EXEC} ${DFOLDER}/refImg2D.nii.gz float  ${DFOLDER}/refImg2D_float.nii.gz)
-  add_test(${EXEC}_double_2D ${EXEC} ${DFOLDER}/refImg2D.nii.gz double ${DFOLDER}/refImg2D_double.nii.gz)
-  add_test(${EXEC}_uchar_3D  ${EXEC} ${DFOLDER}/refImg3D.nii.gz uchar  ${DFOLDER}/refImg3D_uchar.nii.gz)
-  add_test(${EXEC}_float_3D  ${EXEC} ${DFOLDER}/refImg3D.nii.gz float  ${DFOLDER}/refImg3D_float.nii.gz)
-  add_test(${EXEC}_double_3D ${EXEC} ${DFOLDER}/refImg3D.nii.gz double ${DFOLDER}/refImg3D_double.nii.gz)
-#-----------------------------------------------------------------------------
-  set(EXEC reg_test_interpolation)
-  add_executable(${EXEC} ${EXEC}.cpp)
-  target_link_libraries(${EXEC} _reg_aladin)
-  foreach(CURRENT_PLATFORM ${PLATFORM_LIST})
-    add_test(${EXEC}_nea_2D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/affine_def2D.nii.gz ${DFOLDER}/warped_nearest2D.nii.gz 0 ${CURRENT_PLATFORM})
-    add_test(${EXEC}_nea_3D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/affine_def3D.nii.gz ${DFOLDER}/warped_nearest3D.nii.gz 0 ${CURRENT_PLATFORM})
-    add_test(${EXEC}_lin_2D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/affine_def2D.nii.gz ${DFOLDER}/warped_linear2D.nii.gz 1 ${CURRENT_PLATFORM})
-    add_test(${EXEC}_lin_3D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/affine_def3D.nii.gz ${DFOLDER}/warped_linear3D.nii.gz 1 ${CURRENT_PLATFORM})
-    add_test(${EXEC}_cub_2D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/affine_def2D.nii.gz ${DFOLDER}/warped_cubic2D.nii.gz 3 ${CURRENT_PLATFORM})
-    add_test(${EXEC}_cub_3D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/affine_def3D.nii.gz ${DFOLDER}/warped_cubic3D.nii.gz 3 ${CURRENT_PLATFORM})
-  endforeach(CURRENT_PLATFORM)
-#-----------------------------------------------------------------------------
-  set(EXEC reg_test_leastTrimmedSquares)
-  add_executable(${EXEC} ${EXEC}.cpp)
-  target_link_libraries(${EXEC} _reg_aladin)
-  foreach(CURRENT_PLATFORM ${PLATFORM_LIST})
-    add_test(${EXEC}_RigidLS2D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/P1_2D.txt ${DFOLDER}/P2_2D.txt 100 0 ${DFOLDER}/expectedRigidLTS_2D_100.txt ${CURRENT_PLATFORM})
-    add_test(${EXEC}_AffineLS2D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/P1_2D.txt ${DFOLDER}/P2_2D.txt 100 1 ${DFOLDER}/expectedAffineLTS_2D_100.txt ${CURRENT_PLATFORM})
-    add_test(${EXEC}_RigidLS3D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/P1_3D.txt ${DFOLDER}/P2_3D.txt 100 0 ${DFOLDER}/expectedRigidLTS_3D_100.txt ${CURRENT_PLATFORM})
-    add_test(${EXEC}_AffineLS3D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/P1_3D.txt ${DFOLDER}/P2_3D.txt 100 1 ${DFOLDER}/expectedAffineLTS_3D_100.txt ${CURRENT_PLATFORM})
-    add_test(${EXEC}_RigidLTS2D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/P1_2D.txt ${DFOLDER}/P2_2D.txt 70 0 ${DFOLDER}/expectedRigidLTS_2D_70.txt ${CURRENT_PLATFORM})
-    add_test(${EXEC}_AffineLTS2D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/P1_2D.txt ${DFOLDER}/P2_2D.txt 70 1 ${DFOLDER}/expectedAffineLTS_2D_70.txt ${CURRENT_PLATFORM})
-    add_test(${EXEC}_RigidLTS3D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/P1_3D.txt ${DFOLDER}/P2_3D.txt 70 0 ${DFOLDER}/expectedRigidLTS_3D_70.txt ${CURRENT_PLATFORM})
-    add_test(${EXEC}_AffineLTS3D_${CURRENT_PLATFORM} ${EXEC} ${DFOLDER}/P1_3D.txt ${DFOLDER}/P2_3D.txt 70 1 ${DFOLDER}/expectedAffineLTS_3D_70.txt ${CURRENT_PLATFORM})
-  endforeach(CURRENT_PLATFORM)
-#-----------------------------------------------------------------------------
-  set(EXEC reg_test_matrix_operation)
-  add_executable(${EXEC} ${EXEC}.cpp)
-  target_link_libraries(${EXEC} _reg_maths _reg_ReadWriteImage)
-  add_test(${EXEC} ${EXEC} ${DFOLDER}/inputMatrix1.txt ${DFOLDER}/inputMatrix2.txt ${DFOLDER}/expectedMulMatrix.txt ${DFOLDER}/expectedAddMatrix.txt ${DFOLDER}/expectedSubMatrix.txt ${DFOLDER}/expectedExpMatrix.txt ${DFOLDER}/expectedLogMatrix.txt ${DFOLDER}/expectedInvMatrix.txt)
+include(CTest)
+include(Catch)
 #-----------------------------------------------------------------------------
-set(EXEC reg_test_svd)
-add_executable(${EXEC} ${EXEC}.cpp)
-target_link_libraries(${EXEC} _reg_maths _reg_ReadWriteImage)
-add_test(${EXEC}_0 ${EXEC} ${DFOLDER}/inputSVDMatrix.txt ${DFOLDER}/expectedUMatrix.txt ${DFOLDER}/expectedSMatrix.txt ${DFOLDER}/expectedVMatrix.txt)
 #-----------------------------------------------------------------------------
-if(USE_CUDA OR USE_OPENCL)
-  set(EXEC reg_test_coherence_blockMatching)
-  add_executable(${EXEC} ${EXEC}.cpp)
-  target_link_libraries(${EXEC} _reg_aladin)
-  if(USE_CUDA)
-    add_test(${EXEC}_2D_1 ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/warped_cubic2D.nii.gz 1)
-    add_test(${EXEC}_3D_1 ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/warped_cubic3D.nii.gz 1)
-  endif(USE_CUDA)
-  if(USE_OPENCL)
-    add_test(${EXEC}_2D_2 ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/warped_cubic2D.nii.gz 2)
-    add_test(${EXEC}_3D_2 ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/warped_cubic3D.nii.gz 2)
-  endif(USE_OPENCL)
-  #
-  set(EXEC reg_test_coherence_interpolation)
-  add_executable(${EXEC} ${EXEC}.cpp)
-  target_link_libraries(${EXEC} _reg_aladin)
-  if(USE_CUDA)
-    add_test(${EXEC}_nea_2D_1 ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/affine_def2D.nii.gz 0 1)
-    add_test(${EXEC}_lin_2D_1 ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/affine_def2D.nii.gz 1 1)
-    add_test(${EXEC}_cub_2D_1 ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/affine_def2D.nii.gz 3 1)
-    add_test(${EXEC}_nea_3D_1 ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/affine_def3D.nii.gz 0 1)
-    add_test(${EXEC}_lin_3D_1 ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/affine_def3D.nii.gz 1 1)
-    add_test(${EXEC}_cub_3D_1 ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/affine_def3D.nii.gz 3 1)
-  endif(USE_CUDA)
-  if(USE_OPENCL)
-    add_test(${EXEC}_nea_2D_2 ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/affine_def2D.nii.gz 0 2)
-    add_test(${EXEC}_lin_2D_2 ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/affine_def2D.nii.gz 1 2)
-    add_test(${EXEC}_cub_2D_2 ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/affine_def2D.nii.gz 3 2)
-    add_test(${EXEC}_nea_3D_2 ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/affine_def3D.nii.gz 0 2)
-    add_test(${EXEC}_lin_3D_2 ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/affine_def3D.nii.gz 1 2)
-    add_test(${EXEC}_cub_3D_2 ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/affine_def3D.nii.gz 3 2)
-  endif(USE_OPENCL)
-  #
-  set(EXEC reg_test_coherence_affine_deformation_field)
+set(EXEC_LIST reg_test_affine_deformation_field)
+set(EXEC_LIST ${EXEC_LIST})
+
+
+foreach(EXEC ${EXEC_LIST})
   add_executable(${EXEC} ${EXEC}.cpp)
-  target_link_libraries(${EXEC} _reg_aladin)
-  if(USE_CUDA)
-    add_test(${EXEC}_2D_1 ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/affine_mat2D.txt ${DFOLDER}/affine_def2D.nii.gz 1)
-    add_test(${EXEC}_3D_1 ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/affine_mat3D.txt ${DFOLDER}/affine_def3D.nii.gz 1)
-  endif(USE_CUDA)
-  if(USE_OPENCL)
-    add_test(${EXEC}_2D_2 ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/affine_mat2D.txt ${DFOLDER}/affine_def2D.nii.gz 2)
-    add_test(${EXEC}_3D_2 ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/affine_mat3D.txt ${DFOLDER}/affine_def3D.nii.gz 2)
-  endif(USE_OPENCL)
-endif(USE_CUDA OR USE_OPENCL)
-#-----------------------------------------------------------------------------
-set(EXEC reg_test_mindDescriptor)
-add_executable(${EXEC} ${EXEC}.cpp)
-target_link_libraries(${EXEC} _reg_f3d)
-add_test(${EXEC}_MINDDescriptor_2D1 ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/expectedMINDDescriptor2D_1.nii.gz)
-add_test(${EXEC}_MINDDescriptor_3D1 ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/expectedMINDDescriptor3D_1.nii.gz)
-add_test(${EXEC}_MINDDescriptor_2D2 ${EXEC} ${DFOLDER}/warped_linear2D.nii.gz ${DFOLDER}/expectedMINDDescriptor2D_2.nii.gz)
-add_test(${EXEC}_MINDDescriptor_3D2 ${EXEC} ${DFOLDER}/warped_linear3D.nii.gz ${DFOLDER}/expectedMINDDescriptor3D_2.nii.gz)
-#-----------------------------------------------------------------------------
-set(EXEC reg_test_mindsscDescriptor)
-add_executable(${EXEC} ${EXEC}.cpp)
-target_link_libraries(${EXEC} _reg_f3d)
-add_test(${EXEC}_MINDSSCDescriptor_2D1 ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/expectedMINDSSCDescriptor2D_1.nii.gz)
-add_test(${EXEC}_MINDSSCDescriptor_3D1 ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/expectedMINDSSCDescriptor3D_1.nii.gz)
-add_test(${EXEC}_MINDSSCDescriptor_2D2 ${EXEC} ${DFOLDER}/warped_linear2D.nii.gz ${DFOLDER}/expectedMINDSSCDescriptor2D_2.nii.gz)
-add_test(${EXEC}_MINDSSCDescriptor_3D2 ${EXEC} ${DFOLDER}/warped_linear3D.nii.gz ${DFOLDER}/expectedMINDSSCDescriptor3D_2.nii.gz)
-#-----------------------------------------------------------------------------
-set(EXEC reg_test_measure)
-add_executable(${EXEC} ${EXEC}.cpp)
-target_link_libraries(${EXEC} _reg_f3d)
-add_test(${EXEC}_SSD_2D ${EXEC} ${DFOLDER}/expectedMINDDescriptor2D_1.nii.gz ${DFOLDER}/expectedMINDDescriptor2D_2.nii.gz SSD ${DFOLDER}/expectedSSDValue2D.txt)
-add_test(${EXEC}_MINDSSD_2D ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/warped_linear2D.nii.gz MIND ${DFOLDER}/expectedMINDSSDValue2D.txt)
-add_test(${EXEC}_SSD_3D ${EXEC} ${DFOLDER}/expectedMINDDescriptor3D_1.nii.gz ${DFOLDER}/expectedMINDDescriptor3D_2.nii.gz SSD ${DFOLDER}/expectedSSDValue3D.txt)
-add_test(${EXEC}_MINDSSD_3D ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/warped_linear3D.nii.gz MIND ${DFOLDER}/expectedMINDSSDValue3D.txt)
-#-----------------------------------------------------------------------------
-set(EXEC reg_test_imageGradient)
-add_executable(${EXEC} ${EXEC}.cpp)
-target_link_libraries(${EXEC} _reg_f3d)
-add_test(${EXEC}_imageGradient_SYD_2D ${EXEC} ${DFOLDER}/expectedMINDDescriptor2D_1.nii.gz ${DFOLDER}/expectedImageGradient2D.nii.gz 0)
-add_test(${EXEC}_imageGradient_SYD_3D ${EXEC} ${DFOLDER}/expectedMINDDescriptor3D_1.nii.gz ${DFOLDER}/expectedImageGradient3D.nii.gz 0)
-add_test(${EXEC}_imageGradient_SPL_2D ${EXEC} ${DFOLDER}/expectedMINDDescriptor2D_1.nii.gz ${DFOLDER}/expectedImageGradient2D.nii.gz 3)
-add_test(${EXEC}_imageGradient_SPL_3D ${EXEC} ${DFOLDER}/expectedMINDDescriptor3D_1.nii.gz ${DFOLDER}/expectedImageGradient3D.nii.gz 3)
-#-----------------------------------------------------------------------------
-set(EXEC reg_test_convolution)
-add_executable(${EXEC} ${EXEC}.cpp)
-target_link_libraries(${EXEC} _reg_f3d)
-add_test(${EXEC}_convolution_MEA_2D ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/convolution2D_mea.nii.gz 0)
-add_test(${EXEC}_convolution_LIN_2D ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/convolution2D_lin.nii.gz 1)
-add_test(${EXEC}_convolution_GAU_2D ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/convolution2D_gau.nii.gz 2)
-add_test(${EXEC}_convolution_SPL_2D ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/convolution2D_spl.nii.gz 3)
-add_test(${EXEC}_convolution_MEA_3D ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/convolution3D_mea.nii.gz 0)
-add_test(${EXEC}_convolution_LIN_3D ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/convolution3D_lin.nii.gz 1)
-add_test(${EXEC}_convolution_GAU_3D ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/convolution3D_gau.nii.gz 2)
-add_test(${EXEC}_convolution_SPL_3D ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/convolution3D_spl.nii.gz 3)
-#-----------------------------------------------------------------------------
-set(EXEC reg_test_linearElasticity)
-add_executable(${EXEC} ${EXEC}.cpp)
-target_link_libraries(${EXEC} _reg_f3d)
-add_test(${EXEC}_SPL_APP_2D ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/bspline_grid2D.nii.gz ${DFOLDER}/le_spline_approx2D.txt 0)
-add_test(${EXEC}_SPL_APP_3D ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/bspline_grid3D.nii.gz ${DFOLDER}/le_spline_approx3D.txt 0)
-add_test(${EXEC}_SPL_DEN_2D ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/bspline_grid2D.nii.gz ${DFOLDER}/le_spline_dense2D.txt 1)
-add_test(${EXEC}_SPL_DEN_3D ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/bspline_grid3D.nii.gz ${DFOLDER}/le_spline_dense3D.txt 1)
-add_test(${EXEC}_DEF_DEN_2D ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/bspline_def2D.nii.gz ${DFOLDER}/le_field_dense2D.txt 2)
-add_test(${EXEC}_DEF_DEN_3D ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/bspline_def3D.nii.gz ${DFOLDER}/le_field_dense3D.txt 2)
-#-----------------------------------------------------------------------------
-set(EXEC reg_test_linearElasticityGradient)
-add_executable(${EXEC} ${EXEC}.cpp)
-target_link_libraries(${EXEC} _reg_f3d)
-add_test(${EXEC}_SPL_APP_2D ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/bspline_grid2D.nii.gz ${DFOLDER}/le_grad_spline_approx2D.nii.gz 0)
-add_test(${EXEC}_SPL_APP_3D ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/bspline_grid3D.nii.gz ${DFOLDER}/le_grad_spline_approx3D.nii.gz 0)
-add_test(${EXEC}_SPL_DEN_2D ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/bspline_grid2D.nii.gz ${DFOLDER}/le_grad_spline_dense2D.nii.gz 1)
-add_test(${EXEC}_SPL_DEN_3D ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/bspline_grid3D.nii.gz ${DFOLDER}/le_grad_spline_dense3D.nii.gz 1)
-add_test(${EXEC}_DEF_DEN_2D ${EXEC} ${DFOLDER}/refImg2D.nii.gz ${DFOLDER}/bspline_def2D.nii.gz ${DFOLDER}/le_grad_field_dense2D.nii.gz 2)
-add_test(${EXEC}_DEF_DEN_3D ${EXEC} ${DFOLDER}/refImg3D.nii.gz ${DFOLDER}/bspline_def3D.nii.gz ${DFOLDER}/le_grad_field_dense3D.nii.gz 2)
-#-----------------------------------------------------------------------------
-#-----------------------------------------------------------------------------
-set(EXEC reg_test_computation_time)
-add_executable(${EXEC} ${EXEC}.cpp)
-target_link_libraries(${EXEC} _reg_f3d)
-#-----------------------------------------------------------------------------
+  target_link_libraries(${EXEC} PRIVATE Catch2::Catch2WithMain)
+  target_link_libraries(${EXEC} PRIVATE _reg_aladin)
+  target_link_libraries(${EXEC} PRIVATE _reg_f3d)
+  catch_discover_tests(${EXEC})
+endforeach(EXEC)
 #-----------------------------------------------------------------------------
+#-----------------------------------------------------------------------------
\ No newline at end of file
diff --git a/reg-test/matlab_tests/LSaffine.m b/reg-test/matlab_tests/LSaffine.m
deleted file mode 100644
index 12d7bd7e..00000000
--- a/reg-test/matlab_tests/LSaffine.m
+++ /dev/null
@@ -1,83 +0,0 @@
-function M = LSaffine(p1,p2)
-%p1=[x1,y1;
-%    x1',y1';
-%   ...];
-%p2=[x2,y2;
-%    x2',y2'];
-%%
-%p2 = Affine*p1;
-%%
-%% 2D or 3D
-dim=size(p1,2);
-numPoints = size(p1,1);
-numEquations = numPoints*dim;
-if(dim==2)
-    %% CREATE THE MATRIX A
-    A=zeros(numEquations,6,'single');
-    compteur = 1;
-    for ii=1:numPoints
-        A(compteur,:)=[p1(ii,:) 1 0 0 0];
-        A(compteur+1,:)=[0 0 0 p1(ii,:) 1];
-        compteur=compteur+2;
-    end
-    %
-elseif(dim==3)
-    %% CREATE THE MATRIX A
-    A=zeros(numEquations,12,'single');
-    compteur = 1;
-    for ii=1:numPoints
-        A(compteur,:)  =[p1(ii,:) 1 0 0 0 0 0 0 0 0];
-        A(compteur+1,:)=[0 0 0 0 p1(ii,:) 1 0 0 0 0];
-        A(compteur+2,:)=[0 0 0 0 0 0 0 0 p1(ii,:) 1];
-        compteur=compteur+3;
-    end
-else
-    error('LSaffine - dim > 3 not supported')
-end
-%%
-%% Pseudo inverse:
-%% A+ = V*inv(Sig)*U';
-%%
-%SVD de A : A=U*Sig*V'
-[U,Sig,V] = svd(double(A),'econ');
-U=single(U);
-Sig=single(Sig);
-V=single(V);
-Sig(Sig(:)< 0.0001)=0;
-%% 1st inv
-Sig=single(inv(double(Sig)));
-%% mul
-tmpMulMat = single(double(V)*double(Sig));
-%% last mul
-Aplus = single(double(tmpMulMat)*double(U)');
-%
-B=single(double(p2)');
-B=single(double(B(:)));
-%
-S = single(double(Aplus)*double(B));
-%%
-%Transform matrix
-M = eye(4,4,'single');
-if dim==2
-    M(1,1)= S(1);
-    M(1,2)= S(2);
-    M(1,4)= S(3);
-    M(2,1)= S(4);
-    M(2,2)= S(5);
-    M(2,4)= S(6);
-    %M(3,3)=0;
-else
-    M(1,1)= S(1);
-    M(1,2)= S(2);
-    M(1,3)= S(3);
-    M(1,4)= S(4);
-    M(2,1)= S(5);
-    M(2,2)= S(6);
-    M(2,3)= S(7);
-    M(2,4)= S(8);
-    M(3,1)= S(9);
-    M(3,2)= S(10);
-    M(3,3)= S(11);
-    M(3,4)= S(12);
-end
-end
\ No newline at end of file
diff --git a/reg-test/matlab_tests/LSrigid.m b/reg-test/matlab_tests/LSrigid.m
deleted file mode 100644
index d88b90bc..00000000
--- a/reg-test/matlab_tests/LSrigid.m
+++ /dev/null
@@ -1,61 +0,0 @@
-function M = LSrigid(p1,p2)
-%p1=[x1,y1;
-%    x1',y1';
-%   ...];
-%p2=[x2,y2;
-%    x2',y2'];
-%%
-%p2 = Rp1+T;
-%% 2D or 3D
-dim=size(p1,2);
-%%
-mean_p1=single(mean(double(p1)));
-mean_p2=single(mean(double(p2)));
-%Coord bary:
-if dim == 2
-    coordBary_p1=single([double(p1(:,1))-double(mean_p1(1)),double(p1(:,2))-double(mean_p1(2))]);
-    coordBary_p2=single([double(p2(:,1))-double(mean_p2(1)),double(p2(:,2))-double(mean_p2(2))]);
-elseif dim ==3
-    coordBary_p1=single([double(p1(:,1))-double(mean_p1(1)), double(p1(:,2))-double(mean_p1(2)), double(p1(:,3))-double(mean_p1(3))]);
-    coordBary_p2=single([double(p2(:,1))-double(mean_p2(1)), double(p2(:,2))-double(mean_p2(2)), double(p2(:,3))-double(mean_p2(3))]);
-else
-    error('we only handle 2D or 3D points');
-end
-%Covariance matrix (2,2) = (2,n)*(n,2);
-S=single(double(coordBary_p1)'*double(coordBary_p2));
-%SVD de S : S=U*Sig*V'
-[U,Sig,V] = svd(double(S),'econ');
-U=single(U);
-Sig=single(Sig);
-V=single(V);
-R=single(double(V)*double(U)');
-if(det(double(R))<0)
-    %disp('reflection case');
-    V(:,end)=single(-double(V(:,end)));
-    R=single(double(V)*double(U)');
-end
-%
-T=single(double(mean_p2)'-double(R)*double(mean_p1)');
-%% Verification
-%figure;
-%hold on;
-%plot(p2(:,1),p2(:,2),'b+');
-%p1Transform = R*p1'+repmat(T,1,size(p1',2));
-%p1Transform = p1Transform';
-%plot(p1Transform(:,1),p1Transform(:,2),'r+');
-%%
-%Transform matrix
-M = eye(4,4,'single');
-if dim==2
-    M(1:2,1:2)=R;
-    M(1,4)= T(1);
-    M(2,4)= T(2);
-    %M(3,3)=0;
-else
-    M(1:3,1:3)=R;
-    M(1,4)= T(1);
-    M(2,4)= T(2);
-    M(3,4)= T(3);
-end
-%
-end
\ No newline at end of file
diff --git a/reg-test/matlab_tests/LTS_test.m b/reg-test/matlab_tests/LTS_test.m
deleted file mode 100644
index d7a208b0..00000000
--- a/reg-test/matlab_tests/LTS_test.m
+++ /dev/null
@@ -1,40 +0,0 @@
-function LTS_test(output_path)
-%% Let's generate two sets of points
-%% 2-D and then 3D
-nPoints = 100;
-max_iter = 30;
-%
-for dimData = [2 3]
-    %-5 + (5+5)*rand(10,1)
-    P1=0 + 10*rand(nPoints,dimData);
-    P1=single(P1);
-    P2=0 + 10*rand(nPoints,dimData);
-    P2=single(P2);
-    %%
-    dlmwrite(strcat([output_path,'/P1_',num2str(dimData),'D.txt']),P1,'precision','%.6f','delimiter',' ');
-    dlmwrite(strcat([output_path,'/P2_',num2str(dimData),'D.txt']),P2,'precision','%.6f','delimiter',' ');
-    %% READ THE FILE THAT WE HAVE JUST WRITTEN
-    fileID = fopen(strcat([output_path,'/P1_',num2str(dimData),'D.txt']),'r');
-    formatSpec = '%f';
-    size = [dimData nPoints];
-    P1 = fscanf(fileID,formatSpec,size);
-    P1 = single(P1');
-    fclose(fileID);
-    fileID = fopen(strcat([output_path,'/P2_',num2str(dimData),'D.txt']),'r');
-    formatSpec = '%f';
-    size = [dimData nPoints];
-    P2 = fscanf(fileID,formatSpec,size);
-    P2 = single(P2');
-    fclose(fileID);
-    for percent_to_keep = [100 70]
-        %%
-        MR = LTSrigid_affine(P1, P2, percent_to_keep, max_iter, 0);
-        %% SAVE THE MATRIX
-        dlmwrite(strcat([output_path,'/expectedRigidLTS_',num2str(dimData),'D_',num2str(percent_to_keep),'.txt']),MR,'precision','%.6f','delimiter',' ');
-        %%
-        MA = LTSrigid_affine(P1, P2, percent_to_keep, max_iter, 1);
-        %% SAVE THE MATRIX
-        dlmwrite(strcat([output_path,'/expectedAffineLTS_',num2str(dimData),'D_',num2str(percent_to_keep),'.txt']),MA,'precision','%.6f','delimiter',' ');
-        %%
-    end
-end
\ No newline at end of file
diff --git a/reg-test/matlab_tests/LTSrigid_affine.m b/reg-test/matlab_tests/LTSrigid_affine.m
deleted file mode 100644
index 9b7d25be..00000000
--- a/reg-test/matlab_tests/LTSrigid_affine.m
+++ /dev/null
@@ -1,71 +0,0 @@
-function M = LTSrigid_affine(p1, p2, percent_to_keep, max_iter, isAffine)
-%%
-%p1=[x1,y1;
-%    x1',y1';
-%   ...];
-%p2=[x2,y2;
-%    x2',y2'];
-%
-%% 2D or 3D
-dim=size(p1,2);
-if dim>3
-    error('we only handle 2D or 3D points');
-end
-%
-nTotalPoints = size(p1,1);
-nConsideredPoints = floor(percent_to_keep*nTotalPoints/100);
-%Initialisation
-%We extract a sublist of size nConsideredPoints from the original list, for
-%example the first nConsideredPoints and we estimate the transformation:
-p1Temp = p1(1:nTotalPoints,:);
-p2Temp = p2(1:nTotalPoints,:);
-if(isAffine)
-    M1 = LSaffine(p1Temp,p2Temp);
-else
-    M1 = LSrigid(p1Temp,p2Temp);
-end
-M2 = M1;
-%
-compteur = 0;
-lastDistance = single(Inf);
-tol=single(0.001);
-%
-while compteur < max_iter
-    %We calculate and sort the residuals for all the points:
-    %r=abs(p2-(Rp1+T))
-    if dim == 2
-        residalArray=single([double(p2');zeros(1,nTotalPoints);ones(1,nTotalPoints)]-double(M2)*[double(p1');zeros(1,nTotalPoints);ones(1,nTotalPoints)]);
-        residalArray=double(residalArray);
-        residalArray=single((residalArray(1,:).^2+residalArray(2,:).^2).^(0.5));
-    else
-        residalArray=single([double(p2');ones(1,nTotalPoints)]-double(M2)*[double(p1');ones(1,nTotalPoints)]);
-        residalArray=double(residalArray);
-        residalArray=single((residalArray(1,:).^2+residalArray(2,:).^2+residalArray(3,:).^2).^(0.5));
-    end
-    %residalArray=(residalArray(1,:).^2+residalArray(2,:).^2);
-    [residalArraySorted,id_sort] = sort(double(residalArray));
-    residalArraySorted=single(residalArraySorted);
-    id_sort=single(id_sort);
-    distance=single(sum(double(residalArraySorted(1:nConsideredPoints))));
-    if((distance > lastDistance) || (lastDistance - distance) < tol)
-        M2=M1;
-        break;
-    end
-    lastDistance = distance;
-    M1=M2;
-    %We select the first nConsideredPoints with the smalest residuals
-    p1Temp = p1(id_sort(1:nConsideredPoints),:);
-    p2Temp = p2(id_sort(1:nConsideredPoints),:);
-    %We recompute the transformation
-    if(isAffine)
-        M2 = LSaffine(p1Temp,p2Temp);
-    else
-        M2 = LSrigid(p1Temp,p2Temp);
-    end
-    %
-    compteur = compteur+1;
-end
-%
-M=M2;
-%
-end
\ No newline at end of file
diff --git a/reg-test/matlab_tests/MINDSSD_test.m b/reg-test/matlab_tests/MINDSSD_test.m
deleted file mode 100644
index 0c070019..00000000
--- a/reg-test/matlab_tests/MINDSSD_test.m
+++ /dev/null
@@ -1,94 +0,0 @@
-function MINDSSD_test(img2D1, img2D2, img3D1, img3D2, output_path)
-%% CREATE A MASK FIRST for 2D and 3D !!!!
-img2D1Img = load_untouch_nii(img2D1); % read the Nifti file
-img2D1Img = img2D1Img.img;
-img2D2Img = load_untouch_nii(img2D2); % read the Nifti file
-img2D2Img = img2D2Img.img;
-
-%% RESCALE THE IMAGES FIRST !!!
-min2D1Img = double(min(img2D1Img(:)));
-max2D1Img = double(max(img2D1Img(:)));
-img2D1Img = single((double(img2D1Img)-min2D1Img)./(max2D1Img-min2D1Img));
-
-min2D2Img = double(min(img2D2Img(:)));
-max2D2Img = double(max(img2D2Img(:)));
-img2D2Img = single((double(img2D2Img)-min2D2Img)./(max2D2Img-min2D2Img));
-%%
-combinedMask2D1 = zeros(size(img2D1Img)); %img2D2Img should have the same size
-combinedMask2D2 = zeros(size(img2D2Img)); %img2D2Img should have the same size
-combinedMask2D1(img2D1Img > -1) = 1;
-combinedMask2D2(img2D2Img > -1) = 1;
-combinedMask2D = combinedMask2D1.*combinedMask2D2;
-%% 3D
-img3D1Img = load_untouch_nii(img3D1); % read the Nifti file
-img3D1Img = img3D1Img.img;
-img3D2Img = load_untouch_nii(img3D2); % read the Nifti file
-img3D2Img = img3D2Img.img;
-
-%% RESCALE THE IMAGES FIRST !!!
-min3D1Img = double(min(img3D1Img(:)));
-max3D1Img = double(max(img3D1Img(:)));
-img3D1Img = single((double(img3D1Img)-min3D1Img)./(max3D1Img-min3D1Img));
-
-min3D2Img = double(min(img3D2Img(:)));
-max3D2Img = double(max(img3D2Img(:)));
-img3D2Img = single((double(img3D2Img)-min3D2Img)./(max3D2Img-min3D2Img));
-
-combinedMask3D1 = zeros(size(img3D1Img)); %img2D2Img should have the same size
-combinedMask3D2 = zeros(size(img3D2Img)); %img2D2Img should have the same size
-combinedMask3D1(img3D1Img > -1) = 1;
-combinedMask3D2(img3D2Img > -1) = 1;
-combinedMask3D = combinedMask3D1.*combinedMask3D2;
-%% FIRST MIND DESCRIPTOR !!!!
-[expectedMIND2DDescriptorImage_nii1, expectedMIND3DDescriptorImage_nii1] = ...
-    mindDescriptor_test(img2D1, img3D1, output_path,true,combinedMask2D,combinedMask3D);
-delete([output_path,'/expectedMINDDescriptor2D.nii.gz']);
-delete([output_path,'/expectedMINDDescriptor3D.nii.gz']);
-[expectedMIND2DDescriptorImage_nii2, expectedMIND3DDescriptorImage_nii2] = ...
-    mindDescriptor_test(img2D2, img3D2, output_path,true,combinedMask2D,combinedMask3D);
-delete([output_path,'/expectedMINDDescriptor2D.nii.gz']);
-delete([output_path,'/expectedMINDDescriptor3D.nii.gz']);
-%%
-MINDArray = [expectedMIND2DDescriptorImage_nii1, expectedMIND2DDescriptorImage_nii2;...
-             expectedMIND3DDescriptorImage_nii1, expectedMIND3DDescriptorImage_nii2];
-%%
-for ii=1:size(MINDArray,1)
-    current1=MINDArray(ii,1);
-    current2=MINDArray(ii,2);
-    currentImg1 = double(current1.img);
-    currentImg2 = double(current2.img);
-    %
-    dimVect1 = current1.hdr.dime.dim;
-    dimVect2 = current2.hdr.dime.dim;
-    %
-    nz1 = dimVect1(4);
-    nz2 = dimVect2(4);
-    if nz1 ~= nz2
-        error('Error. Images must have the same dimension.');
-    end
-    if nz1 > 1
-        imgDim = 3;
-    else
-        imgDim = 2;
-    end
-    %
-    nt1 = dimVect1(5);
-    nt2 = dimVect2(5);
-    %
-    if (nt1 ~= nt2)
-        error('Error. Images must have the same dimension.');
-    end
-    %
-    SSDValue = 0;
-    for jj=1:nt1
-        img1 = currentImg1(:,:,:,jj);
-        img2 = currentImg2(:,:,:,jj);
-        diff2 = (img1-img2).^2;
-        diff2Array=diff2(:);
-        SSDValue = SSDValue + sum(diff2Array(~isnan(diff2Array)))/length(diff2Array(~isnan(diff2Array)));
-    end
-    %% Write the result
-    expectedSSD = -SSDValue;%/nt1;
-    dlmwrite([output_path,'/expectedMINDSSDValue',num2str(imgDim),'D.txt'],expectedSSD,'precision','%.6f','delimiter',' ');
-end
-end
\ No newline at end of file
diff --git a/reg-test/matlab_tests/NIfTI_20140122/FAQ.pdf b/reg-test/matlab_tests/NIfTI_20140122/FAQ.pdf
deleted file mode 100644
index b04456b9..00000000
Binary files a/reg-test/matlab_tests/NIfTI_20140122/FAQ.pdf and /dev/null differ
diff --git a/reg-test/matlab_tests/NIfTI_20140122/NIfTI_tools.pdf b/reg-test/matlab_tests/NIfTI_20140122/NIfTI_tools.pdf
deleted file mode 100644
index 592c807b..00000000
Binary files a/reg-test/matlab_tests/NIfTI_20140122/NIfTI_tools.pdf and /dev/null differ
diff --git a/reg-test/matlab_tests/NIfTI_20140122/UseANALYZE.pdf b/reg-test/matlab_tests/NIfTI_20140122/UseANALYZE.pdf
deleted file mode 100644
index 4bcdf218..00000000
Binary files a/reg-test/matlab_tests/NIfTI_20140122/UseANALYZE.pdf and /dev/null differ
diff --git a/reg-test/matlab_tests/NIfTI_20140122/affine.m b/reg-test/matlab_tests/NIfTI_20140122/affine.m
deleted file mode 100644
index 13b652f3..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/affine.m
+++ /dev/null
@@ -1,554 +0,0 @@
-%  Using 2D or 3D affine matrix to rotate, translate, scale, reflect and
-%  shear a 2D image or 3D volume. 2D image is represented by a 2D matrix,
-%  3D volume is represented by a 3D matrix, and data type can be real 
-%  integer or floating-point.
-%
-%  You may notice that MATLAB has a function called 'imtransform.m' for
-%  2D spatial transformation. However, keep in mind that 'imtransform.m'
-%  assumes y for the 1st dimension, and x for the 2nd dimension. They are
-%  equivalent otherwise.
-%
-%  In addition, if you adjust the 'new_elem_size' parameter, this 'affine.m'
-%  is equivalent to 'interp2.m' for 2D image, and equivalent to 'interp3.m'
-%  for 3D volume.
-%
-%  Usage: [new_img new_M] = ...
-%	affine(old_img, old_M, [new_elem_size], [verbose], [bg], [method]);
-%
-%  old_img  -	original 2D image or 3D volume. We assume x for the 1st
-%		dimension, y for the 2nd dimension, and z for the 3rd
-%		dimension.
-%
-%  old_M  -	a 3x3 2D affine matrix for 2D image, or a 4x4 3D affine
-%		matrix for 3D volume. We assume x for the 1st dimension,
-%		y for the 2nd dimension, and z for the 3rd dimension.
-%
-%  new_elem_size (optional)  -  size of voxel along x y z direction for 
-%		a transformed 3D volume, or size of pixel along x y for
-%		a transformed 2D image. We assume x for the 1st dimension
-%		y for the 2nd dimension, and z for the 3rd dimension.
-%		'new_elem_size' is 1 if it is default or empty.
-%
-%		You can increase its value to decrease the resampling rate,
-%		and make the 2D image or 3D volume more coarse. It works
-%		just like 'interp3'.
-%
-%  verbose (optional) - 1, 0
-%		1:  show transforming progress in percentage
-%		2:  progress will not be displayed
-%		'verbose' is 1 if it is default or empty.
-%
-%  bg (optional)  -	background voxel intensity in any extra corner that
-%		is caused by the interpolation. 0 in most cases. If it is
-%		default or empty, 'bg' will be the average of two corner
-%		voxel intensities in original data.
-%
-%  method (optional)  -	1, 2, or 3
-%		1:  for Trilinear interpolation
-%		2:  for Nearest Neighbor interpolation
-%		3:  for Fischer's Bresenham interpolation
-%		'method' is 1 if it is default or empty.
-%
-%  new_img  -	transformed 2D image or 3D volume
-%
-%  new_M  -	transformed affine matrix
-%
-%  Example 1 (3D rotation):
-%	load mri.mat;   old_img = double(squeeze(D));
-%	old_M = [0.88 0.5 3 -90; -0.5 0.88 3 -126; 0 0 2 -72; 0 0 0 1];
-%	new_img = affine(old_img, old_M, 2);
-%	[x y z] = meshgrid(1:128,1:128,1:27);
-%	sz = size(new_img);
-%	[x1 y1 z1] = meshgrid(1:sz(2),1:sz(1),1:sz(3));
-%	figure; slice(x, y, z, old_img, 64, 64, 13.5);
-%	shading flat; colormap(map); view(-66, 66);
-%	figure; slice(x1, y1, z1, new_img, sz(1)/2, sz(2)/2, sz(3)/2);
-%	shading flat; colormap(map); view(-66, 66);
-%
-%  Example 2 (2D interpolation):
-%	load mri.mat;   old_img=D(:,:,1,13)';
-%	old_M = [1 0 0; 0 1 0; 0 0 1];
-%	new_img = affine(old_img, old_M, [.2 .4]);
-%	figure; image(old_img); colormap(map);
-%	figure; image(new_img); colormap(map);
-%
-%  This program is inspired by:
-%  SPM5 Software from Wellcome Trust Centre for Neuroimaging
-%	http://www.fil.ion.ucl.ac.uk/spm/software
-%  Fischer, J., A. del Rio (2004). A Fast Method for Applying Rigid
-%	Transformations to Volume Data, WSCG2004 Conference.
-%	http://wscg.zcu.cz/wscg2004/Papers_2004_Short/M19.pdf
-%  
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function [new_img, new_M] = affine(old_img, old_M, new_elem_size, verbose, bg, method)
-
-   if ~exist('old_img','var') | ~exist('old_M','var')
-      error('Usage: [new_img new_M] = affine(old_img, old_M, [new_elem_size], [verbose], [bg], [method]);');
-   end
-
-   if ndims(old_img) == 3
-      if ~isequal(size(old_M),[4 4])
-         error('old_M should be a 4x4 affine matrix for 3D volume.');
-      end
-   elseif ndims(old_img) == 2
-      if ~isequal(size(old_M),[3 3])
-         error('old_M should be a 3x3 affine matrix for 2D image.');
-      end
-   else
-      error('old_img should be either 2D image or 3D volume.');
-   end
-
-   if ~exist('new_elem_size','var') | isempty(new_elem_size)
-      new_elem_size = [1 1 1];
-   elseif length(new_elem_size) < 2
-      new_elem_size = new_elem_size(1)*ones(1,3);
-   elseif length(new_elem_size) < 3
-      new_elem_size = [new_elem_size(:); 1]';
-   end
-
-   if ~exist('method','var') | isempty(method)
-      method = 1;
-   elseif ~exist('bresenham_line3d.m','file') & method == 3
-      error([char(10) char(10) 'Please download 3D Bresenham''s line generation program from:' char(10) char(10) 'http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=21057' char(10) char(10) 'to test Fischer''s Bresenham interpolation method.' char(10) char(10)]);
-   end
-
-   %  Make compatible to MATLAB earlier than version 7 (R14), which
-   %  can only perform arithmetic on double data type
-   %
-   old_img = double(old_img);
-   old_dim = size(old_img);
-
-   if ~exist('bg','var') | isempty(bg)
-      bg = mean([old_img(1) old_img(end)]);
-   end
-
-   if ~exist('verbose','var') | isempty(verbose)
-      verbose = 1;
-   end
-
-   if ndims(old_img) == 2
-      old_dim(3) = 1;
-      old_M = old_M(:, [1 2 3 3]);
-      old_M = old_M([1 2 3 3], :);
-      old_M(3,:) = [0 0 1 0];
-      old_M(:,3) = [0 0 1 0]';
-   end
-
-   %  Vertices of img in voxel
-   %
-   XYZvox = [	1		1		1
-		1		1		old_dim(3)
-		1		old_dim(2)	1
-		1		old_dim(2)	old_dim(3)
-		old_dim(1)	1		1
-		old_dim(1)	1		old_dim(3)
-		old_dim(1)	old_dim(2)	1
-		old_dim(1)	old_dim(2)	old_dim(3)   ]';
-
-   old_R = old_M(1:3,1:3);
-   old_T = old_M(1:3,4);
-
-   %  Vertices of img in millimeter
-   %
-   XYZmm = old_R*(XYZvox-1) + repmat(old_T, [1, 8]);
-
-   %  Make scale of new_M according to new_elem_size
-   %
-   new_M = diag([new_elem_size 1]);
-
-   %  Make translation so minimum vertex is moved to [1,1,1]
-   %
-   new_M(1:3,4) = round( min(XYZmm,[],2) );
-
-   %  New dimensions will be the maximum vertices in XYZ direction (dim_vox)
-   %  i.e. compute   dim_vox   via   dim_mm = R*(dim_vox-1)+T
-   %  where, dim_mm = round(max(XYZmm,[],2));
-   %
-   new_dim = ceil(new_M(1:3,1:3) \ ( round(max(XYZmm,[],2))-new_M(1:3,4) )+1)';
-
-   %  Initialize new_img with new_dim
-   %
-   new_img = zeros(new_dim(1:3));
-
-   %  Mask out any changes from Z axis of transformed volume, since we
-   %  will traverse it voxel by voxel below. We will only apply unit
-   %  increment of mask_Z(3,4) to simulate the cursor movement
-   %
-   %  i.e. we will use   mask_Z * new_XYZvox   to replace   new_XYZvox
-   %
-   mask_Z = diag(ones(1,4));
-   mask_Z(3,3) = 0;
-
-   %  It will be easier to do the interpolation if we invert the process
-   %  by not traversing the original volume. Instead, we traverse the
-   %  transformed volume, and backproject each voxel in the transformed 
-   %  volume back into the original volume. If the backprojected voxel
-   %  in original volume is within its boundary, the intensity of that
-   %  voxel can be used by the cursor location in the transformed volume.
-   %
-   %  First, we traverse along Z axis of transformed volume voxel by voxel
-   %
-   for z = 1:new_dim(3)
-
-      if verbose & ~mod(z,10)
-         fprintf('%.2f percent is done.\n', 100*z/new_dim(3));
-      end
-
-      %  We need to find out the mapping from voxel in the transformed
-      %  volume (new_XYZvox) to voxel in the original volume (old_XYZvox)
-      %
-      %  The following equation works, because they all equal to XYZmm:
-      %  new_R*(new_XYZvox-1) + new_T  ==  old_R*(old_XYZvox-1) + old_T
-      %
-      %  We can use modified new_M1 & old_M1 to substitute new_M & old_M
-      %      new_M1 * new_XYZvox       ==       old_M1 * old_XYZvox
-      %
-      %  where: M1 = M;   M1(:,4) = M(:,4) - sum(M(:,1:3),2);
-      %  and:             M(:,4) == [T; 1] == sum(M1,2)
-      %
-      %  Therefore:   old_XYZvox = old_M1 \ new_M1 * new_XYZvox;
-      %
-      %  Since we are traverse Z axis, and   new_XYZvox   is replaced
-      %  by   mask_Z * new_XYZvox, the above formula can be rewritten
-      %  as:    old_XYZvox = old_M1 \ new_M1 * mask_Z * new_XYZvox;
-      %
-      %  i.e. we find the mapping from new_XYZvox to old_XYZvox:
-      %  M = old_M1 \ new_M1 * mask_Z;
-      %
-      %  First, compute modified old_M1 & new_M1
-      %
-      old_M1 = old_M;   old_M1(:,4) = old_M(:,4) - sum(old_M(:,1:3),2);
-      new_M1 = new_M;   new_M1(:,4) = new_M(:,4) - sum(new_M(:,1:3),2);
-
-      %  Then, apply unit increment of mask_Z(3,4) to simulate the
-      %  cursor movement
-      %
-      mask_Z(3,4) = z;
-
-      %  Here is the mapping from new_XYZvox to old_XYZvox
-      %
-      M = old_M1 \ new_M1 * mask_Z;
-
-      switch method
-      case 1
-         new_img(:,:,z) = trilinear(old_img, new_dim, old_dim, M, bg);
-      case 2
-         new_img(:,:,z) = nearest_neighbor(old_img, new_dim, old_dim, M, bg);
-      case 3
-         new_img(:,:,z) = bresenham(old_img, new_dim, old_dim, M, bg);
-      end
-
-   end;			% for z
-
-   if ndims(old_img) == 2
-      new_M(3,:) = [];
-      new_M(:,3) = [];
-   end
-
-   return;					% affine
-
-
-%--------------------------------------------------------------------
-function img_slice = trilinear(img, dim1, dim2, M, bg)
-
-   img_slice = zeros(dim1(1:2));
-   TINY = 5e-2;					% tolerance
-
-   %  Dimension of transformed 3D volume
-   %
-   xdim1 = dim1(1);
-   ydim1 = dim1(2);
-
-   %  Dimension of original 3D volume
-   %
-   xdim2 = dim2(1);
-   ydim2 = dim2(2);
-   zdim2 = dim2(3);
-
-   %  initialize new_Y accumulation
-   %
-   Y2X = 0;
-   Y2Y = 0;
-   Y2Z = 0;
-
-   for y = 1:ydim1
-
-      %  increment of new_Y accumulation
-      %
-      Y2X = Y2X + M(1,2);		% new_Y to old_X
-      Y2Y = Y2Y + M(2,2);		% new_Y to old_Y
-      Y2Z = Y2Z + M(3,2);		% new_Y to old_Z
-
-      %  backproject new_Y accumulation and translation to old_XYZ
-      %
-      old_X = Y2X + M(1,4);
-      old_Y = Y2Y + M(2,4);
-      old_Z = Y2Z + M(3,4);
-
-      for x = 1:xdim1
-
-         %  accumulate the increment of new_X, and apply it
-         %  to the backprojected old_XYZ
-         %
-         old_X = M(1,1) + old_X  ;
-         old_Y = M(2,1) + old_Y  ;
-         old_Z = M(3,1) + old_Z  ;
-
-         %  within boundary of original image
-         %
-         if (	old_X > 1-TINY & old_X < xdim2+TINY & ...
-		old_Y > 1-TINY & old_Y < ydim2+TINY & ...
-		old_Z > 1-TINY & old_Z < zdim2+TINY	)
-
-            %  Calculate distance of old_XYZ to its neighbors for
-            %  weighted intensity average
-            %
-            dx = old_X - floor(old_X);
-            dy = old_Y - floor(old_Y);
-            dz = old_Z - floor(old_Z);
-
-            x000 = floor(old_X);
-            x100 = x000 + 1;
-
-            if floor(old_X) < 1
-               x000 = 1;
-               x100 = x000;
-            elseif floor(old_X) > xdim2-1
-               x000 = xdim2;
-               x100 = x000;
-            end
-
-            x010 = x000;
-            x001 = x000;
-            x011 = x000;
-
-            x110 = x100;
-            x101 = x100;
-            x111 = x100;
-
-            y000 = floor(old_Y);
-            y010 = y000 + 1;
-
-            if floor(old_Y) < 1
-               y000 = 1;
-               y100 = y000;
-            elseif floor(old_Y) > ydim2-1
-               y000 = ydim2;
-               y010 = y000;
-            end
-
-            y100 = y000;
-            y001 = y000;
-            y101 = y000;
-
-            y110 = y010;
-            y011 = y010;
-            y111 = y010;
-
-            z000 = floor(old_Z);
-            z001 = z000 + 1;
-
-            if floor(old_Z) < 1
-               z000 = 1;
-               z001 = z000;
-            elseif floor(old_Z) > zdim2-1
-               z000 = zdim2;
-               z001 = z000;
-            end
-
-            z100 = z000;
-            z010 = z000;
-            z110 = z000;
-
-            z101 = z001;
-            z011 = z001;
-            z111 = z001;
-
-            x010 = x000;
-            x001 = x000;
-            x011 = x000;
-
-            x110 = x100;
-            x101 = x100;
-            x111 = x100;
-
-            v000 = double(img(x000, y000, z000));
-            v010 = double(img(x010, y010, z010));
-            v001 = double(img(x001, y001, z001));
-            v011 = double(img(x011, y011, z011));
-
-            v100 = double(img(x100, y100, z100));
-            v110 = double(img(x110, y110, z110));
-            v101 = double(img(x101, y101, z101));
-            v111 = double(img(x111, y111, z111));
-
-            img_slice(x,y) = v000*(1-dx)*(1-dy)*(1-dz) + ...
-               v010*(1-dx)*dy*(1-dz) + ...
-               v001*(1-dx)*(1-dy)*dz + ...
-               v011*(1-dx)*dy*dz + ...
-               v100*dx*(1-dy)*(1-dz) + ...
-               v110*dx*dy*(1-dz) + ...
-               v101*dx*(1-dy)*dz + ...
-               v111*dx*dy*dz;
-
-         else
-            img_slice(x,y) = bg;
-
-         end	% if boundary
-
-      end	% for x
-   end		% for y
-
-   return;					% trilinear
-
-
-%--------------------------------------------------------------------
-function img_slice = nearest_neighbor(img, dim1, dim2, M, bg)
-
-   img_slice = zeros(dim1(1:2));
-
-   %  Dimension of transformed 3D volume
-   %
-   xdim1 = dim1(1);
-   ydim1 = dim1(2);
-
-   %  Dimension of original 3D volume
-   %
-   xdim2 = dim2(1);
-   ydim2 = dim2(2);
-   zdim2 = dim2(3);
-
-   %  initialize new_Y accumulation
-   %
-   Y2X = 0;
-   Y2Y = 0;
-   Y2Z = 0;
-
-   for y = 1:ydim1
-
-      %  increment of new_Y accumulation
-      %
-      Y2X = Y2X + M(1,2);		% new_Y to old_X
-      Y2Y = Y2Y + M(2,2);		% new_Y to old_Y
-      Y2Z = Y2Z + M(3,2);		% new_Y to old_Z
-
-      %  backproject new_Y accumulation and translation to old_XYZ
-      %
-      old_X = Y2X + M(1,4);
-      old_Y = Y2Y + M(2,4);
-      old_Z = Y2Z + M(3,4);
-
-      for x = 1:xdim1
-
-         %  accumulate the increment of new_X and apply it
-         %  to the backprojected old_XYZ
-         %
-         old_X = M(1,1) + old_X  ;
-         old_Y = M(2,1) + old_Y  ;
-         old_Z = M(3,1) + old_Z  ;
-
-         xi = round(old_X);
-         yi = round(old_Y);
-         zi = round(old_Z);
-
-         %  within boundary of original image
-         %
-         if (	xi >= 1 & xi <= xdim2 & ...
-		yi >= 1 & yi <= ydim2 & ...
-		zi >= 1 & zi <= zdim2	)
-
-            img_slice(x,y) = img(xi,yi,zi);
-
-         else
-            img_slice(x,y) = bg;
-
-         end	% if boundary
-
-      end	% for x
-   end		% for y
-
-   return;					% nearest_neighbor
-
-
-%--------------------------------------------------------------------
-function img_slice = bresenham(img, dim1, dim2, M, bg)
-
-   img_slice = zeros(dim1(1:2));
-
-   %  Dimension of transformed 3D volume
-   %
-   xdim1 = dim1(1);
-   ydim1 = dim1(2);
-
-   %  Dimension of original 3D volume
-   %
-   xdim2 = dim2(1);
-   ydim2 = dim2(2);
-   zdim2 = dim2(3);
-
-   for y = 1:ydim1
-
-      start_old_XYZ = round(M*[0     y 0 1]');
-      end_old_XYZ   = round(M*[xdim1 y 0 1]');
-
-      [X Y Z] = bresenham_line3d(start_old_XYZ, end_old_XYZ);
-
-      %  line error correction
-      %
-%      del = end_old_XYZ - start_old_XYZ;
- %     del_dom = max(del);
-  %    idx_dom = find(del==del_dom);
-   %   idx_dom = idx_dom(1);
-    %  idx_other = [1 2 3];
-     % idx_other(idx_dom) = [];
-      %del_x1 = del(idx_other(1));
-%      del_x2 = del(idx_other(2));
- %     line_slope = sqrt((del_x1/del_dom)^2 + (del_x2/del_dom)^2 + 1);
-  %    line_error = line_slope - 1;
-% line error correction removed because it is too slow
-
-      for x = 1:xdim1
-
-         %  rescale ratio
-         %
-         i = round(x * length(X) / xdim1);
-
-         if i < 1
-            i = 1;
-         elseif i > length(X)
-            i = length(X);
-         end
-
-         xi = X(i);
-         yi = Y(i);
-         zi = Z(i);
-
-         %  within boundary of the old XYZ space
-         %
-         if (	xi >= 1 & xi <= xdim2 & ...
-		yi >= 1 & yi <= ydim2 & ...
-		zi >= 1 & zi <= zdim2	)
-
-            img_slice(x,y) = img(xi,yi,zi);
-
-%            if line_error > 1
- %              x = x + 1;
-
-%               if x <= xdim1
- %                 img_slice(x,y) = img(xi,yi,zi);
-  %                line_error = line_slope - 1;
-   %            end
-    %        end		% if line_error
-% line error correction removed because it is too slow
-
-         else
-            img_slice(x,y) = bg;
-
-         end	% if boundary
-
-      end	% for x
-   end		% for y
-
-   return;					% bresenham
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/bipolar.m b/reg-test/matlab_tests/NIfTI_20140122/bipolar.m
deleted file mode 100644
index 0c79c373..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/bipolar.m
+++ /dev/null
@@ -1,94 +0,0 @@
-%BIPOLAR returns an M-by-3 matrix containing a blue-red colormap, in
-%	in which red stands for positive, blue stands for negative, 
-%	and white stands for 0.
-%
-%  Usage: cmap = bipolar(M, lo, hi, contrast);  or  cmap = bipolar;
-%
-%  cmap:  output M-by-3 matrix for BIPOLAR colormap.
-%  M:	  number of shades in the colormap. By default, it is the
-%	  same length as the current colormap.
-%  lo:	  the lowest value to represent.
-%  hi:	  the highest value to represent.
-%
-%  Inspired from the LORETA PASCAL program:
-%	http://www.unizh.ch/keyinst/NewLORETA
-%
-%  jimmy@rotman-baycrest.on.ca
-%
-%----------------------------------------------------------------
-function cmap = bipolar(M, lo, hi, contrast)
-
-   if ~exist('contrast','var')
-      contrast = 128;
-   end
-
-   if ~exist('lo','var')
-      lo = -1;
-   end
-
-   if ~exist('hi','var')
-      hi = 1;
-   end
-
-   if ~exist('M','var')
-      cmap = colormap;
-      M = size(cmap,1);
-   end
-
-   steepness = 10 ^ (1 - (contrast-1)/127);
-   pos_infs = 1e-99;
-   neg_infs = -1e-99;
-
-   doubleredc = [];
-   doublebluec = [];
-
-   if lo >= 0		% all positive
-
-      if lo == 0
-         lo = pos_infs;
-      end
-
-      for i=linspace(hi/M, hi, M)
-         t = exp(log(i/hi)*steepness);
-         doubleredc = [doubleredc; [(1-t)+t,(1-t)+0,(1-t)+0]];
-      end
-
-      cmap = doubleredc;
-
-   elseif hi <= 0	% all negative
-
-      if hi == 0
-         hi = neg_infs;
-      end
-
-      for i=linspace(abs(lo)/M, abs(lo), M)
-         t = exp(log(i/abs(lo))*steepness);
-         doublebluec = [doublebluec; [(1-t)+0,(1-t)+0,(1-t)+t]];
-      end
-
-      cmap = flipud(doublebluec);
-
-   else
-
-      if hi > abs(lo)
-         maxc = hi;
-      else
-         maxc = abs(lo);
-      end
-
-      for i=linspace(maxc/M, hi, round(M*hi/(hi-lo)))
-         t = exp(log(i/maxc)*steepness);
-         doubleredc = [doubleredc; [(1-t)+t,(1-t)+0,(1-t)+0]];
-      end      
-
-      for i=linspace(maxc/M, abs(lo), round(M*abs(lo)/(hi-lo)))
-         t = exp(log(i/maxc)*steepness);
-         doublebluec = [doublebluec; [(1-t)+0,(1-t)+0,(1-t)+t]];
-      end
-
-      cmap = [flipud(doublebluec); doubleredc];
-
-   end
-
-   return;					% bipolar
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/bresenham_line3d.m b/reg-test/matlab_tests/NIfTI_20140122/bresenham_line3d.m
deleted file mode 100644
index d4db692a..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/bresenham_line3d.m
+++ /dev/null
@@ -1,189 +0,0 @@
-%  Generate X Y Z coordinates of a 3D Bresenham's line between
-%  two given points.
-%
-%  A very useful application of this algorithm can be found in the
-%  implementation of Fischer's Bresenham interpolation method in my
-%  another program that can rotate three dimensional image volume
-%  with an affine matrix:
-%  http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=21080
-%
-%  Usage: [X Y Z] = bresenham_line3d(P1, P2, [precision]);
-%
-%  P1	- vector for Point1, where P1 = [x1 y1 z1]
-%
-%  P2	- vector for Point2, where P2 = [x2 y2 z2]
-%
-%  precision (optional) - Although according to Bresenham's line
-%	algorithm, point coordinates x1 y1 z1 and x2 y2 z2 should
-%	be integer numbers, this program extends its limit to all
-%	real numbers. If any of them are floating numbers, you
-%	should specify how many digits of decimal that you would
-%	like to preserve. Be aware that the length of output X Y
-%	Z coordinates will increase in 10 times for each decimal
-%	digit that you want to preserve. By default, the precision
-%	is 0, which means that they will be rounded to the nearest
-%	integer.
-%
-%  X	- a set of x coordinates on Bresenham's line
-%
-%  Y	- a set of y coordinates on Bresenham's line
-%
-%  Z	- a set of z coordinates on Bresenham's line
-%
-%  Therefore, all points in XYZ set (i.e. P(i) = [X(i) Y(i) Z(i)])
-%  will constitute the Bresenham's line between P1 and P1.
-%
-%  Example:
-%	P1 = [12 37 6];     P2 = [46 3 35];
-%	[X Y Z] = bresenham_line3d(P1, P2);
-%	figure; plot3(X,Y,Z,'s','markerface','b');
-%
-%  This program is ported to MATLAB from:
-%
-%  B.Pendleton.  line3d - 3D Bresenham's (a 3D line drawing algorithm)
-%  ftp://ftp.isc.org/pub/usenet/comp.sources.unix/volume26/line3d, 1992
-%
-%  Which is also referenced by:
-%
-%  Fischer, J., A. del Rio (2004).  A Fast Method for Applying Rigid
-%  Transformations to Volume Data, WSCG2004 Conference.
-%  http://wscg.zcu.cz/wscg2004/Papers_2004_Short/M19.pdf
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function [X,Y,Z] = bresenham_line3d(P1, P2, precision)
-
-   if ~exist('precision','var') | isempty(precision) | round(precision) == 0
-      precision = 0;
-      P1 = round(P1);
-      P2 = round(P2);
-   else
-      precision = round(precision);
-      P1 = round(P1*(10^precision));
-      P2 = round(P2*(10^precision));
-   end
-
-   d = max(abs(P2-P1)+1);
-   X = zeros(1, d);
-   Y = zeros(1, d);
-   Z = zeros(1, d);
-
-   x1 = P1(1);
-   y1 = P1(2);
-   z1 = P1(3);
-
-   x2 = P2(1);
-   y2 = P2(2);
-   z2 = P2(3);
-
-   dx = x2 - x1;
-   dy = y2 - y1;
-   dz = z2 - z1;
-
-   ax = abs(dx)*2;
-   ay = abs(dy)*2;
-   az = abs(dz)*2;
-
-   sx = sign(dx);
-   sy = sign(dy);
-   sz = sign(dz);
-
-   x = x1;
-   y = y1;
-   z = z1;
-   idx = 1;
-
-   if(ax>=max(ay,az))			% x dominant
-      yd = ay - ax/2;
-      zd = az - ax/2;
-
-      while(1)
-         X(idx) = x;
-         Y(idx) = y;
-         Z(idx) = z;
-         idx = idx + 1;
-
-         if(x == x2)		% end
-            break;
-         end
-
-         if(yd >= 0)		% move along y
-            y = y + sy;
-            yd = yd - ax;
-         end
-
-         if(zd >= 0)		% move along z
-            z = z + sz;
-            zd = zd - ax;
-         end
-
-         x  = x  + sx;		% move along x
-         yd = yd + ay;
-         zd = zd + az;
-      end
-   elseif(ay>=max(ax,az))		% y dominant
-      xd = ax - ay/2;
-      zd = az - ay/2;
-
-      while(1)
-         X(idx) = x;
-         Y(idx) = y;
-         Z(idx) = z;
-         idx = idx + 1;
-
-         if(y == y2)		% end
-            break;
-         end
-
-         if(xd >= 0)		% move along x
-            x = x + sx;
-            xd = xd - ay;
-         end
-
-         if(zd >= 0)		% move along z
-            z = z + sz;
-            zd = zd - ay;
-         end
-
-         y  = y  + sy;		% move along y
-         xd = xd + ax;
-         zd = zd + az;
-      end
-   elseif(az>=max(ax,ay))		% z dominant
-      xd = ax - az/2;
-      yd = ay - az/2;
-
-      while(1)
-         X(idx) = x;
-         Y(idx) = y;
-         Z(idx) = z;
-         idx = idx + 1;
-
-         if(z == z2)		% end
-            break;
-         end
-
-         if(xd >= 0)		% move along x
-            x = x + sx;
-            xd = xd - az;
-         end
-
-         if(yd >= 0)		% move along y
-            y = y + sy;
-            yd = yd - az;
-         end
-
-         z  = z  + sz;		% move along z
-         xd = xd + ax;
-         yd = yd + ay;
-      end
-   end
-
-   if precision ~= 0
-      X = X/(10^precision);
-      Y = Y/(10^precision);
-      Z = Z/(10^precision);
-   end
-
-   return;					% bresenham_line3d
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/clip_nii.m b/reg-test/matlab_tests/NIfTI_20140122/clip_nii.m
deleted file mode 100644
index 40fcb308..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/clip_nii.m
+++ /dev/null
@@ -1,115 +0,0 @@
-%  CLIP_NII: Clip the NIfTI volume from any of the 6 sides
-%
-%  Usage:	nii = clip_nii(nii, [option])
-%
-%  Inputs:
-%
-%  nii - NIfTI volume.
-%
-%  option - struct instructing how many voxel to be cut from which side.
-%
-%	option.cut_from_L = ( number of voxel )
-%	option.cut_from_R = ( number of voxel )
-%	option.cut_from_P = ( number of voxel )
-%	option.cut_from_A = ( number of voxel )
-%	option.cut_from_I = ( number of voxel )
-%	option.cut_from_S = ( number of voxel )
-%
-%	Options description in detail:
-%	==============================
-%
-%	cut_from_L: Number of voxels from Left side will be clipped.
-%
-%	cut_from_R: Number of voxels from Right side will be clipped.
-%
-%	cut_from_P: Number of voxels from Posterior side will be clipped.
-%
-%	cut_from_A: Number of voxels from Anterior side will be clipped.
-%
-%	cut_from_I: Number of voxels from Inferior side will be clipped.
-%
-%	cut_from_S: Number of voxels from Superior side will be clipped.
-%
-%  NIfTI data format can be found on: http://nifti.nimh.nih.gov
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function nii = clip_nii(nii, opt)
-
-   dims = abs(nii.hdr.dime.dim(2:4));
-   origin = abs(nii.hdr.hist.originator(1:3));
-
-   if isempty(origin) | all(origin == 0)		% according to SPM
-      origin = round((dims+1)/2);
-   end
-
-   cut_from_L = 0;
-   cut_from_R = 0;
-   cut_from_P = 0;
-   cut_from_A = 0;
-   cut_from_I = 0;
-   cut_from_S = 0;
-
-   if nargin > 1 & ~isempty(opt)
-      if ~isstruct(opt)
-         error('option argument should be a struct');
-      end
-
-      if isfield(opt,'cut_from_L')
-         cut_from_L = round(opt.cut_from_L);
-
-         if cut_from_L >= origin(1) | cut_from_L < 0
-            error('cut_from_L cannot be negative or cut beyond originator');
-         end
-      end
-
-      if isfield(opt,'cut_from_P')
-         cut_from_P = round(opt.cut_from_P);
-
-         if cut_from_P >= origin(2) | cut_from_P < 0
-            error('cut_from_P cannot be negative or cut beyond originator');
-         end
-      end
-
-      if isfield(opt,'cut_from_I')
-         cut_from_I = round(opt.cut_from_I);
-
-         if cut_from_I >= origin(3) | cut_from_I < 0
-            error('cut_from_I cannot be negative or cut beyond originator');
-         end
-      end
-
-      if isfield(opt,'cut_from_R')
-         cut_from_R = round(opt.cut_from_R);
-
-         if cut_from_R > dims(1)-origin(1) | cut_from_R < 0
-            error('cut_from_R cannot be negative or cut beyond originator');
-         end
-      end
-
-      if isfield(opt,'cut_from_A')
-         cut_from_A = round(opt.cut_from_A);
-
-         if cut_from_A > dims(2)-origin(2) | cut_from_A < 0
-            error('cut_from_A cannot be negative or cut beyond originator');
-         end
-      end
-
-      if isfield(opt,'cut_from_S')
-         cut_from_S = round(opt.cut_from_S);
-
-         if cut_from_S > dims(3)-origin(3) | cut_from_S < 0
-            error('cut_from_S cannot be negative or cut beyond originator');
-         end
-      end
-   end
-
-   nii = make_nii(nii.img( (cut_from_L+1) : (dims(1)-cut_from_R), ...
-			   (cut_from_P+1) : (dims(2)-cut_from_A), ...
-			   (cut_from_I+1) : (dims(3)-cut_from_S), ...
-			   :,:,:,:,:), nii.hdr.dime.pixdim(2:4), ...
-	[origin(1)-cut_from_L origin(2)-cut_from_P origin(3)-cut_from_I], ...
-	nii.hdr.dime.datatype, nii.hdr.hist.descrip);
-
-   return;
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/collapse_nii_scan.m b/reg-test/matlab_tests/NIfTI_20140122/collapse_nii_scan.m
deleted file mode 100644
index 4c000787..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/collapse_nii_scan.m
+++ /dev/null
@@ -1,260 +0,0 @@
-%  Collapse multiple single-scan NIFTI files into a multiple-scan NIFTI file
-%
-%  Usage: collapse_nii_scan(scan_file_pattern, [collapsed_fileprefix], [scan_file_folder])
-%
-%  Here, scan_file_pattern should look like: 'myscan_0*.img'
-%  If collapsed_fileprefix is omit, 'multi_scan' will be used
-%  If scan_file_folder is omit, current file folder will be used
-%
-%  The order of volumes in the collapsed file will be the order of 
-%  corresponding filenames for those selected scan files.
-%
-%  NIFTI data format can be found on: http://nifti.nimh.nih.gov
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function collapse_nii_scan(scan_pattern, fileprefix, scan_path)
-
-   if ~exist('fileprefix','var')
-      fileprefix = 'multi_scan';
-   else
-      [tmp fileprefix] = fileparts(fileprefix);
-   end
-
-   if ~exist('scan_path','var'), scan_path = pwd; end
-   pnfn = fullfile(scan_path, scan_pattern);
-
-   file_lst = dir(pnfn);
-   flist = {file_lst.name};
-   flist = flist(:);
-   filename = flist{1};
-
-   v = version;
-
-   %  Check file extension. If .gz, unpack it into temp folder
-   %
-   if length(filename) > 2 & strcmp(filename(end-2:end), '.gz')
-
-      if ~strcmp(filename(end-6:end), '.img.gz') & ...
-	 ~strcmp(filename(end-6:end), '.hdr.gz') & ...
-	 ~strcmp(filename(end-6:end), '.nii.gz')
-
-         error('Please check filename.');
-      end
-
-      if str2num(v(1:3)) < 7.1 | ~usejava('jvm')
-         error('Please use MATLAB 7.1 (with java) and above, or run gunzip outside MATLAB.');
-      else
-         gzFile = 1;
-      end
-   else
-      if ~strcmp(filename(end-3:end), '.img') & ...
-	 ~strcmp(filename(end-3:end), '.hdr') & ...
-	 ~strcmp(filename(end-3:end), '.nii')
-
-         error('Please check filename.');
-      end
-   end
-
-   nii = load_untouch_nii(fullfile(scan_path,filename));
-   nii.hdr.dime.dim(5) = length(flist);
-
-   if nii.hdr.dime.dim(1) < 4
-      nii.hdr.dime.dim(1) = 4;
-   end
-
-   hdr = nii.hdr;
-   filetype = nii.filetype;
-
-   if isfield(nii,'ext') & ~isempty(nii.ext)
-      ext = nii.ext;
-      [ext, esize_total] = verify_nii_ext(ext);
-   else
-      ext = [];
-   end
-
-   switch double(hdr.dime.datatype),
-   case   1,
-      hdr.dime.bitpix = int16(1 ); precision = 'ubit1';
-   case   2,
-      hdr.dime.bitpix = int16(8 ); precision = 'uint8';
-   case   4,
-      hdr.dime.bitpix = int16(16); precision = 'int16';
-   case   8,
-      hdr.dime.bitpix = int16(32); precision = 'int32';
-   case  16,
-      hdr.dime.bitpix = int16(32); precision = 'float32';
-   case  32,
-      hdr.dime.bitpix = int16(64); precision = 'float32';
-   case  64,
-      hdr.dime.bitpix = int16(64); precision = 'float64';
-   case 128,
-      hdr.dime.bitpix = int16(24); precision = 'uint8';
-   case 256 
-      hdr.dime.bitpix = int16(8 ); precision = 'int8';
-   case 512 
-      hdr.dime.bitpix = int16(16); precision = 'uint16';
-   case 768 
-      hdr.dime.bitpix = int16(32); precision = 'uint32';
-   case 1024
-      hdr.dime.bitpix = int16(64); precision = 'int64';
-   case 1280
-      hdr.dime.bitpix = int16(64); precision = 'uint64';
-   case 1792,
-      hdr.dime.bitpix = int16(128); precision = 'float64';
-   otherwise
-      error('This datatype is not supported');
-   end
-
-   if filetype == 2
-      fid = fopen(sprintf('%s.nii',fileprefix),'w');
-      
-      if fid < 0,
-         msg = sprintf('Cannot open file %s.nii.',fileprefix);
-         error(msg);
-      end
-      
-      hdr.dime.vox_offset = 352;
-
-      if ~isempty(ext)
-         hdr.dime.vox_offset = hdr.dime.vox_offset + esize_total;
-      end
-
-      hdr.hist.magic = 'n+1';
-      save_untouch_nii_hdr(hdr, fid);
-
-      if ~isempty(ext)
-         save_nii_ext(ext, fid);
-      end
-   elseif filetype == 1
-      fid = fopen(sprintf('%s.hdr',fileprefix),'w');
-      
-      if fid < 0,
-         msg = sprintf('Cannot open file %s.hdr.',fileprefix);
-         error(msg);
-      end
-      
-      hdr.dime.vox_offset = 0;
-      hdr.hist.magic = 'ni1';
-      save_untouch_nii_hdr(hdr, fid);
-
-      if ~isempty(ext)
-         save_nii_ext(ext, fid);
-      end
-      
-      fclose(fid);
-      fid = fopen(sprintf('%s.img',fileprefix),'w');
-   else
-      fid = fopen(sprintf('%s.hdr',fileprefix),'w');
-      
-      if fid < 0,
-         msg = sprintf('Cannot open file %s.hdr.',fileprefix);
-         error(msg);
-      end
-      
-      save_untouch0_nii_hdr(hdr, fid);
-      
-      fclose(fid);
-      fid = fopen(sprintf('%s.img',fileprefix),'w');
-   end
-
-   if filetype == 2 & isempty(ext)
-      skip_bytes = double(hdr.dime.vox_offset) - 348;
-   else
-      skip_bytes = 0;
-   end
-
-   if skip_bytes
-      fwrite(fid, zeros(1,skip_bytes), 'uint8');
-   end
-
-   glmax = -inf;
-   glmin = inf;
-
-   for i = 1:length(flist)
-      nii = load_untouch_nii(fullfile(scan_path,flist{i}));
-
-      if double(hdr.dime.datatype) == 128
-
-         %  RGB planes are expected to be in the 4th dimension of nii.img
-         %
-         if(size(nii.img,4)~=3)
-            error(['The NII structure does not appear to have 3 RGB color planes in the 4th dimension']);
-         end
-
-         nii.img = permute(nii.img, [4 1 2 3 5 6 7 8]);
-      end
-
-      %  For complex float32 or complex float64, voxel values
-      %  include [real, imag]
-      %
-      if hdr.dime.datatype == 32 | hdr.dime.datatype == 1792
-         real_img = real(nii.img(:))';
-         nii.img = imag(nii.img(:))';
-         nii.img = [real_img; nii.img];
-      end
-
-      if nii.hdr.dime.glmax > glmax
-         glmax = nii.hdr.dime.glmax;
-      end
-
-      if nii.hdr.dime.glmin < glmin
-         glmin = nii.hdr.dime.glmin;
-      end
-
-      fwrite(fid, nii.img, precision);
-   end
-
-   hdr.dime.glmax = round(glmax);
-   hdr.dime.glmin = round(glmin);
-
-   if filetype == 2
-      fseek(fid, 140, 'bof');
-      fwrite(fid, hdr.dime.glmax, 'int32');
-      fwrite(fid, hdr.dime.glmin, 'int32');
-   elseif filetype == 1
-      fid2 = fopen(sprintf('%s.hdr',fileprefix),'w');
-
-      if fid2 < 0,
-         msg = sprintf('Cannot open file %s.hdr.',fileprefix);
-         error(msg);
-      end
-
-      save_untouch_nii_hdr(hdr, fid2);
-
-      if ~isempty(ext)
-         save_nii_ext(ext, fid2);
-      end
-
-      fclose(fid2);
-   else
-      fid2 = fopen(sprintf('%s.hdr',fileprefix),'w');
-
-      if fid2 < 0,
-         msg = sprintf('Cannot open file %s.hdr.',fileprefix);
-         error(msg);
-      end
-
-      save_untouch0_nii_hdr(hdr, fid2);
-
-      fclose(fid2);
-   end
-
-   fclose(fid);
-
-   %  gzip output file if requested
-   %
-   if exist('gzFile', 'var')
-      if filetype == 1
-         gzip([fileprefix, '.img']);
-         delete([fileprefix, '.img']);
-         gzip([fileprefix, '.hdr']);
-         delete([fileprefix, '.hdr']);
-      elseif filetype == 2
-         gzip([fileprefix, '.nii']);
-         delete([fileprefix, '.nii']);
-      end;
-   end;
-
-   return;					% collapse_nii_scan
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/examples.txt b/reg-test/matlab_tests/NIfTI_20140122/examples.txt
deleted file mode 100644
index 82bec5fe..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/examples.txt
+++ /dev/null
@@ -1,130 +0,0 @@
-
-- Examples to load, make and save a nii struct:
-
-	To load Analyze data or NIFTI data to a structure:
-
-		nii = load_nii(NIFTI_file_name, [img_idx], [old_RGB24]);
-
-	img_idx is a numerical array of image indices along the temporal
-	axis, which is only available in NIFTI data. After you specify 
-	img_idx, only those images indexed by img_idx will be loaded. If
-	there is no img_idx or img_idx is empty, all available images 
-	will be loaded.
-
-	For RGB image, most people use RGB triple sequentially for each
-	voxel, like [R1 G1 B1 R2 G2 B2 ...]. However, some program like
-	Analyze 6.0 developed by AnalyzeDirect uses old RGB24, in a way
-	like [R1 R2 ... G1 G2 ... B1 B2 ...] for each slices. In this
-	case, you can set old_RGB24 flag to 1 and load data correctly:
-
-		nii = load_nii(NIFTI_file_name, [], 1);
-
-	To get a total number of images along the temporal axis:
-
-		num_scan = get_nii_frame(NIFTI_file_name);
-
-	You can also load the header extension if it exists:
-
-		nii.ext = load_nii_ext(NIFTI_file_name);
-
-	You can just load the Analyze or NIFTI header:
-	(header contains: hk, dime, and hist)
-
-		hdr = load_nii_hdr(NIFTI_file_name);
-
-	You can also save the structure to a new file:
-	(header extension will be saved if there is nii.ext structure)
-
-		save_nii(nii, NIFTI_file_name);
-
-	To make the structure from any 3D (or 4D) data:
-
-		img = rand(91,109,91); or
-		img = rand(64,64,21,18);
-		nii = make_nii(img [, voxel_size, origin, datatype] );
-
-	Use "help load_nii", "help save_nii", "help make_nii" etc.
-	to get more detail information.
-
-
-- Examples to plot a nii struct:
-  (More detail descriptions are available on top of "view_nii.m")
-
-	Simple way to plot a nii struct:
-
-		view_nii(nii);
-
-	The default colormap will use the Gray if all data values are
-	non-negative; otherwise, the default colormap will use BiPolar.
-	You can choose other colormap, including customized colormap
-	from panel.
-
-	To imbed the plot into your existing figure:
-
-		h = gcf;
-		opt.command = 'init';
-		opt.setarea = [0.3 0.1 0.6 0.8];
-		view_nii(h, nii, opt);
-
-	To add a colorbar:
-
-		opt.usecolorbar = 1;
-		view_nii(gcf, opt);
-
-		Here, opt.command is implicitly set to 'update'.
-
-	To display in real aspect ratio:
-
-		opt.usestretch = 0;
-		view_nii(gcf, opt);
-
-	If you want the data value to be directly used as the index
-	of colormap, instead of scale to the whole colormap:
-
-		opt.useimagesc = 0;
-		view_nii(gcf, opt);
-
-	If you modified the data value without changing the dimension,
-	voxel_size, and origin, you can update the display by:
-
-		opt.command = 'updateimg';
-		view_nii(gcf, nii.img, opt);
-
-	If the data is completely different, display can be updated by:
-
-		opt.command = 'updatenii';
-		view_nii(gcf, nii, opt);
-
-	This is an example to plot EEG source imaging on top of T1 background:
-		1. download overlay.zip and unzip it from:
-		   http://www.rotman-baycrest.on.ca/~jimmy/NIFTI/overlay.zip
-		2. T1 = load_nii('T1.nii');
-		3. EEG = load_nii('EEG.nii');
-		4. option.setvalue.idx = find(EEG.img);
-		5. option.setvalue.val = EEG.img(option.setvalue.idx);
-		6. option.useinterp = 1;
-		7. option.setviewpoint = [62 48 46];
-		8. view_nii(T1, option);
-
-
-- Contrast and Brightness are available under Gray and Bipolar colormap:
-
-	Increase contrast in Gray colormap will make high end values
-	more distinguishable by sacrificing the low end values; The
-	minimum contrast (default) will display the whole range.
-
-	Increase or decrease contrast in BiPolar colormap will shift
-	the distinguishable position for both positive and negative
-	values.
-
-	Increase or decrease brightness in Gray colormap will shift
-	the distinguishable position.
-
-	Increase or decrease brightness in BiPolar colormap will make
-	both positive and negative values more distinguishable.
-
-
-- Required files:
-
-	All files in this package.
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/expand_nii_scan.m b/reg-test/matlab_tests/NIfTI_20140122/expand_nii_scan.m
deleted file mode 100644
index e3a3bf88..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/expand_nii_scan.m
+++ /dev/null
@@ -1,48 +0,0 @@
-%  Expand a multiple-scan NIFTI file into multiple single-scan NIFTI files
-%
-%  Usage: expand_nii_scan(multi_scan_filename, [img_idx], [path_to_save])
-%
-%  NIFTI data format can be found on: http://nifti.nimh.nih.gov
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function expand_nii_scan(filename, img_idx, newpath)
-
-   v = version;
-
-   %  Check file extension. If .gz, unpack it into temp folder
-   %
-   if length(filename) > 2 & strcmp(filename(end-2:end), '.gz')
-
-      if ~strcmp(filename(end-6:end), '.img.gz') & ...
-	 ~strcmp(filename(end-6:end), '.hdr.gz') & ...
-	 ~strcmp(filename(end-6:end), '.nii.gz')
-
-         error('Please check filename.');
-      end
-
-      if str2num(v(1:3)) < 7.1 | ~usejava('jvm')
-         error('Please use MATLAB 7.1 (with java) and above, or run gunzip outside MATLAB.');
-      else
-         gzFile = 1;
-      end
-   end
-
-   if ~exist('newpath','var') | isempty(newpath), newpath = pwd; end
-   if ~exist('img_idx','var') | isempty(img_idx), img_idx = 1:get_nii_frame(filename); end
-
-   for i=img_idx
-      nii_i = load_untouch_nii(filename, i);
-
-      fn = [nii_i.fileprefix '_' sprintf('%04d',i)];
-      pnfn = fullfile(newpath, fn);
-
-      if exist('gzFile', 'var')
-         pnfn = [pnfn '.nii.gz'];
-      end
-
-      save_untouch_nii(nii_i, pnfn);
-   end
-
-   return;					% expand_nii_scan
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/extra_nii_hdr.m b/reg-test/matlab_tests/NIfTI_20140122/extra_nii_hdr.m
deleted file mode 100644
index 99a7f21c..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/extra_nii_hdr.m
+++ /dev/null
@@ -1,255 +0,0 @@
-%  Decode extra NIFTI header information into hdr.extra
-%
-%  Usage: hdr = extra_nii_hdr(hdr)
-%
-%  hdr can be obtained from load_nii_hdr
-%
-%  NIFTI data format can be found on: http://nifti.nimh.nih.gov
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function hdr = extra_nii_hdr(hdr)
-
-   switch hdr.dime.datatype
-   case 1
-      extra.NIFTI_DATATYPES = 'DT_BINARY';
-   case 2
-      extra.NIFTI_DATATYPES = 'DT_UINT8';
-   case 4
-      extra.NIFTI_DATATYPES = 'DT_INT16';
-   case 8
-      extra.NIFTI_DATATYPES = 'DT_INT32';
-   case 16
-      extra.NIFTI_DATATYPES = 'DT_FLOAT32';
-   case 32
-      extra.NIFTI_DATATYPES = 'DT_COMPLEX64';
-   case 64
-      extra.NIFTI_DATATYPES = 'DT_FLOAT64';
-   case 128
-      extra.NIFTI_DATATYPES = 'DT_RGB24';
-   case 256
-      extra.NIFTI_DATATYPES = 'DT_INT8';
-   case 512
-      extra.NIFTI_DATATYPES = 'DT_UINT16';
-   case 768
-      extra.NIFTI_DATATYPES = 'DT_UINT32';
-   case 1024
-      extra.NIFTI_DATATYPES = 'DT_INT64';
-   case 1280
-      extra.NIFTI_DATATYPES = 'DT_UINT64';
-   case 1536
-      extra.NIFTI_DATATYPES = 'DT_FLOAT128';
-   case 1792
-      extra.NIFTI_DATATYPES = 'DT_COMPLEX128';
-   case 2048
-      extra.NIFTI_DATATYPES = 'DT_COMPLEX256';
-   otherwise
-      extra.NIFTI_DATATYPES = 'DT_UNKNOWN';
-   end
-
-   switch hdr.dime.intent_code
-   case 2
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_CORREL';
-   case 3
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_TTEST';
-   case 4
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_FTEST';
-   case 5
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_ZSCORE';
-   case 6
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_CHISQ';
-   case 7
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_BETA';
-   case 8
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_BINOM';
-   case 9
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_GAMMA';
-   case 10
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_POISSON';
-   case 11
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_NORMAL';
-   case 12
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_FTEST_NONC';
-   case 13
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_CHISQ_NONC';
-   case 14
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_LOGISTIC';
-   case 15
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_LAPLACE';
-   case 16
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_UNIFORM';
-   case 17
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_TTEST_NONC';
-   case 18
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_WEIBULL';
-   case 19
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_CHI';
-   case 20
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_INVGAUSS';
-   case 21
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_EXTVAL';
-   case 22
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_PVAL';
-   case 23
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_LOGPVAL';
-   case 24
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_LOG10PVAL';
-   case 1001
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_ESTIMATE';
-   case 1002
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_LABEL';
-   case 1003
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_NEURONAME';
-   case 1004
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_GENMATRIX';
-   case 1005
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_SYMMATRIX';
-   case 1006
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_DISPVECT';
-   case 1007
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_VECTOR';
-   case 1008
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_POINTSET';
-   case 1009
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_TRIANGLE';
-   case 1010
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_QUATERNION';
-   case 1011
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_DIMLESS';
-   otherwise
-      extra.NIFTI_INTENT_CODES = 'NIFTI_INTENT_NONE';
-   end
-
-   extra.NIFTI_INTENT_NAMES = hdr.hist.intent_name;
-
-   if hdr.hist.sform_code > 0
-      switch hdr.hist.sform_code
-      case 1
-         extra.NIFTI_SFORM_CODES = 'NIFTI_XFORM_SCANNER_ANAT';
-      case 2
-         extra.NIFTI_SFORM_CODES = 'NIFTI_XFORM_ALIGNED_ANAT';
-      case 3
-         extra.NIFTI_SFORM_CODES = 'NIFTI_XFORM_TALAIRACH';
-      case 4
-         extra.NIFTI_SFORM_CODES = 'NIFTI_XFORM_MNI_152';
-      otherwise
-         extra.NIFTI_SFORM_CODES = 'NIFTI_XFORM_UNKNOWN';
-      end
-
-      extra.NIFTI_QFORM_CODES = 'NIFTI_XFORM_UNKNOWN';
-   elseif hdr.hist.qform_code > 0
-      extra.NIFTI_SFORM_CODES = 'NIFTI_XFORM_UNKNOWN';
-
-      switch hdr.hist.qform_code
-      case 1
-         extra.NIFTI_QFORM_CODES = 'NIFTI_XFORM_SCANNER_ANAT';
-      case 2
-         extra.NIFTI_QFORM_CODES = 'NIFTI_XFORM_ALIGNED_ANAT';
-      case 3
-         extra.NIFTI_QFORM_CODES = 'NIFTI_XFORM_TALAIRACH';
-      case 4
-         extra.NIFTI_QFORM_CODES = 'NIFTI_XFORM_MNI_152';
-      otherwise
-         extra.NIFTI_QFORM_CODES = 'NIFTI_XFORM_UNKNOWN';
-      end
-   else
-      extra.NIFTI_SFORM_CODES = 'NIFTI_XFORM_UNKNOWN';
-      extra.NIFTI_QFORM_CODES = 'NIFTI_XFORM_UNKNOWN';
-   end
-
-   switch bitand(hdr.dime.xyzt_units, 7)	% mask with 0x07
-   case 1
-      extra.NIFTI_SPACE_UNIT = 'NIFTI_UNITS_METER';
-   case 2
-      extra.NIFTI_SPACE_UNIT = 'NIFTI_UNITS_MM';	% millimeter
-   case 3
-      extra.NIFTI_SPACE_UNIT = 'NIFTI_UNITS_MICRO';
-   otherwise
-      extra.NIFTI_SPACE_UNIT = 'NIFTI_UNITS_UNKNOWN';
-   end
-
-   switch bitand(hdr.dime.xyzt_units, 56)	% mask with 0x38
-   case 8
-      extra.NIFTI_TIME_UNIT = 'NIFTI_UNITS_SEC';
-   case 16
-      extra.NIFTI_TIME_UNIT = 'NIFTI_UNITS_MSEC';
-   case 24
-      extra.NIFTI_TIME_UNIT = 'NIFTI_UNITS_USEC';	% microsecond
-   otherwise
-      extra.NIFTI_TIME_UNIT = 'NIFTI_UNITS_UNKNOWN';
-   end
-
-   switch hdr.dime.xyzt_units
-   case 32
-      extra.NIFTI_SPECTRAL_UNIT = 'NIFTI_UNITS_HZ';
-   case 40
-      extra.NIFTI_SPECTRAL_UNIT = 'NIFTI_UNITS_PPM';	% part per million
-   case 48
-      extra.NIFTI_SPECTRAL_UNIT = 'NIFTI_UNITS_RADS';	% radians per second
-   otherwise
-      extra.NIFTI_SPECTRAL_UNIT = 'NIFTI_UNITS_UNKNOWN';
-   end
-
-   %  MRI-specific spatial and temporal information
-   %
-   dim_info = hdr.hk.dim_info;
-   extra.NIFTI_FREQ_DIM = bitand(dim_info, 3);
-   extra.NIFTI_PHASE_DIM = bitand(bitshift(dim_info, -2), 3);
-   extra.NIFTI_SLICE_DIM = bitand(bitshift(dim_info, -4), 3);
-
-   %  Check slice code
-   %
-   switch hdr.dime.slice_code
-   case 1
-      extra.NIFTI_SLICE_ORDER = 'NIFTI_SLICE_SEQ_INC';	% sequential increasing
-   case 2
-      extra.NIFTI_SLICE_ORDER = 'NIFTI_SLICE_SEQ_DEC';	% sequential decreasing
-   case 3
-      extra.NIFTI_SLICE_ORDER = 'NIFTI_SLICE_ALT_INC';	% alternating increasing
-   case 4
-      extra.NIFTI_SLICE_ORDER = 'NIFTI_SLICE_ALT_DEC';	% alternating decreasing
-   case 5
-      extra.NIFTI_SLICE_ORDER = 'NIFTI_SLICE_ALT_INC2';	% ALT_INC # 2
-   case 6
-      extra.NIFTI_SLICE_ORDER = 'NIFTI_SLICE_ALT_DEC2';	% ALT_DEC # 2
-   otherwise
-      extra.NIFTI_SLICE_ORDER = 'NIFTI_SLICE_UNKNOWN';
-   end
-
-   %  Check NIFTI version
-   %
-   if     ~isempty(hdr.hist.magic) & strcmp(hdr.hist.magic(1),'n') & ...
-	( strcmp(hdr.hist.magic(2),'i') | strcmp(hdr.hist.magic(2),'+') ) & ...
-	  str2num(hdr.hist.magic(3)) >= 1 & str2num(hdr.hist.magic(3)) <= 9
-
-      extra.NIFTI_VERSION = str2num(hdr.hist.magic(3));
-   else
-      extra.NIFTI_VERSION = 0;
-   end
-
-   %  Check if data stored in the same file (*.nii) or separate
-   %  files (*.hdr/*.img)
-   %
-   if isempty(hdr.hist.magic)
-      extra.NIFTI_ONEFILE = 0;
-   else
-      extra.NIFTI_ONEFILE = strcmp(hdr.hist.magic(2), '+');
-   end
-
-   %  Swap has been taken care of by checking whether sizeof_hdr is
-   %  348 (machine is 'ieee-le' or 'ieee-be' etc)
-   %
-   % extra.NIFTI_NEEDS_SWAP = (hdr.dime.dim(1) < 0 | hdr.dime.dim(1) > 7);
-
-   %  Check NIFTI header struct contains a 5th (vector) dimension
-   %
-   if hdr.dime.dim(1) > 4 & hdr.dime.dim(6) > 1
-      extra.NIFTI_5TH_DIM = hdr.dime.dim(6);
-   else
-      extra.NIFTI_5TH_DIM = 0;
-   end
-
-   hdr.extra = extra;
-
-   return;					% extra_nii_hdr
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/flip_lr.m b/reg-test/matlab_tests/NIfTI_20140122/flip_lr.m
deleted file mode 100644
index 06543fd1..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/flip_lr.m
+++ /dev/null
@@ -1,84 +0,0 @@
-%  When you load any ANALYZE or NIfTI file with 'load_nii.m', and view
-%  it with 'view_nii.m', you may find that the image is L-R flipped.
-%  This is because of the confusion of radiological and neurological
-%  convention in the medical image before NIfTI format is adopted. You
-%  can find more details from:
-%
-%  http://www.rotman-baycrest.on.ca/~jimmy/UseANALYZE.htm
-%
-%  Sometime, people even want to convert RAS (standard orientation) back
-%  to LAS orientation to satisfy the legend programs or processes. This
-%  program is only written for those purpose. So PLEASE BE VERY CAUTIOUS
-%  WHEN USING THIS 'FLIP_LR.M' PROGRAM.
-%
-%  With 'flip_lr.m', you can convert any ANALYZE or NIfTI (no matter
-%  3D or 4D) file to a flipped NIfTI file. This is implemented simply
-%  by flipping the affine matrix in the NIfTI header. Since the L-R
-%  orientation is determined there, so the image will be flipped.
-%
-%  Usage: flip_lr(original_fn, flipped_fn, [old_RGB],[tolerance],[preferredForm])
-%
-%  original_fn  -  filename of the original ANALYZE or NIfTI (3D or 4D) file
-%
-%  flipped_fn  -  filename of the L-R flipped NIfTI file
-%
-%  old_RGB (optional)  -  a scale number to tell difference of new RGB24
-%	from old RGB24. New RGB24 uses RGB triple sequentially for each
-%	voxel, like [R1 G1 B1 R2 G2 B2 ...]. Analyze 6.0 from AnalyzeDirect
-%	uses old RGB24, in a way like [R1 R2 ... G1 G2 ... B1 B2 ...] for
-%	each slices. If the image that you view is garbled, try to set 
-%	old_RGB variable to 1 and try again, because it could be in
-%	old RGB24. It will be set to 0, if it is default or empty.
-%
-%  tolerance (optional) - distortion allowed for non-orthogonal rotation
-%	or shearing in NIfTI affine matrix. It will be set to 0.1 (10%),
-%	if it is default or empty.
-%
-%  preferredForm (optional)  -  selects which transformation from voxels
-%	to RAS coordinates; values are s,q,S,Q.  Lower case s,q indicate
-%	"prefer sform or qform, but use others if preferred not present". 
-%	Upper case indicate the program is forced to use the specificied
-%	tranform or fail loading.  'preferredForm' will be 's', if it is
-%	default or empty.	- Jeff Gunter
-%
-%  Example: flip_lr('avg152T1_LR_nifti.nii', 'flipped_lr.nii');
-%           flip_lr('avg152T1_RL_nifti.nii', 'flipped_rl.nii');
-%
-%  You will find that 'avg152T1_LR_nifti.nii' and 'avg152T1_RL_nifti.nii'
-%  are the same, and 'flipped_lr.nii' and 'flipped_rl.nii' are also the
-%  the same, but they are L-R flipped from 'avg152T1_*'.
-%
-%  NIFTI data format can be found on: http://nifti.nimh.nih.gov
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function flip_lr(original_fn, flipped_fn, old_RGB, tolerance, preferredForm)
-
-   if ~exist('original_fn','var') | ~exist('flipped_fn','var')
-      error('Usage: flip_lr(original_fn, flipped_fn, [old_RGB],[tolerance])');
-   end
-
-   if ~exist('old_RGB','var') | isempty(old_RGB)
-      old_RGB = 0;
-   end
-
-   if ~exist('tolerance','var') | isempty(tolerance)
-      tolerance = 0.1;
-   end
-
-   if ~exist('preferredForm','var') | isempty(preferredForm)
-      preferredForm= 's';				% Jeff
-   end
-
-   nii = load_nii(original_fn, [], [], [], [], old_RGB, tolerance, preferredForm);
-   M = diag(nii.hdr.dime.pixdim(2:5));
-   M(1:3,4) = -M(1:3,1:3)*(nii.hdr.hist.originator(1:3)-1)';
-   M(1,:) = -1*M(1,:);
-   nii.hdr.hist.sform_code = 1;
-   nii.hdr.hist.srow_x = M(1,:);
-   nii.hdr.hist.srow_y = M(2,:);
-   nii.hdr.hist.srow_z = M(3,:);
-   save_nii(nii, flipped_fn);
-
-   return;					% flip_lr
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/get_nii_frame.m b/reg-test/matlab_tests/NIfTI_20140122/get_nii_frame.m
deleted file mode 100644
index 154d5262..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/get_nii_frame.m
+++ /dev/null
@@ -1,164 +0,0 @@
-%  Return time frame of a NIFTI dataset. Support both *.nii and 
-%  *.hdr/*.img file extension. If file extension is not provided,
-%  *.hdr/*.img will be used as default. 
-%
-%  It is a lightweighted "load_nii_hdr", and is equivalent to
-%  hdr.dime.dim(5)
-%  
-%  Usage: [ total_scan ] = get_nii_frame(filename)
-%
-%  filename - NIFTI file name.
-%
-%  Returned values:
-%
-%  total_scan - total number of image scans for the time frame
-%
-%  NIFTI data format can be found on: http://nifti.nimh.nih.gov
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function [ total_scan ] = get_nii_frame(filename)
-
-   if ~exist('filename','var'),
-      error('Usage: [ total_scan ] = get_nii_frame(filename)');
-   end
-
-   v = version;
-
-   %  Check file extension. If .gz, unpack it into temp folder
-   %
-   if length(filename) > 2 & strcmp(filename(end-2:end), '.gz')
-
-      if ~strcmp(filename(end-6:end), '.img.gz') & ...
-	 ~strcmp(filename(end-6:end), '.hdr.gz') & ...
-	 ~strcmp(filename(end-6:end), '.nii.gz')
-
-         error('Please check filename.');
-      end
-
-      if str2num(v(1:3)) < 7.1 | ~usejava('jvm')
-         error('Please use MATLAB 7.1 (with java) and above, or run gunzip outside MATLAB.');
-      elseif strcmp(filename(end-6:end), '.img.gz')
-         filename1 = filename;
-         filename2 = filename;
-         filename2(end-6:end) = '';
-         filename2 = [filename2, '.hdr.gz'];
-
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-
-         filename1 = gunzip(filename1, tmpDir);
-         filename2 = gunzip(filename2, tmpDir);
-         filename = char(filename1);	% convert from cell to string
-      elseif strcmp(filename(end-6:end), '.hdr.gz')
-         filename1 = filename;
-         filename2 = filename;
-         filename2(end-6:end) = '';
-         filename2 = [filename2, '.img.gz'];
-
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-
-         filename1 = gunzip(filename1, tmpDir);
-         filename2 = gunzip(filename2, tmpDir);
-         filename = char(filename1);	% convert from cell to string
-      elseif strcmp(filename(end-6:end), '.nii.gz')
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-         filename = gunzip(filename, tmpDir);
-         filename = char(filename);	% convert from cell to string
-      end
-   end
-
-   fileprefix = filename;
-   machine = 'ieee-le';
-   new_ext = 0;
-
-   if findstr('.nii',fileprefix) & strcmp(fileprefix(end-3:end), '.nii')
-      new_ext = 1;
-      fileprefix(end-3:end)='';
-   end
-
-   if findstr('.hdr',fileprefix) & strcmp(fileprefix(end-3:end), '.hdr')
-      fileprefix(end-3:end)='';
-   end
-
-   if findstr('.img',fileprefix) & strcmp(fileprefix(end-3:end), '.img')
-      fileprefix(end-3:end)='';
-   end
-
-   if new_ext
-      fn = sprintf('%s.nii',fileprefix);
-
-      if ~exist(fn)
-         msg = sprintf('Cannot find file "%s.nii".', fileprefix);
-         error(msg);
-      end
-   else
-      fn = sprintf('%s.hdr',fileprefix);
-
-      if ~exist(fn)
-         msg = sprintf('Cannot find file "%s.hdr".', fileprefix);
-         error(msg);
-      end
-   end
-
-   fid = fopen(fn,'r',machine);
-    
-   if fid < 0,
-      msg = sprintf('Cannot open file %s.',fn);
-      error(msg);
-   else
-      hdr = read_header(fid);
-      fclose(fid);
-   end
-   
-   if hdr.sizeof_hdr ~= 348
-      % first try reading the opposite endian to 'machine'
-      switch machine,
-      case 'ieee-le', machine = 'ieee-be';
-      case 'ieee-be', machine = 'ieee-le';
-      end
-        
-      fid = fopen(fn,'r',machine);
-        
-      if fid < 0,
-         msg = sprintf('Cannot open file %s.',fn);
-         error(msg);
-      else
-         hdr = read_header(fid);
-         fclose(fid);
-      end
-   end
-
-   if hdr.sizeof_hdr ~= 348
-      % Now throw an error
-      msg = sprintf('File "%s" is corrupted.',fn);
-      error(msg);
-   end
-
-   total_scan = hdr.dim(5);
-
-   %  Clean up after gunzip
-   %
-   if exist('gzFileName', 'var')
-      rmdir(tmpDir,'s');
-   end
-
-   return;					% get_nii_frame
-
-
-%---------------------------------------------------------------------
-function [ dsr ] = read_header(fid)
-
-    fseek(fid,0,'bof');
-    dsr.sizeof_hdr    = fread(fid,1,'int32')';  % should be 348!
-
-    fseek(fid,40,'bof');
-    dsr.dim           = fread(fid,8,'int16')';
-
-    return;					% read_header
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/license.txt b/reg-test/matlab_tests/NIfTI_20140122/license.txt
deleted file mode 100644
index 5a2d7f87..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/license.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-Copyright (c) 2014, Jimmy Shen
-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
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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.
diff --git a/reg-test/matlab_tests/NIfTI_20140122/load_nii.m b/reg-test/matlab_tests/NIfTI_20140122/load_nii.m
deleted file mode 100644
index c36ba77f..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/load_nii.m
+++ /dev/null
@@ -1,198 +0,0 @@
-%  Load NIFTI or ANALYZE dataset. Support both *.nii and *.hdr/*.img
-%  file extension. If file extension is not provided, *.hdr/*.img will
-%  be used as default.
-%
-%  A subset of NIFTI transform is included. For non-orthogonal rotation,
-%  shearing etc., please use 'reslice_nii.m' to reslice the NIFTI file.
-%  It will not cause negative effect, as long as you remember not to do
-%  slice time correction after reslicing the NIFTI file. Output variable
-%  nii will be in RAS orientation, i.e. X axis from Left to Right,
-%  Y axis from Posterior to Anterior, and Z axis from Inferior to
-%  Superior.
-%  
-%  Usage: nii = load_nii(filename, [img_idx], [dim5_idx], [dim6_idx], ...
-%			[dim7_idx], [old_RGB], [tolerance], [preferredForm])
-%  
-%  filename  - 	NIFTI or ANALYZE file name.
-%  
-%  img_idx (optional)  -  a numerical array of 4th dimension indices,
-%	which is the indices of image scan volume. The number of images
-%	scan volumes can be obtained from get_nii_frame.m, or simply
-%	hdr.dime.dim(5). Only the specified volumes will be loaded. 
-%	All available image volumes will be loaded, if it is default or
-%	empty.
-%
-%  dim5_idx (optional)  -  a numerical array of 5th dimension indices.
-%	Only the specified range will be loaded. All available range
-%	will be loaded, if it is default or empty.
-%
-%  dim6_idx (optional)  -  a numerical array of 6th dimension indices.
-%	Only the specified range will be loaded. All available range
-%	will be loaded, if it is default or empty.
-%
-%  dim7_idx (optional)  -  a numerical array of 7th dimension indices.
-%	Only the specified range will be loaded. All available range
-%	will be loaded, if it is default or empty.
-%
-%  old_RGB (optional)  -  a scale number to tell difference of new RGB24
-%	from old RGB24. New RGB24 uses RGB triple sequentially for each
-%	voxel, like [R1 G1 B1 R2 G2 B2 ...]. Analyze 6.0 from AnalyzeDirect
-%	uses old RGB24, in a way like [R1 R2 ... G1 G2 ... B1 B2 ...] for
-%	each slices. If the image that you view is garbled, try to set 
-%	old_RGB variable to 1 and try again, because it could be in
-%	old RGB24. It will be set to 0, if it is default or empty.
-%
-%  tolerance (optional) - distortion allowed in the loaded image for any
-%	non-orthogonal rotation or shearing of NIfTI affine matrix. If 
-%	you set 'tolerance' to 0, it means that you do not allow any 
-%	distortion. If you set 'tolerance' to 1, it means that you do 
-%	not care any distortion. The image will fail to be loaded if it
-%	can not be tolerated. The tolerance will be set to 0.1 (10%), if
-%	it is default or empty.
-%
-%  preferredForm (optional)  -  selects which transformation from voxels
-%	to RAS coordinates; values are s,q,S,Q.  Lower case s,q indicate
-%	"prefer sform or qform, but use others if preferred not present". 
-%	Upper case indicate the program is forced to use the specificied
-%	tranform or fail loading.  'preferredForm' will be 's', if it is
-%	default or empty.	- Jeff Gunter
-%
-%  Returned values:
-%  
-%  nii structure:
-%
-%	hdr -		struct with NIFTI header fields.
-%
-%	filetype -	Analyze format .hdr/.img (0); 
-%			NIFTI .hdr/.img (1);
-%			NIFTI .nii (2)
-%
-%	fileprefix - 	NIFTI filename without extension.
-%
-%	machine - 	machine string variable.
-%
-%	img - 		3D (or 4D) matrix of NIFTI data.
-%
-%	original -	the original header before any affine transform.
-%  
-%  Part of this file is copied and modified from:
-%  http://www.mathworks.com/matlabcentral/fileexchange/1878-mri-analyze-tools
-%  
-%  NIFTI data format can be found on: http://nifti.nimh.nih.gov
-%  
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function nii = load_nii(filename, img_idx, dim5_idx, dim6_idx, dim7_idx, ...
-			old_RGB, tolerance, preferredForm)
-
-   if ~exist('filename','var')
-      error('Usage: nii = load_nii(filename, [img_idx], [dim5_idx], [dim6_idx], [dim7_idx], [old_RGB], [tolerance], [preferredForm])');
-   end
-
-   if ~exist('img_idx','var') | isempty(img_idx)
-      img_idx = [];
-   end
-
-   if ~exist('dim5_idx','var') | isempty(dim5_idx)
-      dim5_idx = [];
-   end
-
-   if ~exist('dim6_idx','var') | isempty(dim6_idx)
-      dim6_idx = [];
-   end
-
-   if ~exist('dim7_idx','var') | isempty(dim7_idx)
-      dim7_idx = [];
-   end
-
-   if ~exist('old_RGB','var') | isempty(old_RGB)
-      old_RGB = 0;
-   end
-
-   if ~exist('tolerance','var') | isempty(tolerance)
-      tolerance = 0.1;			% 10 percent
-   end
-
-   if ~exist('preferredForm','var') | isempty(preferredForm)
-      preferredForm= 's';		% Jeff
-   end
-
-   v = version;
-
-   %  Check file extension. If .gz, unpack it into temp folder
-   %
-   if length(filename) > 2 & strcmp(filename(end-2:end), '.gz')
-
-      if ~strcmp(filename(end-6:end), '.img.gz') & ...
-	 ~strcmp(filename(end-6:end), '.hdr.gz') & ...
-	 ~strcmp(filename(end-6:end), '.nii.gz')
-
-         error('Please check filename.');
-      end
-
-      if str2num(v(1:3)) < 7.1 | ~usejava('jvm')
-         error('Please use MATLAB 7.1 (with java) and above, or run gunzip outside MATLAB.');
-      elseif strcmp(filename(end-6:end), '.img.gz')
-         filename1 = filename;
-         filename2 = filename;
-         filename2(end-6:end) = '';
-         filename2 = [filename2, '.hdr.gz'];
-
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-
-         filename1 = gunzip(filename1, tmpDir);
-         filename2 = gunzip(filename2, tmpDir);
-         filename = char(filename1);	% convert from cell to string
-      elseif strcmp(filename(end-6:end), '.hdr.gz')
-         filename1 = filename;
-         filename2 = filename;
-         filename2(end-6:end) = '';
-         filename2 = [filename2, '.img.gz'];
-
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-
-         filename1 = gunzip(filename1, tmpDir);
-         filename2 = gunzip(filename2, tmpDir);
-         filename = char(filename1);	% convert from cell to string
-      elseif strcmp(filename(end-6:end), '.nii.gz')
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-         filename = gunzip(filename, tmpDir);
-         filename = char(filename);	% convert from cell to string
-      end
-   end
-
-   %  Read the dataset header
-   %
-   [nii.hdr,nii.filetype,nii.fileprefix,nii.machine] = load_nii_hdr(filename);
-
-   %  Read the header extension
-   %
-%   nii.ext = load_nii_ext(filename);
-
-   %  Read the dataset body
-   %
-   [nii.img,nii.hdr] = load_nii_img(nii.hdr,nii.filetype,nii.fileprefix, ...
-		nii.machine,img_idx,dim5_idx,dim6_idx,dim7_idx,old_RGB);
-
-   %  Perform some of sform/qform transform
-   %
-   nii = xform_nii(nii, tolerance, preferredForm);
-
-   %  Clean up after gunzip
-   %
-   if exist('gzFileName', 'var')
-
-      %  fix fileprefix so it doesn't point to temp location
-      %
-      nii.fileprefix = gzFileName(1:end-7);
-      rmdir(tmpDir,'s');
-   end
-
-   return					% load_nii
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/load_nii_ext.m b/reg-test/matlab_tests/NIfTI_20140122/load_nii_ext.m
deleted file mode 100644
index 56a23170..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/load_nii_ext.m
+++ /dev/null
@@ -1,207 +0,0 @@
-%  Load NIFTI header extension after its header is loaded using load_nii_hdr.
-%
-%  Usage: ext = load_nii_ext(filename)
-%
-%  filename - NIFTI file name.
-%
-%  Returned values:
-%
-%  ext - Structure of NIFTI header extension, which includes num_ext,
-%       and all the extended header sections in the header extension.
-%       Each extended header section will have its esize, ecode, and
-%       edata, where edata can be plain text, xml, or any raw data
-%       that was saved in the extended header section.
-%
-%  NIFTI data format can be found on: http://nifti.nimh.nih.gov
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function ext = load_nii_ext(filename)
-
-   if ~exist('filename','var'),
-      error('Usage: ext = load_nii_ext(filename)');
-   end
-
-
-   v = version;
-
-   %  Check file extension. If .gz, unpack it into temp folder
-   %
-   if length(filename) > 2 & strcmp(filename(end-2:end), '.gz')
-
-      if ~strcmp(filename(end-6:end), '.img.gz') & ...
-	 ~strcmp(filename(end-6:end), '.hdr.gz') & ...
-	 ~strcmp(filename(end-6:end), '.nii.gz')
-
-         error('Please check filename.');
-      end
-
-      if str2num(v(1:3)) < 7.1 | ~usejava('jvm')
-         error('Please use MATLAB 7.1 (with java) and above, or run gunzip outside MATLAB.');
-      elseif strcmp(filename(end-6:end), '.img.gz')
-         filename1 = filename;
-         filename2 = filename;
-         filename2(end-6:end) = '';
-         filename2 = [filename2, '.hdr.gz'];
-
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-
-         filename1 = gunzip(filename1, tmpDir);
-         filename2 = gunzip(filename2, tmpDir);
-         filename = char(filename1);	% convert from cell to string
-      elseif strcmp(filename(end-6:end), '.hdr.gz')
-         filename1 = filename;
-         filename2 = filename;
-         filename2(end-6:end) = '';
-         filename2 = [filename2, '.img.gz'];
-
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-
-         filename1 = gunzip(filename1, tmpDir);
-         filename2 = gunzip(filename2, tmpDir);
-         filename = char(filename1);	% convert from cell to string
-      elseif strcmp(filename(end-6:end), '.nii.gz')
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-         filename = gunzip(filename, tmpDir);
-         filename = char(filename);	% convert from cell to string
-      end
-   end
-
-   machine = 'ieee-le';
-   new_ext = 0;
-
-   if findstr('.nii',filename) & strcmp(filename(end-3:end), '.nii')
-      new_ext = 1;
-      filename(end-3:end)='';
-   end
-
-   if findstr('.hdr',filename) & strcmp(filename(end-3:end), '.hdr')
-      filename(end-3:end)='';
-   end
-
-   if findstr('.img',filename) & strcmp(filename(end-3:end), '.img')
-      filename(end-3:end)='';
-   end
-
-   if new_ext
-      fn = sprintf('%s.nii',filename);
-
-      if ~exist(fn)
-         msg = sprintf('Cannot find file "%s.nii".', filename);
-         error(msg);
-      end
-   else
-      fn = sprintf('%s.hdr',filename);
-
-      if ~exist(fn)
-         msg = sprintf('Cannot find file "%s.hdr".', filename);
-         error(msg);
-      end
-   end
-
-   fid = fopen(fn,'r',machine);
-   vox_offset = 0;
-    
-   if fid < 0,
-      msg = sprintf('Cannot open file %s.',fn);
-      error(msg);
-   else
-      fseek(fid,0,'bof');
-
-      if fread(fid,1,'int32') == 348
-         if new_ext
-            fseek(fid,108,'bof');
-            vox_offset = fread(fid,1,'float32');
-         end
-
-         ext = read_extension(fid, vox_offset);
-         fclose(fid);
-      else
-         fclose(fid);
-
-         %  first try reading the opposite endian to 'machine'
-         %
-         switch machine,
-         case 'ieee-le', machine = 'ieee-be';
-         case 'ieee-be', machine = 'ieee-le';
-         end
-
-         fid = fopen(fn,'r',machine);
-
-         if fid < 0,
-            msg = sprintf('Cannot open file %s.',fn);
-            error(msg);
-         else
-            fseek(fid,0,'bof');
-
-            if fread(fid,1,'int32') ~= 348
-
-               %  Now throw an error
-               %
-               msg = sprintf('File "%s" is corrupted.',fn);
-               error(msg);
-            end
-
-            if new_ext
-               fseek(fid,108,'bof');
-               vox_offset = fread(fid,1,'float32');
-            end
-
-            ext = read_extension(fid, vox_offset);
-            fclose(fid);
-         end
-      end
-   end
-
-
-   %  Clean up after gunzip
-   %
-   if exist('gzFileName', 'var')
-      rmdir(tmpDir,'s');
-   end
-
-
-   return                                       % load_nii_ext
-
-
-%---------------------------------------------------------------------
-function ext = read_extension(fid, vox_offset)
-
-   ext = [];
-
-   if vox_offset
-      end_of_ext = vox_offset;
-   else
-      fseek(fid, 0, 'eof');
-      end_of_ext = ftell(fid);
-   end
-
-   if end_of_ext > 352
-      fseek(fid, 348, 'bof');
-      ext.extension = fread(fid,4)';
-   end
-
-   if isempty(ext) | ext.extension(1) == 0
-      ext = [];
-      return;
-   end
-
-   i = 1;
-
-   while(ftell(fid) < end_of_ext)
-      ext.section(i).esize = fread(fid,1,'int32');
-      ext.section(i).ecode = fread(fid,1,'int32');
-      ext.section(i).edata = char(fread(fid,ext.section(i).esize-8)');
-      i = i + 1;
-   end
-
-   ext.num_ext = length(ext.section);
-
-   return                                               % read_extension
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/load_nii_hdr.m b/reg-test/matlab_tests/NIfTI_20140122/load_nii_hdr.m
deleted file mode 100644
index 01c83f37..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/load_nii_hdr.m
+++ /dev/null
@@ -1,280 +0,0 @@
-%  internal function
-
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-
-function [hdr, filetype, fileprefix, machine] = load_nii_hdr(fileprefix)
-
-   if ~exist('fileprefix','var'),
-      error('Usage: [hdr, filetype, fileprefix, machine] = load_nii_hdr(filename)');
-   end
-
-   machine = 'ieee-le';
-   new_ext = 0;
-
-   if findstr('.nii',fileprefix) & strcmp(fileprefix(end-3:end), '.nii')
-      new_ext = 1;
-      fileprefix(end-3:end)='';
-   end
-
-   if findstr('.hdr',fileprefix) & strcmp(fileprefix(end-3:end), '.hdr')
-      fileprefix(end-3:end)='';
-   end
-
-   if findstr('.img',fileprefix) & strcmp(fileprefix(end-3:end), '.img')
-      fileprefix(end-3:end)='';
-   end
-
-   if new_ext
-      fn = sprintf('%s.nii',fileprefix);
-
-      if ~exist(fn)
-         msg = sprintf('Cannot find file "%s.nii".', fileprefix);
-         error(msg);
-      end
-   else
-      fn = sprintf('%s.hdr',fileprefix);
-
-      if ~exist(fn)
-         msg = sprintf('Cannot find file "%s.hdr".', fileprefix);
-         error(msg);
-      end
-   end
-
-   fid = fopen(fn,'r',machine);
-    
-   if fid < 0,
-      msg = sprintf('Cannot open file %s.',fn);
-      error(msg);
-   else
-      fseek(fid,0,'bof');
-
-      if fread(fid,1,'int32') == 348
-         hdr = read_header(fid);
-         fclose(fid);
-      else
-         fclose(fid);
-
-         %  first try reading the opposite endian to 'machine'
-         %
-         switch machine,
-         case 'ieee-le', machine = 'ieee-be';
-         case 'ieee-be', machine = 'ieee-le';
-         end
-
-         fid = fopen(fn,'r',machine);
-
-         if fid < 0,
-            msg = sprintf('Cannot open file %s.',fn);
-            error(msg);
-         else
-            fseek(fid,0,'bof');
-
-            if fread(fid,1,'int32') ~= 348
-
-               %  Now throw an error
-               %
-               msg = sprintf('File "%s" is corrupted.',fn);
-               error(msg);
-            end
-
-            hdr = read_header(fid);
-            fclose(fid);
-         end
-      end
-   end
-
-   if strcmp(hdr.hist.magic, 'n+1')
-      filetype = 2;
-   elseif strcmp(hdr.hist.magic, 'ni1')
-      filetype = 1;
-   else
-      filetype = 0;
-   end
-
-   return					% load_nii_hdr
-
-
-%---------------------------------------------------------------------
-function [ dsr ] = read_header(fid)
-
-        %  Original header structures
-	%  struct dsr
-	%       { 
-	%       struct header_key hk;            /*   0 +  40       */
-	%       struct image_dimension dime;     /*  40 + 108       */
-	%       struct data_history hist;        /* 148 + 200       */
-	%       };                               /* total= 348 bytes*/
-
-    dsr.hk   = header_key(fid);
-    dsr.dime = image_dimension(fid);
-    dsr.hist = data_history(fid);
-
-    %  For Analyze data format
-    %
-    if ~strcmp(dsr.hist.magic, 'n+1') & ~strcmp(dsr.hist.magic, 'ni1')
-        dsr.hist.qform_code = 0;
-        dsr.hist.sform_code = 0;
-    end
-
-    return					% read_header
-
-
-%---------------------------------------------------------------------
-function [ hk ] = header_key(fid)
-
-    fseek(fid,0,'bof');
-    
-	%  Original header structures	
-	%  struct header_key                     /* header key      */ 
-	%       {                                /* off + size      */
-	%       int sizeof_hdr                   /*  0 +  4         */
-	%       char data_type[10];              /*  4 + 10         */
-	%       char db_name[18];                /* 14 + 18         */
-	%       int extents;                     /* 32 +  4         */
-	%       short int session_error;         /* 36 +  2         */
-	%       char regular;                    /* 38 +  1         */
-	%       char dim_info;   % char hkey_un0;        /* 39 +  1 */
-	%       };                               /* total=40 bytes  */
-	%
-	% int sizeof_header   Should be 348.
-	% char regular        Must be 'r' to indicate that all images and 
-	%                     volumes are the same size. 
-
-    v6 = version;
-    if str2num(v6(1))<6
-       directchar = '*char';
-    else
-       directchar = 'uchar=>char';
-    end
-
-    hk.sizeof_hdr    = fread(fid, 1,'int32')';	% should be 348!
-    hk.data_type     = deblank(fread(fid,10,directchar)');
-    hk.db_name       = deblank(fread(fid,18,directchar)');
-    hk.extents       = fread(fid, 1,'int32')';
-    hk.session_error = fread(fid, 1,'int16')';
-    hk.regular       = fread(fid, 1,directchar)';
-    hk.dim_info      = fread(fid, 1,'uchar')';
-    
-    return					% header_key
-
-
-%---------------------------------------------------------------------
-function [ dime ] = image_dimension(fid)
-
-	%  Original header structures    
-	%  struct image_dimension
-	%       {                                /* off + size      */
-	%       short int dim[8];                /* 0 + 16          */
-        %       /*
-        %           dim[0]      Number of dimensions in database; usually 4. 
-        %           dim[1]      Image X dimension;  number of *pixels* in an image row. 
-        %           dim[2]      Image Y dimension;  number of *pixel rows* in slice. 
-        %           dim[3]      Volume Z dimension; number of *slices* in a volume. 
-        %           dim[4]      Time points; number of volumes in database
-        %       */
-	%       float intent_p1;   % char vox_units[4];   /* 16 + 4       */
-	%       float intent_p2;   % char cal_units[8];   /* 20 + 4       */
-	%       float intent_p3;   % char cal_units[8];   /* 24 + 4       */
-	%       short int intent_code;   % short int unused1;   /* 28 + 2 */
-	%       short int datatype;              /* 30 + 2          */
-	%       short int bitpix;                /* 32 + 2          */
-	%       short int slice_start;   % short int dim_un0;   /* 34 + 2 */
-	%       float pixdim[8];                 /* 36 + 32         */
-	%	/*
-	%		pixdim[] specifies the voxel dimensions:
-	%		pixdim[1] - voxel width, mm
-	%		pixdim[2] - voxel height, mm
-	%		pixdim[3] - slice thickness, mm
-	%		pixdim[4] - volume timing, in msec
-	%					..etc
-	%	*/
-	%       float vox_offset;                /* 68 + 4          */
-	%       float scl_slope;   % float roi_scale;     /* 72 + 4 */
-	%       float scl_inter;   % float funused1;      /* 76 + 4 */
-	%       short slice_end;   % float funused2;      /* 80 + 2 */
-	%       char slice_code;   % float funused2;      /* 82 + 1 */
-	%       char xyzt_units;   % float funused2;      /* 83 + 1 */
-	%       float cal_max;                   /* 84 + 4          */
-	%       float cal_min;                   /* 88 + 4          */
-	%       float slice_duration;   % int compressed; /* 92 + 4 */
-	%       float toffset;   % int verified;          /* 96 + 4 */
-	%       int glmax;                       /* 100 + 4         */
-	%       int glmin;                       /* 104 + 4         */
-	%       };                               /* total=108 bytes */
-	
-    dime.dim        = fread(fid,8,'int16')';
-    dime.intent_p1  = fread(fid,1,'float32')';
-    dime.intent_p2  = fread(fid,1,'float32')';
-    dime.intent_p3  = fread(fid,1,'float32')';
-    dime.intent_code = fread(fid,1,'int16')';
-    dime.datatype   = fread(fid,1,'int16')';
-    dime.bitpix     = fread(fid,1,'int16')';
-    dime.slice_start = fread(fid,1,'int16')';
-    dime.pixdim     = fread(fid,8,'float32')';
-    dime.vox_offset = fread(fid,1,'float32')';
-    dime.scl_slope  = fread(fid,1,'float32')';
-    dime.scl_inter  = fread(fid,1,'float32')';
-    dime.slice_end  = fread(fid,1,'int16')';
-    dime.slice_code = fread(fid,1,'uchar')';
-    dime.xyzt_units = fread(fid,1,'uchar')';
-    dime.cal_max    = fread(fid,1,'float32')';
-    dime.cal_min    = fread(fid,1,'float32')';
-    dime.slice_duration = fread(fid,1,'float32')';
-    dime.toffset    = fread(fid,1,'float32')';
-    dime.glmax      = fread(fid,1,'int32')';
-    dime.glmin      = fread(fid,1,'int32')';
-        
-    return					% image_dimension
-
-
-%---------------------------------------------------------------------
-function [ hist ] = data_history(fid)
-        
-	%  Original header structures
-	%  struct data_history       
-	%       {                                /* off + size      */
-	%       char descrip[80];                /* 0 + 80          */
-	%       char aux_file[24];               /* 80 + 24         */
-	%       short int qform_code;            /* 104 + 2         */
-	%       short int sform_code;            /* 106 + 2         */
-	%       float quatern_b;                 /* 108 + 4         */
-	%       float quatern_c;                 /* 112 + 4         */
-	%       float quatern_d;                 /* 116 + 4         */
-	%       float qoffset_x;                 /* 120 + 4         */
-	%       float qoffset_y;                 /* 124 + 4         */
-	%       float qoffset_z;                 /* 128 + 4         */
-	%       float srow_x[4];                 /* 132 + 16        */
-	%       float srow_y[4];                 /* 148 + 16        */
-	%       float srow_z[4];                 /* 164 + 16        */
-	%       char intent_name[16];            /* 180 + 16        */
-	%       char magic[4];   % int smin;     /* 196 + 4         */
-	%       };                               /* total=200 bytes */
-
-    v6 = version;
-    if str2num(v6(1))<6
-       directchar = '*char';
-    else
-       directchar = 'uchar=>char';
-    end
-
-    hist.descrip     = deblank(fread(fid,80,directchar)');
-    hist.aux_file    = deblank(fread(fid,24,directchar)');
-    hist.qform_code  = fread(fid,1,'int16')';
-    hist.sform_code  = fread(fid,1,'int16')';
-    hist.quatern_b   = fread(fid,1,'float32')';
-    hist.quatern_c   = fread(fid,1,'float32')';
-    hist.quatern_d   = fread(fid,1,'float32')';
-    hist.qoffset_x   = fread(fid,1,'float32')';
-    hist.qoffset_y   = fread(fid,1,'float32')';
-    hist.qoffset_z   = fread(fid,1,'float32')';
-    hist.srow_x      = fread(fid,4,'float32')';
-    hist.srow_y      = fread(fid,4,'float32')';
-    hist.srow_z      = fread(fid,4,'float32')';
-    hist.intent_name = deblank(fread(fid,16,directchar)');
-    hist.magic       = deblank(fread(fid,4,directchar)');
-
-    fseek(fid,253,'bof');
-    hist.originator  = fread(fid, 5,'int16')';
-    
-    return					% data_history
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/load_nii_img.m b/reg-test/matlab_tests/NIfTI_20140122/load_nii_img.m
deleted file mode 100644
index 60adb7d1..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/load_nii_img.m
+++ /dev/null
@@ -1,392 +0,0 @@
-%  internal function
-
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-
-function [img,hdr] = load_nii_img(hdr,filetype,fileprefix,machine,img_idx,dim5_idx,dim6_idx,dim7_idx,old_RGB)
-
-   if ~exist('hdr','var') | ~exist('filetype','var') | ~exist('fileprefix','var') | ~exist('machine','var')
-      error('Usage: [img,hdr] = load_nii_img(hdr,filetype,fileprefix,machine,[img_idx],[dim5_idx],[dim6_idx],[dim7_idx],[old_RGB]);');
-   end
-
-   if ~exist('img_idx','var') | isempty(img_idx) | hdr.dime.dim(5)<1
-      img_idx = [];
-   end
-
-   if ~exist('dim5_idx','var') | isempty(dim5_idx) | hdr.dime.dim(6)<1
-      dim5_idx = [];
-   end
-
-   if ~exist('dim6_idx','var') | isempty(dim6_idx) | hdr.dime.dim(7)<1
-      dim6_idx = [];
-   end
-
-   if ~exist('dim7_idx','var') | isempty(dim7_idx) | hdr.dime.dim(8)<1
-      dim7_idx = [];
-   end
-
-   if ~exist('old_RGB','var') | isempty(old_RGB)
-      old_RGB = 0;
-   end
-
-   %  check img_idx
-   %
-   if ~isempty(img_idx) & ~isnumeric(img_idx)
-      error('"img_idx" should be a numerical array.');
-   end
-
-   if length(unique(img_idx)) ~= length(img_idx)
-      error('Duplicate image index in "img_idx"');
-   end
-
-   if ~isempty(img_idx) & (min(img_idx) < 1 | max(img_idx) > hdr.dime.dim(5))
-      max_range = hdr.dime.dim(5);
-
-      if max_range == 1
-         error(['"img_idx" should be 1.']);
-      else
-         range = ['1 ' num2str(max_range)];
-         error(['"img_idx" should be an integer within the range of [' range '].']);
-      end
-   end
-
-   %  check dim5_idx
-   %
-   if ~isempty(dim5_idx) & ~isnumeric(dim5_idx)
-      error('"dim5_idx" should be a numerical array.');
-   end
-
-   if length(unique(dim5_idx)) ~= length(dim5_idx)
-      error('Duplicate index in "dim5_idx"');
-   end
-
-   if ~isempty(dim5_idx) & (min(dim5_idx) < 1 | max(dim5_idx) > hdr.dime.dim(6))
-      max_range = hdr.dime.dim(6);
-
-      if max_range == 1
-         error(['"dim5_idx" should be 1.']);
-      else
-         range = ['1 ' num2str(max_range)];
-         error(['"dim5_idx" should be an integer within the range of [' range '].']);
-      end
-   end
-
-   %  check dim6_idx
-   %
-   if ~isempty(dim6_idx) & ~isnumeric(dim6_idx)
-      error('"dim6_idx" should be a numerical array.');
-   end
-
-   if length(unique(dim6_idx)) ~= length(dim6_idx)
-      error('Duplicate index in "dim6_idx"');
-   end
-
-   if ~isempty(dim6_idx) & (min(dim6_idx) < 1 | max(dim6_idx) > hdr.dime.dim(7))
-      max_range = hdr.dime.dim(7);
-
-      if max_range == 1
-         error(['"dim6_idx" should be 1.']);
-      else
-         range = ['1 ' num2str(max_range)];
-         error(['"dim6_idx" should be an integer within the range of [' range '].']);
-      end
-   end
-
-   %  check dim7_idx
-   %
-   if ~isempty(dim7_idx) & ~isnumeric(dim7_idx)
-      error('"dim7_idx" should be a numerical array.');
-   end
-
-   if length(unique(dim7_idx)) ~= length(dim7_idx)
-      error('Duplicate index in "dim7_idx"');
-   end
-
-   if ~isempty(dim7_idx) & (min(dim7_idx) < 1 | max(dim7_idx) > hdr.dime.dim(8))
-      max_range = hdr.dime.dim(8);
-
-      if max_range == 1
-         error(['"dim7_idx" should be 1.']);
-      else
-         range = ['1 ' num2str(max_range)];
-         error(['"dim7_idx" should be an integer within the range of [' range '].']);
-      end
-   end
-
-   [img,hdr] = read_image(hdr,filetype,fileprefix,machine,img_idx,dim5_idx,dim6_idx,dim7_idx,old_RGB);
-
-   return					% load_nii_img
-
-
-%---------------------------------------------------------------------
-function [img,hdr] = read_image(hdr,filetype,fileprefix,machine,img_idx,dim5_idx,dim6_idx,dim7_idx,old_RGB)
-
-   switch filetype
-   case {0, 1}
-      fn = [fileprefix '.img'];
-   case 2
-      fn = [fileprefix '.nii'];
-   end
-
-   fid = fopen(fn,'r',machine);
-
-   if fid < 0,
-      msg = sprintf('Cannot open file %s.',fn);
-      error(msg);
-   end
-
-   %  Set bitpix according to datatype
-   %
-   %  /*Acceptable values for datatype are*/ 
-   %
-   %     0 None                     (Unknown bit per voxel) % DT_NONE, DT_UNKNOWN 
-   %     1 Binary                         (ubit1, bitpix=1) % DT_BINARY 
-   %     2 Unsigned char         (uchar or uint8, bitpix=8) % DT_UINT8, NIFTI_TYPE_UINT8 
-   %     4 Signed short                  (int16, bitpix=16) % DT_INT16, NIFTI_TYPE_INT16 
-   %     8 Signed integer                (int32, bitpix=32) % DT_INT32, NIFTI_TYPE_INT32 
-   %    16 Floating point    (single or float32, bitpix=32) % DT_FLOAT32, NIFTI_TYPE_FLOAT32 
-   %    32 Complex, 2 float32      (Use float32, bitpix=64) % DT_COMPLEX64, NIFTI_TYPE_COMPLEX64
-   %    64 Double precision  (double or float64, bitpix=64) % DT_FLOAT64, NIFTI_TYPE_FLOAT64 
-   %   128 uint8 RGB                 (Use uint8, bitpix=24) % DT_RGB24, NIFTI_TYPE_RGB24 
-   %   256 Signed char            (schar or int8, bitpix=8) % DT_INT8, NIFTI_TYPE_INT8 
-   %   511 Single RGB              (Use float32, bitpix=96) % DT_RGB96, NIFTI_TYPE_RGB96
-   %   512 Unsigned short               (uint16, bitpix=16) % DT_UNINT16, NIFTI_TYPE_UNINT16 
-   %   768 Unsigned integer             (uint32, bitpix=32) % DT_UNINT32, NIFTI_TYPE_UNINT32 
-   %  1024 Signed long long              (int64, bitpix=64) % DT_INT64, NIFTI_TYPE_INT64
-   %  1280 Unsigned long long           (uint64, bitpix=64) % DT_UINT64, NIFTI_TYPE_UINT64 
-   %  1536 Long double, float128  (Unsupported, bitpix=128) % DT_FLOAT128, NIFTI_TYPE_FLOAT128 
-   %  1792 Complex128, 2 float64  (Use float64, bitpix=128) % DT_COMPLEX128, NIFTI_TYPE_COMPLEX128 
-   %  2048 Complex256, 2 float128 (Unsupported, bitpix=256) % DT_COMPLEX128, NIFTI_TYPE_COMPLEX128 
-   %
-   switch hdr.dime.datatype
-   case   1,
-      hdr.dime.bitpix = 1;  precision = 'ubit1';
-   case   2,
-      hdr.dime.bitpix = 8;  precision = 'uint8';
-   case   4,
-      hdr.dime.bitpix = 16; precision = 'int16';
-   case   8,
-      hdr.dime.bitpix = 32; precision = 'int32';
-   case  16,
-      hdr.dime.bitpix = 32; precision = 'float32';
-   case  32,
-      hdr.dime.bitpix = 64; precision = 'float32';
-   case  64,
-      hdr.dime.bitpix = 64; precision = 'float64';
-   case 128,
-      hdr.dime.bitpix = 24; precision = 'uint8';
-   case 256 
-      hdr.dime.bitpix = 8;  precision = 'int8';
-   case 511 
-      hdr.dime.bitpix = 96; precision = 'float32';
-   case 512 
-      hdr.dime.bitpix = 16; precision = 'uint16';
-   case 768 
-      hdr.dime.bitpix = 32; precision = 'uint32';
-   case 1024
-      hdr.dime.bitpix = 64; precision = 'int64';
-   case 1280
-      hdr.dime.bitpix = 64; precision = 'uint64';
-   case 1792,
-      hdr.dime.bitpix = 128; precision = 'float64';
-   otherwise
-      error('This datatype is not supported'); 
-   end
-
-   hdr.dime.dim(find(hdr.dime.dim < 1)) = 1;
-
-   %  move pointer to the start of image block
-   %
-   switch filetype
-   case {0, 1}
-      fseek(fid, 0, 'bof');
-   case 2
-      fseek(fid, hdr.dime.vox_offset, 'bof');
-   end
-
-   %  Load whole image block for old Analyze format or binary image;
-   %  otherwise, load images that are specified in img_idx, dim5_idx,
-   %  dim6_idx, and dim7_idx
-   %
-   %  For binary image, we have to read all because pos can not be
-   %  seeked in bit and can not be calculated the way below.
-   %
-   if hdr.dime.datatype == 1 | isequal(hdr.dime.dim(5:8),ones(1,4)) | ...
-	(isempty(img_idx) & isempty(dim5_idx) & isempty(dim6_idx) & isempty(dim7_idx))
-
-      %  For each frame, precision of value will be read 
-      %  in img_siz times, where img_siz is only the 
-      %  dimension size of an image, not the byte storage
-      %  size of an image.
-      %
-      img_siz = prod(hdr.dime.dim(2:8));
-
-      %  For complex float32 or complex float64, voxel values
-      %  include [real, imag]
-      %
-      if hdr.dime.datatype == 32 | hdr.dime.datatype == 1792
-         img_siz = img_siz * 2;
-      end
-	 
-      %MPH: For RGB24, voxel values include 3 separate color planes
-      %
-      if hdr.dime.datatype == 128 | hdr.dime.datatype == 511
-	 img_siz = img_siz * 3;
-      end
-
-      img = fread(fid, img_siz, sprintf('*%s',precision));
-
-      d1 = hdr.dime.dim(2);
-      d2 = hdr.dime.dim(3);
-      d3 = hdr.dime.dim(4);
-      d4 = hdr.dime.dim(5);
-      d5 = hdr.dime.dim(6);
-      d6 = hdr.dime.dim(7);
-      d7 = hdr.dime.dim(8);
-
-      if isempty(img_idx)
-         img_idx = 1:d4;
-      end
-
-      if isempty(dim5_idx)
-         dim5_idx = 1:d5;
-      end
-
-      if isempty(dim6_idx)
-         dim6_idx = 1:d6;
-      end
-
-      if isempty(dim7_idx)
-         dim7_idx = 1:d7;
-      end
-   else
-
-      d1 = hdr.dime.dim(2);
-      d2 = hdr.dime.dim(3);
-      d3 = hdr.dime.dim(4);
-      d4 = hdr.dime.dim(5);
-      d5 = hdr.dime.dim(6);
-      d6 = hdr.dime.dim(7);
-      d7 = hdr.dime.dim(8);
-
-      if isempty(img_idx)
-         img_idx = 1:d4;
-      end
-
-      if isempty(dim5_idx)
-         dim5_idx = 1:d5;
-      end
-
-      if isempty(dim6_idx)
-         dim6_idx = 1:d6;
-      end
-
-      if isempty(dim7_idx)
-         dim7_idx = 1:d7;
-      end
-
-      %  compute size of one image
-      %
-      img_siz = prod(hdr.dime.dim(2:4));
-
-      %  For complex float32 or complex float64, voxel values
-      %  include [real, imag]
-      %
-      if hdr.dime.datatype == 32 | hdr.dime.datatype == 1792
-         img_siz = img_siz * 2;
-      end
-
-      %MPH: For RGB24, voxel values include 3 separate color planes
-      %
-      if hdr.dime.datatype == 128 | hdr.dime.datatype == 511
-         img_siz = img_siz * 3;
-      end
-
-      % preallocate img
-      img = zeros(img_siz, length(img_idx)*length(dim5_idx)*length(dim6_idx)*length(dim7_idx) );
-      currentIndex = 1;
-
-      for i7=1:length(dim7_idx)
-         for i6=1:length(dim6_idx)
-            for i5=1:length(dim5_idx)
-               for t=1:length(img_idx)
-
-                  %  Position is seeked in bytes. To convert dimension size
-                  %  to byte storage size, hdr.dime.bitpix/8 will be
-                  %  applied.
-                  %
-                  pos = sub2ind([d1 d2 d3 d4 d5 d6 d7], 1, 1, 1, ...
-			img_idx(t), dim5_idx(i5),dim6_idx(i6),dim7_idx(i7)) -1;
-                  pos = pos * hdr.dime.bitpix/8;
-
-                  if filetype == 2
-                     fseek(fid, pos + hdr.dime.vox_offset, 'bof');
-                  else
-                     fseek(fid, pos, 'bof');
-                  end
-
-                  %  For each frame, fread will read precision of value
-                  %  in img_siz times
-                  %
-                  img(:,currentIndex) = fread(fid, img_siz, sprintf('*%s',precision));
-                  currentIndex = currentIndex +1;
-
-               end
-            end
-         end
-      end
-   end
-
-   %  For complex float32 or complex float64, voxel values
-   %  include [real, imag]
-   %
-   if hdr.dime.datatype == 32 | hdr.dime.datatype == 1792
-      img = reshape(img, [2, length(img)/2]);
-      img = complex(img(1,:)', img(2,:)');
-   end
-
-   fclose(fid);
-
-   %  Update the global min and max values 
-   %
-   hdr.dime.glmax = double(max(img(:)));
-   hdr.dime.glmin = double(min(img(:)));
-
-   %  old_RGB treat RGB slice by slice, now it is treated voxel by voxel
-   %
-   if old_RGB & hdr.dime.datatype == 128 & hdr.dime.bitpix == 24
-      % remove squeeze
-      img = (reshape(img, [hdr.dime.dim(2:3) 3 hdr.dime.dim(4) length(img_idx) length(dim5_idx) length(dim6_idx) length(dim7_idx)]));
-      img = permute(img, [1 2 4 3 5 6 7 8]);
-   elseif hdr.dime.datatype == 128 & hdr.dime.bitpix == 24
-      % remove squeeze
-      img = (reshape(img, [3 hdr.dime.dim(2:4) length(img_idx) length(dim5_idx) length(dim6_idx) length(dim7_idx)]));
-      img = permute(img, [2 3 4 1 5 6 7 8]);
-   elseif hdr.dime.datatype == 511 & hdr.dime.bitpix == 96
-      img = double(img(:));
-      img = single((img - min(img))/(max(img) - min(img)));
-      % remove squeeze
-      img = (reshape(img, [3 hdr.dime.dim(2:4) length(img_idx) length(dim5_idx) length(dim6_idx) length(dim7_idx)]));
-      img = permute(img, [2 3 4 1 5 6 7 8]);
-   else
-      % remove squeeze
-      img = (reshape(img, [hdr.dime.dim(2:4) length(img_idx) length(dim5_idx) length(dim6_idx) length(dim7_idx)]));
-   end
-
-   if ~isempty(img_idx)
-      hdr.dime.dim(5) = length(img_idx);
-   end
-
-   if ~isempty(dim5_idx)
-      hdr.dime.dim(6) = length(dim5_idx);
-   end
-
-   if ~isempty(dim6_idx)
-      hdr.dime.dim(7) = length(dim6_idx);
-   end
-
-   if ~isempty(dim7_idx)
-      hdr.dime.dim(8) = length(dim7_idx);
-   end
-
-   return						% read_image
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/load_untouch0_nii_hdr.m b/reg-test/matlab_tests/NIfTI_20140122/load_untouch0_nii_hdr.m
deleted file mode 100644
index 297afaa9..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/load_untouch0_nii_hdr.m
+++ /dev/null
@@ -1,200 +0,0 @@
-%  internal function
-
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-
-function hdr = load_nii_hdr(fileprefix, machine)
-
-   fn = sprintf('%s.hdr',fileprefix);
-   fid = fopen(fn,'r',machine);
-    
-   if fid < 0,
-      msg = sprintf('Cannot open file %s.',fn);
-      error(msg);
-   else
-      fseek(fid,0,'bof');
-      hdr = read_header(fid);
-      fclose(fid);
-   end
-
-   return					% load_nii_hdr
-
-
-%---------------------------------------------------------------------
-function [ dsr ] = read_header(fid)
-
-        %  Original header structures
-	%  struct dsr
-	%       { 
-	%       struct header_key hk;            /*   0 +  40       */
-	%       struct image_dimension dime;     /*  40 + 108       */
-	%       struct data_history hist;        /* 148 + 200       */
-	%       };                               /* total= 348 bytes*/
-
-    dsr.hk   = header_key(fid);
-    dsr.dime = image_dimension(fid);
-    dsr.hist = data_history(fid);
-
-    return					% read_header
-
-
-%---------------------------------------------------------------------
-function [ hk ] = header_key(fid)
-
-    fseek(fid,0,'bof');
-    
-	%  Original header structures	
-	%  struct header_key                     /* header key      */ 
-	%       {                                /* off + size      */
-	%       int sizeof_hdr                   /*  0 +  4         */
-	%       char data_type[10];              /*  4 + 10         */
-	%       char db_name[18];                /* 14 + 18         */
-	%       int extents;                     /* 32 +  4         */
-	%       short int session_error;         /* 36 +  2         */
-	%       char regular;                    /* 38 +  1         */
-	%       char hkey_un0;                   /* 39 +  1 */
-	%       };                               /* total=40 bytes  */
-	%
-	% int sizeof_header   Should be 348.
-	% char regular        Must be 'r' to indicate that all images and 
-	%                     volumes are the same size. 
-
-    v6 = version;
-    if str2num(v6(1))<6
-       directchar = '*char';
-    else
-       directchar = 'uchar=>char';
-    end
-	
-    hk.sizeof_hdr    = fread(fid, 1,'int32')';	% should be 348!
-    hk.data_type     = deblank(fread(fid,10,directchar)');
-    hk.db_name       = deblank(fread(fid,18,directchar)');
-    hk.extents       = fread(fid, 1,'int32')';
-    hk.session_error = fread(fid, 1,'int16')';
-    hk.regular       = fread(fid, 1,directchar)';
-    hk.hkey_un0      = fread(fid, 1,directchar)';
-    
-    return					% header_key
-
-
-%---------------------------------------------------------------------
-function [ dime ] = image_dimension(fid)
-
-	%struct image_dimension
-	%       {                                /* off + size      */
-	%       short int dim[8];                /* 0 + 16          */
-    %           /*
-    %           dim[0]      Number of dimensions in database; usually 4. 
-    %           dim[1]      Image X dimension;  number of *pixels* in an image row. 
-    %           dim[2]      Image Y dimension;  number of *pixel rows* in slice. 
-    %           dim[3]      Volume Z dimension; number of *slices* in a volume. 
-    %           dim[4]      Time points; number of volumes in database
-    %           */
-	%       char vox_units[4];               /* 16 + 4          */
-	%       char cal_units[8];               /* 20 + 8          */
-	%       short int unused1;               /* 28 + 2          */
-	%       short int datatype;              /* 30 + 2          */
-	%       short int bitpix;                /* 32 + 2          */
-	%       short int dim_un0;               /* 34 + 2          */
-	%       float pixdim[8];                 /* 36 + 32         */
-	%			/*
-	%				pixdim[] specifies the voxel dimensions:
-	%				pixdim[1] - voxel width, mm
-	%				pixdim[2] - voxel height, mm
-	%				pixdim[3] - slice thickness, mm
-    %               pixdim[4] - volume timing, in msec
-	%					..etc
-	%			*/
-	%       float vox_offset;                /* 68 + 4          */
-	%       float roi_scale;                 /* 72 + 4          */
-	%       float funused1;                  /* 76 + 4          */
-	%       float funused2;                  /* 80 + 4          */
-	%       float cal_max;                   /* 84 + 4          */
-	%       float cal_min;                   /* 88 + 4          */
-	%       int compressed;                  /* 92 + 4          */
-	%       int verified;                    /* 96 + 4          */
-	%       int glmax;                       /* 100 + 4         */
-	%       int glmin;                       /* 104 + 4         */
-	%       };                               /* total=108 bytes */
-
-    v6 = version;
-    if str2num(v6(1))<6
-       directchar = '*char';
-    else
-       directchar = 'uchar=>char';
-    end
-	
-    dime.dim        = fread(fid,8,'int16')';
-    dime.vox_units  = deblank(fread(fid,4,directchar)');
-    dime.cal_units  = deblank(fread(fid,8,directchar)');
-    dime.unused1    = fread(fid,1,'int16')';
-    dime.datatype   = fread(fid,1,'int16')';
-    dime.bitpix     = fread(fid,1,'int16')';
-    dime.dim_un0    = fread(fid,1,'int16')';
-    dime.pixdim     = fread(fid,8,'float32')';
-    dime.vox_offset = fread(fid,1,'float32')';
-    dime.roi_scale  = fread(fid,1,'float32')';
-    dime.funused1   = fread(fid,1,'float32')';
-    dime.funused2   = fread(fid,1,'float32')';
-    dime.cal_max    = fread(fid,1,'float32')';
-    dime.cal_min    = fread(fid,1,'float32')';
-    dime.compressed = fread(fid,1,'int32')';
-    dime.verified   = fread(fid,1,'int32')';
-    dime.glmax      = fread(fid,1,'int32')';
-    dime.glmin      = fread(fid,1,'int32')';
-        
-    return					% image_dimension
-
-
-%---------------------------------------------------------------------
-function [ hist ] = data_history(fid)
-        
-	%struct data_history       
-	%       {                                /* off + size      */
-	%       char descrip[80];                /* 0 + 80          */
-	%       char aux_file[24];               /* 80 + 24         */
-	%       char orient;                     /* 104 + 1         */
-	%       char originator[10];             /* 105 + 10        */
-	%       char generated[10];              /* 115 + 10        */
-	%       char scannum[10];                /* 125 + 10        */
-	%       char patient_id[10];             /* 135 + 10        */
-	%       char exp_date[10];               /* 145 + 10        */
-	%       char exp_time[10];               /* 155 + 10        */
-	%       char hist_un0[3];                /* 165 + 3         */
-	%       int views                        /* 168 + 4         */
-	%       int vols_added;                  /* 172 + 4         */
-	%       int start_field;                 /* 176 + 4         */
-	%       int field_skip;                  /* 180 + 4         */
-	%       int omax;                        /* 184 + 4         */
-	%       int omin;                        /* 188 + 4         */
-	%       int smax;                        /* 192 + 4         */
-	%       int smin;                        /* 196 + 4         */
-	%       };                               /* total=200 bytes */
-
-    v6 = version;
-    if str2num(v6(1))<6
-       directchar = '*char';
-    else
-       directchar = 'uchar=>char';
-    end
-
-    hist.descrip     = deblank(fread(fid,80,directchar)');
-    hist.aux_file    = deblank(fread(fid,24,directchar)');
-    hist.orient      = fread(fid, 1,'char')';
-    hist.originator  = fread(fid, 5,'int16')';
-    hist.generated   = deblank(fread(fid,10,directchar)');
-    hist.scannum     = deblank(fread(fid,10,directchar)');
-    hist.patient_id  = deblank(fread(fid,10,directchar)');
-    hist.exp_date    = deblank(fread(fid,10,directchar)');
-    hist.exp_time    = deblank(fread(fid,10,directchar)');
-    hist.hist_un0    = deblank(fread(fid, 3,directchar)');
-    hist.views       = fread(fid, 1,'int32')';
-    hist.vols_added  = fread(fid, 1,'int32')';
-    hist.start_field = fread(fid, 1,'int32')';
-    hist.field_skip  = fread(fid, 1,'int32')';
-    hist.omax        = fread(fid, 1,'int32')';
-    hist.omin        = fread(fid, 1,'int32')';
-    hist.smax        = fread(fid, 1,'int32')';
-    hist.smin        = fread(fid, 1,'int32')';
-    
-    return					% data_history
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/load_untouch_header_only.m b/reg-test/matlab_tests/NIfTI_20140122/load_untouch_header_only.m
deleted file mode 100644
index 8b68084b..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/load_untouch_header_only.m
+++ /dev/null
@@ -1,187 +0,0 @@
-%  Load NIfTI / Analyze header without applying any appropriate affine
-%  geometric transform or voxel intensity scaling. It is equivalent to
-%  hdr field when using load_untouch_nii to load dataset. Support both
-%  *.nii and *.hdr file extension. If file extension is not provided,
-%  *.hdr will be used as default.
-%  
-%  Usage: [header, ext, filetype, machine] = load_untouch_header_only(filename)
-%  
-%  filename - NIfTI / Analyze file name.
-%  
-%  Returned values:
-%  
-%  header - struct with NIfTI / Analyze header fields.
-%  
-%  ext - NIfTI extension if it is not empty.
-%  
-%  filetype	- 0 for Analyze format (*.hdr/*.img);
-%		  1 for NIFTI format in 2 files (*.hdr/*.img);
-%		  2 for NIFTI format in 1 file (*.nii).
-%  
-%  machine    - a string, see below for details. The default here is 'ieee-le'.
-%
-%    'native'      or 'n' - local machine format - the default
-%    'ieee-le'     or 'l' - IEEE floating point with little-endian
-%                           byte ordering
-%    'ieee-be'     or 'b' - IEEE floating point with big-endian
-%                           byte ordering
-%    'vaxd'        or 'd' - VAX D floating point and VAX ordering
-%    'vaxg'        or 'g' - VAX G floating point and VAX ordering
-%    'cray'        or 'c' - Cray floating point with big-endian
-%                           byte ordering
-%    'ieee-le.l64' or 'a' - IEEE floating point with little-endian
-%                           byte ordering and 64 bit long data type
-%    'ieee-be.l64' or 's' - IEEE floating point with big-endian byte
-%                           ordering and 64 bit long data type.
-%
-%  Part of this file is copied and modified from:
-%  http://www.mathworks.com/matlabcentral/fileexchange/1878-mri-analyze-tools
-%
-%  NIFTI data format can be found on: http://nifti.nimh.nih.gov
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function [hdr, ext, filetype, machine] = load_untouch_header_only(filename)
-
-   if ~exist('filename','var')
-      error('Usage:  [header, ext, filetype, machine] = load_untouch_header_only(filename)');
-   end
-
-
-   v = version;
-
-   %  Check file extension. If .gz, unpack it into temp folder
-   %
-   if length(filename) > 2 & strcmp(filename(end-2:end), '.gz')
-
-      if ~strcmp(filename(end-6:end), '.img.gz') & ...
-	 ~strcmp(filename(end-6:end), '.hdr.gz') & ...
-	 ~strcmp(filename(end-6:end), '.nii.gz')
-
-         error('Please check filename.');
-      end
-
-      if str2num(v(1:3)) < 7.1 | ~usejava('jvm')
-         error('Please use MATLAB 7.1 (with java) and above, or run gunzip outside MATLAB.');
-      elseif strcmp(filename(end-6:end), '.img.gz')
-         filename1 = filename;
-         filename2 = filename;
-         filename2(end-6:end) = '';
-         filename2 = [filename2, '.hdr.gz'];
-
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-
-         filename1 = gunzip(filename1, tmpDir);
-         filename2 = gunzip(filename2, tmpDir);
-         filename = char(filename1);	% convert from cell to string
-      elseif strcmp(filename(end-6:end), '.hdr.gz')
-         filename1 = filename;
-         filename2 = filename;
-         filename2(end-6:end) = '';
-         filename2 = [filename2, '.img.gz'];
-
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-
-         filename1 = gunzip(filename1, tmpDir);
-         filename2 = gunzip(filename2, tmpDir);
-         filename = char(filename1);	% convert from cell to string
-      elseif strcmp(filename(end-6:end), '.nii.gz')
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-         filename = gunzip(filename, tmpDir);
-         filename = char(filename);	% convert from cell to string
-      end
-   end
-
-   %  Read the dataset header
-   %
-   [hdr, filetype, fileprefix, machine] = load_nii_hdr(filename);
-
-   if filetype == 0
-      hdr = load_untouch0_nii_hdr(fileprefix, machine);
-      ext = [];
-   else
-      hdr = load_untouch_nii_hdr(fileprefix, machine, filetype);
-
-      %  Read the header extension
-      %
-      ext = load_nii_ext(filename);
-   end
-
-   %  Set bitpix according to datatype
-   %
-   %  /*Acceptable values for datatype are*/ 
-   %
-   %     0 None                     (Unknown bit per voxel) % DT_NONE, DT_UNKNOWN 
-   %     1 Binary                         (ubit1, bitpix=1) % DT_BINARY 
-   %     2 Unsigned char         (uchar or uint8, bitpix=8) % DT_UINT8, NIFTI_TYPE_UINT8 
-   %     4 Signed short                  (int16, bitpix=16) % DT_INT16, NIFTI_TYPE_INT16 
-   %     8 Signed integer                (int32, bitpix=32) % DT_INT32, NIFTI_TYPE_INT32 
-   %    16 Floating point    (single or float32, bitpix=32) % DT_FLOAT32, NIFTI_TYPE_FLOAT32 
-   %    32 Complex, 2 float32      (Use float32, bitpix=64) % DT_COMPLEX64, NIFTI_TYPE_COMPLEX64
-   %    64 Double precision  (double or float64, bitpix=64) % DT_FLOAT64, NIFTI_TYPE_FLOAT64 
-   %   128 uint8 RGB                 (Use uint8, bitpix=24) % DT_RGB24, NIFTI_TYPE_RGB24 
-   %   256 Signed char            (schar or int8, bitpix=8) % DT_INT8, NIFTI_TYPE_INT8 
-   %   511 Single RGB              (Use float32, bitpix=96) % DT_RGB96, NIFTI_TYPE_RGB96
-   %   512 Unsigned short               (uint16, bitpix=16) % DT_UNINT16, NIFTI_TYPE_UNINT16 
-   %   768 Unsigned integer             (uint32, bitpix=32) % DT_UNINT32, NIFTI_TYPE_UNINT32 
-   %  1024 Signed long long              (int64, bitpix=64) % DT_INT64, NIFTI_TYPE_INT64
-   %  1280 Unsigned long long           (uint64, bitpix=64) % DT_UINT64, NIFTI_TYPE_UINT64 
-   %  1536 Long double, float128  (Unsupported, bitpix=128) % DT_FLOAT128, NIFTI_TYPE_FLOAT128 
-   %  1792 Complex128, 2 float64  (Use float64, bitpix=128) % DT_COMPLEX128, NIFTI_TYPE_COMPLEX128 
-   %  2048 Complex256, 2 float128 (Unsupported, bitpix=256) % DT_COMPLEX128, NIFTI_TYPE_COMPLEX128 
-   %
-   switch hdr.dime.datatype
-   case   1,
-      hdr.dime.bitpix = 1;  precision = 'ubit1';
-   case   2,
-      hdr.dime.bitpix = 8;  precision = 'uint8';
-   case   4,
-      hdr.dime.bitpix = 16; precision = 'int16';
-   case   8,
-      hdr.dime.bitpix = 32; precision = 'int32';
-   case  16,
-      hdr.dime.bitpix = 32; precision = 'float32';
-   case  32,
-      hdr.dime.bitpix = 64; precision = 'float32';
-   case  64,
-      hdr.dime.bitpix = 64; precision = 'float64';
-   case 128,
-      hdr.dime.bitpix = 24; precision = 'uint8';
-   case 256 
-      hdr.dime.bitpix = 8;  precision = 'int8';
-   case 511 
-      hdr.dime.bitpix = 96; precision = 'float32';
-   case 512 
-      hdr.dime.bitpix = 16; precision = 'uint16';
-   case 768 
-      hdr.dime.bitpix = 32; precision = 'uint32';
-   case 1024
-      hdr.dime.bitpix = 64; precision = 'int64';
-   case 1280
-      hdr.dime.bitpix = 64; precision = 'uint64';
-   case 1792,
-      hdr.dime.bitpix = 128; precision = 'float64';
-   otherwise
-      error('This datatype is not supported'); 
-   end
-
-   tmp = hdr.dime.dim(2:end);
-   tmp(find(tmp < 1)) = 1;
-   hdr.dime.dim(2:end) = tmp;
-
-
-   %  Clean up after gunzip
-   %
-   if exist('gzFileName', 'var')
-      rmdir(tmpDir,'s');
-   end
-
-
-   return					% load_untouch_header_only
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/load_untouch_nii.m b/reg-test/matlab_tests/NIfTI_20140122/load_untouch_nii.m
deleted file mode 100644
index 067c4aaf..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/load_untouch_nii.m
+++ /dev/null
@@ -1,191 +0,0 @@
-%  Load NIFTI or ANALYZE dataset, but not applying any appropriate affine
-%  geometric transform or voxel intensity scaling.
-%
-%  Although according to NIFTI website, all those header information are
-%  supposed to be applied to the loaded NIFTI image, there are some
-%  situations that people do want to leave the original NIFTI header and
-%  data untouched. They will probably just use MATLAB to do certain image
-%  processing regardless of image orientation, and to save data back with
-%  the same NIfTI header.
-%
-%  Since this program is only served for those situations, please use it
-%  together with "save_untouch_nii.m", and do not use "save_nii.m" or
-%  "view_nii.m" for the data that is loaded by "load_untouch_nii.m". For
-%  normal situation, you should use "load_nii.m" instead.
-%  
-%  Usage: nii = load_untouch_nii(filename, [img_idx], [dim5_idx], [dim6_idx], ...
-%			[dim7_idx], [old_RGB], [slice_idx])
-%  
-%  filename  - 	NIFTI or ANALYZE file name.
-%  
-%  img_idx (optional)  -  a numerical array of image volume indices.
-%	Only the specified volumes will be loaded. All available image
-%	volumes will be loaded, if it is default or empty.
-%
-%	The number of images scans can be obtained from get_nii_frame.m,
-%	or simply: hdr.dime.dim(5).
-%
-%  dim5_idx (optional)  -  a numerical array of 5th dimension indices.
-%	Only the specified range will be loaded. All available range
-%	will be loaded, if it is default or empty.
-%
-%  dim6_idx (optional)  -  a numerical array of 6th dimension indices.
-%	Only the specified range will be loaded. All available range
-%	will be loaded, if it is default or empty.
-%
-%  dim7_idx (optional)  -  a numerical array of 7th dimension indices.
-%	Only the specified range will be loaded. All available range
-%	will be loaded, if it is default or empty.
-%
-%  old_RGB (optional)  -  a scale number to tell difference of new RGB24
-%	from old RGB24. New RGB24 uses RGB triple sequentially for each
-%	voxel, like [R1 G1 B1 R2 G2 B2 ...]. Analyze 6.0 from AnalyzeDirect
-%	uses old RGB24, in a way like [R1 R2 ... G1 G2 ... B1 B2 ...] for
-%	each slices. If the image that you view is garbled, try to set 
-%	old_RGB variable to 1 and try again, because it could be in
-%	old RGB24. It will be set to 0, if it is default or empty.
-%
-%  slice_idx (optional)  -  a numerical array of image slice indices.
-%	Only the specified slices will be loaded. All available image
-%	slices will be loaded, if it is default or empty.
-%
-%  Returned values:
-%  
-%  nii structure:
-%
-%	hdr -		struct with NIFTI header fields.
-%
-%	filetype -	Analyze format .hdr/.img (0); 
-%			NIFTI .hdr/.img (1);
-%			NIFTI .nii (2)
-%
-%	fileprefix - 	NIFTI filename without extension.
-%
-%	machine - 	machine string variable.
-%
-%	img - 		3D (or 4D) matrix of NIFTI data.
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function nii = load_untouch_nii(filename, img_idx, dim5_idx, dim6_idx, dim7_idx, ...
-			old_RGB, slice_idx)
-
-   if ~exist('filename','var')
-      error('Usage: nii = load_untouch_nii(filename, [img_idx], [dim5_idx], [dim6_idx], [dim7_idx], [old_RGB], [slice_idx])');
-   end
-
-   if ~exist('img_idx','var') | isempty(img_idx)
-      img_idx = [];
-   end
-
-   if ~exist('dim5_idx','var') | isempty(dim5_idx)
-      dim5_idx = [];
-   end
-
-   if ~exist('dim6_idx','var') | isempty(dim6_idx)
-      dim6_idx = [];
-   end
-
-   if ~exist('dim7_idx','var') | isempty(dim7_idx)
-      dim7_idx = [];
-   end
-
-   if ~exist('old_RGB','var') | isempty(old_RGB)
-      old_RGB = 0;
-   end
-
-   if ~exist('slice_idx','var') | isempty(slice_idx)
-      slice_idx = [];
-   end
-
-
-   v = version;
-
-   %  Check file extension. If .gz, unpack it into temp folder
-   %
-   if length(filename) > 2 & strcmp(filename(end-2:end), '.gz')
-
-      if ~strcmp(filename(end-6:end), '.img.gz') & ...
-	 ~strcmp(filename(end-6:end), '.hdr.gz') & ...
-	 ~strcmp(filename(end-6:end), '.nii.gz')
-
-         error('Please check filename.');
-      end
-
-      if str2num(v(1:3)) < 7.1 | ~usejava('jvm')
-         error('Please use MATLAB 7.1 (with java) and above, or run gunzip outside MATLAB.');
-      elseif strcmp(filename(end-6:end), '.img.gz')
-         filename1 = filename;
-         filename2 = filename;
-         filename2(end-6:end) = '';
-         filename2 = [filename2, '.hdr.gz'];
-
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-
-         filename1 = gunzip(filename1, tmpDir);
-         filename2 = gunzip(filename2, tmpDir);
-         filename = char(filename1);	% convert from cell to string
-      elseif strcmp(filename(end-6:end), '.hdr.gz')
-         filename1 = filename;
-         filename2 = filename;
-         filename2(end-6:end) = '';
-         filename2 = [filename2, '.img.gz'];
-
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-
-         filename1 = gunzip(filename1, tmpDir);
-         filename2 = gunzip(filename2, tmpDir);
-         filename = char(filename1);	% convert from cell to string
-      elseif strcmp(filename(end-6:end), '.nii.gz')
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-         filename = gunzip(filename, tmpDir);
-         filename = char(filename);	% convert from cell to string
-      end
-   end
-
-   %  Read the dataset header
-   %
-   [nii.hdr,nii.filetype,nii.fileprefix,nii.machine] = load_nii_hdr(filename);
-
-   if nii.filetype == 0
-      nii.hdr = load_untouch0_nii_hdr(nii.fileprefix,nii.machine);
-      nii.ext = [];
-   else
-      nii.hdr = load_untouch_nii_hdr(nii.fileprefix,nii.machine,nii.filetype);
-
-      %  Read the header extension
-      %
-      nii.ext = load_nii_ext(filename);
-   end
-
-   %  Read the dataset body
-   %
-   [nii.img,nii.hdr] = load_untouch_nii_img(nii.hdr,nii.filetype,nii.fileprefix, ...
-		nii.machine,img_idx,dim5_idx,dim6_idx,dim7_idx,old_RGB,slice_idx);
-
-   %  Perform some of sform/qform transform
-   %
-%   nii = xform_nii(nii, tolerance, preferredForm);
-
-   nii.untouch = 1;
-
-
-   %  Clean up after gunzip
-   %
-   if exist('gzFileName', 'var')
-
-      %  fix fileprefix so it doesn't point to temp location
-      %
-      nii.fileprefix = gzFileName(1:end-7);
-      rmdir(tmpDir,'s');
-   end
-
-
-   return					% load_untouch_nii
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/load_untouch_nii_hdr.m b/reg-test/matlab_tests/NIfTI_20140122/load_untouch_nii_hdr.m
deleted file mode 100644
index a4715360..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/load_untouch_nii_hdr.m
+++ /dev/null
@@ -1,217 +0,0 @@
-%  internal function
-
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-
-function hdr = load_nii_hdr(fileprefix, machine, filetype)
-
-   if filetype == 2
-      fn = sprintf('%s.nii',fileprefix);
-
-      if ~exist(fn)
-         msg = sprintf('Cannot find file "%s.nii".', fileprefix);
-         error(msg);
-      end
-   else
-      fn = sprintf('%s.hdr',fileprefix);
-
-      if ~exist(fn)
-         msg = sprintf('Cannot find file "%s.hdr".', fileprefix);
-         error(msg);
-      end
-   end
-
-   fid = fopen(fn,'r',machine);
-    
-   if fid < 0,
-      msg = sprintf('Cannot open file %s.',fn);
-      error(msg);
-   else
-      fseek(fid,0,'bof');
-      hdr = read_header(fid);
-      fclose(fid);
-   end
-
-   return					% load_nii_hdr
-
-
-%---------------------------------------------------------------------
-function [ dsr ] = read_header(fid)
-
-        %  Original header structures
-	%  struct dsr
-	%       { 
-	%       struct header_key hk;            /*   0 +  40       */
-	%       struct image_dimension dime;     /*  40 + 108       */
-	%       struct data_history hist;        /* 148 + 200       */
-	%       };                               /* total= 348 bytes*/
-
-    dsr.hk   = header_key(fid);
-    dsr.dime = image_dimension(fid);
-    dsr.hist = data_history(fid);
-
-    %  For Analyze data format
-    %
-    if ~strcmp(dsr.hist.magic, 'n+1') & ~strcmp(dsr.hist.magic, 'ni1')
-        dsr.hist.qform_code = 0;
-        dsr.hist.sform_code = 0;
-    end
-
-    return					% read_header
-
-
-%---------------------------------------------------------------------
-function [ hk ] = header_key(fid)
-
-    fseek(fid,0,'bof');
-    
-	%  Original header structures	
-	%  struct header_key                     /* header key      */ 
-	%       {                                /* off + size      */
-	%       int sizeof_hdr                   /*  0 +  4         */
-	%       char data_type[10];              /*  4 + 10         */
-	%       char db_name[18];                /* 14 + 18         */
-	%       int extents;                     /* 32 +  4         */
-	%       short int session_error;         /* 36 +  2         */
-	%       char regular;                    /* 38 +  1         */
-	%       char dim_info;   % char hkey_un0;        /* 39 +  1 */
-	%       };                               /* total=40 bytes  */
-	%
-	% int sizeof_header   Should be 348.
-	% char regular        Must be 'r' to indicate that all images and 
-	%                     volumes are the same size. 
-
-    v6 = version;
-    if str2num(v6(1))<6
-       directchar = '*char';
-    else
-       directchar = 'uchar=>char';
-    end
-	
-    hk.sizeof_hdr    = fread(fid, 1,'int32')';	% should be 348!
-    hk.data_type     = deblank(fread(fid,10,directchar)');
-    hk.db_name       = deblank(fread(fid,18,directchar)');
-    hk.extents       = fread(fid, 1,'int32')';
-    hk.session_error = fread(fid, 1,'int16')';
-    hk.regular       = fread(fid, 1,directchar)';
-    hk.dim_info      = fread(fid, 1,'uchar')';
-    
-    return					% header_key
-
-
-%---------------------------------------------------------------------
-function [ dime ] = image_dimension(fid)
-
-	%  Original header structures    
-	%  struct image_dimension
-	%       {                                /* off + size      */
-	%       short int dim[8];                /* 0 + 16          */
-        %       /*
-        %           dim[0]      Number of dimensions in database; usually 4. 
-        %           dim[1]      Image X dimension;  number of *pixels* in an image row. 
-        %           dim[2]      Image Y dimension;  number of *pixel rows* in slice. 
-        %           dim[3]      Volume Z dimension; number of *slices* in a volume. 
-        %           dim[4]      Time points; number of volumes in database
-        %       */
-	%       float intent_p1;   % char vox_units[4];   /* 16 + 4       */
-	%       float intent_p2;   % char cal_units[8];   /* 20 + 4       */
-	%       float intent_p3;   % char cal_units[8];   /* 24 + 4       */
-	%       short int intent_code;   % short int unused1;   /* 28 + 2 */
-	%       short int datatype;              /* 30 + 2          */
-	%       short int bitpix;                /* 32 + 2          */
-	%       short int slice_start;   % short int dim_un0;   /* 34 + 2 */
-	%       float pixdim[8];                 /* 36 + 32         */
-	%	/*
-	%		pixdim[] specifies the voxel dimensions:
-	%		pixdim[1] - voxel width, mm
-	%		pixdim[2] - voxel height, mm
-	%		pixdim[3] - slice thickness, mm
-	%		pixdim[4] - volume timing, in msec
-	%					..etc
-	%	*/
-	%       float vox_offset;                /* 68 + 4          */
-	%       float scl_slope;   % float roi_scale;     /* 72 + 4 */
-	%       float scl_inter;   % float funused1;      /* 76 + 4 */
-	%       short slice_end;   % float funused2;      /* 80 + 2 */
-	%       char slice_code;   % float funused2;      /* 82 + 1 */
-	%       char xyzt_units;   % float funused2;      /* 83 + 1 */
-	%       float cal_max;                   /* 84 + 4          */
-	%       float cal_min;                   /* 88 + 4          */
-	%       float slice_duration;   % int compressed; /* 92 + 4 */
-	%       float toffset;   % int verified;          /* 96 + 4 */
-	%       int glmax;                       /* 100 + 4         */
-	%       int glmin;                       /* 104 + 4         */
-	%       };                               /* total=108 bytes */
-	
-    dime.dim        = fread(fid,8,'int16')';
-    dime.intent_p1  = fread(fid,1,'float32')';
-    dime.intent_p2  = fread(fid,1,'float32')';
-    dime.intent_p3  = fread(fid,1,'float32')';
-    dime.intent_code = fread(fid,1,'int16')';
-    dime.datatype   = fread(fid,1,'int16')';
-    dime.bitpix     = fread(fid,1,'int16')';
-    dime.slice_start = fread(fid,1,'int16')';
-    dime.pixdim     = fread(fid,8,'float32')';
-    dime.vox_offset = fread(fid,1,'float32')';
-    dime.scl_slope  = fread(fid,1,'float32')';
-    dime.scl_inter  = fread(fid,1,'float32')';
-    dime.slice_end  = fread(fid,1,'int16')';
-    dime.slice_code = fread(fid,1,'uchar')';
-    dime.xyzt_units = fread(fid,1,'uchar')';
-    dime.cal_max    = fread(fid,1,'float32')';
-    dime.cal_min    = fread(fid,1,'float32')';
-    dime.slice_duration = fread(fid,1,'float32')';
-    dime.toffset    = fread(fid,1,'float32')';
-    dime.glmax      = fread(fid,1,'int32')';
-    dime.glmin      = fread(fid,1,'int32')';
-        
-    return					% image_dimension
-
-
-%---------------------------------------------------------------------
-function [ hist ] = data_history(fid)
-        
-	%  Original header structures
-	%  struct data_history       
-	%       {                                /* off + size      */
-	%       char descrip[80];                /* 0 + 80          */
-	%       char aux_file[24];               /* 80 + 24         */
-	%       short int qform_code;            /* 104 + 2         */
-	%       short int sform_code;            /* 106 + 2         */
-	%       float quatern_b;                 /* 108 + 4         */
-	%       float quatern_c;                 /* 112 + 4         */
-	%       float quatern_d;                 /* 116 + 4         */
-	%       float qoffset_x;                 /* 120 + 4         */
-	%       float qoffset_y;                 /* 124 + 4         */
-	%       float qoffset_z;                 /* 128 + 4         */
-	%       float srow_x[4];                 /* 132 + 16        */
-	%       float srow_y[4];                 /* 148 + 16        */
-	%       float srow_z[4];                 /* 164 + 16        */
-	%       char intent_name[16];            /* 180 + 16        */
-	%       char magic[4];   % int smin;     /* 196 + 4         */
-	%       };                               /* total=200 bytes */
-
-    v6 = version;
-    if str2num(v6(1))<6
-       directchar = '*char';
-    else
-       directchar = 'uchar=>char';
-    end
-    
-    hist.descrip     = deblank(fread(fid,80,directchar)');
-    hist.aux_file    = deblank(fread(fid,24,directchar)');
-    hist.qform_code  = fread(fid,1,'int16')';
-    hist.sform_code  = fread(fid,1,'int16')';
-    hist.quatern_b   = fread(fid,1,'float32')';
-    hist.quatern_c   = fread(fid,1,'float32')';
-    hist.quatern_d   = fread(fid,1,'float32')';
-    hist.qoffset_x   = fread(fid,1,'float32')';
-    hist.qoffset_y   = fread(fid,1,'float32')';
-    hist.qoffset_z   = fread(fid,1,'float32')';
-    hist.srow_x      = fread(fid,4,'float32')';
-    hist.srow_y      = fread(fid,4,'float32')';
-    hist.srow_z      = fread(fid,4,'float32')';
-    hist.intent_name = deblank(fread(fid,16,directchar)');
-    hist.magic       = deblank(fread(fid,4,directchar)');
-    
-    return					% data_history
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/load_untouch_nii_img.m b/reg-test/matlab_tests/NIfTI_20140122/load_untouch_nii_img.m
deleted file mode 100644
index d9169a9c..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/load_untouch_nii_img.m
+++ /dev/null
@@ -1,468 +0,0 @@
-%  internal function
-
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-
-function [img,hdr] = load_untouch_nii_img(hdr,filetype,fileprefix,machine,img_idx,dim5_idx,dim6_idx,dim7_idx,old_RGB,slice_idx)
-
-   if ~exist('hdr','var') | ~exist('filetype','var') | ~exist('fileprefix','var') | ~exist('machine','var')
-      error('Usage: [img,hdr] = load_nii_img(hdr,filetype,fileprefix,machine,[img_idx],[dim5_idx],[dim6_idx],[dim7_idx],[old_RGB],[slice_idx]);');
-   end
-
-   if ~exist('img_idx','var') | isempty(img_idx) | hdr.dime.dim(5)<1
-      img_idx = [];
-   end
-
-   if ~exist('dim5_idx','var') | isempty(dim5_idx) | hdr.dime.dim(6)<1
-      dim5_idx = [];
-   end
-
-   if ~exist('dim6_idx','var') | isempty(dim6_idx) | hdr.dime.dim(7)<1
-      dim6_idx = [];
-   end
-
-   if ~exist('dim7_idx','var') | isempty(dim7_idx) | hdr.dime.dim(8)<1
-      dim7_idx = [];
-   end
-
-   if ~exist('old_RGB','var') | isempty(old_RGB)
-      old_RGB = 0;
-   end
-
-   if ~exist('slice_idx','var') | isempty(slice_idx) | hdr.dime.dim(4)<1
-      slice_idx = [];
-   end
-
-   %  check img_idx
-   %
-   if ~isempty(img_idx) & ~isnumeric(img_idx)
-      error('"img_idx" should be a numerical array.');
-   end
-
-   if length(unique(img_idx)) ~= length(img_idx)
-      error('Duplicate image index in "img_idx"');
-   end
-
-   if ~isempty(img_idx) & (min(img_idx) < 1 | max(img_idx) > hdr.dime.dim(5))
-      max_range = hdr.dime.dim(5);
-
-      if max_range == 1
-         error(['"img_idx" should be 1.']);
-      else
-         range = ['1 ' num2str(max_range)];
-         error(['"img_idx" should be an integer within the range of [' range '].']);
-      end
-   end
-
-   %  check dim5_idx
-   %
-   if ~isempty(dim5_idx) & ~isnumeric(dim5_idx)
-      error('"dim5_idx" should be a numerical array.');
-   end
-
-   if length(unique(dim5_idx)) ~= length(dim5_idx)
-      error('Duplicate index in "dim5_idx"');
-   end
-
-   if ~isempty(dim5_idx) & (min(dim5_idx) < 1 | max(dim5_idx) > hdr.dime.dim(6))
-      max_range = hdr.dime.dim(6);
-
-      if max_range == 1
-         error(['"dim5_idx" should be 1.']);
-      else
-         range = ['1 ' num2str(max_range)];
-         error(['"dim5_idx" should be an integer within the range of [' range '].']);
-      end
-   end
-
-   %  check dim6_idx
-   %
-   if ~isempty(dim6_idx) & ~isnumeric(dim6_idx)
-      error('"dim6_idx" should be a numerical array.');
-   end
-
-   if length(unique(dim6_idx)) ~= length(dim6_idx)
-      error('Duplicate index in "dim6_idx"');
-   end
-
-   if ~isempty(dim6_idx) & (min(dim6_idx) < 1 | max(dim6_idx) > hdr.dime.dim(7))
-      max_range = hdr.dime.dim(7);
-
-      if max_range == 1
-         error(['"dim6_idx" should be 1.']);
-      else
-         range = ['1 ' num2str(max_range)];
-         error(['"dim6_idx" should be an integer within the range of [' range '].']);
-      end
-   end
-
-   %  check dim7_idx
-   %
-   if ~isempty(dim7_idx) & ~isnumeric(dim7_idx)
-      error('"dim7_idx" should be a numerical array.');
-   end
-
-   if length(unique(dim7_idx)) ~= length(dim7_idx)
-      error('Duplicate index in "dim7_idx"');
-   end
-
-   if ~isempty(dim7_idx) & (min(dim7_idx) < 1 | max(dim7_idx) > hdr.dime.dim(8))
-      max_range = hdr.dime.dim(8);
-
-      if max_range == 1
-         error(['"dim7_idx" should be 1.']);
-      else
-         range = ['1 ' num2str(max_range)];
-         error(['"dim7_idx" should be an integer within the range of [' range '].']);
-      end
-   end
-
-   %  check slice_idx
-   %
-   if ~isempty(slice_idx) & ~isnumeric(slice_idx)
-      error('"slice_idx" should be a numerical array.');
-   end
-
-   if length(unique(slice_idx)) ~= length(slice_idx)
-      error('Duplicate index in "slice_idx"');
-   end
-
-   if ~isempty(slice_idx) & (min(slice_idx) < 1 | max(slice_idx) > hdr.dime.dim(4))
-      max_range = hdr.dime.dim(4);
-
-      if max_range == 1
-         error(['"slice_idx" should be 1.']);
-      else
-         range = ['1 ' num2str(max_range)];
-         error(['"slice_idx" should be an integer within the range of [' range '].']);
-      end
-   end
-
-   [img,hdr] = read_image(hdr,filetype,fileprefix,machine,img_idx,dim5_idx,dim6_idx,dim7_idx,old_RGB,slice_idx);
-
-   return					% load_nii_img
-
-
-%---------------------------------------------------------------------
-function [img,hdr] = read_image(hdr,filetype,fileprefix,machine,img_idx,dim5_idx,dim6_idx,dim7_idx,old_RGB,slice_idx)
-
-   switch filetype
-   case {0, 1}
-      fn = [fileprefix '.img'];
-   case 2
-      fn = [fileprefix '.nii'];
-   end
-
-   fid = fopen(fn,'r',machine);
-
-   if fid < 0,
-      msg = sprintf('Cannot open file %s.',fn);
-      error(msg);
-   end
-
-   %  Set bitpix according to datatype
-   %
-   %  /*Acceptable values for datatype are*/ 
-   %
-   %     0 None                     (Unknown bit per voxel) % DT_NONE, DT_UNKNOWN 
-   %     1 Binary                         (ubit1, bitpix=1) % DT_BINARY 
-   %     2 Unsigned char         (uchar or uint8, bitpix=8) % DT_UINT8, NIFTI_TYPE_UINT8 
-   %     4 Signed short                  (int16, bitpix=16) % DT_INT16, NIFTI_TYPE_INT16 
-   %     8 Signed integer                (int32, bitpix=32) % DT_INT32, NIFTI_TYPE_INT32 
-   %    16 Floating point    (single or float32, bitpix=32) % DT_FLOAT32, NIFTI_TYPE_FLOAT32 
-   %    32 Complex, 2 float32      (Use float32, bitpix=64) % DT_COMPLEX64, NIFTI_TYPE_COMPLEX64
-   %    64 Double precision  (double or float64, bitpix=64) % DT_FLOAT64, NIFTI_TYPE_FLOAT64 
-   %   128 uint8 RGB                 (Use uint8, bitpix=24) % DT_RGB24, NIFTI_TYPE_RGB24 
-   %   256 Signed char            (schar or int8, bitpix=8) % DT_INT8, NIFTI_TYPE_INT8 
-   %   511 Single RGB              (Use float32, bitpix=96) % DT_RGB96, NIFTI_TYPE_RGB96
-   %   512 Unsigned short               (uint16, bitpix=16) % DT_UNINT16, NIFTI_TYPE_UNINT16 
-   %   768 Unsigned integer             (uint32, bitpix=32) % DT_UNINT32, NIFTI_TYPE_UNINT32 
-   %  1024 Signed long long              (int64, bitpix=64) % DT_INT64, NIFTI_TYPE_INT64
-   %  1280 Unsigned long long           (uint64, bitpix=64) % DT_UINT64, NIFTI_TYPE_UINT64 
-   %  1536 Long double, float128  (Unsupported, bitpix=128) % DT_FLOAT128, NIFTI_TYPE_FLOAT128 
-   %  1792 Complex128, 2 float64  (Use float64, bitpix=128) % DT_COMPLEX128, NIFTI_TYPE_COMPLEX128 
-   %  2048 Complex256, 2 float128 (Unsupported, bitpix=256) % DT_COMPLEX128, NIFTI_TYPE_COMPLEX128 
-   %
-   switch hdr.dime.datatype
-   case   1,
-      hdr.dime.bitpix = 1;  precision = 'ubit1';
-   case   2,
-      hdr.dime.bitpix = 8;  precision = 'uint8';
-   case   4,
-      hdr.dime.bitpix = 16; precision = 'int16';
-   case   8,
-      hdr.dime.bitpix = 32; precision = 'int32';
-   case  16,
-      hdr.dime.bitpix = 32; precision = 'float32';
-   case  32,
-      hdr.dime.bitpix = 64; precision = 'float32';
-   case  64,
-      hdr.dime.bitpix = 64; precision = 'float64';
-   case 128,
-      hdr.dime.bitpix = 24; precision = 'uint8';
-   case 256 
-      hdr.dime.bitpix = 8;  precision = 'int8';
-   case 511 
-      hdr.dime.bitpix = 96; precision = 'float32';
-   case 512 
-      hdr.dime.bitpix = 16; precision = 'uint16';
-   case 768 
-      hdr.dime.bitpix = 32; precision = 'uint32';
-   case 1024
-      hdr.dime.bitpix = 64; precision = 'int64';
-   case 1280
-      hdr.dime.bitpix = 64; precision = 'uint64';
-   case 1792,
-      hdr.dime.bitpix = 128; precision = 'float64';
-   otherwise
-      error('This datatype is not supported'); 
-   end
-
-   tmp = hdr.dime.dim(2:end);
-   tmp(find(tmp < 1)) = 1;
-   hdr.dime.dim(2:end) = tmp;
-
-   %  move pointer to the start of image block
-   %
-   switch filetype
-   case {0, 1}
-      fseek(fid, 0, 'bof');
-   case 2
-      fseek(fid, hdr.dime.vox_offset, 'bof');
-   end
-
-   %  Load whole image block for old Analyze format or binary image;
-   %  otherwise, load images that are specified in img_idx, dim5_idx,
-   %  dim6_idx, and dim7_idx
-   %
-   %  For binary image, we have to read all because pos can not be
-   %  seeked in bit and can not be calculated the way below.
-   %
-   if hdr.dime.datatype == 1 | isequal(hdr.dime.dim(4:8),ones(1,5)) | ...
-	(isempty(img_idx) & isempty(dim5_idx) & isempty(dim6_idx) & isempty(dim7_idx) & isempty(slice_idx))
-
-      %  For each frame, precision of value will be read 
-      %  in img_siz times, where img_siz is only the 
-      %  dimension size of an image, not the byte storage
-      %  size of an image.
-      %
-      img_siz = prod(hdr.dime.dim(2:8));
-
-      %  For complex float32 or complex float64, voxel values
-      %  include [real, imag]
-      %
-      if hdr.dime.datatype == 32 | hdr.dime.datatype == 1792
-         img_siz = img_siz * 2;
-      end
-	 
-      %MPH: For RGB24, voxel values include 3 separate color planes
-      %
-      if hdr.dime.datatype == 128 | hdr.dime.datatype == 511
-	 img_siz = img_siz * 3;
-      end
-
-      img = fread(fid, img_siz, sprintf('*%s',precision));
-
-      d1 = hdr.dime.dim(2);
-      d2 = hdr.dime.dim(3);
-      d3 = hdr.dime.dim(4);
-      d4 = hdr.dime.dim(5);
-      d5 = hdr.dime.dim(6);
-      d6 = hdr.dime.dim(7);
-      d7 = hdr.dime.dim(8);
-
-      if isempty(slice_idx)
-         slice_idx = 1:d3;
-      end
-
-      if isempty(img_idx)
-         img_idx = 1:d4;
-      end
-
-      if isempty(dim5_idx)
-         dim5_idx = 1:d5;
-      end
-
-      if isempty(dim6_idx)
-         dim6_idx = 1:d6;
-      end
-
-      if isempty(dim7_idx)
-         dim7_idx = 1:d7;
-      end
-   else
-
-      d1 = hdr.dime.dim(2);
-      d2 = hdr.dime.dim(3);
-      d3 = hdr.dime.dim(4);
-      d4 = hdr.dime.dim(5);
-      d5 = hdr.dime.dim(6);
-      d6 = hdr.dime.dim(7);
-      d7 = hdr.dime.dim(8);
-
-      if isempty(slice_idx)
-         slice_idx = 1:d3;
-      end
-
-      if isempty(img_idx)
-         img_idx = 1:d4;
-      end
-
-      if isempty(dim5_idx)
-         dim5_idx = 1:d5;
-      end
-
-      if isempty(dim6_idx)
-         dim6_idx = 1:d6;
-      end
-
-      if isempty(dim7_idx)
-         dim7_idx = 1:d7;
-      end
-      
-      %ROMAN: begin
-      roman = 1;
-      if(roman)
-
-         %  compute size of one slice
-         %
-         img_siz = prod(hdr.dime.dim(2:3));
-
-         %  For complex float32 or complex float64, voxel values
-         %  include [real, imag]
-         %
-         if hdr.dime.datatype == 32 | hdr.dime.datatype == 1792
-            img_siz = img_siz * 2;
-         end
-
-         %MPH: For RGB24, voxel values include 3 separate color planes
-         %
-         if hdr.dime.datatype == 128 | hdr.dime.datatype == 511
-            img_siz = img_siz * 3;
-         end
-
-         % preallocate img
-         img = zeros(img_siz, length(slice_idx)*length(img_idx)*length(dim5_idx)*length(dim6_idx)*length(dim7_idx) );
-         currentIndex = 1;
-      else
-        img = [];
-      end; %if(roman)
-      % ROMAN: end
-
-      for i7=1:length(dim7_idx)
-         for i6=1:length(dim6_idx)
-            for i5=1:length(dim5_idx)
-               for t=1:length(img_idx)
-               for s=1:length(slice_idx)
-
-                  %  Position is seeked in bytes. To convert dimension size
-                  %  to byte storage size, hdr.dime.bitpix/8 will be
-                  %  applied.
-                  %
-                  pos = sub2ind([d1 d2 d3 d4 d5 d6 d7], 1, 1, slice_idx(s), ...
-			                    img_idx(t), dim5_idx(i5),dim6_idx(i6),dim7_idx(i7)) -1;
-                  pos = pos * hdr.dime.bitpix/8;
-
-                  % ROMAN: begin
-                  if(roman)
-                      % do nothing
-                  else
-                     img_siz = prod(hdr.dime.dim(2:3));
-
-                     %  For complex float32 or complex float64, voxel values
-                     %  include [real, imag]
-                     %
-                     if hdr.dime.datatype == 32 | hdr.dime.datatype == 1792
-                        img_siz = img_siz * 2;
-                     end
-
-                     %MPH: For RGB24, voxel values include 3 separate color planes
-                     %
-                     if hdr.dime.datatype == 128 | hdr.dime.datatype == 511
-                        img_siz = img_siz * 3;
-                     end
-                  end; % if (roman)
-                  % ROMAN: end
-         
-                  if filetype == 2
-                     fseek(fid, pos + hdr.dime.vox_offset, 'bof');
-                  else
-                     fseek(fid, pos, 'bof');
-                  end
-
-                  %  For each frame, fread will read precision of value
-                  %  in img_siz times
-                  %
-                  % ROMAN: begin
-                  if(roman)
-                     img(:,currentIndex) = fread(fid, img_siz, sprintf('*%s',precision));
-                     currentIndex = currentIndex +1;
-                  else
-                     img = [img fread(fid, img_siz, sprintf('*%s',precision))];
-                  end; %if(roman)
-                  % ROMAN: end
-                  
-               end
-               end
-            end
-         end
-      end
-   end
-   
-   %  For complex float32 or complex float64, voxel values
-   %  include [real, imag]
-   %
-   if hdr.dime.datatype == 32 | hdr.dime.datatype == 1792
-      img = reshape(img, [2, length(img)/2]);
-      img = complex(img(1,:)', img(2,:)');
-   end
-
-   fclose(fid);
-
-   %  Update the global min and max values 
-   %
-   hdr.dime.glmax = double(max(img(:)));
-   hdr.dime.glmin = double(min(img(:)));
-
-   %  old_RGB treat RGB slice by slice, now it is treated voxel by voxel
-   %
-   if old_RGB & hdr.dime.datatype == 128 & hdr.dime.bitpix == 24
-      % remove squeeze
-      img = (reshape(img, [hdr.dime.dim(2:3) 3 length(slice_idx) length(img_idx) length(dim5_idx) length(dim6_idx) length(dim7_idx)]));
-      img = permute(img, [1 2 4 3 5 6 7 8]);
-   elseif hdr.dime.datatype == 128 & hdr.dime.bitpix == 24
-      % remove squeeze
-      img = (reshape(img, [3 hdr.dime.dim(2:3) length(slice_idx) length(img_idx) length(dim5_idx) length(dim6_idx) length(dim7_idx)]));
-      img = permute(img, [2 3 4 1 5 6 7 8]);
-   elseif hdr.dime.datatype == 511 & hdr.dime.bitpix == 96
-      img = double(img(:));
-      img = single((img - min(img))/(max(img) - min(img)));
-      % remove squeeze
-      img = (reshape(img, [3 hdr.dime.dim(2:3) length(slice_idx) length(img_idx) length(dim5_idx) length(dim6_idx) length(dim7_idx)]));
-      img = permute(img, [2 3 4 1 5 6 7 8]);
-   else
-      % remove squeeze
-      img = (reshape(img, [hdr.dime.dim(2:3) length(slice_idx) length(img_idx) length(dim5_idx) length(dim6_idx) length(dim7_idx)]));
-   end
-
-   if ~isempty(slice_idx)
-      hdr.dime.dim(4) = length(slice_idx);
-   end
-
-   if ~isempty(img_idx)
-      hdr.dime.dim(5) = length(img_idx);
-   end
-
-   if ~isempty(dim5_idx)
-      hdr.dime.dim(6) = length(dim5_idx);
-   end
-
-   if ~isempty(dim6_idx)
-      hdr.dime.dim(7) = length(dim6_idx);
-   end
-
-   if ~isempty(dim7_idx)
-      hdr.dime.dim(8) = length(dim7_idx);
-   end
-
-   return						% read_image
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/make_ana.m b/reg-test/matlab_tests/NIfTI_20140122/make_ana.m
deleted file mode 100644
index 883fc3ee..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/make_ana.m
+++ /dev/null
@@ -1,210 +0,0 @@
-%  Make ANALYZE 7.5 data structure specified by a 3D or 4D matrix.
-%  Optional parameters can also be included, such as: voxel_size, 
-%  origin, datatype, and description. 
-%  
-%  Once the ANALYZE structure is made, it can be saved into ANALYZE 7.5 
-%  format data file using "save_untouch_nii" command (for more detail, 
-%  type: help save_untouch_nii). 
-%  
-%  Usage: ana = make_ana(img, [voxel_size], [origin], [datatype], [description])
-%
-%  Where:
-%
-%	img:		a 3D matrix [x y z], or a 4D matrix with time
-%			series [x y z t]. When image is in RGB format,
-%			make sure that the size of 4th dimension is 
-%			always 3 (i.e. [R G B]). In that case, make 
-%			sure that you must specify RGB datatype to 128.
-%
-%	voxel_size (optional):	Voxel size in millimeter for each
-%				dimension. Default is [1 1 1].
-%
-%	origin (optional):	The AC origin. Default is [0 0 0].
-%
-%	datatype (optional):	Storage data type:
-%		2 - uint8,  4 - int16,  8 - int32,  16 - float32,
-%		64 - float64,  128 - RGB24
-%			Default will use the data type of 'img' matrix
-%			For RGB image, you must specify it to 128.
-%
-%	description (optional):	Description of data. Default is ''.
-%
-%  e.g.:
-%     origin = [33 44 13]; datatype = 64;
-%     ana = make_ana(img, [], origin, datatype);    % default voxel_size
-%
-%  ANALYZE 7.5 format: http://www.rotman-baycrest.on.ca/~jimmy/ANALYZE75.pdf
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function ana = make_ana(varargin)
-
-   ana.img = varargin{1};
-   dims = size(ana.img);
-   dims = [4 dims ones(1,8)];
-   dims = dims(1:8);
-
-   voxel_size = [0 ones(1,3) zeros(1,4)];
-   origin = zeros(1,5);
-   descrip = '';
-
-   switch class(ana.img)
-      case 'uint8'
-         datatype = 2;
-      case 'int16'
-         datatype = 4;
-      case 'int32'
-         datatype = 8;
-      case 'single'
-         datatype = 16;
-      case 'double'
-         datatype = 64;
-      otherwise
-         error('Datatype is not supported by make_ana.');
-   end
-
-   if nargin > 1 & ~isempty(varargin{2})
-      voxel_size(2:4) = double(varargin{2});
-   end
-
-   if nargin > 2 & ~isempty(varargin{3})
-      origin(1:3) = double(varargin{3});
-   end
-
-   if nargin > 3 & ~isempty(varargin{4})
-      datatype = double(varargin{4});
-
-      if datatype == 128 | datatype == 511
-         dims(5) = [];
-         dims = [dims 1];
-      end
-   end
-
-   if nargin > 4 & ~isempty(varargin{5})
-      descrip = varargin{5};
-   end
-
-   if ndims(ana.img) > 4
-      error('NIfTI only allows a maximum of 4 Dimension matrix.');
-   end
-
-   maxval = round(double(max(ana.img(:))));
-   minval = round(double(min(ana.img(:))));
-
-   ana.hdr = make_header(dims, voxel_size, origin, datatype, ...
-	descrip, maxval, minval);
-   ana.filetype = 0;
-   ana.ext = [];
-   ana.untouch = 1;
-
-   switch ana.hdr.dime.datatype
-   case 2
-      ana.img = uint8(ana.img);
-   case 4
-      ana.img = int16(ana.img);
-   case 8
-      ana.img = int32(ana.img);
-   case 16
-      ana.img = single(ana.img);
-   case 64
-      ana.img = double(ana.img);
-   case 128
-      ana.img = uint8(ana.img);
-   otherwise
-      error('Datatype is not supported by make_ana.');
-   end
-
-   return;					% make_ana
-
-
-%---------------------------------------------------------------------
-function hdr = make_header(dims, voxel_size, origin, datatype, ...
-	descrip, maxval, minval)
-
-   hdr.hk   = header_key;
-   hdr.dime = image_dimension(dims, voxel_size, datatype, maxval, minval);
-   hdr.hist = data_history(origin, descrip);
-    
-   return;					% make_header
-
-
-%---------------------------------------------------------------------
-function hk = header_key
-
-    hk.sizeof_hdr       = 348;			% must be 348!
-    hk.data_type        = '';
-    hk.db_name          = '';
-    hk.extents          = 0;
-    hk.session_error    = 0;
-    hk.regular          = 'r';
-    hk.hkey_un0         = '0';
-    
-    return;					% header_key
-
-
-%---------------------------------------------------------------------
-function dime = image_dimension(dims, voxel_size, datatype, maxval, minval)
-   
-   dime.dim = dims;
-   dime.vox_units = 'mm';
-   dime.cal_units = '';
-   dime.unused1 = 0;
-   dime.datatype = datatype;
-   
-   switch dime.datatype
-   case   2,
-      dime.bitpix = 8;  precision = 'uint8';
-   case   4,
-      dime.bitpix = 16; precision = 'int16';
-   case   8,
-      dime.bitpix = 32; precision = 'int32';
-   case  16,
-      dime.bitpix = 32; precision = 'float32';
-   case  64,
-      dime.bitpix = 64; precision = 'float64';
-   case 128
-      dime.bitpix = 24;  precision = 'uint8';
-   otherwise
-      error('Datatype is not supported by make_ana.');
-   end
-   
-   dime.dim_un0 = 0;
-   dime.pixdim = voxel_size;
-   dime.vox_offset = 0;
-   dime.roi_scale = 1;
-   dime.funused1 = 0;
-   dime.funused2 = 0;
-   dime.cal_max = 0;
-   dime.cal_min = 0;
-   dime.compressed = 0;
-   dime.verified = 0;
-   dime.glmax = maxval;
-   dime.glmin = minval;
-   
-   return;					% image_dimension
-
-
-%---------------------------------------------------------------------
-function hist = data_history(origin, descrip)
-   
-   hist.descrip = descrip;
-   hist.aux_file = 'none';
-   hist.orient = 0;
-   hist.originator = origin;
-   hist.generated = '';
-   hist.scannum = '';
-   hist.patient_id = '';
-   hist.exp_date = '';
-   hist.exp_time = '';
-   hist.hist_un0 = '';
-   hist.views = 0;
-   hist.vols_added = 0;
-   hist.start_field = 0;
-   hist.field_skip = 0;
-   hist.omax = 0;
-   hist.omin = 0;
-   hist.smax = 0;
-   hist.smin = 0;
-   
-   return;					% data_history
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/make_nii.m b/reg-test/matlab_tests/NIfTI_20140122/make_nii.m
deleted file mode 100644
index 1af1c5e7..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/make_nii.m
+++ /dev/null
@@ -1,256 +0,0 @@
-%  Make NIfTI structure specified by an N-D matrix. Usually, N is 3 for 
-%  3D matrix [x y z], or 4 for 4D matrix with time series [x y z t]. 
-%  Optional parameters can also be included, such as: voxel_size, 
-%  origin, datatype, and description. 
-%  
-%  Once the NIfTI structure is made, it can be saved into NIfTI file 
-%  using "save_nii" command (for more detail, type: help save_nii). 
-%  
-%  Usage: nii = make_nii(img, [voxel_size], [origin], [datatype], [description])
-%
-%  Where:
-%
-%	img:		Usually, img is a 3D matrix [x y z], or a 4D
-%			matrix with time series [x y z t]. However,
-%			NIfTI allows a maximum of 7D matrix. When the
-%			image is in RGB format, make sure that the size
-%			of 4th dimension is always 3 (i.e. [R G B]). In
-%			that case, make sure that you must specify RGB
-%			datatype, which is either 128 or 511.
-%
-%	voxel_size (optional):	Voxel size in millimeter for each
-%				dimension. Default is [1 1 1].
-%
-%	origin (optional):	The AC origin. Default is [0 0 0].
-%
-%	datatype (optional):	Storage data type:
-%		2 - uint8,  4 - int16,  8 - int32,  16 - float32,
-%		32 - complex64,  64 - float64,  128 - RGB24,
-%		256 - int8,  511 - RGB96,  512 - uint16,
-%		768 - uint32,  1792 - complex128
-%			Default will use the data type of 'img' matrix
-%			For RGB image, you must specify it to either 128
-%			or 511.
-%
-%	description (optional):	Description of data. Default is ''.
-%
-%  e.g.:
-%     origin = [33 44 13]; datatype = 64;
-%     nii = make_nii(img, [], origin, datatype);    % default voxel_size
-%
-%  NIFTI data format can be found on: http://nifti.nimh.nih.gov
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function nii = make_nii(varargin)
-
-   nii.img = varargin{1};
-   dims = size(nii.img);
-   dims = [length(dims) dims ones(1,8)];
-   dims = dims(1:8);
-
-   voxel_size = [0 ones(1,7)];
-   origin = zeros(1,5);
-   descrip = '';
-
-   switch class(nii.img)
-      case 'uint8'
-         datatype = 2;
-      case 'int16'
-         datatype = 4;
-      case 'int32'
-         datatype = 8;
-      case 'single'
-         if isreal(nii.img)
-            datatype = 16;
-         else
-            datatype = 32;
-         end
-      case 'double'
-         if isreal(nii.img)
-            datatype = 64;
-         else
-            datatype = 1792;
-         end
-      case 'int8'
-         datatype = 256;
-      case 'uint16'
-         datatype = 512;
-      case 'uint32'
-         datatype = 768;
-      otherwise
-         error('Datatype is not supported by make_nii.');
-   end
-
-   if nargin > 1 & ~isempty(varargin{2})
-      voxel_size(2:4) = double(varargin{2});
-   end
-
-   if nargin > 2 & ~isempty(varargin{3})
-      origin(1:3) = double(varargin{3});
-   end
-
-   if nargin > 3 & ~isempty(varargin{4})
-      datatype = double(varargin{4});
-
-      if datatype == 128 | datatype == 511
-         dims(5) = [];
-         dims(1) = dims(1) - 1;
-         dims = [dims 1];
-      end
-   end
-
-   if nargin > 4 & ~isempty(varargin{5})
-      descrip = varargin{5};
-   end
-
-   if ndims(nii.img) > 7
-      error('NIfTI only allows a maximum of 7 Dimension matrix.');
-   end
-
-   maxval = round(double(max(nii.img(:))));
-   minval = round(double(min(nii.img(:))));
-
-   nii.hdr = make_header(dims, voxel_size, origin, datatype, ...
-	descrip, maxval, minval);
-
-   switch nii.hdr.dime.datatype
-   case 2
-      nii.img = uint8(nii.img);
-   case 4
-      nii.img = int16(nii.img);
-   case 8
-      nii.img = int32(nii.img);
-   case 16
-      nii.img = single(nii.img);
-   case 32
-      nii.img = single(nii.img);
-   case 64
-      nii.img = double(nii.img);
-   case 128
-      nii.img = uint8(nii.img);
-   case 256
-      nii.img = int8(nii.img);
-   case 511
-      img = double(nii.img(:));
-      img = single((img - min(img))/(max(img) - min(img)));
-      nii.img = reshape(img, size(nii.img));
-      nii.hdr.dime.glmax = double(max(img));
-      nii.hdr.dime.glmin = double(min(img));
-   case 512
-      nii.img = uint16(nii.img);
-   case 768
-      nii.img = uint32(nii.img);
-   case 1792
-      nii.img = double(nii.img);
-   otherwise
-      error('Datatype is not supported by make_nii.');
-   end
-
-   return;					% make_nii
-
-
-%---------------------------------------------------------------------
-function hdr = make_header(dims, voxel_size, origin, datatype, ...
-	descrip, maxval, minval)
-
-   hdr.hk   = header_key;
-   hdr.dime = image_dimension(dims, voxel_size, datatype, maxval, minval);
-   hdr.hist = data_history(origin, descrip);
-    
-   return;					% make_header
-
-
-%---------------------------------------------------------------------
-function hk = header_key
-
-    hk.sizeof_hdr       = 348;			% must be 348!
-    hk.data_type        = '';
-    hk.db_name          = '';
-    hk.extents          = 0;
-    hk.session_error    = 0;
-    hk.regular          = 'r';
-    hk.dim_info         = 0;
-    
-    return;					% header_key
-
-
-%---------------------------------------------------------------------
-function dime = image_dimension(dims, voxel_size, datatype, maxval, minval)
-   
-   dime.dim = dims;
-   dime.intent_p1 = 0;
-   dime.intent_p2 = 0;
-   dime.intent_p3 = 0;
-   dime.intent_code = 0;
-   dime.datatype = datatype;
-   
-   switch dime.datatype
-   case 2,
-      dime.bitpix = 8;  precision = 'uint8';
-   case 4,
-      dime.bitpix = 16; precision = 'int16';
-   case 8,
-      dime.bitpix = 32; precision = 'int32';
-   case 16,
-      dime.bitpix = 32; precision = 'float32';
-   case 32,
-      dime.bitpix = 64; precision = 'float32';
-   case 64,
-      dime.bitpix = 64; precision = 'float64';
-   case 128
-      dime.bitpix = 24;  precision = 'uint8';
-   case 256 
-      dime.bitpix = 8;  precision = 'int8';
-   case 511
-      dime.bitpix = 96;  precision = 'float32';
-   case 512 
-      dime.bitpix = 16; precision = 'uint16';
-   case 768 
-      dime.bitpix = 32; precision = 'uint32';
-   case 1792,
-      dime.bitpix = 128; precision = 'float64';
-   otherwise
-      error('Datatype is not supported by make_nii.');
-   end
-   
-   dime.slice_start = 0;
-   dime.pixdim = voxel_size;
-   dime.vox_offset = 0;
-   dime.scl_slope = 0;
-   dime.scl_inter = 0;
-   dime.slice_end = 0;
-   dime.slice_code = 0;
-   dime.xyzt_units = 0;
-   dime.cal_max = 0;
-   dime.cal_min = 0;
-   dime.slice_duration = 0;
-   dime.toffset = 0;
-   dime.glmax = maxval;
-   dime.glmin = minval;
-   
-   return;					% image_dimension
-
-
-%---------------------------------------------------------------------
-function hist = data_history(origin, descrip)
-   
-   hist.descrip = descrip;
-   hist.aux_file = 'none';
-   hist.qform_code = 0;
-   hist.sform_code = 0;
-   hist.quatern_b = 0;
-   hist.quatern_c = 0;
-   hist.quatern_d = 0;
-   hist.qoffset_x = 0;
-   hist.qoffset_y = 0;
-   hist.qoffset_z = 0;
-   hist.srow_x = zeros(1,4);
-   hist.srow_y = zeros(1,4);
-   hist.srow_z = zeros(1,4);
-   hist.intent_name = '';
-   hist.magic = '';
-   hist.originator = origin;
-   
-   return;					% data_history
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/mat_into_hdr.m b/reg-test/matlab_tests/NIfTI_20140122/mat_into_hdr.m
deleted file mode 100644
index dc83a29c..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/mat_into_hdr.m
+++ /dev/null
@@ -1,83 +0,0 @@
-%MAT_INTO_HDR  The old versions of SPM (any version before SPM5) store
-%	an affine matrix of the SPM Reoriented image into a matlab file 
-%	(.mat extension). The file name of this SPM matlab file is the
-%	same as the SPM Reoriented image file (.img/.hdr extension).
-%
-%	This program will convert the ANALYZE 7.5 SPM Reoriented image
-%	file into NIfTI format, and integrate the affine matrix in the
-%	SPM matlab file into its header file (.hdr extension).
-%
-%	WARNING: Before you run this program, please save the header
-%	file (.hdr extension) into another file name or into another
-%	folder location, because all header files (.hdr extension)
-%	will be overwritten after they are converted into NIfTI
-%	format.
-%
-%  Usage: mat_into_hdr(filename);
-%
-%  filename:	file name(s) with .hdr or .mat file extension, like:
-%		'*.hdr', or '*.mat', or a single .hdr or .mat file.
-%	e.g.	mat_into_hdr('T1.hdr')
-%		mat_into_hdr('*.mat')
-%
-
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-%-------------------------------------------------------------------------
-function mat_into_hdr(files)
-
-   pn = fileparts(files);
-   file_lst = dir(files);
-   file_lst = {file_lst.name};
-   file1 = file_lst{1};
-   [p n e]= fileparts(file1);
-
-   for i=1:length(file_lst)
-      [p n e]= fileparts(file_lst{i});
-      disp(['working on file ', num2str(i) ,' of ', num2str(length(file_lst)), ': ', n,e]);
-      process=1;
-
-      if isequal(e,'.hdr')
-         mat=fullfile(pn, [n,'.mat']);
-         hdr=fullfile(pn, file_lst{i});
-
-         if ~exist(mat,'file')
-            warning(['Cannot find file "',mat  , '". File "', n, e, '" will not be processed.']);
-            process=0;
-         end
-      elseif isequal(e,'.mat')
-         hdr=fullfile(pn, [n,'.hdr']);
-         mat=fullfile(pn, file_lst{i});
-
-         if ~exist(hdr,'file')
-            warning(['Can not find file "',hdr  , '". File "', n, e, '" will not be processed.']);
-            process=0;
-         end
-      else
-         warning(['Input file must have .mat or .hdr extension. File "', n, e, '" will not be processed.']);
-         process=0;
-      end
-
-      if process
-         load(mat);
-         R=M(1:3,1:3);
-         T=M(1:3,4);
-         T=R*ones(3,1)+T;
-         M(1:3,4)=T;
-
-         [h filetype fileprefix machine]=load_nii_hdr(hdr);
-         h.hist.qform_code=0;
-         h.hist.sform_code=1;
-         h.hist.srow_x=M(1,:);
-         h.hist.srow_y=M(2,:);
-         h.hist.srow_z=M(3,:);
-         h.hist.magic='ni1';
-
-         fid = fopen(hdr,'w',machine);
-         save_nii_hdr(h,fid);
-         fclose(fid);
-      end
-   end
-
-   return;				% mat_into_hdr
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/pad_nii.m b/reg-test/matlab_tests/NIfTI_20140122/pad_nii.m
deleted file mode 100644
index 6398f220..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/pad_nii.m
+++ /dev/null
@@ -1,142 +0,0 @@
-%  PAD_NII: Pad the NIfTI volume from any of the 6 sides
-%
-%  Usage:	nii = pad_nii(nii, [option])
-%
-%  Inputs:
-%
-%  nii - NIfTI volume.
-%
-%  option - struct instructing how many voxel to be padded from which side.
-%
-%	option.pad_from_L = ( number of voxel )
-%	option.pad_from_R = ( number of voxel )
-%	option.pad_from_P = ( number of voxel )
-%	option.pad_from_A = ( number of voxel )
-%	option.pad_from_I = ( number of voxel )
-%	option.pad_from_S = ( number of voxel )
-%	option.bg = [0]
-%
-%	Options description in detail:
-%	==============================
-%
-%	pad_from_L: Number of voxels from Left side will be padded.
-%
-%	pad_from_R: Number of voxels from Right side will be padded.
-%
-%	pad_from_P: Number of voxels from Posterior side will be padded.
-%
-%	pad_from_A: Number of voxels from Anterior side will be padded.
-%
-%	pad_from_I: Number of voxels from Inferior side will be padded.
-%
-%	pad_from_S: Number of voxels from Superior side will be padded.
-%
-%	bg: Background intensity, which is 0 by default.
-%
-%  NIfTI data format can be found on: http://nifti.nimh.nih.gov
-%
-%  - Jimmy Shen (jshen@research.baycrest.org)
-%
-function nii = pad_nii(nii, opt)
-
-   dims = abs(nii.hdr.dime.dim(2:4));
-   origin = abs(nii.hdr.hist.originator(1:3));
-
-   if isempty(origin) | all(origin == 0)		% according to SPM
-      origin = round((dims+1)/2);
-   end
-
-   pad_from_L = 0;
-   pad_from_R = 0;
-   pad_from_P = 0;
-   pad_from_A = 0;
-   pad_from_I = 0;
-   pad_from_S = 0;
-   bg = 0;
-
-   if nargin > 1 & ~isempty(opt)
-      if ~isstruct(opt)
-         error('option argument should be a struct');
-      end
-
-      if isfield(opt,'pad_from_L')
-         pad_from_L = round(opt.pad_from_L);
-
-         if pad_from_L >= origin(1) | pad_from_L < 0
-            error('pad_from_L cannot be negative');
-         end
-      end
-
-      if isfield(opt,'pad_from_P')
-         pad_from_P = round(opt.pad_from_P);
-
-         if pad_from_P >= origin(2) | pad_from_P < 0
-            error('pad_from_P cannot be negative');
-         end
-      end
-
-      if isfield(opt,'pad_from_I')
-         pad_from_I = round(opt.pad_from_I);
-
-         if pad_from_I >= origin(3) | pad_from_I < 0
-            error('pad_from_I cannot be negative');
-         end
-      end
-
-      if isfield(opt,'pad_from_R')
-         pad_from_R = round(opt.pad_from_R);
-
-         if pad_from_R > dims(1)-origin(1) | pad_from_R < 0
-            error('pad_from_R cannot be negative');
-         end
-      end
-
-      if isfield(opt,'pad_from_A')
-         pad_from_A = round(opt.pad_from_A);
-
-         if pad_from_A > dims(2)-origin(2) | pad_from_A < 0
-            error('pad_from_A cannot be negative');
-         end
-      end
-
-      if isfield(opt,'pad_from_S')
-         pad_from_S = round(opt.pad_from_S);
-
-         if pad_from_S > dims(3)-origin(3) | pad_from_S < 0
-            error('pad_from_S cannot be negative');
-         end
-      end
-
-      if isfield(opt,'bg')
-         bg = opt.bg;
-      end
-   end
-
-   blk = bg * ones( pad_from_L, dims(2), dims(3) );
-   nii.img = cat(1, blk, nii.img);
-
-   blk = bg * ones( pad_from_R, dims(2), dims(3) );
-   nii.img = cat(1, nii.img, blk);
-
-   dims = size(nii.img);
-
-   blk = bg * ones( dims(1), pad_from_P, dims(3) );
-   nii.img = cat(2, blk, nii.img);
-
-   blk = bg * ones( dims(1), pad_from_A, dims(3) );
-   nii.img = cat(2, nii.img, blk);
-
-   dims = size(nii.img);
-
-   blk = bg * ones( dims(1), dims(2), pad_from_I );
-   nii.img = cat(3, blk, nii.img);
-
-   blk = bg * ones( dims(1), dims(2), pad_from_S );
-   nii.img = cat(3, nii.img, blk);
-
-   nii = make_nii(nii.img, nii.hdr.dime.pixdim(2:4), ...
-	[origin(1)+pad_from_L origin(2)+pad_from_P origin(3)+pad_from_I], ...
-	nii.hdr.dime.datatype, nii.hdr.hist.descrip);
-
-   return;
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/reslice_nii.m b/reg-test/matlab_tests/NIfTI_20140122/reslice_nii.m
deleted file mode 100644
index 2e43ad37..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/reslice_nii.m
+++ /dev/null
@@ -1,321 +0,0 @@
-%  The basic application of the 'reslice_nii.m' program is to perform
-%  any 3D affine transform defined by a NIfTI format image.
-%
-%  In addition, the 'reslice_nii.m' program can also be applied to
-%  generate an isotropic image from either a NIfTI format image or
-%  an ANALYZE format image.
-%
-%  The resliced NIfTI file will always be in RAS orientation.
-%
-%  This program only supports real integer or floating-point data type.
-%  For other data type, the program will exit with an error message 
-%  "Transform of this NIFTI data is not supported by the program".
-%
-%  Usage: reslice_nii(old_fn, new_fn, [voxel_size], [verbose], [bg], ...
-%			[method], [img_idx], [preferredForm]);
-%
-%  old_fn  -	filename for original NIfTI file
-%
-%  new_fn  -	filename for resliced NIfTI file
-%
-%  voxel_size (optional)  - size of a voxel in millimeter along x y z
-%		direction for resliced NIfTI file. 'voxel_size' will use
-%		the minimum voxel_size in original NIfTI header,
-%		if it is default or empty.
-%
-%  verbose (optional) - 1, 0
-%			1:  show transforming progress in percentage
-%			2:  progress will not be displayed
-%			'verbose' is 1 if it is default or empty.
-%
-%  bg (optional)  -	background voxel intensity in any extra corner that
-%			is caused by 3D interpolation. 0 in most cases. 'bg'
-%			will be the average of two corner voxel intensities
-%			in original image volume, if it is default or empty.
-%
-%  method (optional)  -	1, 2, or 3
-%			1:  for Trilinear interpolation
-%			2:  for Nearest Neighbor interpolation
-%			3:  for Fischer's Bresenham interpolation
-%			'method' is 1 if it is default or empty.
-%
-%  img_idx (optional)  -  a numerical array of image volume indices. Only
-%		the specified volumes will be loaded. All available image
-%		volumes will be loaded, if it is default or empty.
-%
-%	The number of images scans can be obtained from get_nii_frame.m,
-%	or simply: hdr.dime.dim(5).
-%
-%  preferredForm (optional)  -  selects which transformation from voxels
-%	to RAS coordinates; values are s,q,S,Q.  Lower case s,q indicate
-%	"prefer sform or qform, but use others if preferred not present". 
-%	Upper case indicate the program is forced to use the specificied
-%	tranform or fail loading.  'preferredForm' will be 's', if it is
-%	default or empty.	- Jeff Gunter
-%
-%  NIFTI data format can be found on: http://nifti.nimh.nih.gov
-%  
-%  - Jimmy Shen (jshen@research.baycrest.org)
-%
-function reslice_nii(old_fn, new_fn, voxel_size, verbose, bg, method, img_idx, preferredForm)
-
-   if ~exist('old_fn','var') | ~exist('new_fn','var')
-      error('Usage: reslice_nii(old_fn, new_fn, [voxel_size], [verbose], [bg], [method], [img_idx])');
-   end
-
-   if ~exist('method','var') | isempty(method)
-      method = 1;
-   end
-
-   if ~exist('img_idx','var') | isempty(img_idx)
-      img_idx = [];
-   end
-
-   if ~exist('verbose','var') | isempty(verbose)
-      verbose = 1;
-   end
-
-   if ~exist('preferredForm','var') | isempty(preferredForm)
-      preferredForm= 's';				% Jeff
-   end
-
-   nii = load_nii_no_xform(old_fn, img_idx, 0, preferredForm);
-
-   if ~ismember(nii.hdr.dime.datatype, [2,4,8,16,64,256,512,768])
-      error('Transform of this NIFTI data is not supported by the program.');
-   end
-
-   if ~exist('voxel_size','var') | isempty(voxel_size)
-      voxel_size = abs(min(nii.hdr.dime.pixdim(2:4)))*ones(1,3);
-   elseif length(voxel_size) < 3
-      voxel_size = abs(voxel_size(1))*ones(1,3);
-   end
-
-   if ~exist('bg','var') | isempty(bg)
-      bg = mean([nii.img(1) nii.img(end)]);
-   end
-
-   old_M = nii.hdr.hist.old_affine;
-
-   if nii.hdr.dime.dim(5) > 1
-      for i = 1:nii.hdr.dime.dim(5)
-         if verbose
-            fprintf('Reslicing %d of %d volumes.\n', i, nii.hdr.dime.dim(5));
-         end
-
-         [img(:,:,:,i) M] = ...
-		affine(nii.img(:,:,:,i), old_M, voxel_size, verbose, bg, method);
-      end
-   else
-      [img M] = affine(nii.img, old_M, voxel_size, verbose, bg, method);
-   end
-
-   new_dim = size(img);
-   nii.img = img;
-   nii.hdr.dime.dim(2:4) = new_dim(1:3);
-   nii.hdr.dime.datatype = 16;
-   nii.hdr.dime.bitpix = 32;
-   nii.hdr.dime.pixdim(2:4) = voxel_size(:)';
-   nii.hdr.dime.glmax = max(img(:));
-   nii.hdr.dime.glmin = min(img(:));
-   nii.hdr.hist.qform_code = 0;
-   nii.hdr.hist.sform_code = 1;
-   nii.hdr.hist.srow_x = M(1,:);
-   nii.hdr.hist.srow_y = M(2,:);
-   nii.hdr.hist.srow_z = M(3,:);
-   nii.hdr.hist.new_affine = M;
-
-   save_nii(nii, new_fn);
-
-   return;					% reslice_nii
-
-
-%--------------------------------------------------------------------
-function [nii] = load_nii_no_xform(filename, img_idx, old_RGB, preferredForm)
-
-   if ~exist('filename','var'),
-      error('Usage: [nii] = load_nii(filename, [img_idx], [old_RGB])');
-   end
-   
-   if ~exist('img_idx','var'), img_idx = []; end
-   if ~exist('old_RGB','var'), old_RGB = 0; end
-   if ~exist('preferredForm','var'), preferredForm= 's'; end     % Jeff
-
-   v = version;
-
-   %  Check file extension. If .gz, unpack it into temp folder
-   %
-   if length(filename) > 2 & strcmp(filename(end-2:end), '.gz')
-
-      if ~strcmp(filename(end-6:end), '.img.gz') & ...
-	 ~strcmp(filename(end-6:end), '.hdr.gz') & ...
-	 ~strcmp(filename(end-6:end), '.nii.gz')
-
-         error('Please check filename.');
-      end
-
-      if str2num(v(1:3)) < 7.1 | ~usejava('jvm')
-         error('Please use MATLAB 7.1 (with java) and above, or run gunzip outside MATLAB.');
-      elseif strcmp(filename(end-6:end), '.img.gz')
-         filename1 = filename;
-         filename2 = filename;
-         filename2(end-6:end) = '';
-         filename2 = [filename2, '.hdr.gz'];
-
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-
-         filename1 = gunzip(filename1, tmpDir);
-         filename2 = gunzip(filename2, tmpDir);
-         filename = char(filename1);	% convert from cell to string
-      elseif strcmp(filename(end-6:end), '.hdr.gz')
-         filename1 = filename;
-         filename2 = filename;
-         filename2(end-6:end) = '';
-         filename2 = [filename2, '.img.gz'];
-
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-
-         filename1 = gunzip(filename1, tmpDir);
-         filename2 = gunzip(filename2, tmpDir);
-         filename = char(filename1);	% convert from cell to string
-      elseif strcmp(filename(end-6:end), '.nii.gz')
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-         filename = gunzip(filename, tmpDir);
-         filename = char(filename);	% convert from cell to string
-      end
-   end
-
-   %  Read the dataset header
-   %
-   [nii.hdr,nii.filetype,nii.fileprefix,nii.machine] = load_nii_hdr(filename);
-
-   %  Read the header extension
-   %
-%   nii.ext = load_nii_ext(filename);
-   
-   %  Read the dataset body
-   %
-   [nii.img,nii.hdr] = ...
-        load_nii_img(nii.hdr,nii.filetype,nii.fileprefix,nii.machine,img_idx,'','','',old_RGB);
-   
-   %  Perform some of sform/qform transform
-   %
-%   nii = xform_nii(nii, preferredForm);
-
-   %  Clean up after gunzip
-   %
-   if exist('gzFileName', 'var')
-
-      %  fix fileprefix so it doesn't point to temp location
-      %
-      nii.fileprefix = gzFileName(1:end-7);
-      rmdir(tmpDir,'s');
-   end
-
-
-   hdr = nii.hdr;
-
-   %  NIFTI can have both sform and qform transform. This program
-   %  will check sform_code prior to qform_code by default.
-   %
-   %  If user specifys "preferredForm", user can then choose the
-   %  priority.					- Jeff
-   %
-   useForm=[];					% Jeff
-
-   if isequal(preferredForm,'S')
-       if isequal(hdr.hist.sform_code,0)
-           error('User requires sform, sform not set in header');
-       else
-           useForm='s';
-       end
-   end						% Jeff
-
-   if isequal(preferredForm,'Q')
-       if isequal(hdr.hist.qform_code,0)
-           error('User requires sform, sform not set in header');
-       else
-           useForm='q';
-       end
-   end						% Jeff
-
-   if isequal(preferredForm,'s')
-       if hdr.hist.sform_code > 0
-           useForm='s';
-       elseif hdr.hist.qform_code > 0
-           useForm='q';
-       end
-   end						% Jeff
-   
-   if isequal(preferredForm,'q')
-       if hdr.hist.qform_code > 0
-           useForm='q';
-       elseif hdr.hist.sform_code > 0
-           useForm='s';
-       end
-   end						% Jeff
-
-   if isequal(useForm,'s')
-      R = [hdr.hist.srow_x(1:3)
-           hdr.hist.srow_y(1:3)
-           hdr.hist.srow_z(1:3)];
-
-      T = [hdr.hist.srow_x(4)
-           hdr.hist.srow_y(4)
-           hdr.hist.srow_z(4)];
-
-      nii.hdr.hist.old_affine = [ [R;[0 0 0]] [T;1] ];
-
-   elseif isequal(useForm,'q')
-      b = hdr.hist.quatern_b;
-      c = hdr.hist.quatern_c;
-      d = hdr.hist.quatern_d;
-
-      if 1.0-(b*b+c*c+d*d) < 0
-         if abs(1.0-(b*b+c*c+d*d)) < 1e-5
-            a = 0;
-         else
-            error('Incorrect quaternion values in this NIFTI data.');
-         end
-      else
-         a = sqrt(1.0-(b*b+c*c+d*d));
-      end
-
-      qfac = hdr.dime.pixdim(1);
-      i = hdr.dime.pixdim(2);
-      j = hdr.dime.pixdim(3);
-      k = qfac * hdr.dime.pixdim(4);
-
-      R = [a*a+b*b-c*c-d*d     2*b*c-2*a*d        2*b*d+2*a*c
-           2*b*c+2*a*d         a*a+c*c-b*b-d*d    2*c*d-2*a*b
-           2*b*d-2*a*c         2*c*d+2*a*b        a*a+d*d-c*c-b*b];
-
-      T = [hdr.hist.qoffset_x
-           hdr.hist.qoffset_y
-           hdr.hist.qoffset_z];
-
-      nii.hdr.hist.old_affine = [ [R * diag([i j k]);[0 0 0]] [T;1] ];
-
-   elseif nii.filetype == 0 & exist([nii.fileprefix '.mat'],'file')
-      load([nii.fileprefix '.mat']);	% old SPM affine matrix
-      R=M(1:3,1:3);
-      T=M(1:3,4);
-      T=R*ones(3,1)+T;
-      M(1:3,4)=T;
-      nii.hdr.hist.old_affine = M;
-
-   else
-      M = diag(hdr.dime.pixdim(2:5));
-      M(1:3,4) = -M(1:3,1:3)*(hdr.hist.originator(1:3)-1)';
-      M(4,4) = 1;
-      nii.hdr.hist.old_affine = M;
-   end
-
-   return					% load_nii_no_xform
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/rri_file_menu.m b/reg-test/matlab_tests/NIfTI_20140122/rri_file_menu.m
deleted file mode 100644
index ec54bf34..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/rri_file_menu.m
+++ /dev/null
@@ -1,179 +0,0 @@
-%  Imbed a file menu to any figure. If file menu exist, it will append
-%  to the existing file menu. This file menu includes: Copy to clipboard,
-%  print, save, close etc.
-%
-%  Usage: rri_file_menu(fig);
-%
-%         rri_file_menu(fig,0) means no 'Close' menu.
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-%--------------------------------------------------------------------
-
-function rri_file_menu(action, varargin)
-
-   if isnumeric(action)
-      fig = action;
-      action = 'init';
-   end
-
-   %  clear the message line,
-   %
-   h = findobj(gcf,'Tag','MessageLine');
-   set(h,'String','');
-
-   if ~strcmp(action, 'init')
-      set(gcbf, 'InvertHardcopy','off');
-%      set(gcbf, 'PaperPositionMode','auto');
-   end
-
-   switch action
-      case {'init'}
-         if nargin > 1
-            init(fig, 1);		% no 'close' menu
-         else
-            init(fig, 0);
-         end
-      case {'print_fig'}
-         printdlg(gcbf);
-      case {'copy_fig'}
-         copy_fig;
-      case {'export_fig'}
-         export_fig;
-   end
-
-   return					% rri_file_menu
-
-
-%------------------------------------------------
-%
-%  Create (or append) File menu
-%
-function init(fig, no_close)
-
-   %  search for file menu
-   %
-   h_file = [];
-   menuitems = findobj(fig, 'type', 'uimenu');
-
-   for i=1:length(menuitems)
-      filelabel = get(menuitems(i),'label');
-
-      if strcmpi(strrep(filelabel, '&', ''), 'file')
-         h_file = menuitems(i);
-         break;
-      end
-   end
-
-   set(fig, 'menubar', 'none');
-
-   if isempty(h_file)
-      if isempty(menuitems)
-         h_file = uimenu('parent', fig, 'label', 'File');
-      else
-         h_file = uimenu('parent', fig, 'label', 'Copy Figure');
-      end
-
-      h1 = uimenu('parent', h_file, ...
-         'callback','rri_file_menu(''copy_fig'');', ...
-         'label','Copy to Clipboard');
-   else
-      h1 = uimenu('parent', h_file, ...
-         'callback','rri_file_menu(''copy_fig'');', ...
-         'separator','on', ...
-         'label','Copy to Clipboard');
-   end
-
-   h2 = uimenu(h_file, ...
-      'callback','pagesetupdlg(gcbf);', ...
-      'label','Page Setup...');
-
-   h2 = uimenu(h_file, ...
-      'callback','printpreview(gcbf);', ...
-      'label','Print Preview...');
-
-   h2 = uimenu('parent', h_file, ...
-      'callback','printdlg(gcbf);', ...
-      'label','Print Figure ...');
-
-   h2 = uimenu('parent', h_file, ...
-      'callback','rri_file_menu(''export_fig'');', ...
-      'label','Save Figure ...');
-
-   arch = computer;
-   if ~strcmpi(arch(1:2),'PC')
-      set(h1, 'enable', 'off');
-   end
-
-   if ~no_close
-      h1 = uimenu('parent', h_file, ...
-         'callback','close(gcbf);', ...
-         'separator','on', ...
-         'label','Close');
-   end
-
-   return;					% init
-
-
-%------------------------------------------------
-%
-%  Copy to clipboard
-%
-function copy_fig
-
-   arch = computer;
-   if(~strcmpi(arch(1:2),'PC'))
-      error('copy to clipboard can only be used under MS Windows');
-      return;
-   end
-
-   print -noui -dbitmap;
-
-   return					% copy_fig
-
-
-%------------------------------------------------
-%
-%  Save as an image file
-%
-function export_fig
-
-   curr = pwd;
-   if isempty(curr)
-      curr = filesep;
-   end
-
-   [selected_file, selected_path] = rri_select_file(curr,'Save As');
-
-   if isempty(selected_file) | isempty(selected_path)
-      return;
-   end
-
-   filename = [selected_path selected_file];
-
-   if(exist(filename,'file')==2)		% file exist
-
-      dlg_title = 'Confirm File Overwrite';
-      msg = ['File ',filename,' exist. Are you sure you want to overwrite it?'];
-      response = questdlg(msg,dlg_title,'Yes','No','Yes');
-
-      if(strcmp(response,'No'))
-         return;
-      end
-
-   end
-
-   old_pointer = get(gcbf,'pointer');
-   set(gcbf,'pointer','watch');
-
-   try
-      saveas(gcbf,filename);
-   catch
-      msg = 'ERROR: Cannot save file';
-      set(findobj(gcf,'Tag','MessageLine'),'String',msg);
-   end
-
-   set(gcbf,'pointer',old_pointer);
-
-   return;					% export_fig
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/rri_orient.m b/reg-test/matlab_tests/NIfTI_20140122/rri_orient.m
deleted file mode 100644
index 9efcc3f3..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/rri_orient.m
+++ /dev/null
@@ -1,106 +0,0 @@
-%  Convert image of different orientations to standard Analyze orientation
-%
-%  Usage: nii = rri_orient(nii);
-
-%  Jimmy Shen (jimmy@rotman-baycrest.on.ca), 26-APR-04
-%___________________________________________________________________
-
-function [nii, orient, pattern] = rri_orient(nii, varargin)
-
-   if nargin > 1
-      pattern = varargin{1};
-   else
-      pattern = [];
-   end
-
-   if(nargin > 2)
-       orient = varargin{2};
-       if(length(find(orient>6)) || length(find(orient<1))) %value checking
-           orient=[1 2 3]; %set  to default if bogus values set
-       end
-   else
-       orient = [1 2 3];
-   end
-   
-   
-   dim = double(nii.hdr.dime.dim([2:4]));
-
-   if ~isempty(pattern) & ~isequal(length(pattern), prod(dim))
-      return;
-   end
-
-   %  get orient of the current image
-   %
-   if isequal(orient, [1 2 3])
-    orient = rri_orient_ui;
-    pause(.1);
-   end
-
-   %  no need for conversion
-   %
-   if isequal(orient, [1 2 3])
-      return;
-   end
-
-   if isempty(pattern)
-      pattern = 1:prod(dim);
-   end
-
-   pattern = reshape(pattern, dim);
-   img = nii.img;
-
-   %  calculate after flip orient
-   %
-   rot_orient = mod(orient + 2, 3) + 1;
-
-   %  do flip:
-   %
-   flip_orient = orient - rot_orient;
-
-   for i = 1:3
-      if flip_orient(i)
-         pattern = flipdim(pattern, i);
-         img = flipdim(img, i);
-      end
-   end
-
-   %  get index of orient (do inverse)
-   %
-   [tmp rot_orient] = sort(rot_orient);
-
-   %  do rotation:
-   %
-   pattern = permute(pattern, rot_orient);
-   img = permute(img, [rot_orient 4 5 6]);
-
-   %  rotate resolution, or 'dim'
-   %
-   new_dim = nii.hdr.dime.dim([2:4]);
-   new_dim = new_dim(rot_orient);
-   nii.hdr.dime.dim([2:4]) = new_dim;
-
-   %  rotate voxel_size, or 'pixdim'
-   %
-   tmp = nii.hdr.dime.pixdim([2:4]);
-   tmp = tmp(rot_orient);
-   nii.hdr.dime.pixdim([2:4]) = tmp;
-
-   %  re-calculate originator
-   %
-   tmp = nii.hdr.hist.originator([1:3]);
-   tmp = tmp(rot_orient);
-   flip_orient = flip_orient(rot_orient);
-
-   for i = 1:3
-      if flip_orient(i) & ~isequal(double(tmp(i)), 0)
-         tmp(i) = int16(double(new_dim(i)) - double(tmp(i)) + 1);
-      end
-   end
-
-   nii.hdr.hist.originator([1:3]) = tmp;
-
-   nii.img = img;
-   pattern = pattern(:);
-
-   return;						% rri_orient
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/rri_orient_ui.m b/reg-test/matlab_tests/NIfTI_20140122/rri_orient_ui.m
deleted file mode 100644
index 97cd1fbd..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/rri_orient_ui.m
+++ /dev/null
@@ -1,251 +0,0 @@
-%  Return orientation of the current image:
-%	orient is orientation 1x3 matrix, in that:
-%	Three elements represent: [x y z]
-%	Element value:	1 - Left to Right; 2 - Posterior to Anterior;
-%			3 - Inferior to Superior; 4 - Right to Left;
-%			5 - Anterior to Posterior; 6 - Superior to Inferior;
-%  e.g.:
-%	Standard RAS Orientation:	[1 2 3]
-%	Standard RHOS Orientation:	[2 4 3]
-
-%  Jimmy Shen (jimmy@rotman-baycrest.on.ca), 26-APR-04
-%
-function orient = rri_orient_ui(varargin)
-
-   if nargin == 0
-      init;
-      orient_ui_fig = gcf;
-      uiwait;					% wait for user finish
-
-      orient = getappdata(gcf, 'orient');
-
-      if isempty(orient)
-         orient = [1 2 3];
-      end
-
-      if ishandle(orient_ui_fig)
-         close(gcf);
-      end
-
-      return;
-   end
-
-   action = varargin{1};
-
-   if strcmp(action, 'done')
-      click_done;
-   elseif strcmp(action, 'cancel')
-      uiresume;
-   end
-
-   return;						% rri_orient_ui
-
-
-%----------------------------------------------------------------------
-function init
-
-   save_setting_status = 'on';
-   rri_orient_pos = [];
-
-   try
-      load('pls_profile');
-   catch
-   end
-
-   try
-      load('rri_pos_profile');
-   catch
-   end
-
-   if ~isempty(rri_orient_pos) & strcmp(save_setting_status,'on')
-
-      pos = rri_orient_pos;
-
-   else
-
-      w = 0.35;
-      h = 0.4;
-      x = (1-w)/2;
-      y = (1-h)/2;
-
-      pos = [x y w h];
-
-   end
-
-   handles.figure = figure('Color',[0.8 0.8 0.8], ...
-        'Units','normal', ...
-        'Name', 'Convert to standard RAS orientation', ...
-        'NumberTitle','off', ...
-        'MenuBar','none', ...
-        'Position',pos, ...
-        'WindowStyle', 'normal', ...
-        'ToolBar','none');
-
-   h0 = handles.figure;
-   Font.FontUnits  = 'point';
-   Font.FontSize   = 12;
-
-   margin = .1;
-   line_num = 6;
-   line_ht = (1 - margin*2) / line_num;
-
-   x = margin;
-   y = 1 - margin - line_ht;
-   w = 1 - margin * 2;
-   h = line_ht * .7;
-
-   pos = [x y w h];
-
-   handles.Ttit = uicontrol('parent', h0, ...
-	'style','text', ...
-	'unit', 'normal', ...
-	Font, ...
-	'Position',pos, ...
-	'HorizontalAlignment','left',...
-	'background', [0.8 0.8 0.8], ...
-	'string', 'Please input orientation of the current image:');
-
-   y = y - line_ht;
-   w = .2;
-
-   pos = [x y w h];
-
-   handles.Tx_orient = uicontrol('parent', h0, ...
-	'style','text', ...
-	'unit', 'normal', ...
-	Font, ...
-	'Position',pos, ...
-	'HorizontalAlignment','left',...
-	'background', [0.8 0.8 0.8], ...
-	'string', 'X   Axes:');
-
-   y = y - line_ht;
-
-   pos = [x y w h];
-
-   handles.Ty_orient = uicontrol('parent', h0, ...
-	'style','text', ...
-	'unit', 'normal', ...
-	Font, ...
-	'Position',pos, ...
-	'HorizontalAlignment','left',...
-	'background', [0.8 0.8 0.8], ...
-	'string', 'Y   Axes:');
-
-   y = y - line_ht;
-
-   pos = [x y w h];
-
-   handles.Tz_orient = uicontrol('parent', h0, ...
-	'style','text', ...
-	'unit', 'normal', ...
-	Font, ...
-	'Position',pos, ...
-	'HorizontalAlignment','left',...
-	'background', [0.8 0.8 0.8], ...
-	'string', 'Z   Axes:');
-
-   choice = {	'From Left to Right', 'From Posterior to Anterior', ...
-		'From Inferior to Superior', 'From Right to Left', ...
-		'From Anterior to Posterior', 'From Superior to Inferior'	};
-
-   y = 1 - margin - line_ht;
-   y = y - line_ht;
-   w = 1 - margin - x - w;
-   x = 1 - margin - w;
-
-   pos = [x y w h];
-
-   handles.x_orient = uicontrol('parent', h0, ...
-	'style','popupmenu', ...
-	'unit', 'normal', ...
-	Font, ...
-	'Position',pos, ...
-	'HorizontalAlignment','left',...
-	'string', choice, ...
-	'value', 1, ...
-	'background', [1 1 1]);
-
-   y = y - line_ht;
-
-   pos = [x y w h];
-
-   handles.y_orient = uicontrol('parent', h0, ...
-	'style','popupmenu', ...
-	'unit', 'normal', ...
-	Font, ...
-	'Position',pos, ...
-	'HorizontalAlignment','left',...
-	'string', choice, ...
-	'value', 2, ...
-	'background', [1 1 1]);
-
-   y = y - line_ht;
-
-   pos = [x y w h];
-
-   handles.z_orient = uicontrol('parent', h0, ...
-	'style','popupmenu', ...
-	'unit', 'normal', ...
-	Font, ...
-	'Position',pos, ...
-	'HorizontalAlignment','left',...
-	'string', choice, ...
-	'value', 3, ...
-	'background', [1 1 1]);
-
-   x = margin;
-   y = y - line_ht * 1.5;
-   w = .3;
-
-   pos = [x y w h];
-
-   handles.done = uicontrol('parent', h0, ...
-	'unit', 'normal', ...
-	Font, ...
-	'Position',pos, ...
-	'HorizontalAlignment','center',...
-        'callback', 'rri_orient_ui(''done'');', ...
-	'string', 'Done');
-
-   x = 1 - margin - w;
-
-   pos = [x y w h];
-
-   handles.cancel = uicontrol('parent', h0, ...
-	'unit', 'normal', ...
-	Font, ...
-	'Position',pos, ...
-	'HorizontalAlignment','center',...
-        'callback', 'rri_orient_ui(''cancel'');', ...
-	'string', 'Cancel');
-
-   setappdata(h0, 'handles', handles);
-   setappdata(h0, 'orient', [1 2 3]);
-
-   return;						% init
-
-
-%----------------------------------------------------------------------
-function click_done
-
-   handles = getappdata(gcf, 'handles');
-
-   x_orient = get(handles.x_orient, 'value');
-   y_orient = get(handles.y_orient, 'value');
-   z_orient = get(handles.z_orient, 'value');
-
-   orient = [x_orient y_orient z_orient];
-   test_orient = [orient, orient + 3];
-   test_orient = mod(test_orient, 3);
-
-   if length(unique(test_orient)) ~= 3
-      msgbox('Please don''t choose same or opposite direction','Error','modal');
-      return;
-   end
-
-   setappdata(gcf, 'orient', [x_orient y_orient z_orient]);
-   uiresume;
-
-   return;						% click_done
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/rri_select_file.m b/reg-test/matlab_tests/NIfTI_20140122/rri_select_file.m
deleted file mode 100644
index fe7d47e8..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/rri_select_file.m
+++ /dev/null
@@ -1,636 +0,0 @@
-function [selected_file, selected_path] = rri_select_file(varargin)
-%
-%  USAGE: [selected_file, selected_path] = ...
-%             rri_select_file(dir_name, fig_title)
-%
-%  Allow user to select a file from a list of Matlab competible
-%	file format
-%
-%  Example:
-%
-%    [selected_file, selected_path] = ...
-%		rri_select_file('/usr','Select Data File');
-%
-%  See Also RRI_GETFILES
-
-%  -- Created June 2001 by Wilkin Chau, Rotman Research Institute
-%
-%  use rri_select_file to open & save Matlab recognized format
-%  -- Modified Dec 2002 by Jimmy Shen, Rotman Research Institute
-%
-
-   if nargin == 0 | ischar(varargin{1}) 	% create rri_select_file figure
-
-      dir_name = '';
-      fig_title = 'Select a File';
-
-      if nargin > 0
-         dir_name = varargin{1};
-      end
-
-      if nargin > 1
-         fig_title = varargin{2};
-      end
-
-      Init(fig_title,dir_name);
-      uiwait;                           % wait for user finish
-
-      selected_path = getappdata(gcf,'SelectedDirectory');
-      selected_file = getappdata(gcf,'SelectedFile');
-
-      cd (getappdata(gcf,'StartDirectory'));
-      close(gcf);
-      return;
-   end;
-
-   %  clear the message line,
-   %
-   h = findobj(gcf,'Tag','MessageLine');
-   set(h,'String','');
-
-   action = varargin{1}{1};
-
-   %  change 'File format':
-   %  update 'Files' & 'File selection' based on file pattern
-   %
-   if strcmp(action,'EditFilter'),
-      EditFilter;
-
-   %  run delete_fig when figure is closing
-   %
-   elseif strcmp(action,'delete_fig'),
-      delete_fig;
-
-   %  select 'Directories':
-   %  go into the selected dir
-   %  update 'Files' & 'File selection' based on file pattern
-   %
-   elseif strcmp(action,'select_dir'),
-      select_dir;
-
-   %  select 'Files':
-   %  update 'File selection'
-   %
-   elseif strcmp(action,'select_file'),
-      select_file;
-
-   %  change 'File selection':
-   %  if it is a file, select that,
-   %  if it is more than a file (*), select those,
-   %  if it is a directory, select based on file pattern
-   %  
-   elseif strcmp(action,'EditSelection'),
-      EditSelection;
-
-   %  clicked 'Select'
-   %
-   elseif strcmp(action,'DONE_BUTTON_PRESSED'),
-      h = findobj(gcf,'Tag','SelectionEdit');
-      [filepath,filename,fileext] = fileparts(get(h,'String'));
-
-      if isempty(filepath) | isempty(filename) | isempty(fileext)
-         setappdata(gcf,'SelectedDirectory',[]);
-         setappdata(gcf,'SelectedFile',[]);
-      else
-         if ~strcmp(filepath(end),filesep)		% not end with filesep
-            filepath = [filepath filesep];		% add a filesep to filepath
-         end
-
-         setappdata(gcf,'SelectedDirectory',filepath);
-         setappdata(gcf,'SelectedFile',[filename fileext]);
-      end
-
-      if getappdata(gcf,'ready')			% ready to exit
-         uiresume;
-      end
-
-   %  clicked 'cancel'
-   %
-   elseif strcmp(action,'CANCEL_BUTTON_PRESSED'),
-      setappdata(gcf,'SelectedDirectory',[]);
-      setappdata(gcf,'SelectedFile',[]);
-      set(findobj(gcf,'Tag','FileList'),'String','');
-      uiresume;
-   end;
-
-   return;
-
-
-% --------------------------------------------------------------------
-function Init(fig_title,dir_name),
-
-   StartDirectory = pwd;
-   if isempty(StartDirectory),
-       StartDirectory = filesep;
-   end;
-
-   filter_disp = {'JPEG image (*.jpg)', ...
-	'TIFF image, compressed (*.tif)', ...
-	'EPS Level 1 (*.eps)', ...
-	'Adobe Illustrator 88 (*.ai)', ...
-	'Enhanced metafile (*.emf)', ...
-	'Matlab Figure (*.fig)', ...
-	'Matlab M-file (*.m)', ...
-	'Portable bitmap (*.pbm)', ...
-	'Paintbrush 24-bit (*.pcx)', ...
-	'Portable Graymap (*.pgm)', ...
-	'Portable Network Graphics (*.png)', ...
-	'Portable Pixmap (*.ppm)', ...
-   };
-
-   filter_string = {'*.jpg', ...
-	'*.tif', ...
-	'*.eps', ...
-	'*.ai', ...
-	'*.emf', ...
-	'*.fig', ...
-	'*.m', ...
-	'*.pbm', ...
-	'*.pcx', ...
-	'*.pgm', ...
-	'*.png', ...
-	'*.ppm', ...
-   };
-
-%   filter_disp = char(filter_disp);
-   filter_string = char(filter_string);
-
-   margine = 0.05;
-   line_height = 0.07;
-   char_height = line_height*0.8;
-
-   save_setting_status = 'on';
-   rri_select_file_pos = [];
-
-   try
-      load('pls_profile');
-   catch
-   end
-
-   if ~isempty(rri_select_file_pos) & strcmp(save_setting_status,'on')
-
-      pos = rri_select_file_pos;
-
-   else
-
-      w = 0.4;
-      h = 0.6;
-      x = (1-w)/2;
-      y = (1-h)/2;
-
-      pos = [x y w h];
-
-   end
-
-   h0 = figure('parent',0, 'Color',[0.8 0.8 0.8], ...
-        'Units','normal', ...
-        'Name',fig_title, ...
-        'NumberTitle','off', ...
-        'MenuBar','none', ...
-        'Position', pos, ...
-        'deleteFcn','rri_select_file({''delete_fig''});', ...
-        'WindowStyle', 'modal', ...
-        'Tag','GetFilesFigure', ...
-        'ToolBar','none');
-
-   x = margine;
-   y = 1 - 1*line_height - margine;
-   w = 1-2*x;
-   h = char_height;
-
-   pos = [x y w h];
-
-   h1 = uicontrol('Parent',h0, ...		% Filter Label
-        'Style','text', ...
-        'Units','normal', ...
-        'BackgroundColor',[0.8 0.8 0.8], ...
-	'fontunit','normal', ...
-        'FontSize',0.5, ...
-        'HorizontalAlignment','left', ...
-        'Position', pos, ...
-        'String','Choose one of the file format:', ...
-        'Tag','FilterLabel');
-
-   y = 1 - 2*line_height - margine + line_height*0.2;
-   w = 1-2*x;
-
-   pos = [x y w h];
-
-   h_filter = uicontrol('Parent',h0, ...	% Filter list
-        'Style','popupmenu', ...
-        'Units','normal', ...
-        'BackgroundColor',[1 1 1], ...
-	'fontunit','normal', ...
-        'FontSize',0.5, ...
-        'HorizontalAlignment','left', ...
-        'Position', pos, ...
-        'String', filter_disp, ...
-        'user', filter_string, ...
-	'value', 1, ...
-        'Callback','rri_select_file({''EditFilter''});', ...
-        'Tag','FilterEdit');
-
-   y = 1 - 3*line_height - margine;
-   w = 0.5 - x - margine/2;
-
-   pos = [x y w h];
-
-   h1 = uicontrol('Parent',h0, ...            % Directory Label
-        'Style','text', ...
-        'Units','normal', ...
-        'BackgroundColor',[0.8 0.8 0.8], ...
-	'fontunit','normal', ...
-        'FontSize',0.5, ...
-        'HorizontalAlignment','left', ...
-        'ListboxTop',0, ...
-        'Position', pos, ...
-        'String','Directories', ...
-        'Tag','DirectoryLabel');
-
-   x = 0.5;
-   y = 1 - 3*line_height - margine;
-   w = 0.5 - margine;
-
-   pos = [x y w h];
-
-   h1 = uicontrol('Parent',h0, ...            % File Label
-        'Style','text', ...
-        'Units','normal', ...
-        'BackgroundColor',[0.8 0.8 0.8], ...
-	'fontunit','normal', ...
-        'FontSize',0.5, ...
-        'HorizontalAlignment','left', ...
-        'ListboxTop',0, ...
-        'Position', pos, ...
-        'String','Files', ...
-        'Tag','FileLabel');
-
-   x = margine;
-   y = 4*line_height + margine;
-   w = 0.5 - x - margine/2;
-   h = 1 - 7*line_height - 2*margine;
-
-   pos = [x y w h];
-
-   h_dir = uicontrol('Parent',h0, ...            % Directory Listbox
-        'Style','listbox', ...
-        'Units','normal', ...
-	'fontunit','normal', ...
-        'FontSize',0.08, ...
-        'HorizontalAlignment','left', ...
-        'Interruptible', 'off', ...
-        'ListboxTop',1, ...
-        'Position', pos, ...
-        'String', '', ...
-        'Callback','rri_select_file({''select_dir''});', ...
-        'Tag','DirectoryList');
-
-   x = 0.5;
-   y = 4*line_height + margine;
-   w = 0.5 - margine;
-   h = 1 - 7*line_height - 2*margine;
-
-   pos = [x y w h];
-
-   h_file = uicontrol('Parent',h0, ...            % File Listbox
-        'Style','listbox', ...
-        'Units','normal', ...
-	'fontunit','normal', ...
-        'FontSize',0.08, ...
-        'HorizontalAlignment','left', ...
-        'ListboxTop',1, ...
-        'Position', pos, ...
-        'String', '', ...
-        'Callback','rri_select_file({''select_file''});', ...
-        'Tag','FileList');
-
-   x = margine;
-   y = 3*line_height + margine - line_height*0.2;
-   w = 1-2*x;
-   h = char_height;
-
-   pos = [x y w h];
-
-   h1 = uicontrol('Parent',h0, ...            % Selection Label
-        'Style','text', ...
-        'Units','normal', ...
-        'BackgroundColor',[0.8 0.8 0.8], ...
-        'fontunit','normal', ...
-        'FontSize',0.5, ...
-        'HorizontalAlignment','left', ...
-        'Position', pos, ...
-        'String','File you selected:', ...
-        'Tag','SelectionLabel');
-
-   y = 2*line_height + margine;
-   w = 1-2*x;
-
-   pos = [x y w h];
-
-   h_select = uicontrol('Parent',h0, ...            % Selection Edit
-        'Style','edit', ...
-        'Units','normal', ...
-        'BackgroundColor',[1 1 1], ...
-        'fontunit','normal', ...
-        'FontSize',0.5, ...
-        'HorizontalAlignment','left', ...
-        'Position', pos, ...
-        'String', '', ...
-        'Callback','rri_select_file({''EditSelection''});', ...
-        'Tag','SelectionEdit');
-
-   x = 2*margine;
-   y = line_height/2 + margine;
-   w = 0.2;
-   h = line_height;
-
-   pos = [x y w h];
-
-   h_done = uicontrol('Parent',h0, ...                      % DONE
-        'Units','normal', ...
-        'fontunit','normal', ...
-        'FontSize',0.5, ...
-        'ListboxTop',0, ...
-        'Position', pos, ...
-        'HorizontalAlignment','center', ...
-        'String','Save', ...			% 'Select', ...
-        'Callback','rri_select_file({''DONE_BUTTON_PRESSED''});', ...
-        'Tag','DONEButton');
-
-   x = 1 - x - w;
-
-   pos = [x y w h];
-
-   h_cancel = uicontrol('Parent',h0, ...                      % CANCEL
-        'Units','normal', ...
-        'fontunit','normal', ...
-        'FontSize',0.5, ...
-        'ListboxTop',0, ...
-        'Position', pos, ...
-        'HorizontalAlignment','center', ...
-        'String','Cancel', ...
-        'Callback','rri_select_file({''CANCEL_BUTTON_PRESSED''});', ...
-        'Tag','CANCELButton');
-
-   if isempty(dir_name)
-      dir_name = StartDirectory;
-   end
-
-   set(h_select,'string',dir_name);
-
-   filter_select = get(h_filter,'value');
-   filter_pattern = filter_string(filter_select,:);
-
-   setappdata(gcf,'FilterPattern',deblank(filter_pattern));
-   setappdata(gcf,'filter_string',filter_string);
-
-   setappdata(gcf,'h_filter', h_filter);
-   setappdata(gcf,'h_dir', h_dir);
-   setappdata(gcf,'h_file', h_file);
-   setappdata(gcf,'h_select', h_select);
-   setappdata(gcf,'h_done', h_done);
-   setappdata(gcf,'h_cancel', h_cancel);
-   setappdata(gcf,'StartDirectory',StartDirectory);
-
-   EditSelection;
-
-   h_file = getappdata(gcf,'h_file');
-   if isempty(get(h_file,'string'))
-      setappdata(gcf,'ready',0);
-   else
-      setappdata(gcf,'ready',1);
-   end
-
-   return;					% Init
-
-
-%  called by all the actions, to update 'Directories' or 'Files'
-%  based on filter_pattern. Select first file in filelist.
-%
-% --------------------------------------------------------------------
-
-function update_dirlist;
-
-   filter_path = getappdata(gcf,'curr_dir');
-   filter_pattern = getappdata(gcf,'FilterPattern');
-
-   if exist(filter_pattern) == 2	% user input specific filename
-      is_single_file = 1;		% need manually take path out later
-   else
-      is_single_file = 0;
-   end
-
-   % take the file path out from filter_pattern
-   %
-   [fpath fname fext] = fileparts(filter_pattern);
-   filter_pattern = [fname fext];
-
-   dir_struct = dir(filter_path);
-   if isempty(dir_struct)
-      msg = 'ERROR: Directory not found!';
-      uiwait(msgbox(msg,'File Selection Error','modal'));
-      return;
-   end;
-
-   old_pointer = get(gcf,'Pointer');
-   set(gcf,'Pointer','watch');
-   
-   dir_list = dir_struct(find([dir_struct.isdir] == 1));
-   [sorted_dir_names,sorted_dir_index] = sortrows({dir_list.name}');
-
-   dir_struct = dir([filter_path filesep filter_pattern]);
-   if isempty(dir_struct)
-      sorted_file_names = [];
-   else
-      file_list = dir_struct(find([dir_struct.isdir] == 0));
-
-      if is_single_file			% take out path
-         tmp = file_list.name;
-         [fpath fname fext] = fileparts(tmp);
-         file_list.name = [fname fext];
-      end
-
-      [sorted_file_names,sorted_file_index] = sortrows({file_list.name}');
-   end;
-
-   disp_dir_names = [];			% if need full path, use this
-					% instead of sorted_dir_names
-   for i=1:length(sorted_dir_names)
-      tmp = [filter_path filesep sorted_dir_names{i}];
-      disp_dir_names = [disp_dir_names {tmp}];
-   end
-
-   h = findobj(gcf,'Tag','DirectoryList');
-   set(h,'String',sorted_dir_names,'Value',1);
-
-   h = findobj(gcf,'Tag','FileList');
-   set(h,'String',sorted_file_names,'value',1);
-
-   h_select = getappdata(gcf,'h_select');
-   if strcmp(filter_path(end),filesep)		% filepath end with filesep
-      filter_path = filter_path(1:end-1);	% take filesep out
-   end
-
-   if isempty(sorted_file_names)
-      set(h_select,'string',[filter_path filesep]);
-   else
-      set(h_select,'string',[filter_path filesep sorted_file_names{1}]);
-   end
-
-   set(gcf,'Pointer',old_pointer);
-
-   return; 					% update_dirlist
-
-
-%  change 'File format':
-%  update 'Files' & 'File selection' based on file pattern
-%
-% --------------------------------------------------------------------
-
-function EditFilter()
-
-   filter_select = get(gcbo,'value');
-   filter_string = getappdata(gcf,'filter_string');
-   filter_pattern = filter_string(filter_select,:);
-   filter_path = getappdata(gcf,'curr_dir');
-
-   % update filter_pattern
-   setappdata(gcf,'FilterPattern',deblank(filter_pattern));
-
-   if isempty(filter_path),
-       filter_path = filesep;
-   end;
-
-   update_dirlist;
-
-   h_file = getappdata(gcf,'h_file');
-   if isempty(get(h_file,'string'))
-      setappdata(gcf,'ready',0);
-   else
-      setappdata(gcf,'ready',1);
-   end
-
-   return;					% EditFilter
-
-
-%  select 'Directories':
-%  go into the selected dir
-%  update 'Files' & 'File selection' based on file pattern
-%
-% --------------------------------------------------------------------
-
-function select_dir()
-
-   listed_dir = get(gcbo,'String');
-   selected_dir_idx = get(gcbo,'Value');
-   selected_dir = listed_dir{selected_dir_idx};
-   curr_dir = getappdata(gcf,'curr_dir');
-   
-   %  update the selection box
-   %
-   try 
-      cd ([curr_dir filesep selected_dir]);
-   catch
-      msg = 'ERROR: Cannot access directory';
-      uiwait(msgbox(msg,'File Selection Error','modal'));
-      return;
-   end;
-
-   if isempty(pwd)
-      curr_dir = filesep;
-   else
-      curr_dir = pwd;
-   end;
-
-   setappdata(gcf,'curr_dir',curr_dir);
-   update_dirlist;
-
-   h_file = getappdata(gcf,'h_file');
-   if isempty(get(h_file,'string'))
-      setappdata(gcf,'ready',0);
-   else
-      setappdata(gcf,'ready',1);
-   end
-
-   return;					% select_dir
-
-
-%  select 'Files':
-%  update 'File selection'
-%
-% --------------------------------------------------------------------
-
-function select_file()
-
-   setappdata(gcf,'ready',1);
-   listed_file = get(gcbo,'String');
-   selected_file_idx = get(gcbo,'Value');
-   selected_file = listed_file{selected_file_idx};
-   curr_dir = getappdata(gcf,'curr_dir');
-
-   if strcmp(curr_dir(end),filesep)		% filepath end with filesep
-      curr_dir = curr_dir(1:end-1);	% take filesep out
-   end
-
-   h_select = getappdata(gcf,'h_select');
-   set(h_select,'string',[curr_dir filesep selected_file]);
-
-   return;					% select_file
-
-
-%  change 'File selection':
-%  if it is a file, select that,
-%  if it is more than a file (*), select those,
-%  if it is a directory, select based on file pattern
-%  
-% --------------------------------------------------------------------
-
-function EditSelection()
-
-   filter_string = getappdata(gcf,'filter_string');
-   h_select = getappdata(gcf,'h_select');
-   selected_file = get(h_select,'string');
-
-   if exist(selected_file) == 7			% if user enter a dir
-      setappdata(gcf,'ready',0);
-      setappdata(gcf,'curr_dir',selected_file);		% get new dir
-      update_dirlist;
-   else
-
-      setappdata(gcf,'ready',1);
-
-      [fpath fname fext]= fileparts(selected_file);
-      if exist(fpath) ~=7			% fpath is not a dir
-         setappdata(gcf,'ready',0);
-         msg = 'ERROR: Cannot access directory';
-         uiwait(msgbox(msg,'File Selection Error','modal'));
-      end
-
-      %  if the file format user entered is not supported by matlab
-      if isempty(strmatch(['*',fext],filter_string,'exact'))
-         setappdata(gcf,'ready',0);
-         msg = 'ERROR: File format is not supported by Matlab.';
-         uiwait(msgbox(msg,'File Selection Error','modal'));
-      end
-
-   end
-
-   return;					% EditSelection
-
-
-% --------------------------------------------------------------------
-
-function delete_fig()
-
-   try
-      load('pls_profile');
-      pls_profile = which('pls_profile.mat');
-
-      rri_select_file_pos = get(gcbf,'position');
-
-      save(pls_profile, '-append', 'rri_select_file_pos');
-   catch
-   end
-
-   return;
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/rri_xhair.m b/reg-test/matlab_tests/NIfTI_20140122/rri_xhair.m
deleted file mode 100644
index 9a9951ad..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/rri_xhair.m
+++ /dev/null
@@ -1,92 +0,0 @@
-%   rri_xhair: create a pair of full_cross_hair at point [x y] in
-%              axes h_ax, and return xhair struct
-%
-%   Usage: xhair = rri_xhair([x y], xhair, h_ax);
-%
-%   If omit xhair, rri_xhair will create a pair of xhair; otherwise,
-%   rri_xhair will update the xhair. If omit h_ax, current axes will
-%   be used.
-%
-
-%   24-nov-2003 jimmy (jimmy@rotman-baycrest.on.ca)
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-function xhair = rri_xhair(varargin)
-
-   if nargin == 0
-      error('Please enter a point position as first argument');
-      return;
-   end
-
-   if nargin > 0
-      p = varargin{1};
-
-      if ~isnumeric(p) | length(p) ~= 2
-         error('Invalid point position');
-         return;
-      else
-         xhair = [];
-      end
-   end
-
-   if nargin > 1
-      xhair = varargin{2};
-
-      if ~isempty(xhair)
-         if ~isstruct(xhair)
-            error('Invalid xhair struct');
-            return;
-         elseif ~isfield(xhair,'lx') | ~isfield(xhair,'ly')
-            error('Invalid xhair struct');
-            return;
-         elseif ~ishandle(xhair.lx) | ~ishandle(xhair.ly)
-            error('Invalid xhair struct');
-            return;
-         end
-
-         lx = xhair.lx;
-         ly = xhair.ly;
-      else
-         lx = [];
-         ly = [];
-      end
-   end
-
-   if nargin > 2
-      h_ax = varargin{3};
-
-      if ~ishandle(h_ax)
-         error('Invalid axes handle');
-         return;
-      elseif ~strcmp(lower(get(h_ax,'type')), 'axes')
-         error('Invalid axes handle');
-         return;
-      end
-   else
-      h_ax = gca;
-   end
-
-   x_range = get(h_ax,'xlim');
-   y_range = get(h_ax,'ylim');
-
-   if ~isempty(xhair)
-      set(lx, 'ydata', [p(2) p(2)]);
-      set(ly, 'xdata', [p(1) p(1)]);
-      set(h_ax, 'selected', 'on');
-      set(h_ax, 'selected', 'off');
-   else
-      figure(get(h_ax,'parent'));
-      axes(h_ax);
-
-      xhair.lx = line('xdata', x_range, 'ydata', [p(2) p(2)], ...
-	'zdata', [11 11], 'color', [1 0 0], 'hittest', 'off');
-      xhair.ly = line('xdata', [p(1) p(1)], 'ydata', y_range, ...
-	'zdata', [11 11], 'color', [1 0 0], 'hittest', 'off');
-   end
-
-   set(h_ax,'xlim',x_range);
-   set(h_ax,'ylim',y_range);
-
-   return;
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/rri_zoom_menu.m b/reg-test/matlab_tests/NIfTI_20140122/rri_zoom_menu.m
deleted file mode 100644
index e1c9c6ce..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/rri_zoom_menu.m
+++ /dev/null
@@ -1,33 +0,0 @@
-%  Imbed a zoom menu to any figure.
-%
-%  Usage: rri_zoom_menu(fig);
-%
-
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-%--------------------------------------------------------------------
-function menu_hdl = rri_zoom_menu(fig)
-
-   if isnumeric(fig)
-      menu_hdl = uimenu('Parent',fig, ...
-   	   'Label','Zoom on', ...
-	   'Userdata', 1, ...
-           'Callback','rri_zoom_menu(''zoom'');');
-
-      return;
-   end
-
-   zoom_on_state = get(gcbo,'Userdata');
-
-   if (zoom_on_state == 1)
-      zoom on;
-      set(gcbo,'Userdata',0,'Label','Zoom off');
-      set(gcbf,'pointer','crosshair');
-   else
-      zoom off;
-      set(gcbo,'Userdata',1,'Label','Zoom on');
-      set(gcbf,'pointer','arrow');
-   end
-
-   return					% rri_zoom_menu
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/save_nii.m b/reg-test/matlab_tests/NIfTI_20140122/save_nii.m
deleted file mode 100644
index b2d0dd44..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/save_nii.m
+++ /dev/null
@@ -1,286 +0,0 @@
-%  Save NIFTI dataset. Support both *.nii and *.hdr/*.img file extension.
-%  If file extension is not provided, *.hdr/*.img will be used as default.
-%  
-%  Usage: save_nii(nii, filename, [old_RGB])
-%  
-%  nii.hdr - struct with NIFTI header fields (from load_nii.m or make_nii.m)
-%
-%  nii.img - 3D (or 4D) matrix of NIFTI data.
-%
-%  filename - NIFTI file name.
-%
-%  old_RGB    - an optional boolean variable to handle special RGB data 
-%       sequence [R1 R2 ... G1 G2 ... B1 B2 ...] that is used only by 
-%       AnalyzeDirect (Analyze Software). Since both NIfTI and Analyze
-%       file format use RGB triple [R1 G1 B1 R2 G2 B2 ...] sequentially
-%       for each voxel, this variable is set to FALSE by default. If you
-%       would like the saved image only to be opened by AnalyzeDirect 
-%       Software, set old_RGB to TRUE (or 1). It will be set to 0, if it
-%       is default or empty.
-%  
-%  Tip: to change the data type, set nii.hdr.dime.datatype,
-%	and nii.hdr.dime.bitpix to:
-% 
-%     0 None                     (Unknown bit per voxel) % DT_NONE, DT_UNKNOWN 
-%     1 Binary                         (ubit1, bitpix=1) % DT_BINARY 
-%     2 Unsigned char         (uchar or uint8, bitpix=8) % DT_UINT8, NIFTI_TYPE_UINT8 
-%     4 Signed short                  (int16, bitpix=16) % DT_INT16, NIFTI_TYPE_INT16 
-%     8 Signed integer                (int32, bitpix=32) % DT_INT32, NIFTI_TYPE_INT32 
-%    16 Floating point    (single or float32, bitpix=32) % DT_FLOAT32, NIFTI_TYPE_FLOAT32 
-%    32 Complex, 2 float32      (Use float32, bitpix=64) % DT_COMPLEX64, NIFTI_TYPE_COMPLEX64
-%    64 Double precision  (double or float64, bitpix=64) % DT_FLOAT64, NIFTI_TYPE_FLOAT64 
-%   128 uint RGB                  (Use uint8, bitpix=24) % DT_RGB24, NIFTI_TYPE_RGB24 
-%   256 Signed char            (schar or int8, bitpix=8) % DT_INT8, NIFTI_TYPE_INT8 
-%   511 Single RGB              (Use float32, bitpix=96) % DT_RGB96, NIFTI_TYPE_RGB96
-%   512 Unsigned short               (uint16, bitpix=16) % DT_UNINT16, NIFTI_TYPE_UNINT16 
-%   768 Unsigned integer             (uint32, bitpix=32) % DT_UNINT32, NIFTI_TYPE_UNINT32 
-%  1024 Signed long long              (int64, bitpix=64) % DT_INT64, NIFTI_TYPE_INT64
-%  1280 Unsigned long long           (uint64, bitpix=64) % DT_UINT64, NIFTI_TYPE_UINT64 
-%  1536 Long double, float128  (Unsupported, bitpix=128) % DT_FLOAT128, NIFTI_TYPE_FLOAT128 
-%  1792 Complex128, 2 float64  (Use float64, bitpix=128) % DT_COMPLEX128, NIFTI_TYPE_COMPLEX128 
-%  2048 Complex256, 2 float128 (Unsupported, bitpix=256) % DT_COMPLEX128, NIFTI_TYPE_COMPLEX128 
-%  
-%  Part of this file is copied and modified from:
-%  http://www.mathworks.com/matlabcentral/fileexchange/1878-mri-analyze-tools
-%
-%  NIFTI data format can be found on: http://nifti.nimh.nih.gov
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%  - "old_RGB" related codes in "save_nii.m" are added by Mike Harms (2006.06.28) 
-%
-function save_nii(nii, fileprefix, old_RGB)
-   
-   if ~exist('nii','var') | isempty(nii) | ~isfield(nii,'hdr') | ...
-	~isfield(nii,'img') | ~exist('fileprefix','var') | isempty(fileprefix)
-
-      error('Usage: save_nii(nii, filename, [old_RGB])');
-   end
-
-   if isfield(nii,'untouch') & nii.untouch == 1
-      error('Usage: please use ''save_untouch_nii.m'' for the untouched structure.');
-   end
-
-   if ~exist('old_RGB','var') | isempty(old_RGB)
-      old_RGB = 0;
-   end
-
-   v = version;
-
-   %  Check file extension. If .gz, unpack it into temp folder
-   %
-   if length(fileprefix) > 2 & strcmp(fileprefix(end-2:end), '.gz')
-
-      if ~strcmp(fileprefix(end-6:end), '.img.gz') & ...
-	 ~strcmp(fileprefix(end-6:end), '.hdr.gz') & ...
-	 ~strcmp(fileprefix(end-6:end), '.nii.gz')
-
-         error('Please check filename.');
-      end
-
-      if str2num(v(1:3)) < 7.1 | ~usejava('jvm')
-         error('Please use MATLAB 7.1 (with java) and above, or run gunzip outside MATLAB.');
-      else
-         gzFile = 1;
-         fileprefix = fileprefix(1:end-3);
-      end
-   end
-   
-   filetype = 1;
-
-   %  Note: fileprefix is actually the filename you want to save
-   %   
-   if findstr('.nii',fileprefix) & strcmp(fileprefix(end-3:end), '.nii')
-      filetype = 2;
-      fileprefix(end-3:end)='';
-   end
-   
-   if findstr('.hdr',fileprefix) & strcmp(fileprefix(end-3:end), '.hdr')
-      fileprefix(end-3:end)='';
-   end
-   
-   if findstr('.img',fileprefix) & strcmp(fileprefix(end-3:end), '.img')
-      fileprefix(end-3:end)='';
-   end
-
-   write_nii(nii, filetype, fileprefix, old_RGB);
-
-   %  gzip output file if requested
-   %
-   if exist('gzFile', 'var')
-      if filetype == 1
-         gzip([fileprefix, '.img']);
-         delete([fileprefix, '.img']);
-         gzip([fileprefix, '.hdr']);
-         delete([fileprefix, '.hdr']);
-      elseif filetype == 2
-         gzip([fileprefix, '.nii']);
-         delete([fileprefix, '.nii']);
-      end;
-   end;
-
-   if filetype == 1
-
-      %  So earlier versions of SPM can also open it with correct originator
-      %
-      M=[[diag(nii.hdr.dime.pixdim(2:4)) -[nii.hdr.hist.originator(1:3).*nii.hdr.dime.pixdim(2:4)]'];[0 0 0 1]];
-      save([fileprefix '.mat'], 'M');
-   end
-   
-   return					% save_nii
-
-
-%-----------------------------------------------------------------------------------
-function write_nii(nii, filetype, fileprefix, old_RGB)
-
-   hdr = nii.hdr;
-
-   if isfield(nii,'ext') & ~isempty(nii.ext)
-      ext = nii.ext;
-      [ext, esize_total] = verify_nii_ext(ext);
-   else
-      ext = [];
-   end
-
-   switch double(hdr.dime.datatype),
-   case   1,
-      hdr.dime.bitpix = int16(1 ); precision = 'ubit1';
-   case   2,
-      hdr.dime.bitpix = int16(8 ); precision = 'uint8';
-   case   4,
-      hdr.dime.bitpix = int16(16); precision = 'int16';
-   case   8,
-      hdr.dime.bitpix = int16(32); precision = 'int32';
-   case  16,
-      hdr.dime.bitpix = int16(32); precision = 'float32';
-   case  32,
-      hdr.dime.bitpix = int16(64); precision = 'float32';
-   case  64,
-      hdr.dime.bitpix = int16(64); precision = 'float64';
-   case 128,
-      hdr.dime.bitpix = int16(24); precision = 'uint8';
-   case 256 
-      hdr.dime.bitpix = int16(8 ); precision = 'int8';
-   case 511,
-      hdr.dime.bitpix = int16(96); precision = 'float32';
-   case 512 
-      hdr.dime.bitpix = int16(16); precision = 'uint16';
-   case 768 
-      hdr.dime.bitpix = int16(32); precision = 'uint32';
-   case 1024
-      hdr.dime.bitpix = int16(64); precision = 'int64';
-   case 1280
-      hdr.dime.bitpix = int16(64); precision = 'uint64';
-   case 1792,
-      hdr.dime.bitpix = int16(128); precision = 'float64';
-   otherwise
-      error('This datatype is not supported');
-   end
-   
-   hdr.dime.glmax = round(double(max(nii.img(:))));
-   hdr.dime.glmin = round(double(min(nii.img(:))));
-   
-   if filetype == 2
-      fid = fopen(sprintf('%s.nii',fileprefix),'w');
-      
-      if fid < 0,
-         msg = sprintf('Cannot open file %s.nii.',fileprefix);
-         error(msg);
-      end
-      
-      hdr.dime.vox_offset = 352;
-
-      if ~isempty(ext)
-         hdr.dime.vox_offset = hdr.dime.vox_offset + esize_total;
-      end
-
-      hdr.hist.magic = 'n+1';
-      save_nii_hdr(hdr, fid);
-
-      if ~isempty(ext)
-         save_nii_ext(ext, fid);
-      end
-   else
-      fid = fopen(sprintf('%s.hdr',fileprefix),'w');
-      
-      if fid < 0,
-         msg = sprintf('Cannot open file %s.hdr.',fileprefix);
-         error(msg);
-      end
-      
-      hdr.dime.vox_offset = 0;
-      hdr.hist.magic = 'ni1';
-      save_nii_hdr(hdr, fid);
-
-      if ~isempty(ext)
-         save_nii_ext(ext, fid);
-      end
-      
-      fclose(fid);
-      fid = fopen(sprintf('%s.img',fileprefix),'w');
-   end
-
-   ScanDim = double(hdr.dime.dim(5));		% t
-   SliceDim = double(hdr.dime.dim(4));		% z
-   RowDim   = double(hdr.dime.dim(3));		% y
-   PixelDim = double(hdr.dime.dim(2));		% x
-   SliceSz  = double(hdr.dime.pixdim(4));
-   RowSz    = double(hdr.dime.pixdim(3));
-   PixelSz  = double(hdr.dime.pixdim(2));
-   
-   x = 1:PixelDim;
-
-   if filetype == 2 & isempty(ext)
-      skip_bytes = double(hdr.dime.vox_offset) - 348;
-   else
-      skip_bytes = 0;
-   end
-
-   if double(hdr.dime.datatype) == 128
-
-      %  RGB planes are expected to be in the 4th dimension of nii.img
-      %
-      if(size(nii.img,4)~=3)
-         error(['The NII structure does not appear to have 3 RGB color planes in the 4th dimension']);
-      end
-
-      if old_RGB
-         nii.img = permute(nii.img, [1 2 4 3 5 6 7 8]);
-      else
-         nii.img = permute(nii.img, [4 1 2 3 5 6 7 8]);
-      end
-   end
-
-   if double(hdr.dime.datatype) == 511
-
-      %  RGB planes are expected to be in the 4th dimension of nii.img
-      %
-      if(size(nii.img,4)~=3)
-         error(['The NII structure does not appear to have 3 RGB color planes in the 4th dimension']);
-      end
-
-      if old_RGB
-         nii.img = permute(nii.img, [1 2 4 3 5 6 7 8]);
-      else
-         nii.img = permute(nii.img, [4 1 2 3 5 6 7 8]);
-      end
-   end
-
-   %  For complex float32 or complex float64, voxel values
-   %  include [real, imag]
-   %
-   if hdr.dime.datatype == 32 | hdr.dime.datatype == 1792
-      real_img = real(nii.img(:))';
-      nii.img = imag(nii.img(:))';
-      nii.img = [real_img; nii.img];
-   end
-
-   if skip_bytes
-      fwrite(fid, zeros(1,skip_bytes), 'uint8');
-   end
-
-   fwrite(fid, nii.img, precision);
-%   fwrite(fid, nii.img, precision, skip_bytes);        % error using skip
-   fclose(fid);
-
-   return;					% write_nii
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/save_nii_ext.m b/reg-test/matlab_tests/NIfTI_20140122/save_nii_ext.m
deleted file mode 100644
index 5e1509c2..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/save_nii_ext.m
+++ /dev/null
@@ -1,38 +0,0 @@
-%  Save NIFTI header extension.
-%
-%  Usage: save_nii_ext(ext, fid)
-%
-%  ext - struct with NIFTI header extension fields.
-%
-%  NIFTI data format can be found on: http://nifti.nimh.nih.gov
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function save_nii_ext(ext, fid)
-
-   if ~exist('ext','var') | ~exist('fid','var')
-      error('Usage: save_nii_ext(ext, fid)');
-   end
-
-   if ~isfield(ext,'extension') | ~isfield(ext,'section') | ~isfield(ext,'num_ext')
-      error('Wrong header extension');
-   end
-
-   write_ext(ext, fid);
-
-   return;                                      % save_nii_ext
-
-
-%---------------------------------------------------------------------
-function write_ext(ext, fid)
-
-   fwrite(fid, ext.extension, 'uchar');
-
-   for i=1:ext.num_ext
-      fwrite(fid, ext.section(i).esize, 'int32');
-      fwrite(fid, ext.section(i).ecode, 'int32');
-      fwrite(fid, ext.section(i).edata, 'uchar');
-   end
-
-   return;                                      % write_ext
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/save_nii_hdr.m b/reg-test/matlab_tests/NIfTI_20140122/save_nii_hdr.m
deleted file mode 100644
index 225f297c..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/save_nii_hdr.m
+++ /dev/null
@@ -1,227 +0,0 @@
-%  internal function
-  
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-
-function save_nii_hdr(hdr, fid)
-   
-   if ~exist('hdr','var') | ~exist('fid','var')
-      error('Usage: save_nii_hdr(hdr, fid)');
-   end
-   
-   if ~isequal(hdr.hk.sizeof_hdr,348),
-      error('hdr.hk.sizeof_hdr must be 348.');
-   end
-   
-   if hdr.hist.qform_code == 0 & hdr.hist.sform_code == 0
-      hdr.hist.sform_code = 1;
-      hdr.hist.srow_x(1) = hdr.dime.pixdim(2);
-      hdr.hist.srow_x(2) = 0;
-      hdr.hist.srow_x(3) = 0;
-      hdr.hist.srow_y(1) = 0;
-      hdr.hist.srow_y(2) = hdr.dime.pixdim(3);
-      hdr.hist.srow_y(3) = 0;
-      hdr.hist.srow_z(1) = 0;
-      hdr.hist.srow_z(2) = 0;
-      hdr.hist.srow_z(3) = hdr.dime.pixdim(4);
-      hdr.hist.srow_x(4) = (1-hdr.hist.originator(1))*hdr.dime.pixdim(2);
-      hdr.hist.srow_y(4) = (1-hdr.hist.originator(2))*hdr.dime.pixdim(3);
-      hdr.hist.srow_z(4) = (1-hdr.hist.originator(3))*hdr.dime.pixdim(4);
-   end
-   
-   write_header(hdr, fid);
-
-   return;					% save_nii_hdr
-
-
-%---------------------------------------------------------------------
-function write_header(hdr, fid)
-
-        %  Original header structures
-	%  struct dsr				/* dsr = hdr */
-	%       { 
-	%       struct header_key hk;            /*   0 +  40       */
-	%       struct image_dimension dime;     /*  40 + 108       */
-	%       struct data_history hist;        /* 148 + 200       */
-	%       };                               /* total= 348 bytes*/
-   
-   header_key(fid, hdr.hk);
-   image_dimension(fid, hdr.dime);
-   data_history(fid, hdr.hist);
-   
-   %  check the file size is 348 bytes
-   %
-   fbytes = ftell(fid);
-   
-   if ~isequal(fbytes,348),
-      msg = sprintf('Header size is not 348 bytes.');
-      warning(msg);
-   end
-    
-   return;					% write_header
-
-
-%---------------------------------------------------------------------
-function header_key(fid, hk)
-   
-   fseek(fid,0,'bof');
-
-	%  Original header structures    
-	%  struct header_key                      /* header key      */ 
-	%       {                                /* off + size      */
-	%       int sizeof_hdr                   /*  0 +  4         */
-	%       char data_type[10];              /*  4 + 10         */
-	%       char db_name[18];                /* 14 + 18         */
-	%       int extents;                     /* 32 +  4         */
-	%       short int session_error;         /* 36 +  2         */
-	%       char regular;                    /* 38 +  1         */
-	%       char dim_info;   % char hkey_un0;        /* 39 +  1 */
-	%       };                               /* total=40 bytes  */
-        
-   fwrite(fid, hk.sizeof_hdr(1),    'int32');	% must be 348.
-    
-   % data_type = sprintf('%-10s',hk.data_type);	% ensure it is 10 chars from left
-   % fwrite(fid, data_type(1:10), 'uchar');
-   pad = zeros(1, 10-length(hk.data_type));
-   hk.data_type = [hk.data_type  char(pad)];
-   fwrite(fid, hk.data_type(1:10), 'uchar');
-    
-   % db_name   = sprintf('%-18s', hk.db_name);	% ensure it is 18 chars from left
-   % fwrite(fid, db_name(1:18), 'uchar');
-   pad = zeros(1, 18-length(hk.db_name));
-   hk.db_name = [hk.db_name  char(pad)];
-   fwrite(fid, hk.db_name(1:18), 'uchar');
-    
-   fwrite(fid, hk.extents(1),       'int32');
-   fwrite(fid, hk.session_error(1), 'int16');
-   fwrite(fid, hk.regular(1),       'uchar');	% might be uint8
-    
-   % fwrite(fid, hk.hkey_un0(1),    'uchar');
-   % fwrite(fid, hk.hkey_un0(1),    'uint8');
-   fwrite(fid, hk.dim_info(1),      'uchar');
-    
-   return;					% header_key
-
-
-%---------------------------------------------------------------------
-function image_dimension(fid, dime)
-
-	%  Original header structures        
-	%  struct image_dimension
-	%       {                                /* off + size      */
-	%       short int dim[8];                /* 0 + 16          */
-	%       float intent_p1;   % char vox_units[4];   /* 16 + 4       */
-	%       float intent_p2;   % char cal_units[8];   /* 20 + 4       */
-	%       float intent_p3;   % char cal_units[8];   /* 24 + 4       */
-	%       short int intent_code;   % short int unused1;   /* 28 + 2 */
-	%       short int datatype;              /* 30 + 2          */
-	%       short int bitpix;                /* 32 + 2          */
-	%       short int slice_start;   % short int dim_un0;   /* 34 + 2 */
-	%       float pixdim[8];                 /* 36 + 32         */
-	%			/*
-	%				pixdim[] specifies the voxel dimensions:
-	%				pixdim[1] - voxel width
-	%				pixdim[2] - voxel height
-	%				pixdim[3] - interslice distance
-	%				pixdim[4] - volume timing, in msec
-	%					..etc
-	%			*/
-	%       float vox_offset;                /* 68 + 4          */
-	%       float scl_slope;   % float roi_scale;     /* 72 + 4 */
-	%       float scl_inter;   % float funused1;      /* 76 + 4 */
-	%       short slice_end;   % float funused2;      /* 80 + 2 */
-	%       char slice_code;   % float funused2;      /* 82 + 1 */
-	%       char xyzt_units;   % float funused2;      /* 83 + 1 */
-	%       float cal_max;                   /* 84 + 4          */
-	%       float cal_min;                   /* 88 + 4          */
-	%       float slice_duration;   % int compressed; /* 92 + 4 */
-	%       float toffset;   % int verified;          /* 96 + 4 */
-	%       int glmax;                       /* 100 + 4         */
-	%       int glmin;                       /* 104 + 4         */
-	%       };                               /* total=108 bytes */
-	
-   fwrite(fid, dime.dim(1:8),        'int16');
-   fwrite(fid, dime.intent_p1(1),  'float32');
-   fwrite(fid, dime.intent_p2(1),  'float32');
-   fwrite(fid, dime.intent_p3(1),  'float32');
-   fwrite(fid, dime.intent_code(1),  'int16');
-   fwrite(fid, dime.datatype(1),     'int16');
-   fwrite(fid, dime.bitpix(1),       'int16');
-   fwrite(fid, dime.slice_start(1),  'int16');
-   fwrite(fid, dime.pixdim(1:8),   'float32');
-   fwrite(fid, dime.vox_offset(1), 'float32');
-   fwrite(fid, dime.scl_slope(1),  'float32');
-   fwrite(fid, dime.scl_inter(1),  'float32');
-   fwrite(fid, dime.slice_end(1),    'int16');
-   fwrite(fid, dime.slice_code(1),   'uchar');
-   fwrite(fid, dime.xyzt_units(1),   'uchar');
-   fwrite(fid, dime.cal_max(1),    'float32');
-   fwrite(fid, dime.cal_min(1),    'float32');
-   fwrite(fid, dime.slice_duration(1), 'float32');
-   fwrite(fid, dime.toffset(1),    'float32');
-   fwrite(fid, dime.glmax(1),        'int32');
-   fwrite(fid, dime.glmin(1),        'int32');
-   
-   return;					% image_dimension
-
-
-%---------------------------------------------------------------------
-function data_history(fid, hist)
-    
-	% Original header structures
-	%struct data_history       
-	%       {                                /* off + size      */
-	%       char descrip[80];                /* 0 + 80          */
-	%       char aux_file[24];               /* 80 + 24         */
-	%       short int qform_code;            /* 104 + 2         */
-	%       short int sform_code;            /* 106 + 2         */
-	%       float quatern_b;                 /* 108 + 4         */
-	%       float quatern_c;                 /* 112 + 4         */
-	%       float quatern_d;                 /* 116 + 4         */
-	%       float qoffset_x;                 /* 120 + 4         */
-	%       float qoffset_y;                 /* 124 + 4         */
-	%       float qoffset_z;                 /* 128 + 4         */
-	%       float srow_x[4];                 /* 132 + 16        */
-	%       float srow_y[4];                 /* 148 + 16        */
-	%       float srow_z[4];                 /* 164 + 16        */
-	%       char intent_name[16];            /* 180 + 16        */
-	%       char magic[4];   % int smin;     /* 196 + 4         */
-	%       };                               /* total=200 bytes */
-	
-   % descrip     = sprintf('%-80s', hist.descrip);     % 80 chars from left
-   % fwrite(fid, descrip(1:80),    'uchar');
-   pad = zeros(1, 80-length(hist.descrip));
-   hist.descrip = [hist.descrip  char(pad)];
-   fwrite(fid, hist.descrip(1:80), 'uchar');
-    
-   % aux_file    = sprintf('%-24s', hist.aux_file);    % 24 chars from left
-   % fwrite(fid, aux_file(1:24),   'uchar');
-   pad = zeros(1, 24-length(hist.aux_file));
-   hist.aux_file = [hist.aux_file  char(pad)];
-   fwrite(fid, hist.aux_file(1:24), 'uchar');
-    
-   fwrite(fid, hist.qform_code,    'int16');
-   fwrite(fid, hist.sform_code,    'int16');
-   fwrite(fid, hist.quatern_b,   'float32');
-   fwrite(fid, hist.quatern_c,   'float32');
-   fwrite(fid, hist.quatern_d,   'float32');
-   fwrite(fid, hist.qoffset_x,   'float32');
-   fwrite(fid, hist.qoffset_y,   'float32');
-   fwrite(fid, hist.qoffset_z,   'float32');
-   fwrite(fid, hist.srow_x(1:4), 'float32');
-   fwrite(fid, hist.srow_y(1:4), 'float32');
-   fwrite(fid, hist.srow_z(1:4), 'float32');
-
-   % intent_name = sprintf('%-16s', hist.intent_name);	% 16 chars from left
-   % fwrite(fid, intent_name(1:16),    'uchar');
-   pad = zeros(1, 16-length(hist.intent_name));
-   hist.intent_name = [hist.intent_name  char(pad)];
-   fwrite(fid, hist.intent_name(1:16), 'uchar');
-    
-   % magic	= sprintf('%-4s', hist.magic);		% 4 chars from left
-   % fwrite(fid, magic(1:4),           'uchar');
-   pad = zeros(1, 4-length(hist.magic));
-   hist.magic = [hist.magic  char(pad)];
-   fwrite(fid, hist.magic(1:4),        'uchar');
-    
-   return;					% data_history
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/save_untouch0_nii_hdr.m b/reg-test/matlab_tests/NIfTI_20140122/save_untouch0_nii_hdr.m
deleted file mode 100644
index ba1f3226..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/save_untouch0_nii_hdr.m
+++ /dev/null
@@ -1,219 +0,0 @@
-%  internal function
-
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-
-function save_nii_hdr(hdr, fid)
-
-   if ~isequal(hdr.hk.sizeof_hdr,348),
-      error('hdr.hk.sizeof_hdr must be 348.');
-   end
-
-   write_header(hdr, fid);
-
-   return;					% save_nii_hdr
-
-
-%---------------------------------------------------------------------
-function write_header(hdr, fid)
-
-        %  Original header structures
-	%  struct dsr				/* dsr = hdr */
-	%       { 
-	%       struct header_key hk;            /*   0 +  40       */
-	%       struct image_dimension dime;     /*  40 + 108       */
-	%       struct data_history hist;        /* 148 + 200       */
-	%       };                               /* total= 348 bytes*/
-   
-   header_key(fid, hdr.hk);
-   image_dimension(fid, hdr.dime);
-   data_history(fid, hdr.hist);
-   
-   %  check the file size is 348 bytes
-   %
-   fbytes = ftell(fid);
-   
-   if ~isequal(fbytes,348),
-      msg = sprintf('Header size is not 348 bytes.');
-      warning(msg);
-   end
-    
-   return;					% write_header
-
-
-%---------------------------------------------------------------------
-function header_key(fid, hk)
-   
-   fseek(fid,0,'bof');
-
-	%  Original header structures    
-	%  struct header_key                      /* header key      */ 
-	%       {                                /* off + size      */
-	%       int sizeof_hdr                   /*  0 +  4         */
-	%       char data_type[10];              /*  4 + 10         */
-	%       char db_name[18];                /* 14 + 18         */
-	%       int extents;                     /* 32 +  4         */
-	%       short int session_error;         /* 36 +  2         */
-	%       char regular;                    /* 38 +  1         */
-	%       char hkey_un0;                   /* 39 +  1 */
-	%       };                               /* total=40 bytes  */
-        
-   fwrite(fid, hk.sizeof_hdr(1),    'int32');	% must be 348.
-    
-   % data_type = sprintf('%-10s',hk.data_type);	% ensure it is 10 chars from left
-   % fwrite(fid, data_type(1:10), 'uchar');
-   pad = zeros(1, 10-length(hk.data_type));
-   hk.data_type = [hk.data_type  char(pad)];
-   fwrite(fid, hk.data_type(1:10), 'uchar');
-    
-   % db_name   = sprintf('%-18s', hk.db_name);	% ensure it is 18 chars from left
-   % fwrite(fid, db_name(1:18), 'uchar');
-   pad = zeros(1, 18-length(hk.db_name));
-   hk.db_name = [hk.db_name  char(pad)];
-   fwrite(fid, hk.db_name(1:18), 'uchar');
-
-   fwrite(fid, hk.extents(1),       'int32');
-   fwrite(fid, hk.session_error(1), 'int16');
-   fwrite(fid, hk.regular(1),       'uchar');
-
-   fwrite(fid, hk.hkey_un0(1),    'uchar');
-    
-   return;					% header_key
-
-
-%---------------------------------------------------------------------
-function image_dimension(fid, dime)
-
-	%struct image_dimension
-	%       {                                /* off + size      */
-	%       short int dim[8];                /* 0 + 16          */
-	%       char vox_units[4];               /* 16 + 4          */
-	%       char cal_units[8];               /* 20 + 8          */
-	%       short int unused1;               /* 28 + 2          */
-	%       short int datatype;              /* 30 + 2          */
-	%       short int bitpix;                /* 32 + 2          */
-	%       short int dim_un0;               /* 34 + 2          */
-	%       float pixdim[8];                 /* 36 + 32         */
-	%			/*
-	%				pixdim[] specifies the voxel dimensions:
-	%				pixdim[1] - voxel width
-	%				pixdim[2] - voxel height
-	%				pixdim[3] - interslice distance
-	%					..etc
-	%			*/
-	%       float vox_offset;                /* 68 + 4          */
-	%       float roi_scale;                 /* 72 + 4          */
-	%       float funused1;                  /* 76 + 4          */
-	%       float funused2;                  /* 80 + 4          */
-	%       float cal_max;                   /* 84 + 4          */
-	%       float cal_min;                   /* 88 + 4          */
-	%       int compressed;                  /* 92 + 4          */
-	%       int verified;                    /* 96 + 4          */
-	%       int glmax;                       /* 100 + 4         */
-	%       int glmin;                       /* 104 + 4         */
-	%       };                               /* total=108 bytes */
-	
-   fwrite(fid, dime.dim(1:8),      'int16');
-
-   pad = zeros(1, 4-length(dime.vox_units));
-   dime.vox_units = [dime.vox_units  char(pad)];
-   fwrite(fid, dime.vox_units(1:4),  'uchar');
-
-   pad = zeros(1, 8-length(dime.cal_units));
-   dime.cal_units = [dime.cal_units  char(pad)];
-   fwrite(fid, dime.cal_units(1:8),  'uchar');
-
-   fwrite(fid, dime.unused1(1),    'int16');
-   fwrite(fid, dime.datatype(1),   'int16');
-   fwrite(fid, dime.bitpix(1),     'int16');
-   fwrite(fid, dime.dim_un0(1),    'int16');
-   fwrite(fid, dime.pixdim(1:8),   'float32');
-   fwrite(fid, dime.vox_offset(1), 'float32');
-   fwrite(fid, dime.roi_scale(1),  'float32');
-   fwrite(fid, dime.funused1(1),   'float32');
-   fwrite(fid, dime.funused2(1),   'float32');
-   fwrite(fid, dime.cal_max(1),    'float32');
-   fwrite(fid, dime.cal_min(1),    'float32');
-   fwrite(fid, dime.compressed(1), 'int32');
-   fwrite(fid, dime.verified(1),   'int32');
-   fwrite(fid, dime.glmax(1),      'int32');
-   fwrite(fid, dime.glmin(1),      'int32');
-   
-   return;					% image_dimension
-
-
-%---------------------------------------------------------------------
-function data_history(fid, hist)
-    
-	% Original header structures - ANALYZE 7.5
-	%struct data_history       
-	%       {                                /* off + size      */
-	%       char descrip[80];                /* 0 + 80          */
-	%       char aux_file[24];               /* 80 + 24         */
-	%       char orient;                     /* 104 + 1         */
-	%       char originator[10];             /* 105 + 10        */
-	%       char generated[10];              /* 115 + 10        */
-	%       char scannum[10];                /* 125 + 10        */
-	%       char patient_id[10];             /* 135 + 10        */
-	%       char exp_date[10];               /* 145 + 10        */
-	%       char exp_time[10];               /* 155 + 10        */
-	%       char hist_un0[3];                /* 165 + 3         */
-	%       int views                        /* 168 + 4         */
-	%       int vols_added;                  /* 172 + 4         */
-	%       int start_field;                 /* 176 + 4         */
-	%       int field_skip;                  /* 180 + 4         */
-	%       int omax;                        /* 184 + 4         */
-	%       int omin;                        /* 188 + 4         */
-	%       int smax;                        /* 192 + 4         */
-	%       int smin;                        /* 196 + 4         */
-	%       };                               /* total=200 bytes */
-	
-   % descrip     = sprintf('%-80s', hist.descrip);     % 80 chars from left
-   % fwrite(fid, descrip(1:80),    'uchar');
-   pad = zeros(1, 80-length(hist.descrip));
-   hist.descrip = [hist.descrip  char(pad)];
-   fwrite(fid, hist.descrip(1:80), 'uchar');
-    
-   % aux_file    = sprintf('%-24s', hist.aux_file);    % 24 chars from left
-   % fwrite(fid, aux_file(1:24),   'uchar');
-   pad = zeros(1, 24-length(hist.aux_file));
-   hist.aux_file = [hist.aux_file  char(pad)];
-   fwrite(fid, hist.aux_file(1:24), 'uchar');
-
-   fwrite(fid, hist.orient(1),      'uchar');
-   fwrite(fid, hist.originator(1:5), 'int16');
-
-   pad = zeros(1, 10-length(hist.generated));
-   hist.generated = [hist.generated  char(pad)];
-   fwrite(fid, hist.generated(1:10),  'uchar');
-
-   pad = zeros(1, 10-length(hist.scannum));
-   hist.scannum = [hist.scannum  char(pad)];
-   fwrite(fid, hist.scannum(1:10),  'uchar');
-
-   pad = zeros(1, 10-length(hist.patient_id));
-   hist.patient_id = [hist.patient_id  char(pad)];
-   fwrite(fid, hist.patient_id(1:10),  'uchar');
-
-   pad = zeros(1, 10-length(hist.exp_date));
-   hist.exp_date = [hist.exp_date  char(pad)];
-   fwrite(fid, hist.exp_date(1:10),  'uchar');
-
-   pad = zeros(1, 10-length(hist.exp_time));
-   hist.exp_time = [hist.exp_time  char(pad)];
-   fwrite(fid, hist.exp_time(1:10),  'uchar');
-
-   pad = zeros(1, 3-length(hist.hist_un0));
-   hist.hist_un0 = [hist.hist_un0  char(pad)];
-   fwrite(fid, hist.hist_un0(1:3),  'uchar');
-
-   fwrite(fid, hist.views(1),      'int32');
-   fwrite(fid, hist.vols_added(1), 'int32');
-   fwrite(fid, hist.start_field(1),'int32');
-   fwrite(fid, hist.field_skip(1), 'int32');
-   fwrite(fid, hist.omax(1),       'int32');
-   fwrite(fid, hist.omin(1),       'int32');
-   fwrite(fid, hist.smax(1),       'int32');
-   fwrite(fid, hist.smin(1),       'int32');
-    
-   return;					% data_history
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/save_untouch_header_only.m b/reg-test/matlab_tests/NIfTI_20140122/save_untouch_header_only.m
deleted file mode 100644
index b1450582..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/save_untouch_header_only.m
+++ /dev/null
@@ -1,71 +0,0 @@
-%  This function is only used to save Analyze or NIfTI header that is
-%  ended with .hdr and loaded by load_untouch_header_only.m. If you 
-%  have NIfTI file that is ended with .nii and you want to change its
-%  header only, you can use load_untouch_nii / save_untouch_nii pair.
-%  
-%  Usage: save_untouch_header_only(hdr, new_header_file_name)
-%  
-%  hdr - struct with NIfTI / Analyze header fields, which is obtained from:
-%        hdr = load_untouch_header_only(original_header_file_name)
-%  
-%  new_header_file_name - NIfTI / Analyze header name ended with .hdr.
-%        You can either copy original.img(.gz) to new.img(.gz) manually,
-%        or simply input original.hdr(.gz) in save_untouch_header_only.m
-%        to overwrite the original header.
-%  
-%  - Jimmy Shen (jshen@research.baycrest.org)
-%
-function save_untouch_header_only(hdr, filename)
-
-   if ~exist('hdr','var') | isempty(hdr) | ~exist('filename','var') | isempty(filename)
-      error('Usage: save_untouch_header_only(hdr, filename)');
-   end
-
-   v = version;
-
-   %  Check file extension. If .gz, unpack it into temp folder
-   %
-   if length(filename) > 2 & strcmp(filename(end-2:end), '.gz')
-
-      if ~strcmp(filename(end-6:end), '.hdr.gz')
-         error('Please check filename.');
-      end
-
-      if str2num(v(1:3)) < 7.1 | ~usejava('jvm')
-         error('Please use MATLAB 7.1 (with java) and above, or run gunzip outside MATLAB.');
-      else
-         gzFile = 1;
-         filename = filename(1:end-3);
-      end
-   end
-
-   [p,f] = fileparts(filename);
-   fileprefix = fullfile(p, f);
-
-   write_hdr(hdr, fileprefix);
-
-   %  gzip output file if requested
-   %
-   if exist('gzFile', 'var')
-      gzip([fileprefix, '.hdr']);
-      delete([fileprefix, '.hdr']);
-   end;
-
-   return					% save_untouch_header_only
-
-
-%-----------------------------------------------------------------------------------
-function write_hdr(hdr, fileprefix)
-
-   fid = fopen(sprintf('%s.hdr',fileprefix),'w');
-
-   if isfield(hdr.hist,'magic')
-      save_untouch_nii_hdr(hdr, fid);
-   else
-      save_untouch0_nii_hdr(hdr, fid);
-   end
-
-   fclose(fid);
-
-   return					% write_hdr
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/save_untouch_nii.m b/reg-test/matlab_tests/NIfTI_20140122/save_untouch_nii.m
deleted file mode 100644
index 80021721..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/save_untouch_nii.m
+++ /dev/null
@@ -1,232 +0,0 @@
-%  Save NIFTI or ANALYZE dataset that is loaded by "load_untouch_nii.m".
-%  The output image format and file extension will be the same as the
-%  input one (NIFTI.nii, NIFTI.img or ANALYZE.img). Therefore, any file
-%  extension that you specified will be ignored.
-%
-%  Usage: save_untouch_nii(nii, filename)
-%  
-%  nii - nii structure that is loaded by "load_untouch_nii.m"
-%
-%  filename  - 	NIFTI or ANALYZE file name.
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function save_untouch_nii(nii, filename)
-   
-   if ~exist('nii','var') | isempty(nii) | ~isfield(nii,'hdr') | ...
-	~isfield(nii,'img') | ~exist('filename','var') | isempty(filename)
-
-      error('Usage: save_untouch_nii(nii, filename)');
-   end
-
-   if ~isfield(nii,'untouch') | nii.untouch == 0
-      error('Usage: please use ''save_nii.m'' for the modified structure.');
-   end
-
-   if isfield(nii.hdr.hist,'magic') & strcmp(nii.hdr.hist.magic(1:3),'ni1')
-      filetype = 1;
-   elseif isfield(nii.hdr.hist,'magic') & strcmp(nii.hdr.hist.magic(1:3),'n+1')
-      filetype = 2;
-   else
-      filetype = 0;
-   end
-
-   v = version;
-
-   %  Check file extension. If .gz, unpack it into temp folder
-   %
-   if length(filename) > 2 & strcmp(filename(end-2:end), '.gz')
-
-      if ~strcmp(filename(end-6:end), '.img.gz') & ...
-	 ~strcmp(filename(end-6:end), '.hdr.gz') & ...
-	 ~strcmp(filename(end-6:end), '.nii.gz')
-
-         error('Please check filename.');
-      end
-
-      if str2num(v(1:3)) < 7.1 | ~usejava('jvm')
-         error('Please use MATLAB 7.1 (with java) and above, or run gunzip outside MATLAB.');
-      else
-         gzFile = 1;
-         filename = filename(1:end-3);
-      end
-   end
-
-   [p,f] = fileparts(filename);
-   fileprefix = fullfile(p, f);
-
-   write_nii(nii, filetype, fileprefix);
-
-   %  gzip output file if requested
-   %
-   if exist('gzFile', 'var')
-      if filetype == 1
-         gzip([fileprefix, '.img']);
-         delete([fileprefix, '.img']);
-         gzip([fileprefix, '.hdr']);
-         delete([fileprefix, '.hdr']);
-      elseif filetype == 2
-         gzip([fileprefix, '.nii']);
-         delete([fileprefix, '.nii']);
-      end;
-   end;
-
-%   %  So earlier versions of SPM can also open it with correct originator
- %  %
-  % if filetype == 0
-   %   M=[[diag(nii.hdr.dime.pixdim(2:4)) -[nii.hdr.hist.originator(1:3).*nii.hdr.dime.pixdim(2:4)]'];[0 0 0 1]];
-    %  save(fileprefix, 'M');
-%   elseif filetype == 1
- %     M=[];
-  %    save(fileprefix, 'M');
-   %end
-   
-   return					% save_untouch_nii
-
-
-%-----------------------------------------------------------------------------------
-function write_nii(nii, filetype, fileprefix)
-
-   hdr = nii.hdr;
-
-   if isfield(nii,'ext') & ~isempty(nii.ext)
-      ext = nii.ext;
-      [ext, esize_total] = verify_nii_ext(ext);
-   else
-      ext = [];
-   end
-
-   switch double(hdr.dime.datatype),
-   case   1,
-      hdr.dime.bitpix = int16(1 ); precision = 'ubit1';
-   case   2,
-      hdr.dime.bitpix = int16(8 ); precision = 'uint8';
-   case   4,
-      hdr.dime.bitpix = int16(16); precision = 'int16';
-   case   8,
-      hdr.dime.bitpix = int16(32); precision = 'int32';
-   case  16,
-      hdr.dime.bitpix = int16(32); precision = 'float32';
-   case  32,
-      hdr.dime.bitpix = int16(64); precision = 'float32';
-   case  64,
-      hdr.dime.bitpix = int16(64); precision = 'float64';
-   case 128,
-      hdr.dime.bitpix = int16(24); precision = 'uint8';
-   case 256 
-      hdr.dime.bitpix = int16(8 ); precision = 'int8';
-   case 512 
-      hdr.dime.bitpix = int16(16); precision = 'uint16';
-   case 768 
-      hdr.dime.bitpix = int16(32); precision = 'uint32';
-   case 1024
-      hdr.dime.bitpix = int16(64); precision = 'int64';
-   case 1280
-      hdr.dime.bitpix = int16(64); precision = 'uint64';
-   case 1792,
-      hdr.dime.bitpix = int16(128); precision = 'float64';
-   otherwise
-      error('This datatype is not supported');
-   end
-   
-%   hdr.dime.glmax = round(double(max(nii.img(:))));
- %  hdr.dime.glmin = round(double(min(nii.img(:))));
-   
-   if filetype == 2
-      fid = fopen(sprintf('%s.nii',fileprefix),'w');
-      
-      if fid < 0,
-         msg = sprintf('Cannot open file %s.nii.',fileprefix);
-         error(msg);
-      end
-      
-      hdr.dime.vox_offset = 352;
-
-      if ~isempty(ext)
-         hdr.dime.vox_offset = hdr.dime.vox_offset + esize_total;
-      end
-
-      hdr.hist.magic = 'n+1';
-      save_untouch_nii_hdr(hdr, fid);
-
-      if ~isempty(ext)
-         save_nii_ext(ext, fid);
-      end
-   elseif filetype == 1
-      fid = fopen(sprintf('%s.hdr',fileprefix),'w');
-      
-      if fid < 0,
-         msg = sprintf('Cannot open file %s.hdr.',fileprefix);
-         error(msg);
-      end
-      
-      hdr.dime.vox_offset = 0;
-      hdr.hist.magic = 'ni1';
-      save_untouch_nii_hdr(hdr, fid);
-
-      if ~isempty(ext)
-         save_nii_ext(ext, fid);
-      end
-      
-      fclose(fid);
-      fid = fopen(sprintf('%s.img',fileprefix),'w');
-   else
-      fid = fopen(sprintf('%s.hdr',fileprefix),'w');
-      
-      if fid < 0,
-         msg = sprintf('Cannot open file %s.hdr.',fileprefix);
-         error(msg);
-      end
-      
-      save_untouch0_nii_hdr(hdr, fid);
-      
-      fclose(fid);
-      fid = fopen(sprintf('%s.img',fileprefix),'w');
-   end
-
-   ScanDim = double(hdr.dime.dim(5));		% t
-   SliceDim = double(hdr.dime.dim(4));		% z
-   RowDim   = double(hdr.dime.dim(3));		% y
-   PixelDim = double(hdr.dime.dim(2));		% x
-   SliceSz  = double(hdr.dime.pixdim(4));
-   RowSz    = double(hdr.dime.pixdim(3));
-   PixelSz  = double(hdr.dime.pixdim(2));
-   
-   x = 1:PixelDim;
-   
-   if filetype == 2 & isempty(ext)
-      skip_bytes = double(hdr.dime.vox_offset) - 348;
-   else
-      skip_bytes = 0;
-   end
-
-   if double(hdr.dime.datatype) == 128
-
-      %  RGB planes are expected to be in the 4th dimension of nii.img
-      %
-      if(size(nii.img,4)~=3)
-         error(['The NII structure does not appear to have 3 RGB color planes in the 4th dimension']);
-      end
-
-      nii.img = permute(nii.img, [4 1 2 3 5 6 7 8]);
-   end
-
-   %  For complex float32 or complex float64, voxel values
-   %  include [real, imag]
-   %
-   if hdr.dime.datatype == 32 | hdr.dime.datatype == 1792
-      real_img = real(nii.img(:))';
-      nii.img = imag(nii.img(:))';
-      nii.img = [real_img; nii.img];
-   end
-
-   if skip_bytes
-      fwrite(fid, zeros(1,skip_bytes), 'uint8');
-   end
-
-   fwrite(fid, nii.img, precision);
-%   fwrite(fid, nii.img, precision, skip_bytes);        % error using skip
-   fclose(fid);
-
-   return;					% write_nii
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/save_untouch_nii_hdr.m b/reg-test/matlab_tests/NIfTI_20140122/save_untouch_nii_hdr.m
deleted file mode 100644
index 33fa9eda..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/save_untouch_nii_hdr.m
+++ /dev/null
@@ -1,207 +0,0 @@
-%  internal function
-
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-
-function save_nii_hdr(hdr, fid)
-
-   if ~isequal(hdr.hk.sizeof_hdr,348),
-      error('hdr.hk.sizeof_hdr must be 348.');
-   end
-
-   write_header(hdr, fid);
-
-   return;					% save_nii_hdr
-
-
-%---------------------------------------------------------------------
-function write_header(hdr, fid)
-
-        %  Original header structures
-	%  struct dsr				/* dsr = hdr */
-	%       { 
-	%       struct header_key hk;            /*   0 +  40       */
-	%       struct image_dimension dime;     /*  40 + 108       */
-	%       struct data_history hist;        /* 148 + 200       */
-	%       };                               /* total= 348 bytes*/
-   
-   header_key(fid, hdr.hk);
-   image_dimension(fid, hdr.dime);
-   data_history(fid, hdr.hist);
-   
-   %  check the file size is 348 bytes
-   %
-   fbytes = ftell(fid);
-   
-   if ~isequal(fbytes,348),
-      msg = sprintf('Header size is not 348 bytes.');
-      warning(msg);
-   end
-    
-   return;					% write_header
-
-
-%---------------------------------------------------------------------
-function header_key(fid, hk)
-   
-   fseek(fid,0,'bof');
-
-	%  Original header structures    
-	%  struct header_key                      /* header key      */ 
-	%       {                                /* off + size      */
-	%       int sizeof_hdr                   /*  0 +  4         */
-	%       char data_type[10];              /*  4 + 10         */
-	%       char db_name[18];                /* 14 + 18         */
-	%       int extents;                     /* 32 +  4         */
-	%       short int session_error;         /* 36 +  2         */
-	%       char regular;                    /* 38 +  1         */
-	%       char dim_info;   % char hkey_un0;        /* 39 +  1 */
-	%       };                               /* total=40 bytes  */
-        
-   fwrite(fid, hk.sizeof_hdr(1),    'int32');	% must be 348.
-    
-   % data_type = sprintf('%-10s',hk.data_type);	% ensure it is 10 chars from left
-   % fwrite(fid, data_type(1:10), 'uchar');
-   pad = zeros(1, 10-length(hk.data_type));
-   hk.data_type = [hk.data_type  char(pad)];
-   fwrite(fid, hk.data_type(1:10), 'uchar');
-    
-   % db_name   = sprintf('%-18s', hk.db_name);	% ensure it is 18 chars from left
-   % fwrite(fid, db_name(1:18), 'uchar');
-   pad = zeros(1, 18-length(hk.db_name));
-   hk.db_name = [hk.db_name  char(pad)];
-   fwrite(fid, hk.db_name(1:18), 'uchar');
-    
-   fwrite(fid, hk.extents(1),       'int32');
-   fwrite(fid, hk.session_error(1), 'int16');
-   fwrite(fid, hk.regular(1),       'uchar');	% might be uint8
-    
-   % fwrite(fid, hk.hkey_un0(1),    'uchar');
-   % fwrite(fid, hk.hkey_un0(1),    'uint8');
-   fwrite(fid, hk.dim_info(1),      'uchar');
-    
-   return;					% header_key
-
-
-%---------------------------------------------------------------------
-function image_dimension(fid, dime)
-
-	%  Original header structures        
-	%  struct image_dimension
-	%       {                                /* off + size      */
-	%       short int dim[8];                /* 0 + 16          */
-	%       float intent_p1;   % char vox_units[4];   /* 16 + 4       */
-	%       float intent_p2;   % char cal_units[8];   /* 20 + 4       */
-	%       float intent_p3;   % char cal_units[8];   /* 24 + 4       */
-	%       short int intent_code;   % short int unused1;   /* 28 + 2 */
-	%       short int datatype;              /* 30 + 2          */
-	%       short int bitpix;                /* 32 + 2          */
-	%       short int slice_start;   % short int dim_un0;   /* 34 + 2 */
-	%       float pixdim[8];                 /* 36 + 32         */
-	%			/*
-	%				pixdim[] specifies the voxel dimensions:
-	%				pixdim[1] - voxel width
-	%				pixdim[2] - voxel height
-	%				pixdim[3] - interslice distance
-	%				pixdim[4] - volume timing, in msec
-	%					..etc
-	%			*/
-	%       float vox_offset;                /* 68 + 4          */
-	%       float scl_slope;   % float roi_scale;     /* 72 + 4 */
-	%       float scl_inter;   % float funused1;      /* 76 + 4 */
-	%       short slice_end;   % float funused2;      /* 80 + 2 */
-	%       char slice_code;   % float funused2;      /* 82 + 1 */
-	%       char xyzt_units;   % float funused2;      /* 83 + 1 */
-	%       float cal_max;                   /* 84 + 4          */
-	%       float cal_min;                   /* 88 + 4          */
-	%       float slice_duration;   % int compressed; /* 92 + 4 */
-	%       float toffset;   % int verified;          /* 96 + 4 */
-	%       int glmax;                       /* 100 + 4         */
-	%       int glmin;                       /* 104 + 4         */
-	%       };                               /* total=108 bytes */
-	
-   fwrite(fid, dime.dim(1:8),        'int16');
-   fwrite(fid, dime.intent_p1(1),  'float32');
-   fwrite(fid, dime.intent_p2(1),  'float32');
-   fwrite(fid, dime.intent_p3(1),  'float32');
-   fwrite(fid, dime.intent_code(1),  'int16');
-   fwrite(fid, dime.datatype(1),     'int16');
-   fwrite(fid, dime.bitpix(1),       'int16');
-   fwrite(fid, dime.slice_start(1),  'int16');
-   fwrite(fid, dime.pixdim(1:8),   'float32');
-   fwrite(fid, dime.vox_offset(1), 'float32');
-   fwrite(fid, dime.scl_slope(1),  'float32');
-   fwrite(fid, dime.scl_inter(1),  'float32');
-   fwrite(fid, dime.slice_end(1),    'int16');
-   fwrite(fid, dime.slice_code(1),   'uchar');
-   fwrite(fid, dime.xyzt_units(1),   'uchar');
-   fwrite(fid, dime.cal_max(1),    'float32');
-   fwrite(fid, dime.cal_min(1),    'float32');
-   fwrite(fid, dime.slice_duration(1), 'float32');
-   fwrite(fid, dime.toffset(1),    'float32');
-   fwrite(fid, dime.glmax(1),        'int32');
-   fwrite(fid, dime.glmin(1),        'int32');
-   
-   return;					% image_dimension
-
-
-%---------------------------------------------------------------------
-function data_history(fid, hist)
-    
-	% Original header structures
-	%struct data_history       
-	%       {                                /* off + size      */
-	%       char descrip[80];                /* 0 + 80          */
-	%       char aux_file[24];               /* 80 + 24         */
-	%       short int qform_code;            /* 104 + 2         */
-	%       short int sform_code;            /* 106 + 2         */
-	%       float quatern_b;                 /* 108 + 4         */
-	%       float quatern_c;                 /* 112 + 4         */
-	%       float quatern_d;                 /* 116 + 4         */
-	%       float qoffset_x;                 /* 120 + 4         */
-	%       float qoffset_y;                 /* 124 + 4         */
-	%       float qoffset_z;                 /* 128 + 4         */
-	%       float srow_x[4];                 /* 132 + 16        */
-	%       float srow_y[4];                 /* 148 + 16        */
-	%       float srow_z[4];                 /* 164 + 16        */
-	%       char intent_name[16];            /* 180 + 16        */
-	%       char magic[4];   % int smin;     /* 196 + 4         */
-	%       };                               /* total=200 bytes */
-	
-   % descrip     = sprintf('%-80s', hist.descrip);     % 80 chars from left
-   % fwrite(fid, descrip(1:80),    'uchar');
-   pad = zeros(1, 80-length(hist.descrip));
-   hist.descrip = [hist.descrip  char(pad)];
-   fwrite(fid, hist.descrip(1:80), 'uchar');
-    
-   % aux_file    = sprintf('%-24s', hist.aux_file);    % 24 chars from left
-   % fwrite(fid, aux_file(1:24),   'uchar');
-   pad = zeros(1, 24-length(hist.aux_file));
-   hist.aux_file = [hist.aux_file  char(pad)];
-   fwrite(fid, hist.aux_file(1:24), 'uchar');
-    
-   fwrite(fid, hist.qform_code,    'int16');
-   fwrite(fid, hist.sform_code,    'int16');
-   fwrite(fid, hist.quatern_b,   'float32');
-   fwrite(fid, hist.quatern_c,   'float32');
-   fwrite(fid, hist.quatern_d,   'float32');
-   fwrite(fid, hist.qoffset_x,   'float32');
-   fwrite(fid, hist.qoffset_y,   'float32');
-   fwrite(fid, hist.qoffset_z,   'float32');
-   fwrite(fid, hist.srow_x(1:4), 'float32');
-   fwrite(fid, hist.srow_y(1:4), 'float32');
-   fwrite(fid, hist.srow_z(1:4), 'float32');
-
-   % intent_name = sprintf('%-16s', hist.intent_name);	% 16 chars from left
-   % fwrite(fid, intent_name(1:16),    'uchar');
-   pad = zeros(1, 16-length(hist.intent_name));
-   hist.intent_name = [hist.intent_name  char(pad)];
-   fwrite(fid, hist.intent_name(1:16), 'uchar');
-    
-   % magic	= sprintf('%-4s', hist.magic);		% 4 chars from left
-   % fwrite(fid, magic(1:4),           'uchar');
-   pad = zeros(1, 4-length(hist.magic));
-   hist.magic = [hist.magic  char(pad)];
-   fwrite(fid, hist.magic(1:4),        'uchar');
-    
-   return;					% data_history
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/save_untouch_slice.m b/reg-test/matlab_tests/NIfTI_20140122/save_untouch_slice.m
deleted file mode 100644
index af73521a..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/save_untouch_slice.m
+++ /dev/null
@@ -1,580 +0,0 @@
-%  Save back to the original image with a portion of slices that was
-%  loaded by "load_untouch_nii". You can process those slices matrix
-%  in any way, as long as their dimension is not altered.
-%
-%  Usage: save_untouch_slice(slice, filename, ...
-%		slice_idx, [img_idx], [dim5_idx], [dim6_idx], [dim7_idx])
-%
-%  slice  -  a portion of slices that was loaded by "load_untouch_nii".
-%	This should be a numeric matrix (i.e. only the .img field in the
-%	loaded structure)
-%
-%  filename  - 	NIfTI or ANALYZE file name.
-%
-%  slice_idx (depending on slice size)  -  a numerical array of image
-%	slice indices, which should be the same as that you entered
-%	in "load_untouch_nii" command.
-%
-%  img_idx (depending on slice size)  -  a numerical array of image
-%	volume indices, which should be the same as that you entered
-%	in "load_untouch_nii" command.
-%
-%  dim5_idx (depending on slice size)  -  a numerical array of 5th 
-%	dimension indices, which should be the same as that you entered
-%	in "load_untouch_nii" command.
-%
-%  dim6_idx (depending on slice size)  -  a numerical array of 6th 
-%	dimension indices, which should be the same as that you entered
-%	in "load_untouch_nii" command.
-%
-%  dim7_idx (depending on slice size)  -  a numerical array of 7th 
-%	dimension indices, which should be the same as that you entered
-%	in "load_untouch_nii" command.
-%
-%  Example:
-%	nii = load_nii('avg152T1_LR_nifti.nii');
-%	save_nii(nii, 'test.nii');
-%	view_nii(nii);
-%	nii = load_untouch_nii('test.nii','','','','','',[40 51:53]);
-%	nii.img = ones(91,109,4)*122;
-%	save_untouch_slice(nii.img, 'test.nii', [40 51:52]);
-%	nii = load_nii('test.nii');
-%	view_nii(nii);
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function save_untouch_slice(slice, filename, slice_idx, img_idx, dim5_idx, dim6_idx, dim7_idx)
-
-   if ~exist('slice','var') | ~isnumeric(slice)
-      msg = [char(10) '"slice" argument should be a portion of slices that was loaded' char(10)];
-      msg = [msg 'by "load_untouch_nii.m". This should be a numeric matrix (i.e.' char(10)];
-      msg = [msg 'only the .img field in the loaded structure).'];
-      error(msg);
-   end
-
-   if ~exist('filename','var') | ~exist(filename,'file')
-      error('In order to save back, original NIfTI or ANALYZE file must exist.');
-   end
-
-   if ~exist('slice_idx','var') | isempty(slice_idx) | ~isequal(size(slice,3),length(slice_idx))
-      msg = [char(10) '"slice_idx" is a numerical array of image slice indices, which' char(10)];
-      msg = [msg 'should be the same as that you entered in "load_untouch_nii.m"' char(10)];
-      msg = [msg 'command.'];
-      error(msg);
-   end
-
-   if ~exist('img_idx','var') | isempty(img_idx)
-      img_idx = [];
-
-      if ~isequal(size(slice,4),1)
-         msg = [char(10) '"img_idx" is a numerical array of image volume indices, which' char(10)];
-         msg = [msg 'should be the same as that you entered in "load_untouch_nii.m"' char(10)];
-         msg = [msg 'command.'];
-         error(msg);
-      end
-   elseif ~isequal(size(slice,4),length(img_idx))
-      msg = [char(10) '"img_idx" is a numerical array of image volume indices, which' char(10)];
-      msg = [msg 'should be the same as that you entered in "load_untouch_nii.m"' char(10)];
-      msg = [msg 'command.'];
-      error(msg);
-   end
-
-   if ~exist('dim5_idx','var') | isempty(dim5_idx)
-      dim5_idx = [];
-
-      if ~isequal(size(slice,5),1)
-         msg = [char(10) '"dim5_idx" is a numerical array of 5th dimension indices, which' char(10)];
-         msg = [msg 'should be the same as that you entered in "load_untouch_nii.m"' char(10)];
-         msg = [msg 'command.'];
-         error(msg);
-      end
-   elseif ~isequal(size(slice,5),length(img_idx))
-      msg = [char(10) '"img_idx" is a numerical array of 5th dimension indices, which' char(10)];
-      msg = [msg 'should be the same as that you entered in "load_untouch_nii.m"' char(10)];
-      msg = [msg 'command.'];
-      error(msg);
-   end
-
-   if ~exist('dim6_idx','var') | isempty(dim6_idx)
-      dim6_idx = [];
-
-      if ~isequal(size(slice,6),1)
-         msg = [char(10) '"dim6_idx" is a numerical array of 6th dimension indices, which' char(10)];
-         msg = [msg 'should be the same as that you entered in "load_untouch_nii.m"' char(10)];
-         msg = [msg 'command.'];
-         error(msg);
-      end
-   elseif ~isequal(size(slice,6),length(img_idx))
-      msg = [char(10) '"img_idx" is a numerical array of 6th dimension indices, which' char(10)];
-      msg = [msg 'should be the same as that you entered in "load_untouch_nii.m"' char(10)];
-      msg = [msg 'command.'];
-      error(msg);
-   end
-
-   if ~exist('dim7_idx','var') | isempty(dim7_idx)
-      dim7_idx = [];
-
-      if ~isequal(size(slice,7),1)
-         msg = [char(10) '"dim7_idx" is a numerical array of 7th dimension indices, which' char(10)];
-         msg = [msg 'should be the same as that you entered in "load_untouch_nii.m"' char(10)];
-         msg = [msg 'command.'];
-         error(msg);
-      end
-   elseif ~isequal(size(slice,7),length(img_idx))
-      msg = [char(10) '"img_idx" is a numerical array of 7th dimension indices, which' char(10)];
-      msg = [msg 'should be the same as that you entered in "load_untouch_nii.m"' char(10)];
-      msg = [msg 'command.'];
-      error(msg);
-   end
-
-
-   v = version;
-
-   %  Check file extension. If .gz, unpack it into temp folder
-   %
-   if length(filename) > 2 & strcmp(filename(end-2:end), '.gz')
-
-      if ~strcmp(filename(end-6:end), '.img.gz') & ...
-         ~strcmp(filename(end-6:end), '.hdr.gz') & ...
-         ~strcmp(filename(end-6:end), '.nii.gz')
-
-         error('Please check filename.');
-      end
-
-      if str2num(v(1:3)) < 7.1 | ~usejava('jvm')
-         error('Please use MATLAB 7.1 (with java) and above, or run gunzip outside MATLAB.');
-      elseif strcmp(filename(end-6:end), '.img.gz')
-         filename1 = filename;
-         filename2 = filename;
-         filename2(end-6:end) = '';
-         filename2 = [filename2, '.hdr.gz'];
-
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-
-         filename1 = gunzip(filename1, tmpDir);
-         filename2 = gunzip(filename2, tmpDir);
-         filename = char(filename1);    % convert from cell to string
-      elseif strcmp(filename(end-6:end), '.hdr.gz')
-         filename1 = filename;
-         filename2 = filename;
-         filename2(end-6:end) = '';
-         filename2 = [filename2, '.img.gz'];
-
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-
-         filename1 = gunzip(filename1, tmpDir);
-         filename2 = gunzip(filename2, tmpDir);
-         filename = char(filename1);    % convert from cell to string
-      elseif strcmp(filename(end-6:end), '.nii.gz')
-         tmpDir = tempname;
-         mkdir(tmpDir);
-         gzFileName = filename;
-         filename = gunzip(filename, tmpDir);
-         filename = char(filename);     % convert from cell to string
-      end
-   end
-
-   %  Read the dataset header
-   %
-   [nii.hdr,nii.filetype,nii.fileprefix,nii.machine] = load_nii_hdr(filename);
-
-   if nii.filetype == 0
-      nii.hdr = load_untouch0_nii_hdr(nii.fileprefix,nii.machine);
-   else
-      nii.hdr = load_untouch_nii_hdr(nii.fileprefix,nii.machine,nii.filetype);
-   end
-
-
-   %  Clean up after gunzip
-   %
-   if exist('gzFileName', 'var')
-
-      %  fix fileprefix so it doesn't point to temp location
-      %
-      nii.fileprefix = gzFileName(1:end-7);
-%      rmdir(tmpDir,'s');
-   end
-
-   [p,f] = fileparts(filename);
-   fileprefix = fullfile(p, f);
-%   fileprefix = nii.fileprefix;
-   filetype = nii.filetype;
-
-   if ~isequal( nii.hdr.dime.dim(2:3), [size(slice,1),size(slice,2)] )
-      msg = [char(10) 'The first two dimensions of slice matrix should be the same as' char(10)];
-      msg = [msg 'the first two dimensions of image loaded by "load_untouch_nii".'];
-      error(msg);
-   end
-
-
-   %  Save the dataset body
-   %
-   save_untouch_slice_img(slice, nii.hdr, filetype, fileprefix, ...
-	nii.machine, slice_idx,img_idx,dim5_idx,dim6_idx,dim7_idx);
-
-   %  gzip output file if requested
-   %
-   if exist('gzFileName', 'var')
-      [p,f] = fileparts(gzFileName);
-
-      if filetype == 1
-         gzip([fileprefix, '.img']);
-         delete([fileprefix, '.img']);
-         movefile([fileprefix, '.img.gz']);
-         gzip([fileprefix, '.hdr']);
-         delete([fileprefix, '.hdr']);
-         movefile([fileprefix, '.hdr.gz']);
-      elseif filetype == 2
-         gzip([fileprefix, '.nii']);
-         delete([fileprefix, '.nii']);
-         movefile([fileprefix, '.nii.gz']);
-      end;
-
-      rmdir(tmpDir,'s');
-   end;
-
-   return					% save_untouch_slice
-
-
-%--------------------------------------------------------------------------
-function save_untouch_slice_img(slice,hdr,filetype,fileprefix,machine,slice_idx,img_idx,dim5_idx,dim6_idx,dim7_idx)
-
-   if ~exist('hdr','var') | ~exist('filetype','var') | ~exist('fileprefix','var') | ~exist('machine','var')
-      error('Usage: save_untouch_slice_img(slice,hdr,filetype,fileprefix,machine,slice_idx,[img_idx],[dim5_idx],[dim6_idx],[dim7_idx]);');
-   end
-
-   if ~exist('slice_idx','var') | isempty(slice_idx) | hdr.dime.dim(4)<1
-      slice_idx = [];
-   end
-
-   if ~exist('img_idx','var') | isempty(img_idx) | hdr.dime.dim(5)<1
-      img_idx = [];
-   end
-
-   if ~exist('dim5_idx','var') | isempty(dim5_idx) | hdr.dime.dim(6)<1
-      dim5_idx = [];
-   end
-
-   if ~exist('dim6_idx','var') | isempty(dim6_idx) | hdr.dime.dim(7)<1
-      dim6_idx = [];
-   end
-
-   if ~exist('dim7_idx','var') | isempty(dim7_idx) | hdr.dime.dim(8)<1
-      dim7_idx = [];
-   end
-
-   %  check img_idx
-   %
-   if ~isempty(img_idx) & ~isnumeric(img_idx)
-      error('"img_idx" should be a numerical array.');
-   end
-
-   if length(unique(img_idx)) ~= length(img_idx)
-      error('Duplicate image index in "img_idx"');
-   end
-
-   if ~isempty(img_idx) & (min(img_idx) < 1 | max(img_idx) > hdr.dime.dim(5))
-      max_range = hdr.dime.dim(5);
-
-      if max_range == 1
-         error(['"img_idx" should be 1.']);
-      else
-         range = ['1 ' num2str(max_range)];
-         error(['"img_idx" should be an integer within the range of [' range '].']);
-      end
-   end
-
-   %  check dim5_idx
-   %
-   if ~isempty(dim5_idx) & ~isnumeric(dim5_idx)
-      error('"dim5_idx" should be a numerical array.');
-   end
-
-   if length(unique(dim5_idx)) ~= length(dim5_idx)
-      error('Duplicate index in "dim5_idx"');
-   end
-
-   if ~isempty(dim5_idx) & (min(dim5_idx) < 1 | max(dim5_idx) > hdr.dime.dim(6))
-      max_range = hdr.dime.dim(6);
-
-      if max_range == 1
-         error(['"dim5_idx" should be 1.']);
-      else
-         range = ['1 ' num2str(max_range)];
-         error(['"dim5_idx" should be an integer within the range of [' range '].']);
-      end
-   end
-
-   %  check dim6_idx
-   %
-   if ~isempty(dim6_idx) & ~isnumeric(dim6_idx)
-      error('"dim6_idx" should be a numerical array.');
-   end
-
-   if length(unique(dim6_idx)) ~= length(dim6_idx)
-      error('Duplicate index in "dim6_idx"');
-   end
-
-   if ~isempty(dim6_idx) & (min(dim6_idx) < 1 | max(dim6_idx) > hdr.dime.dim(7))
-      max_range = hdr.dime.dim(7);
-
-      if max_range == 1
-         error(['"dim6_idx" should be 1.']);
-      else
-         range = ['1 ' num2str(max_range)];
-         error(['"dim6_idx" should be an integer within the range of [' range '].']);
-      end
-   end
-
-   %  check dim7_idx
-   %
-   if ~isempty(dim7_idx) & ~isnumeric(dim7_idx)
-      error('"dim7_idx" should be a numerical array.');
-   end
-
-   if length(unique(dim7_idx)) ~= length(dim7_idx)
-      error('Duplicate index in "dim7_idx"');
-   end
-
-   if ~isempty(dim7_idx) & (min(dim7_idx) < 1 | max(dim7_idx) > hdr.dime.dim(8))
-      max_range = hdr.dime.dim(8);
-
-      if max_range == 1
-         error(['"dim7_idx" should be 1.']);
-      else
-         range = ['1 ' num2str(max_range)];
-         error(['"dim7_idx" should be an integer within the range of [' range '].']);
-      end
-   end
-
-   %  check slice_idx
-   %
-   if ~isempty(slice_idx) & ~isnumeric(slice_idx)
-      error('"slice_idx" should be a numerical array.');
-   end
-
-   if length(unique(slice_idx)) ~= length(slice_idx)
-      error('Duplicate index in "slice_idx"');
-   end
-
-   if ~isempty(slice_idx) & (min(slice_idx) < 1 | max(slice_idx) > hdr.dime.dim(4))
-      max_range = hdr.dime.dim(4);
-
-      if max_range == 1
-         error(['"slice_idx" should be 1.']);
-      else
-         range = ['1 ' num2str(max_range)];
-         error(['"slice_idx" should be an integer within the range of [' range '].']);
-      end
-   end
-
-   write_image(slice,hdr,filetype,fileprefix,machine,slice_idx,img_idx,dim5_idx,dim6_idx,dim7_idx);
-
-   return					% save_untouch_slice_img
-
-
-%---------------------------------------------------------------------
-function write_image(slice,hdr,filetype,fileprefix,machine,slice_idx,img_idx,dim5_idx,dim6_idx,dim7_idx)
-
-   if filetype == 2
-      fid = fopen(sprintf('%s.nii',fileprefix),'r+');
-
-      if fid < 0,
-         msg = sprintf('Cannot open file %s.nii.',fileprefix);
-         error(msg);
-      end
-   else
-      fid = fopen(sprintf('%s.img',fileprefix),'r+');
-
-      if fid < 0,
-         msg = sprintf('Cannot open file %s.img.',fileprefix);
-         error(msg);
-      end
-   end
-
-   %  Set bitpix according to datatype
-   %
-   %  /*Acceptable values for datatype are*/ 
-   %
-   %     0 None                     (Unknown bit per voxel) % DT_NONE, DT_UNKNOWN 
-   %     1 Binary                         (ubit1, bitpix=1) % DT_BINARY 
-   %     2 Unsigned char         (uchar or uint8, bitpix=8) % DT_UINT8, NIFTI_TYPE_UINT8 
-   %     4 Signed short                  (int16, bitpix=16) % DT_INT16, NIFTI_TYPE_INT16 
-   %     8 Signed integer                (int32, bitpix=32) % DT_INT32, NIFTI_TYPE_INT32 
-   %    16 Floating point    (single or float32, bitpix=32) % DT_FLOAT32, NIFTI_TYPE_FLOAT32 
-   %    32 Complex, 2 float32      (Use float32, bitpix=64) % DT_COMPLEX64, NIFTI_TYPE_COMPLEX64
-   %    64 Double precision  (double or float64, bitpix=64) % DT_FLOAT64, NIFTI_TYPE_FLOAT64 
-   %   128 uint8 RGB                 (Use uint8, bitpix=24) % DT_RGB24, NIFTI_TYPE_RGB24 
-   %   256 Signed char            (schar or int8, bitpix=8) % DT_INT8, NIFTI_TYPE_INT8 
-   %   511 Single RGB              (Use float32, bitpix=96) % DT_RGB96, NIFTI_TYPE_RGB96
-   %   512 Unsigned short               (uint16, bitpix=16) % DT_UNINT16, NIFTI_TYPE_UNINT16 
-   %   768 Unsigned integer             (uint32, bitpix=32) % DT_UNINT32, NIFTI_TYPE_UNINT32 
-   %  1024 Signed long long              (int64, bitpix=64) % DT_INT64, NIFTI_TYPE_INT64
-   %  1280 Unsigned long long           (uint64, bitpix=64) % DT_UINT64, NIFTI_TYPE_UINT64 
-   %  1536 Long double, float128  (Unsupported, bitpix=128) % DT_FLOAT128, NIFTI_TYPE_FLOAT128 
-   %  1792 Complex128, 2 float64  (Use float64, bitpix=128) % DT_COMPLEX128, NIFTI_TYPE_COMPLEX128 
-   %  2048 Complex256, 2 float128 (Unsupported, bitpix=256) % DT_COMPLEX128, NIFTI_TYPE_COMPLEX128 
-   %
-   switch hdr.dime.datatype
-   case   2,
-      hdr.dime.bitpix = 8;  precision = 'uint8';
-   case   4,
-      hdr.dime.bitpix = 16; precision = 'int16';
-   case   8,
-      hdr.dime.bitpix = 32; precision = 'int32';
-   case  16,
-      hdr.dime.bitpix = 32; precision = 'float32';
-   case  64,
-      hdr.dime.bitpix = 64; precision = 'float64';
-   case 128,
-      hdr.dime.bitpix = 24; precision = 'uint8';
-   case 256 
-      hdr.dime.bitpix = 8;  precision = 'int8';
-   case 511 
-      hdr.dime.bitpix = 96; precision = 'float32';
-   case 512 
-      hdr.dime.bitpix = 16; precision = 'uint16';
-   case 768 
-      hdr.dime.bitpix = 32; precision = 'uint32';
-   case 1024
-      hdr.dime.bitpix = 64; precision = 'int64';
-   case 1280
-      hdr.dime.bitpix = 64; precision = 'uint64';
-   otherwise
-      error('This datatype is not supported'); 
-   end
-
-   hdr.dime.dim(find(hdr.dime.dim < 1)) = 1;
-
-   %  move pointer to the start of image block
-   %
-   switch filetype
-   case {0, 1}
-      fseek(fid, 0, 'bof');
-   case 2
-      fseek(fid, hdr.dime.vox_offset, 'bof');
-   end
-
-   if hdr.dime.datatype == 1 | isequal(hdr.dime.dim(4:8),ones(1,5)) | ...
-	(isempty(img_idx) & isempty(dim5_idx) & isempty(dim6_idx) & isempty(dim7_idx) & isempty(slice_idx))
-
-      msg = [char(10) char(10) '   "save_untouch_slice" is used to save back to the original image a' char(10)];
-      msg = [msg '   portion of slices that were loaded by "load_untouch_nii". You can' char(10)];
-      msg = [msg '   process those slices matrix in any way, as long as their dimension' char(10)];
-      msg = [msg '   is not changed.'];
-      error(msg);
-   else
-
-      d1 = hdr.dime.dim(2);
-      d2 = hdr.dime.dim(3);
-      d3 = hdr.dime.dim(4);
-      d4 = hdr.dime.dim(5);
-      d5 = hdr.dime.dim(6);
-      d6 = hdr.dime.dim(7);
-      d7 = hdr.dime.dim(8);
-
-      if isempty(slice_idx)
-         slice_idx = 1:d3;
-      end
-
-      if isempty(img_idx)
-         img_idx = 1:d4;
-      end
-
-      if isempty(dim5_idx)
-         dim5_idx = 1:d5;
-      end
-
-      if isempty(dim6_idx)
-         dim6_idx = 1:d6;
-      end
-
-      if isempty(dim7_idx)
-         dim7_idx = 1:d7;
-      end
-      
-      %ROMAN: begin
-      roman = 1;
-      if(roman)
-
-         %  compute size of one slice
-         %
-         img_siz = prod(hdr.dime.dim(2:3));
-
-         %  For complex float32 or complex float64, voxel values
-         %  include [real, imag]
-         %
-         if hdr.dime.datatype == 32 | hdr.dime.datatype == 1792
-            img_siz = img_siz * 2;
-         end
-
-         %MPH: For RGB24, voxel values include 3 separate color planes
-         %
-         if hdr.dime.datatype == 128 | hdr.dime.datatype == 511
-            img_siz = img_siz * 3;
-         end
-
-      end; %if(roman)
-      % ROMAN: end
-
-      for i7=1:length(dim7_idx)
-         for i6=1:length(dim6_idx)
-            for i5=1:length(dim5_idx)
-               for t=1:length(img_idx)
-               for s=1:length(slice_idx)
-
-                  %  Position is seeked in bytes. To convert dimension size
-                  %  to byte storage size, hdr.dime.bitpix/8 will be
-                  %  applied.
-                  %
-                  pos = sub2ind([d1 d2 d3 d4 d5 d6 d7], 1, 1, slice_idx(s), ...
-			                    img_idx(t), dim5_idx(i5),dim6_idx(i6),dim7_idx(i7)) -1;
-                  pos = pos * hdr.dime.bitpix/8;
-
-                  % ROMAN: begin
-                  if(roman)
-                      % do nothing
-                  else
-                     img_siz = prod(hdr.dime.dim(2:3));
-
-                     %  For complex float32 or complex float64, voxel values
-                     %  include [real, imag]
-                     %
-                     if hdr.dime.datatype == 32 | hdr.dime.datatype == 1792
-                        img_siz = img_siz * 2;
-                     end
-
-                     %MPH: For RGB24, voxel values include 3 separate color planes
-                     %
-                     if hdr.dime.datatype == 128 | hdr.dime.datatype == 511
-                        img_siz = img_siz * 3;
-                     end
-                  end; % if (roman)
-                  % ROMAN: end
-         
-                  if filetype == 2
-                     fseek(fid, pos + hdr.dime.vox_offset, 'bof');
-                  else
-                     fseek(fid, pos, 'bof');
-                  end
-
-                  %  For each frame, fwrite will write precision of value
-                  %  in img_siz times
-                  %
-                  fwrite(fid, slice(:,:,s,t,i5,i6,i7), sprintf('*%s',precision));
-                  
-               end
-               end
-            end
-         end
-      end
-   end
-
-   fclose(fid);
-
-   return						% write_image
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/unxform_nii.m b/reg-test/matlab_tests/NIfTI_20140122/unxform_nii.m
deleted file mode 100644
index f98ef32f..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/unxform_nii.m
+++ /dev/null
@@ -1,40 +0,0 @@
-%  Undo the flipping and rotations performed by xform_nii; spit back only
-%  the raw img data block. Initial cut will only deal with 3D volumes
-%  strongly assume we have called xform_nii to write down the steps used 
-%  in xform_nii.
-%
-%  Usage:  a = load_nii('original_name');
-%          manipulate a.img to make array b;
-%
-%          if you use unxform_nii to un-tranform the image (img) data
-%          block, then nii.original.hdr is the corresponding header.
-%
-%          nii.original.img = unxform_nii(a, b);
-%          save_nii(nii.original,'newname');
-%
-%  Where, 'newname' is created with data in the same space as the
-%         original_name data    
-%
-%  - Jeff Gunter, 26-JUN-06
-%
-function outblock = unxform_nii(nii, inblock)
-  
-   if isempty(nii.hdr.hist.rot_orient)     
-      outblock=inblock;
-   else
-      [dummy unrotate_orient] = sort(nii.hdr.hist.rot_orient);
-      outblock = permute(inblock, unrotate_orient);
-   end
-
-   if ~isempty(nii.hdr.hist.flip_orient)
-      flip_orient = nii.hdr.hist.flip_orient(unrotate_orient);
-
-      for i = 1:3
-         if flip_orient(i)
-            outblock = flipdim(outblock, i);
-         end
-      end
-   end;
-
-   return;
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/verify_nii_ext.m b/reg-test/matlab_tests/NIfTI_20140122/verify_nii_ext.m
deleted file mode 100644
index c904df41..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/verify_nii_ext.m
+++ /dev/null
@@ -1,45 +0,0 @@
-%  Verify NIFTI header extension to make sure that each extension section
-%  must be an integer multiple of 16 byte long that includes the first 8
-%  bytes of esize and ecode. If the length of extension section is not the
-%  above mentioned case, edata should be padded with all 0.
-%
-%  Usage: [ext, esize_total] = verify_nii_ext(ext)
-%
-%  ext - Structure of NIFTI header extension, which includes num_ext,
-%       and all the extended header sections in the header extension.
-%       Each extended header section will have its esize, ecode, and
-%       edata, where edata can be plain text, xml, or any raw data
-%       that was saved in the extended header section.
-%
-%  esize_total - Sum of all esize variable in all header sections.
-%
-%  NIFTI data format can be found on: http://nifti.nimh.nih.gov
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function [ext, esize_total] = verify_nii_ext(ext)
-
-   if ~isfield(ext, 'section')
-      error('Incorrect NIFTI header extension structure.');
-   elseif ~isfield(ext, 'num_ext')
-      ext.num_ext = length(ext.section);
-   elseif ~isfield(ext, 'extension')
-      ext.extension = [1 0 0 0];
-   end
-
-   esize_total = 0;
-
-   for i=1:ext.num_ext
-      if ~isfield(ext.section(i), 'ecode') | ~isfield(ext.section(i), 'edata')
-         error('Incorrect NIFTI header extension structure.');
-      end
-
-      ext.section(i).esize = ceil((length(ext.section(i).edata)+8)/16)*16;
-      ext.section(i).edata = ...
-	[ext.section(i).edata ...
-	 zeros(1,ext.section(i).esize-length(ext.section(i).edata)-8)];
-      esize_total = esize_total + ext.section(i).esize;
-   end
-
-   return                                       % verify_nii_ext
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/view_nii.m b/reg-test/matlab_tests/NIfTI_20140122/view_nii.m
deleted file mode 100644
index 45e26b59..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/view_nii.m
+++ /dev/null
@@ -1,4873 +0,0 @@
-%  VIEW_NII: Create or update a 3-View (Front, Top, Side) of the 
-%	brain data that is specified by nii structure
-%
-%  Usage:  	status = view_nii([h], nii, [option])	or
-%		status = view_nii(h, [option])
-%
-%  Where, h is the figure on which the 3-View will be plotted;
-%	nii is the brain data in NIFTI format;
-%	option is a struct that configures the view plotted, can be:
-%
-%		option.command = 'init'
-%		option.command = 'update'
-%		option.command = 'clearnii'
-%		option.command = 'updatenii'
-%		option.command = 'updateimg' (nii is nii.img here)
-%
-%		option.usecolorbar = 0 | [1]
-%		option.usepanel = 0 | [1]
-%		option.usecrosshair = 0 | [1]
-%		option.usestretch = 0 | [1]
-%		option.useimagesc = 0 | [1]
-%		option.useinterp = [0] | 1
-%
-%		option.setarea = [x y w h] | [0.05 0.05 0.9 0.9]
-%		option.setunit = ['vox'] | 'mm'
-%		option.setviewpoint = [x y z] | [origin]
-%		option.setscanid = [t] | [1]
-%		option.setcrosshaircolor = [r g b] | [1 0 0]
-%		option.setcolorindex = From 1 to 9 (default is 2 or 3)
-%		option.setcolormap = (Mx3 matrix, 0 <= val <= 1)
-%		option.setcolorlevel = No more than 256 (default 256)
-%		option.sethighcolor = []
-%		option.setcbarminmax = []
-%		option.setvalue = []
-%		option.glblocminmax = []
-%		option.setbuttondown = ''
-%		option.setcomplex = [0] | 1 | 2
-%
-%	Options description in detail:
-%	==============================
-%
-%	1. command: A char string that can control program.
-%
-%		init: If option.command='init', the program will display
-%			a 3-View plot on the figure specified by figure h
-%			or on a new figure. If there is already a 3-View
-%			plot on the figure, please use option.command = 
-%			'updatenii' (see detail below); otherwise, the
-%			new 3-View plot will superimpose on the old one.
-%			If there is no option provided, the program will
-%			assume that this is an initial plot. If the figure
-%			handle is omitted, the program knows that it is
-%			an initial plot.
-%
-%		update: If there is no command specified, and a figure
-%			handle of the existing 3-View plot is provided,
-%			the program will choose option.command='update'
-%			to update the 3-View plot with some new option 
-%			items.
-%
-%		clearnii: Clear 3-View plot on specific figure
-%
-%		updatenii: If a new nii is going to be loaded on a fig
-%			that has already 3-View plot on it, use this
-%			command to clear existing 3-View plot, and then
-%			display with new nii. So, the new nii will not
-%			superimpose on the existing one. All options
-%			for 'init' can be used for 'updatenii'.
-%
-%		updateimg: If a new 3D matrix with the same dimension
-%			is going to be loaded, option.command='updateimg'
-%			can be used as a light-weighted 'updatenii, since
-%			it only updates the 3 slices with new values.
-%			inputing argument nii should be a 3D matrix
-%			(nii.img) instead of nii struct. No other option
-%			should be used together with 'updateimg' to keep
-%			this command as simple as possible.
-%
-%
-%	2. usecolorbar: If specified and usecolorbar=0, the program
-%		will not include the colorbar in plot area; otherwise,
-%		a colorbar will be included in plot area.
-%
-%	3. usepanel: If specified and usepanel=0, the control panel
-%		at lower right cornor will be invisible; otherwise,
-%		it will be visible.
-%
-%	4. usecrosshair: If specified and usecrosshair=0, the crosshair
-%		will be invisible; otherwise, it will be visible.
-%
-%	5. usestretch: If specified and usestretch=0, the 3 slices will
-%		not be stretched, and will be displayed according to
-%		the actual voxel size; otherwise, the 3 slices will be 
-%		stretched to the edge.
-%
-%	6. useimagesc: If specified and useimagesc=0, images data will
-%		be used directly to match the colormap (like 'image'
-%		command); otherwise, image data will be scaled to full
-%		colormap with 'imagesc' command in Matlab.
-%
-%	7. useinterp: If specified and useinterp=1, the image will be
-%		displayed using interpolation. Otherwise, it will be
-%		displayed like mosaic, and each tile stands for a
-%		pixel. This option does not apply to 'setvalue' option
-%		is set.
-%
-%
-%	8. setarea: 3-View plot will be displayed on this specific 
-%		region. If it is not specified, program will set the
-%		plot area to [0.05 0.05 0.9 0.9].
-%
-%	9. setunit: It can be specified to setunit='voxel' or 'mm'
-%		and the view will change the axes unit of [X Y Z]
-%		accordingly.
-%
-%	10. setviewpoint: If specified, [X Y Z] values will be used
-%		to set the viewpoint of 3-View plot.
-%
-%	11. setscanid: If specified, [t] value will be used to display
-%		the specified image scan in NIFTI data.
-%
-%	12. setcrosshaircolor: If specified, [r g b] value will be used
-%		for Crosshair Color. Otherwise, red will be the default.
-%
-%	13. setcolorindex: If specified, the 3-View will choose the
-%		following colormap:  2 - Bipolar; 3 - Gray; 4 - Jet;
-%		5 - Cool; 6 - Bone; 7 - Hot; 8 - Copper; 9 - Pink;
-%		If not specified, it will choose 3 - Gray if all data
-%		values are not less than 0; otherwise, it will choose
-%		2 - Bipolar if there is value less than 0. (Contrast
-%		control can only apply to 3 - Gray colormap.
-%
-%	14. setcolormap: 3-View plot will use it as a customized colormap.
-%		It is a 3-column matrix with value between 0 and 1. If
-%		using MS-Windows version of Matlab, the number of rows
-%		can not be more than 256, because of Matlab limitation.
-%		When colormap is used, setcolorlevel option will be
-%		disabled automatically.
-%
-%	15. setcolorlevel: If specified (must be no more than 256, and
-%		cannot be used for customized colormap), row number of
-%		colormap will be squeezed down to this level; otherwise,
-%		it will assume that setcolorlevel=256.
-%
-%	16. sethighcolor: If specified, program will squeeze down the
-%		colormap, and allocate sethighcolor (an Mx3 matrix)
-%		to high-end portion of the colormap. The sum of M and
-%		setcolorlevel should be less than 256. If setcolormap
-%		option is used, sethighcolor will be inserted on top 
-%		of the setcolormap, and the setcolorlevel option will
-%		be disabled automatically.
-%
-%	17. setcbarminmax: if specified, the [min max] will be used to
-%		set the min and max of the colorbar, which does not
-%		include any data for highcolor.
-%
-%	18. setvalue: If specified, setvalue.val (with the same size as
-%		the source data on solution points) in the source area
-%		setvalue.idx will be superimposed on the current nii 
-%		image. So, the size of setvalue.val should be equal to
-%		the size of setvalue.idx. To use this feature, it needs
-%		single or double nii structure for background image.
-%
-%	19. glblocminmax: If specified, pgm will use glblocminmax to
-%		calculate the colormap, instead of minmax of image.
-%
-%	20. setbuttondown: If specified, pgm will evaluate the command
-%		after a click or slide action is invoked to the new
-%		view point.
-%
-%	21. setcomplex: This option will decide how complex data to be
-%		displayed:  0 - Real part of complex data; 1 - Imaginary
-%		part of complex data; 2 - Modulus (magnitude) of complex
-%		data;  If not specified, it will be set to 0 (Real part
-%		of complex data as default option. This option only apply
-%		when option.command is set to 'init or 'updatenii'.
-%
-%
-%	Additional Options for 'update' command:
-%	=======================================
-%
-%		option.enablecursormove = [1] | 0
-%		option.enableviewpoint = 0 | [1]
-%		option.enableorigin = 0 | [1]
-%		option.enableunit = 0 | [1]
-%		option.enablecrosshair = 0 | [1]
-%		option.enablehistogram = 0 | [1]
-%		option.enablecolormap = 0 | [1]
-%		option.enablecontrast = 0 | [1]
-%		option.enablebrightness = 0 | [1]
-%		option.enableslider = 0 | [1]
-%		option.enabledirlabel = 0 | [1]
-%
-%
-%  e.g.:
-%	nii = load_nii('T1');		% T1.img/hdr
-%	view_nii(nii);
-%
-%	or
-%
-%	h = figure('unit','normal','pos', [0.18 0.08 0.64 0.85]);
-%	opt.setarea = [0.05 0.05 0.9 0.9];
-%	view_nii(h, nii, opt);
-%
-%
-%  Part of this file is copied and modified from:
-%  http://www.mathworks.com/matlabcentral/fileexchange/1878-mri-analyze-tools
-%
-%  NIFTI data format can be found on: http://nifti.nimh.nih.gov
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function status = view_nii(varargin)
-
-   if nargin < 1
-      error('Please check inputs using ''help view_nii''');
-   end;
-
-   nii = '';
-   opt = '';
-   command = '';
-
-   usecolorbar = [];
-   usepanel = [];
-   usecrosshair = '';
-   usestretch = [];
-   useimagesc = [];
-   useinterp = [];
-
-   setarea = [];
-   setunit = '';
-   setviewpoint = [];
-   setscanid = [];
-   setcrosshaircolor = [];
-   setcolorindex = '';
-   setcolormap = 'NA';
-   setcolorlevel = [];
-   sethighcolor = 'NA';
-   setcbarminmax = [];
-   setvalue = [];
-   glblocminmax = [];
-   setbuttondown = '';
-   setcomplex = 0;
-
-   status = [];
-
-   if ishandle(varargin{1})		% plot on top of this figure
-
-      fig = varargin{1};
-
-      if nargin < 2
-         command = 'update';		% just to get 3-View status
-      end
-
-      if nargin == 2
-         if ~isstruct(varargin{2})
-            error('2nd parameter should be either nii struct or option struct');
-         end
-
-         opt = varargin{2};
-
-         if isfield(opt,'hdr') & isfield(opt,'img')
-            nii = opt;
-         elseif isfield(opt, 'command') & (strcmpi(opt.command,'init') ...
-		| strcmpi(opt.command,'updatenii') ...
-		| strcmpi(opt.command,'updateimg') )
-
-            error('Option here cannot contain "init", "updatenii", or "updateimg" comand');
-         end
-      end
-
-      if nargin == 3
-         nii = varargin{2};
-         opt = varargin{3};
-
-         if ~isstruct(opt)
-            error('3rd parameter should be option struct');
-         end
-
-         if ~isfield(opt,'command') | ~strcmpi(opt.command,'updateimg')
-            if ~isstruct(nii) | ~isfield(nii,'hdr') | ~isfield(nii,'img')
-               error('2nd parameter should be nii struct');
-            end
-
-            if isfield(nii,'untouch') & nii.untouch == 1
-               error('Usage: please use ''load_nii.m'' to load the structure.');
-            end
-         end
-      end
-
-      set(fig, 'menubar', 'none');
-
-   elseif ischar(varargin{1})		% call back by event
-
-      command = lower(varargin{1});
-      fig = gcbf;
-
-   else					% start nii with a new figure
-
-      nii = varargin{1};
-
-      if ~isstruct(nii) | ~isfield(nii,'hdr') | ~isfield(nii,'img')
-         error('1st parameter should be either a figure handle or nii struct');
-      end
-
-      if isfield(nii,'untouch') & nii.untouch == 1
-         error('Usage: please use ''load_nii.m'' to load the structure.');
-      end
-
-      if nargin > 1
-         opt = varargin{2};
-
-         if isfield(opt, 'command') & ~strcmpi(opt.command,'init')
-            error('Option here must use "init" comand');
-         end
-      end
-
-      command = 'init';
-      fig = figure('unit','normal','position',[0.15 0.08 0.70 0.85]);
-      view_nii_menu(fig);
-      rri_file_menu(fig);
-
-   end
-
-   if ~isempty(opt)
-
-      if isfield(opt,'command')
-         command = lower(opt.command);
-      end
-
-      if isempty(command)
-         command = 'update';
-      end
-
-      if isfield(opt,'usecolorbar')
-         usecolorbar = opt.usecolorbar;
-      end
-
-      if isfield(opt,'usepanel')
-         usepanel = opt.usepanel;
-      end
-
-      if isfield(opt,'usecrosshair')
-         usecrosshair = opt.usecrosshair;
-      end
-
-      if isfield(opt,'usestretch')
-         usestretch = opt.usestretch;
-      end
-
-      if isfield(opt,'useimagesc')
-         useimagesc = opt.useimagesc;
-      end
-
-      if isfield(opt,'useinterp')
-         useinterp = opt.useinterp;
-      end
-
-      if isfield(opt,'setarea')
-         setarea = opt.setarea;
-      end
-
-      if isfield(opt,'setunit')
-         setunit = opt.setunit;
-      end
-
-      if isfield(opt,'setviewpoint')
-         setviewpoint = opt.setviewpoint;
-      end
-
-      if isfield(opt,'setscanid')
-         setscanid = opt.setscanid;
-      end
-
-      if isfield(opt,'setcrosshaircolor')
-         setcrosshaircolor = opt.setcrosshaircolor;
-
-         if ~isempty(setcrosshaircolor) & (~isnumeric(setcrosshaircolor) | ~isequal(size(setcrosshaircolor),[1 3]) | min(setcrosshaircolor(:))<0 | max(setcrosshaircolor(:))>1)
-            error('Crosshair Color should be a 1x3 matrix with value between 0 and 1');
-         end
-      end
-
-      if isfield(opt,'setcolorindex')
-         setcolorindex = round(opt.setcolorindex);
-
-         if ~isnumeric(setcolorindex) | setcolorindex < 1 | setcolorindex > 9
-            error('Colorindex should be a number between 1 and 9');
-         end
-      end
-
-      if isfield(opt,'setcolormap')
-         setcolormap = opt.setcolormap;
-
-         if ~isempty(setcolormap) & (~isnumeric(setcolormap) | size(setcolormap,2) ~= 3 | min(setcolormap(:))<0 | max(setcolormap(:))>1)
-            error('Colormap should be a Mx3 matrix with value between 0 and 1');
-         end
-      end
-
-      if isfield(opt,'setcolorlevel')
-         setcolorlevel = round(opt.setcolorlevel);
-
-         if ~isnumeric(setcolorlevel) | setcolorlevel > 256 | setcolorlevel < 1
-            error('Colorlevel should be a number between 1 and 256');
-         end
-      end
-
-      if isfield(opt,'sethighcolor')
-         sethighcolor = opt.sethighcolor;
-
-         if ~isempty(sethighcolor) & (~isnumeric(sethighcolor) | size(sethighcolor,2) ~= 3 | min(sethighcolor(:))<0 | max(sethighcolor(:))>1)
-            error('Highcolor should be a Mx3 matrix with value between 0 and 1');
-         end
-      end
-
-      if isfield(opt,'setcbarminmax')
-         setcbarminmax = opt.setcbarminmax;
-
-         if isempty(setcbarminmax) | ~isnumeric(setcbarminmax) | length(setcbarminmax) ~= 2
-            error('Colorbar MinMax should contain 2 values: [min max]');
-         end
-      end
-
-      if isfield(opt,'setvalue')
-         setvalue = opt.setvalue;
-
-         if isempty(setvalue) | ~isstruct(setvalue) | ...
-		~isfield(opt.setvalue,'idx') | ~isfield(opt.setvalue,'val')
-            error('setvalue should be a struct contains idx and val');
-         end
-
-         if length(opt.setvalue.idx(:)) ~= length(opt.setvalue.val(:))
-            error('length of idx and val fields should be the same');
-         end
-
-         if ~strcmpi(class(opt.setvalue.idx),'single')
-            opt.setvalue.idx = single(opt.setvalue.idx);
-         end
-
-         if ~strcmpi(class(opt.setvalue.val),'single')
-            opt.setvalue.val = single(opt.setvalue.val);
-         end
-      end
-
-      if isfield(opt,'glblocminmax')
-         glblocminmax = opt.glblocminmax;
-      end
-
-      if isfield(opt,'setbuttondown')
-         setbuttondown = opt.setbuttondown;
-      end
-
-      if isfield(opt,'setcomplex')
-         setcomplex = opt.setcomplex;
-      end
-
-   end
-
-   switch command
-
-   case {'init'}
-
-      set(fig, 'InvertHardcopy','off');
-      set(fig, 'PaperPositionMode','auto');
-
-      fig = init(nii, fig, setarea, setunit, setviewpoint, setscanid, setbuttondown, ...
-         setcolorindex, setcolormap, setcolorlevel, sethighcolor, setcbarminmax, ...
-         usecolorbar, usepanel, usecrosshair, usestretch, useimagesc, useinterp, ...
-         setvalue, glblocminmax, setcrosshaircolor, setcomplex);
-
-      %  get status
-      %
-      status = get_status(fig);
-
-   case {'update'}
-
-      nii_view = getappdata(fig,'nii_view');
-      h = fig;
-
-      if isempty(nii_view)
-         error('The figure should already contain a 3-View plot.');
-      end
-
-      if ~isempty(opt)
-
-         %  Order of the following update matters.
-         %
-         update_shape(h, setarea, usecolorbar, usestretch, useimagesc);
-         update_useinterp(h, useinterp);
-         update_useimagesc(h, useimagesc);
-         update_usepanel(h, usepanel);
-         update_colorindex(h, setcolorindex);
-         update_colormap(h, setcolormap);
-         update_highcolor(h, sethighcolor, setcolorlevel);
-         update_cbarminmax(h, setcbarminmax);
-         update_unit(h, setunit);
-         update_viewpoint(h, setviewpoint);
-         update_scanid(h, setscanid);
-         update_buttondown(h, setbuttondown);
-         update_crosshaircolor(h, setcrosshaircolor);
-         update_usecrosshair(h, usecrosshair);
-
-         %  Enable/Disable object
-         %
-         update_enable(h, opt);
-
-      end
-
-      %  get status
-      %
-      status = get_status(h);
-
-   case {'updateimg'}
-
-      if ~exist('nii','var')
-         msg = sprintf('Please input a 3D matrix brain data');
-         error(msg);
-      end
-
-      %  Note: nii is not nii, nii should be a 3D matrix here
-      %
-      if ~isnumeric(nii)
-         msg = sprintf('2nd parameter should be a 3D matrix, not nii struct');
-         error(msg);
-      end
-
-      nii_view = getappdata(fig,'nii_view');
-
-      if isempty(nii_view)
-         error('The figure should already contain a 3-View plot.');
-      end
-
-      img = nii;
-      update_img(img, fig, opt);
-
-      %  get status
-      %
-      status = get_status(fig);
-
-   case {'updatenii'}
-
-      nii_view = getappdata(fig,'nii_view');
-
-      if isempty(nii_view)
-         error('The figure should already contain a 3-View plot.');
-      end
-
-      if ~isstruct(nii) | ~isfield(nii,'hdr') | ~isfield(nii,'img')
-         error('2nd parameter should be nii struct');
-      end
-
-      if isfield(nii,'untouch') & nii.untouch == 1
-         error('Usage: please use ''load_nii.m'' to load the structure.');
-      end
-
-      opt.command = 'clearnii';
-      view_nii(fig, opt);
-
-      opt.command = 'init';
-      view_nii(fig, nii, opt);
-
-      %  get status
-      %
-      status = get_status(fig);
-
-   case {'clearnii'}
-
-      nii_view = getappdata(fig,'nii_view');
-
-      handles = struct2cell(nii_view.handles);
-
-      for i=1:length(handles)
-         if ishandle(handles{i})	% in case already del by parent
-            delete(handles{i});
-         end
-      end
-
-      rmappdata(fig,'nii_view');
-      buttonmotion = get(fig,'windowbuttonmotion');
-      mymotion = '; view_nii(''move_cursor'');';
-      buttonmotion = strrep(buttonmotion, mymotion, '');
-      set(fig, 'windowbuttonmotion', buttonmotion);
-
-   case {'axial_image','coronal_image','sagittal_image'}    
-
-      switch command
-         case 'axial_image',    view = 'axi'; axi = 0; cor = 1; sag = 1;
-         case 'coronal_image',  view = 'cor'; axi = 1; cor = 0; sag = 1;
-         case 'sagittal_image', view = 'sag'; axi = 1; cor = 1; sag = 0;
-      end
-
-      nii_view = getappdata(fig,'nii_view');
-      nii_view = get_slice_position(nii_view,view);
-
-      if isfield(nii_view, 'disp')
-         img = nii_view.disp;
-      else
-         img = nii_view.nii.img;
-      end
-
-      %  CData must be double() for Matlab 6.5 for Windows
-      %
-      if axi,
-         if isfield(nii_view.handles,'axial_bg') & ~isempty(nii_view.handles.axial_bg) & nii_view.useinterp
-            Saxi = squeeze(nii_view.bgimg(:,:,nii_view.slices.axi));
-            set(nii_view.handles.axial_bg,'CData',double(Saxi)');
-         end
-
-         if isfield(nii_view.handles,'axial_image'),
-            if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
-               Saxi = squeeze(img(:,:,nii_view.slices.axi,:,nii_view.scanid));
-               Saxi = permute(Saxi, [2 1 3]);
-            else
-               Saxi = squeeze(img(:,:,nii_view.slices.axi,nii_view.scanid));
-               Saxi = Saxi';
-            end
-
-            set(nii_view.handles.axial_image,'CData',double(Saxi));
-         end
-
-         if isfield(nii_view.handles,'axial_slider'),
-            set(nii_view.handles.axial_slider,'Value',nii_view.slices.axi);
-         end;
-       end
-
-       if cor,
-         if isfield(nii_view.handles,'coronal_bg') & ~isempty(nii_view.handles.coronal_bg) & nii_view.useinterp
-            Scor = squeeze(nii_view.bgimg(:,nii_view.slices.cor,:));
-            set(nii_view.handles.coronal_bg,'CData',double(Scor)');
-         end
-
-         if isfield(nii_view.handles,'coronal_image'),
-            if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
-               Scor = squeeze(img(:,nii_view.slices.cor,:,:,nii_view.scanid));
-               Scor = permute(Scor, [2 1 3]);
-            else
-               Scor = squeeze(img(:,nii_view.slices.cor,:,nii_view.scanid));
-               Scor = Scor';
-            end
-
-            set(nii_view.handles.coronal_image,'CData',double(Scor));
-         end
-
-         if isfield(nii_view.handles,'coronal_slider'),
-            slider_val = nii_view.dims(2) - nii_view.slices.cor + 1;
-            set(nii_view.handles.coronal_slider,'Value',slider_val);
-         end;
-      end;
-
-      if sag,
-         if isfield(nii_view.handles,'sagittal_bg') & ~isempty(nii_view.handles.sagittal_bg) & nii_view.useinterp
-            Ssag = squeeze(nii_view.bgimg(nii_view.slices.sag,:,:));
-            set(nii_view.handles.sagittal_bg,'CData',double(Ssag)');
-         end
-
-         if isfield(nii_view.handles,'sagittal_image'),
-            if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
-               Ssag = squeeze(img(nii_view.slices.sag,:,:,:,nii_view.scanid));
-               Ssag = permute(Ssag, [2 1 3]);
-            else
-               Ssag = squeeze(img(nii_view.slices.sag,:,:,nii_view.scanid));
-               Ssag = Ssag';
-            end
-
-            set(nii_view.handles.sagittal_image,'CData',double(Ssag));
-         end
-
-         if isfield(nii_view.handles,'sagittal_slider'),
-            set(nii_view.handles.sagittal_slider,'Value',nii_view.slices.sag);
-         end;
-      end;
-
-      update_nii_view(nii_view);
-
-      if ~isempty(nii_view.buttondown)
-         eval(nii_view.buttondown);
-      end
-    
-   case {'axial_slider','coronal_slider','sagittal_slider'},
-    
-      switch command
-         case 'axial_slider',    view = 'axi'; axi = 1; cor = 0; sag = 0;
-         case 'coronal_slider',  view = 'cor'; axi = 0; cor = 1; sag = 0;
-         case 'sagittal_slider', view = 'sag'; axi = 0; cor = 0; sag = 1;
-      end
-
-      nii_view = getappdata(fig,'nii_view');
-      nii_view = get_slider_position(nii_view);
-
-      if isfield(nii_view, 'disp')
-         img = nii_view.disp;
-      else
-         img = nii_view.nii.img;
-      end
-
-      if axi,
-         if isfield(nii_view.handles,'axial_bg') & ~isempty(nii_view.handles.axial_bg) & nii_view.useinterp
-            Saxi = squeeze(nii_view.bgimg(:,:,nii_view.slices.axi));
-            set(nii_view.handles.axial_bg,'CData',double(Saxi)');
-         end
-
-         if isfield(nii_view.handles,'axial_image'),
-            if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
-               Saxi = squeeze(img(:,:,nii_view.slices.axi,:,nii_view.scanid));
-               Saxi = permute(Saxi, [2 1 3]);
-            else
-               Saxi = squeeze(img(:,:,nii_view.slices.axi,nii_view.scanid));
-               Saxi = Saxi';
-            end
-
-            set(nii_view.handles.axial_image,'CData',double(Saxi));
-         end
-
-         if isfield(nii_view.handles,'axial_slider'),
-            set(nii_view.handles.axial_slider,'Value',nii_view.slices.axi);
-         end
-      end
-
-      if cor,
-         if isfield(nii_view.handles,'coronal_bg') & ~isempty(nii_view.handles.coronal_bg) & nii_view.useinterp
-            Scor = squeeze(nii_view.bgimg(:,nii_view.slices.cor,:));
-            set(nii_view.handles.coronal_bg,'CData',double(Scor)');
-         end
-
-         if isfield(nii_view.handles,'coronal_image'),
-            if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
-               Scor = squeeze(img(:,nii_view.slices.cor,:,:,nii_view.scanid));
-               Scor = permute(Scor, [2 1 3]);
-            else
-               Scor = squeeze(img(:,nii_view.slices.cor,:,nii_view.scanid));
-               Scor = Scor';
-            end
-
-            set(nii_view.handles.coronal_image,'CData',double(Scor));
-         end
-
-         if isfield(nii_view.handles,'coronal_slider'),
-            slider_val = nii_view.dims(2) - nii_view.slices.cor + 1;
-            set(nii_view.handles.coronal_slider,'Value',slider_val);
-         end
-      end    
-
-      if sag,
-         if isfield(nii_view.handles,'sagittal_bg') & ~isempty(nii_view.handles.sagittal_bg) & nii_view.useinterp
-            Ssag = squeeze(nii_view.bgimg(nii_view.slices.sag,:,:));
-            set(nii_view.handles.sagittal_bg,'CData',double(Ssag)');
-         end
-
-         if isfield(nii_view.handles,'sagittal_image'),
-            if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
-               Ssag = squeeze(img(nii_view.slices.sag,:,:,:,nii_view.scanid));
-               Ssag = permute(Ssag, [2 1 3]);
-            else
-               Ssag = squeeze(img(nii_view.slices.sag,:,:,nii_view.scanid));
-               Ssag = Ssag';
-            end
-
-            set(nii_view.handles.sagittal_image,'CData',double(Ssag));
-         end
-
-         if isfield(nii_view.handles,'sagittal_slider'),
-            set(nii_view.handles.sagittal_slider,'Value',nii_view.slices.sag);
-         end
-      end
-
-      update_nii_view(nii_view);
-
-      if ~isempty(nii_view.buttondown)
-         eval(nii_view.buttondown);
-      end
-
-   case {'impos_edit'}
-
-      nii_view = getappdata(fig,'nii_view');
-      impos = str2num(get(nii_view.handles.impos,'string'));
-
-      if isfield(nii_view, 'disp')
-         img = nii_view.disp;
-      else
-         img = nii_view.nii.img;
-      end
-
-      if isempty(impos) | ~all(size(impos) ==  [1 3])
-         msg = 'Please use 3 numbers to represent X,Y and Z';
-         msgbox(msg,'Error');
-         return;
-      end
-
-      slices.sag = round(impos(1));
-      slices.cor = round(impos(2));
-      slices.axi = round(impos(3));
-
-      nii_view = convert2voxel(nii_view,slices);
-      nii_view = check_slices(nii_view);
-
-      impos(1) = nii_view.slices.sag;
-      impos(2) = nii_view.dims(2) - nii_view.slices.cor + 1;
-      impos(3) = nii_view.slices.axi;
-
-      if isfield(nii_view.handles,'sagittal_slider'),
-         set(nii_view.handles.sagittal_slider,'Value',impos(1));
-      end
-
-      if isfield(nii_view.handles,'coronal_slider'),
-         set(nii_view.handles.coronal_slider,'Value',impos(2));
-      end
-
-      if isfield(nii_view.handles,'axial_slider'),
-         set(nii_view.handles.axial_slider,'Value',impos(3));
-      end
-
-      nii_view = get_slider_position(nii_view);
-      update_nii_view(nii_view);
-
-      if isfield(nii_view.handles,'axial_bg') & ~isempty(nii_view.handles.axial_bg) & nii_view.useinterp
-         Saxi = squeeze(nii_view.bgimg(:,:,nii_view.slices.axi));
-         set(nii_view.handles.axial_bg,'CData',double(Saxi)');
-      end
-
-      if isfield(nii_view.handles,'axial_image'),
-         if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
-            Saxi = squeeze(img(:,:,nii_view.slices.axi,:,nii_view.scanid));
-            Saxi = permute(Saxi, [2 1 3]);
-         else
-            Saxi = squeeze(img(:,:,nii_view.slices.axi,nii_view.scanid));
-            Saxi = Saxi';
-         end
-
-         set(nii_view.handles.axial_image,'CData',double(Saxi));
-      end
-
-      if isfield(nii_view.handles,'axial_slider'),
-         set(nii_view.handles.axial_slider,'Value',nii_view.slices.axi);
-      end
-
-      if isfield(nii_view.handles,'coronal_bg') & ~isempty(nii_view.handles.coronal_bg) & nii_view.useinterp
-         Scor = squeeze(nii_view.bgimg(:,nii_view.slices.cor,:));
-         set(nii_view.handles.coronal_bg,'CData',double(Scor)');
-      end
-
-      if isfield(nii_view.handles,'coronal_image'),
-         if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
-            Scor = squeeze(img(:,nii_view.slices.cor,:,:,nii_view.scanid));
-            Scor = permute(Scor, [2 1 3]);
-         else
-            Scor = squeeze(img(:,nii_view.slices.cor,:,nii_view.scanid));
-            Scor = Scor';
-         end
-
-         set(nii_view.handles.coronal_image,'CData',double(Scor));
-      end
-
-      if isfield(nii_view.handles,'coronal_slider'),
-         slider_val = nii_view.dims(2) - nii_view.slices.cor + 1;
-         set(nii_view.handles.coronal_slider,'Value',slider_val);
-      end
-
-      if isfield(nii_view.handles,'sagittal_bg') & ~isempty(nii_view.handles.sagittal_bg) & nii_view.useinterp
-         Ssag = squeeze(nii_view.bgimg(nii_view.slices.sag,:,:));
-         set(nii_view.handles.sagittal_bg,'CData',double(Ssag)');
-      end
-
-      if isfield(nii_view.handles,'sagittal_image'),
-         if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
-            Ssag = squeeze(img(nii_view.slices.sag,:,:,:,nii_view.scanid));
-            Ssag = permute(Ssag, [2 1 3]);
-         else
-            Ssag = squeeze(img(nii_view.slices.sag,:,:,nii_view.scanid));
-            Ssag = Ssag';
-         end
-
-         set(nii_view.handles.sagittal_image,'CData',double(Ssag));
-      end
-
-      if isfield(nii_view.handles,'sagittal_slider'),
-         set(nii_view.handles.sagittal_slider,'Value',nii_view.slices.sag);
-      end
-
-      axes(nii_view.handles.axial_axes);
-      axes(nii_view.handles.coronal_axes);
-      axes(nii_view.handles.sagittal_axes);
-
-      if ~isempty(nii_view.buttondown)
-         eval(nii_view.buttondown);
-      end
-
-   case 'coordinates',
-
-      nii_view = getappdata(fig,'nii_view');
-      set_image_value(nii_view);
-
-   case 'crosshair',
-
-      nii_view = getappdata(fig,'nii_view');
-
-      if get(nii_view.handles.xhair,'value') == 2		% off
-         set(nii_view.axi_xhair.lx,'visible','off');
-         set(nii_view.axi_xhair.ly,'visible','off');
-         set(nii_view.cor_xhair.lx,'visible','off');
-         set(nii_view.cor_xhair.ly,'visible','off');
-         set(nii_view.sag_xhair.lx,'visible','off');
-         set(nii_view.sag_xhair.ly,'visible','off');
-      else
-         set(nii_view.axi_xhair.lx,'visible','on');
-         set(nii_view.axi_xhair.ly,'visible','on');
-         set(nii_view.cor_xhair.lx,'visible','on');
-         set(nii_view.cor_xhair.ly,'visible','on');
-         set(nii_view.sag_xhair.lx,'visible','on');
-         set(nii_view.sag_xhair.ly,'visible','on');
-
-         set(nii_view.handles.axial_axes,'selected','on');
-         set(nii_view.handles.axial_axes,'selected','off');
-         set(nii_view.handles.coronal_axes,'selected','on');
-         set(nii_view.handles.coronal_axes,'selected','off');
-         set(nii_view.handles.sagittal_axes,'selected','on');
-         set(nii_view.handles.sagittal_axes,'selected','off');
-      end
-
-   case 'xhair_color',
-
-      old_color = get(gcbo,'user');
-      new_color = uisetcolor(old_color);
-      update_crosshaircolor(fig, new_color);
-
-   case {'color','contrast_def'}
-
-      nii_view = getappdata(fig,'nii_view');
-
-      if nii_view.numscan == 1
-         if get(nii_view.handles.colorindex,'value') == 2
-            set(nii_view.handles.contrast,'value',128);
-         elseif get(nii_view.handles.colorindex,'value') == 3
-            set(nii_view.handles.contrast,'value',1);
-         end
-      end
-
-      [custom_color_map, custom_colorindex] = change_colormap(fig);
-
-      if strcmpi(command, 'color')
-
-         setcolorlevel = nii_view.colorlevel;
-
-         if ~isempty(custom_color_map)		% isfield(nii_view, 'color_map')
-            setcolormap = custom_color_map;	% nii_view.color_map;
-         else
-            setcolormap = [];
-         end
-
-         if isfield(nii_view, 'highcolor')
-            sethighcolor = nii_view.highcolor;
-         else
-            sethighcolor = [];
-         end
-
-         redraw_cbar(fig, setcolorlevel, setcolormap, sethighcolor);
-
-         if nii_view.numscan == 1 & ...
-		(custom_colorindex < 2 | custom_colorindex > 3)
-            contrastopt.enablecontrast = 0;
-         else
-            contrastopt.enablecontrast = 1;
-         end
-
-         update_enable(fig, contrastopt);
-
-      end
-
-   case {'neg_color','brightness','contrast'}
-
-      change_colormap(fig);
-
-   case {'brightness_def'}
-
-      nii_view = getappdata(fig,'nii_view');
-      set(nii_view.handles.brightness,'value',0);
-      change_colormap(fig);
-
-   case 'hist_plot'
-
-      hist_plot(fig);
-
-   case 'hist_eq'
-
-      hist_eq(fig);
-
-   case 'move_cursor'
-
-      move_cursor(fig);
-
-   case 'edit_change_scan'
-
-      change_scan('edit_change_scan');
-
-   case 'slider_change_scan'
-
-      change_scan('slider_change_scan');
-
-   end
-
-   return;						% view_nii
-
-
-%----------------------------------------------------------------
-function fig = init(nii, fig, area, setunit, setviewpoint, setscanid, buttondown, ...
-         colorindex, color_map, colorlevel, highcolor, cbarminmax, ...
-         usecolorbar, usepanel, usecrosshair, usestretch, useimagesc, ...
-         useinterp, setvalue, glblocminmax, setcrosshaircolor, ...
-         setcomplex)
-
-   %  Support data type COMPLEX64 & COMPLEX128
-   %
-   if nii.hdr.dime.datatype == 32 | nii.hdr.dime.datatype == 1792
-      switch setcomplex,
-      case 0,
-         nii.img = real(nii.img);
-      case 1,
-         nii.img = imag(nii.img);
-      case 2,
-         if isa(nii.img, 'double')
-            nii.img = abs(double(nii.img));
-         else
-            nii.img = single(abs(double(nii.img)));
-         end
-      end
-   end
-
-   if isempty(area)
-      area = [0.05 0.05 0.9 0.9];
-   end
-
-   if isempty(setscanid)
-      setscanid = 1;
-   else
-      setscanid = round(setscanid);
-
-      if setscanid < 1
-         setscanid = 1;
-      end
-
-      if setscanid > nii.hdr.dime.dim(5)
-         setscanid = nii.hdr.dime.dim(5);
-      end
-   end
-
-   if nii.hdr.dime.datatype == 128 | nii.hdr.dime.datatype == 511
-      usecolorbar = 0;
-   elseif isempty(usecolorbar)
-      usecolorbar = 1;
-   end
-
-   if isempty(usepanel)
-      usepanel = 1;
-   end
-
-   if isempty(usestretch)
-      usestretch = 1;
-   end
-
-   if isempty(useimagesc)
-      useimagesc = 1;
-   end
-
-   if isempty(useinterp)
-      useinterp = 0;
-   end
-
-   if isempty(colorindex)
-      tmp = min(nii.img(:,:,:,setscanid));
-
-      if  min(tmp(:)) < 0
-         colorindex = 2;
-         setcrosshaircolor = [1 1 0];
-      else
-         colorindex = 3;
-      end
-   end
-
-   if isempty(color_map) | ischar(color_map)
-      color_map = [];
-   else
-      colorindex = 1;
-   end
-
-   bgimg = [];
-
-   if ~isempty(glblocminmax)
-      minvalue = glblocminmax(1);
-      maxvalue = glblocminmax(2);
-   else
-      minvalue = nii.img(:,:,:,setscanid);
-      minvalue = double(minvalue(:));
-      minvalue = min(minvalue(~isnan(minvalue)));
-      maxvalue = nii.img(:,:,:,setscanid);
-      maxvalue = double(maxvalue(:));
-      maxvalue = max(maxvalue(~isnan(maxvalue)));
-   end
-
-   if ~isempty(setvalue)
-      if ~isempty(glblocminmax)
-         minvalue = glblocminmax(1);
-         maxvalue = glblocminmax(2);
-      else
-         minvalue = double(min(setvalue.val));
-         maxvalue = double(max(setvalue.val));
-      end
-
-      bgimg = double(nii.img);
-      minbg = double(min(bgimg(:)));
-      maxbg = double(max(bgimg(:)));
-
-      bgimg = scale_in(bgimg, minbg, maxbg, 55) + 200;	% scale to 201~256
-
-      %  56 level for brain structure
-      %
-%      highcolor = [zeros(1,3);gray(55)];
-      highcolor = gray(56);
-      cbarminmax = [minvalue maxvalue];
-
-      if useinterp
-
-         %  scale signal data to 1~200
-         %
-         nii.img = repmat(nan, size(nii.img));
-         nii.img(setvalue.idx) = setvalue.val;
-
-         %  200 level for source image
-         %
-         bgimg = single(scale_out(bgimg, cbarminmax(1), cbarminmax(2), 199));
-      else
-
-         bgimg(setvalue.idx) = NaN;
-         minbg = double(min(bgimg(:)));
-         maxbg = double(max(bgimg(:)));
-         bgimg(setvalue.idx) = minbg;
-
-         %  bgimg must be normalized to [201 256]
-         %
-         bgimg = 55 * (bgimg-min(bgimg(:))) / (max(bgimg(:))-min(bgimg(:))) + 201;
-         bgimg(setvalue.idx) = 0;
-
-         %  scale signal data to 1~200
-         %
-         nii.img = zeros(size(nii.img));
-         nii.img(setvalue.idx) = scale_in(setvalue.val, minvalue, maxvalue, 199);
-         nii.img = nii.img + bgimg;
-         bgimg = [];
-         nii.img = scale_out(nii.img, cbarminmax(1), cbarminmax(2), 199);
-
-         minvalue = double(nii.img(:));
-         minvalue = min(minvalue(~isnan(minvalue)));
-         maxvalue = double(nii.img(:));
-         maxvalue = max(maxvalue(~isnan(maxvalue)));
-
-         if ~isempty(glblocminmax)		% maxvalue is gray
-            minvalue = glblocminmax(1);
-         end
-
-      end
-
-      colorindex = 2;
-      setcrosshaircolor = [1 1 0];
-
-   end
-
-   if isempty(highcolor) | ischar(highcolor)
-      highcolor = [];
-      num_highcolor = 0;
-   else
-      num_highcolor = size(highcolor,1);
-   end
-
-   if isempty(colorlevel)
-      colorlevel = 256 - num_highcolor;
-   end
-
-   if usecolorbar
-      cbar_area = area;
-      cbar_area(1) = area(1) + area(3)*0.93;
-      cbar_area(3) = area(3)*0.04;
-      area(3) = area(3)*0.9;		% 90% used for main axes
-   else
-      cbar_area = [];
-   end
-
-   %  init color (gray) scaling to make sure the slice clim take the
-   %  global clim [min(nii.img(:)) max(nii.img(:))]
-   %
-   if isempty(bgimg)
-      clim = [minvalue maxvalue];
-   else
-      clim = [minvalue double(max(bgimg(:)))];
-   end
-
-   if clim(1) == clim(2)
-      clim(2) = clim(1) + 0.000001;
-   end
-
-   if isempty(cbarminmax)
-      cbarminmax = [minvalue maxvalue];
-   end
-
-   xdim = size(nii.img, 1);
-   ydim = size(nii.img, 2);
-   zdim = size(nii.img, 3);
-
-   dims = [xdim ydim zdim];
-   voxel_size = abs(nii.hdr.dime.pixdim(2:4));		% vol in mm
-
-   if any(voxel_size <= 0)
-      voxel_size(find(voxel_size <= 0)) = 1;
-   end
-
-   origin = abs(nii.hdr.hist.originator(1:3));
-
-   if isempty(origin) | all(origin == 0)		% according to SPM
-      origin = (dims+1)/2;   
-   end;
-
-   origin = round(origin);
-
-   if any(origin > dims)				% simulate fMRI
-      origin(find(origin > dims)) = dims(find(origin > dims));
-   end
-
-   if any(origin <= 0)
-      origin(find(origin <= 0)) = 1;
-   end
-
-   nii_view.dims = dims;
-   nii_view.voxel_size = voxel_size;
-   nii_view.origin = origin;
-
-   nii_view.slices.sag = 1;
-   nii_view.slices.cor = 1;
-   nii_view.slices.axi = 1;
-   if xdim > 1, nii_view.slices.sag = origin(1); end
-   if ydim > 1, nii_view.slices.cor = origin(2); end
-   if zdim > 1, nii_view.slices.axi = origin(3); end
-
-   nii_view.area = area;
-   nii_view.fig = fig;
-   nii_view.nii = nii;					% image data
-   nii_view.bgimg = bgimg;				% background
-   nii_view.setvalue = setvalue;
-   nii_view.minvalue = minvalue;
-   nii_view.maxvalue = maxvalue;
-   nii_view.numscan = nii.hdr.dime.dim(5);
-   nii_view.scanid = setscanid;
-
-   Font.FontUnits  = 'point';
-   Font.FontSize   = 12;
-
-   %  create axes for colorbar
-   %
-   [cbar_axes cbarminmax_axes] = create_cbar_axes(fig, cbar_area);
-
-   if isempty(cbar_area)
-      nii_view.cbar_area = [];
-   else
-      nii_view.cbar_area = cbar_area;
-   end
-
-   %  create axes for top/front/side view
-   %
-   vol_size = voxel_size .* dims;
-   [top_ax, front_ax, side_ax] ...
-	= create_ax(fig, area, vol_size, usestretch);
-
-   top_pos = get(top_ax,'position');
-   front_pos = get(front_ax,'position');
-   side_pos = get(side_ax,'position');
-
-   %  Sagittal Slider
-   %
-   x = side_pos(1);
-   y = top_pos(2) + top_pos(4);
-   w = side_pos(3);
-   h = (front_pos(2) - y) / 2;
-   y = y + h;
-
-   pos = [x y w h];
-
-   if xdim > 1,
-      slider_step(1) = 1/(xdim);
-      slider_step(2) = 1.00001/(xdim);
-
-      handles.sagittal_slider = uicontrol('Parent',fig, ...
-                'Style','slider','Units','Normalized', Font, ...
-                'Position',pos, 'HorizontalAlignment','center',...
-                'BackgroundColor',[0.5 0.5 0.5],'ForegroundColor',[0 0 0],...
-                'BusyAction','queue',...
-                'TooltipString','Sagittal slice navigation',...
-                'Min',1,'Max',xdim,'SliderStep',slider_step, ...
-                'Value',nii_view.slices.sag,...
-                'Callback','view_nii(''sagittal_slider'');');
-
-      set(handles.sagittal_slider,'position',pos);	% linux66
-   end
-
-   %  Coronal Slider
-   %
-   x = top_pos(1);
-   y = top_pos(2) + top_pos(4);
-   w = top_pos(3);
-   h = (front_pos(2) - y) / 2;
-   y = y + h;
-
-   pos = [x y w h];
-
-   if ydim > 1,
-      slider_step(1) = 1/(ydim);
-      slider_step(2) = 1.00001/(ydim);
-
-      slider_val = nii_view.dims(2) - nii_view.slices.cor + 1;
-
-      handles.coronal_slider = uicontrol('Parent',fig, ...
-                'Style','slider','Units','Normalized', Font, ...
-                'Position',pos, 'HorizontalAlignment','center',...
-                'BackgroundColor',[0.5 0.5 0.5],'ForegroundColor',[0 0 0],...
-                'BusyAction','queue',...
-                'TooltipString','Coronal slice navigation',...
-                'Min',1,'Max',ydim,'SliderStep',slider_step, ...
-                'Value',slider_val,...
-                'Callback','view_nii(''coronal_slider'');');
-
-      set(handles.coronal_slider,'position',pos);	% linux66
-   end
-
-   %  Axial Slider
-   %
-%   x = front_pos(1) + front_pos(3);
-%   y = front_pos(2);
-%   w = side_pos(1) - x;
-%   h = front_pos(4);
-
-   x = top_pos(1);
-   y = area(2);
-   w = top_pos(3);
-   h = top_pos(2) - y;
-
-   pos = [x y w h];
-
-   if zdim > 1,
-      slider_step(1) = 1/(zdim);
-      slider_step(2) = 1.00001/(zdim);
-
-      handles.axial_slider = uicontrol('Parent',fig, ...
-                'Style','slider','Units','Normalized', Font, ...
-                'Position',pos, 'HorizontalAlignment','center',...
-                'BackgroundColor',[0.5 0.5 0.5],'ForegroundColor',[0 0 0],...
-                'BusyAction','queue',...
-                'TooltipString','Axial slice navigation',...
-                'Min',1,'Max',zdim,'SliderStep',slider_step, ...
-                'Value',nii_view.slices.axi,...
-                'Callback','view_nii(''axial_slider'');');
-
-      set(handles.axial_slider,'position',pos);	% linux66
-   end
-
-   %  plot info view
-   %
-%   info_pos = [side_pos([1,3]); top_pos([2,4])];
-%   info_pos = info_pos(:);
-   gap = side_pos(1)-(top_pos(1)+top_pos(3));
-   info_pos(1) = side_pos(1) + gap;
-   info_pos(2) = area(2);
-   info_pos(3) = side_pos(3) - gap;
-   info_pos(4) = top_pos(2) + top_pos(4) - area(2) - gap;
-
-   num_inputline = 10;
-   inputline_space =info_pos(4) / num_inputline;
-
-
-   %  for any info_area change, update_usestretch should also be changed
-
-
-   %  Image Intensity Value at Cursor
-   %
-   x = info_pos(1);
-   y = info_pos(2);
-   w = info_pos(3)*0.5;
-   h = inputline_space*0.6;
-
-   pos = [x y w h];
-
-   handles.Timvalcur = uicontrol('Parent',fig,'Style','text', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, 'HorizontalAlignment', 'left',...
-      'BackgroundColor', [0.8 0.8 0.8], 'ForegroundColor', [0 0 0],...
-      'BusyAction','queue',...
-      'visible','off', ...
-      'String','Value at cursor:');
-
-   if usepanel
-      set(handles.Timvalcur, 'visible', 'on');
-   end
-
-   x = x + w;
-   w = info_pos(3)*0.5;
-
-   pos = [x y w h];
-
-   handles.imvalcur = uicontrol('Parent',fig,'Style','text', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, 'HorizontalAlignment', 'right',...
-      'BackgroundColor', [0.8 0.8 0.8], 'ForegroundColor', [0 0 0],...
-      'BusyAction','queue',...
-      'visible','off', ...
-      'String',' ');
-
-   if usepanel
-      set(handles.imvalcur, 'visible', 'on');
-   end
-
-   %  Position at Cursor
-   %
-   x = info_pos(1);
-   y = y + inputline_space;
-   w = info_pos(3)*0.5;
-
-   pos = [x y w h];
-
-   handles.Timposcur = uicontrol('Parent',fig,'Style','text', ...
-        'Units','Normalized', Font, ...
-        'Position',pos, 'HorizontalAlignment', 'left',...
-        'BackgroundColor', [0.8 0.8 0.8], 'ForegroundColor', [0 0 0],...
-        'BusyAction','queue',...
-        'visible','off', ...
-        'String','[X Y Z] at cursor:');
-
-   if usepanel
-      set(handles.Timposcur, 'visible', 'on');
-   end
-
-   x = x + w;
-   w = info_pos(3)*0.5;
-
-   pos = [x y w h];
-
-   handles.imposcur = uicontrol('Parent',fig,'Style','text', ...
-        'Units','Normalized', Font, ...
-        'Position',pos, 'HorizontalAlignment', 'right',...
-        'BackgroundColor', [0.8 0.8 0.8], 'ForegroundColor', [0 0 0],...
-        'BusyAction','queue',...
-        'visible','off', ...
-        'String',' ','Value',[0 0 0]);
-
-   if usepanel
-      set(handles.imposcur, 'visible', 'on');
-   end
-
-   %  Image Intensity Value at Mouse Click
-   %
-   x = info_pos(1);
-   y = y + inputline_space;
-   w = info_pos(3)*0.5;
-
-   pos = [x y w h];
-
-   handles.Timval = uicontrol('Parent',fig,'Style','text', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, 'HorizontalAlignment', 'left',...
-      'BackgroundColor', [0.8 0.8 0.8], 'ForegroundColor', [0 0 0],...
-      'BusyAction','queue',...
-      'visible','off', ...
-      'String','Value at crosshair:');
-
-   if usepanel
-      set(handles.Timval, 'visible', 'on');
-   end
-
-   x = x + w;
-   w = info_pos(3)*0.5;
-
-   pos = [x y w h];
-
-   handles.imval = uicontrol('Parent',fig,'Style','text', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, 'HorizontalAlignment', 'right',...
-      'BackgroundColor', [0.8 0.8 0.8], 'ForegroundColor', [0 0 0],...
-      'BusyAction','queue',...
-      'visible','off', ...
-      'String',' ');
-
-   if usepanel
-      set(handles.imval, 'visible', 'on');
-   end
-
-   %  Viewpoint Position at Mouse Click
-   %
-   x = info_pos(1);
-   y = y + inputline_space;
-   w = info_pos(3)*0.5;
-
-   pos = [x y w h];
-
-   handles.Timpos = uicontrol('Parent',fig,'Style','text', ...
-        'Units','Normalized', Font, ...
-        'Position',pos, 'HorizontalAlignment', 'left',...
-        'BackgroundColor', [0.8 0.8 0.8], 'ForegroundColor', [0 0 0],...
-        'BusyAction','queue',...
-        'visible','off', ...
-        'String','[X Y Z] at crosshair:');
-
-   if usepanel
-      set(handles.Timpos, 'visible', 'on');
-   end
-
-   x = x + w + 0.005;
-   y = y - 0.008;
-   w = info_pos(3)*0.5;
-   h = inputline_space*0.9;
-
-   pos = [x y w h];
-
-   handles.impos = uicontrol('Parent',fig,'Style','edit', ...
-        'Units','Normalized', Font, ...
-        'Position',pos, 'HorizontalAlignment', 'right',...
-        'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0],...
-        'BusyAction','queue',...
-        'Callback','view_nii(''impos_edit'');', ...
-        'TooltipString','Viewpoint Location in Axes Unit', ...
-        'visible','off', ...
-        'String',' ','Value',[0 0 0]);
-
-   if usepanel
-      set(handles.impos, 'visible', 'on');
-   end
-
-   %  Origin Position
-   %
-   x = info_pos(1);
-   y = y + inputline_space*1.2;
-   w = info_pos(3)*0.5;
-   h = inputline_space*0.6;
-
-   pos = [x y w h];
-
-   handles.Torigin = uicontrol('Parent',fig,'Style','text', ...
-        'Units','Normalized', Font, ...
-        'Position',pos, 'HorizontalAlignment', 'left',...
-        'BackgroundColor', [0.8 0.8 0.8], 'ForegroundColor', [0 0 0],...
-        'BusyAction','queue',...
-        'visible','off', ...
-        'String','[X Y Z] at origin:');
-
-   if usepanel
-      set(handles.Torigin, 'visible', 'on');
-   end
-
-   x = x + w;
-   w = info_pos(3)*0.5;
-
-   pos = [x y w h];
-
-   handles.origin = uicontrol('Parent',fig,'Style','text', ...
-        'Units','Normalized', Font, ...
-        'Position',pos, 'HorizontalAlignment', 'right',...
-        'BackgroundColor', [0.8 0.8 0.8], 'ForegroundColor', [0 0 0],...
-        'BusyAction','queue',...
-        'visible','off', ...
-        'String',' ','Value',[0 0 0]);
-
-   if usepanel
-      set(handles.origin, 'visible', 'on');
-   end
-
-if 0
-   %  Voxel Unit
-   %
-   x = info_pos(1);
-   y = y + inputline_space;
-   w = info_pos(3)*0.5;
-
-   pos = [x y w h];
-
-   handles.Tcoord = uicontrol('Parent',fig,'Style','text', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, 'HorizontalAlignment', 'left',...
-      'BackgroundColor', [0.8 0.8 0.8], 'ForegroundColor', [0 0 0],...
-      'BusyAction','queue',...
-      'visible','off', ...
-      'String','Axes Unit:');
-
-   if usepanel
-      set(handles.Tcoord, 'visible', 'on');
-   end
-
-   x = x + w + 0.005;
-   w = info_pos(3)*0.5 - 0.005;
-
-   pos = [x y w h];
-
-   Font.FontSize   = 8;
-
-   handles.coord = uicontrol('Parent',fig,'Style','popupmenu', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, ...
-      'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0],...
-      'BusyAction','queue',...
-      'TooltipString','Choose Voxel or Millimeter',...
-      'String',{'Voxel','Millimeter'},...
-      'visible','off', ...
-      'Callback','view_nii(''coordinates'');');
-
-%      'TooltipString','Choose Voxel, MNI or Talairach Coordinates',...
-%      'String',{'Voxel','MNI (mm)','Talairach (mm)'},...
-
-   Font.FontSize   = 12;
-
-   if usepanel
-      set(handles.coord, 'visible', 'on');
-   end
-end
-
-   %  Crosshair
-   %
-   x = info_pos(1);
-   y = y + inputline_space;
-   w = info_pos(3)*0.4;
-
-   pos = [x y w h];
-
-   handles.Txhair = uicontrol('Parent',fig,'Style','text', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, 'HorizontalAlignment', 'left',...
-      'BackgroundColor', [0.8 0.8 0.8], 'ForegroundColor', [0 0 0],...
-      'BusyAction','queue',...
-      'visible','off', ...
-      'String','Crosshair:');
-
-   if usepanel
-      set(handles.Txhair, 'visible', 'on');
-   end
-
-   x = info_pos(1) + info_pos(3)*0.5;
-   w = info_pos(3)*0.2;
-   h = inputline_space*0.7;
-
-   pos = [x y w h];
-
-   Font.FontSize   = 8;
-
-   handles.xhair_color = uicontrol('Parent',fig,'Style','push', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, 'HorizontalAlignment', 'center',...
-      'TooltipString','Crosshair Color',...
-      'User',[1 0 0],...
-      'String','Color',...
-      'visible','off', ...
-      'Callback','view_nii(''xhair_color'');');
-
-   if usepanel
-      set(handles.xhair_color, 'visible', 'on');
-   end
-
-   x = info_pos(1) + info_pos(3)*0.7;
-   w = info_pos(3)*0.3;
-
-   pos = [x y w h];
-
-   handles.xhair = uicontrol('Parent',fig,'Style','popupmenu', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, ...
-      'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0],...
-      'BusyAction','queue',...
-      'TooltipString','Display or Hide Crosshair',...
-      'String',{'On','Off'},...
-      'visible','off', ...
-      'Callback','view_nii(''crosshair'');');
-
-   if usepanel
-      set(handles.xhair, 'visible', 'on');
-   end
-
-   %  Histogram & Color
-   %
-   x = info_pos(1);
-   w = info_pos(3)*0.45;
-   h = inputline_space * 1.5;
-
-   pos = [x,  y+inputline_space*0.9,  w,  h];
-
-   handles.hist_frame = uicontrol('Parent',fig, ...	
-   	'Units','normal', ...
-   	'BackgroundColor',[0.8 0.8 0.8], ...
-   	'Position',pos, ...
-        'visible','off', ...
-   	'Style','frame');
-
-   if usepanel
-%      set(handles.hist_frame, 'visible', 'on');
-   end
-
-   handles.coord_frame = uicontrol('Parent',fig, ...	
-   	'Units','normal', ...
-   	'BackgroundColor',[0.8 0.8 0.8], ...
-   	'Position',pos, ...
-        'visible','off', ...
-   	'Style','frame');
-
-   if usepanel
-      set(handles.coord_frame, 'visible', 'on');
-   end
-
-   x = info_pos(1) + info_pos(3)*0.475;
-   w = info_pos(3)*0.525;
-   h = inputline_space * 1.5;
-
-   pos = [x,  y+inputline_space*0.9,  w,  h];
-
-   handles.color_frame = uicontrol('Parent',fig, ...	
-   	'Units','normal', ...
-   	'BackgroundColor',[0.8 0.8 0.8], ...
-   	'Position',pos, ...
-        'visible','off', ...
-   	'Style','frame');
-
-   if usepanel
-      set(handles.color_frame, 'visible', 'on');
-   end
-
-   x = info_pos(1) + info_pos(3)*0.025;
-   y = y + inputline_space*1.2;
-   w = info_pos(3)*0.2;
-   h = inputline_space*0.7;
-
-   pos = [x y w h];
-
-   Font.FontSize   = 8;
-
-   handles.hist_eq = uicontrol('Parent',fig,'Style','toggle', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, 'HorizontalAlignment', 'center',...
-      'TooltipString','Histogram Equalization',...
-      'String','Hist EQ',...
-      'visible','off', ...
-      'Callback','view_nii(''hist_eq'');');
-
-   if usepanel
-%      set(handles.hist_eq, 'visible', 'on');
-   end
-
-   x = x + w;
-   w = info_pos(3)*0.2;
-
-   pos = [x y w h];
-
-   handles.hist_plot = uicontrol('Parent',fig,'Style','push', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, 'HorizontalAlignment', 'center',...
-      'TooltipString','Histogram Plot',...
-      'String','Hist Plot',...
-      'visible','off', ...
-      'Callback','view_nii(''hist_plot'');');
-
-   if usepanel
-%      set(handles.hist_plot, 'visible', 'on');
-   end
-
-   x = info_pos(1) + info_pos(3)*0.025;
-   w = info_pos(3)*0.4;
-
-   pos = [x y w h];
-
-   handles.coord = uicontrol('Parent',fig,'Style','popupmenu', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, ...
-      'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0],...
-      'BusyAction','queue',...
-      'TooltipString','Choose Voxel or Millimeter',...
-      'String',{'Voxel','Millimeter'},...
-      'visible','off', ...
-      'Callback','view_nii(''coordinates'');');
-
-%      'TooltipString','Choose Voxel, MNI or Talairach Coordinates',...
-%      'String',{'Voxel','MNI (mm)','Talairach (mm)'},...
-
-   if usepanel
-      set(handles.coord, 'visible', 'on');
-   end
-
-   x = info_pos(1) + info_pos(3)*0.5;
-   w = info_pos(3)*0.2;
-
-   pos = [x y w h];
-
-   handles.neg_color = uicontrol('Parent',fig,'Style','toggle', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, 'HorizontalAlignment', 'center',...
-      'TooltipString','Negative Colormap',...
-      'String','Negative',...
-      'visible','off', ...
-      'Callback','view_nii(''neg_color'');');
-
-   if usepanel
-      set(handles.neg_color, 'visible', 'on');
-   end
-
-   if nii.hdr.dime.datatype == 128 | nii.hdr.dime.datatype == 511
-      set(handles.neg_color, 'enable', 'off');
-   end
-
-   x = info_pos(1) + info_pos(3)*0.7;
-   w = info_pos(3)*0.275;
-
-   pos = [x y w h];
-
-   handles.colorindex = uicontrol('Parent',fig,'Style','popupmenu', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, ...
-      'BackgroundColor', [1 1 1], 'ForegroundColor', [0 0 0],...
-      'BusyAction','queue',...
-      'TooltipString','Change Colormap',...
-      'String',{'Custom','Bipolar','Gray','Jet','Cool','Bone','Hot','Copper','Pink'},...
-      'value', colorindex, ...
-      'visible','off', ...
-      'Callback','view_nii(''color'');');
-
-   if usepanel
-      set(handles.colorindex, 'visible', 'on');
-   end
-
-   if nii.hdr.dime.datatype == 128 | nii.hdr.dime.datatype == 511
-      set(handles.colorindex, 'enable', 'off');
-   end
-
-   x = info_pos(1) + info_pos(3)*0.1;
-   y = y + inputline_space;
-   w = info_pos(3)*0.28;
-   h = inputline_space*0.6;
-
-   pos = [x y w h];
-
-   Font.FontSize   = 8;
-
-   handles.Thist = uicontrol('Parent',fig,'Style','text', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, 'HorizontalAlignment', 'center',...
-      'BackgroundColor', [0.8 0.8 0.8], 'ForegroundColor', [0 0 0],...
-      'BusyAction','queue',...
-      'visible','off', ...
-      'String','Histogram');
-
-   handles.Tcoord = uicontrol('Parent',fig,'Style','text', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, 'HorizontalAlignment', 'center',...
-      'BackgroundColor', [0.8 0.8 0.8], 'ForegroundColor', [0 0 0],...
-      'BusyAction','queue',...
-      'visible','off', ...
-      'String','Axes Unit');
-
-   if usepanel
-%      set(handles.Thist, 'visible', 'on');
-      set(handles.Tcoord, 'visible', 'on');
-   end
-
-   x = info_pos(1) + info_pos(3)*0.60;
-   w = info_pos(3)*0.28;
-
-   pos = [x y w h];
-
-   handles.Tcolor = uicontrol('Parent',fig,'Style','text', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, 'HorizontalAlignment', 'center',...
-      'BackgroundColor', [0.8 0.8 0.8], 'ForegroundColor', [0 0 0],...
-      'BusyAction','queue',...
-      'visible','off', ...
-      'String','Colormap');
-
-   if usepanel
-      set(handles.Tcolor, 'visible', 'on');
-   end
-
-   if nii.hdr.dime.datatype == 128 | nii.hdr.dime.datatype == 511
-      set(handles.Tcolor, 'enable', 'off');
-   end
-
-   %  Contrast Frame
-   %
-   x = info_pos(1);
-   w = info_pos(3)*0.45;
-   h = inputline_space * 2;
-
-   pos = [x,  y+inputline_space*0.8,  w,  h];
-
-   handles.contrast_frame = uicontrol('Parent',fig, ...	
-   	'Units','normal', ...
-   	'BackgroundColor',[0.8 0.8 0.8], ...
-   	'Position',pos, ...
-        'visible','off', ...
-   	'Style','frame');
-
-   if usepanel
-      set(handles.contrast_frame, 'visible', 'on');
-   end
-
-   if colorindex < 2 | colorindex > 3
-      set(handles.contrast_frame, 'visible', 'off');
-   end
-
-   %  Brightness Frame
-   %
-   x = info_pos(1) + info_pos(3)*0.475;
-   w = info_pos(3)*0.525;
-
-   pos = [x,  y+inputline_space*0.8,  w,  h];
-
-   handles.brightness_frame = uicontrol('Parent',fig, ...	
-   	'Units','normal', ...
-   	'BackgroundColor',[0.8 0.8 0.8], ...
-   	'Position',pos, ...
-        'visible','off', ...
-   	'Style','frame');
-
-   if usepanel
-      set(handles.brightness_frame, 'visible', 'on');
-   end
-
-   %  Contrast
-   %
-   x = info_pos(1) + info_pos(3)*0.025;
-   y = y + inputline_space;
-   w = info_pos(3)*0.4;
-   h = inputline_space*0.6;
-
-   pos = [x y w h];
-
-   Font.FontSize   = 12;
-
-   slider_step(1) = 5/255;
-   slider_step(2) = 5.00001/255;
-
-   handles.contrast = uicontrol('Parent',fig, ...
-      'Style','slider','Units','Normalized', Font, ...
-      'Position',pos, 'HorizontalAlignment', 'left',...
-      'BackgroundColor',[0.5 0.5 0.5],'ForegroundColor',[0 0 0],...
-      'BusyAction','queue',...
-      'TooltipString','Change contrast',...
-      'Min',1,'Max',256,'SliderStep',slider_step, ...
-      'Value',1, ...
-      'visible','off', ...
-      'Callback','view_nii(''contrast'');');
-
-   if usepanel
-      set(handles.contrast, 'visible', 'on');
-   end
-
-   if (nii.hdr.dime.datatype == 128 | nii.hdr.dime.datatype == 511) & nii_view.numscan <= 1
-      set(handles.contrast, 'enable', 'off');
-   end
-
-   if nii_view.numscan > 1
-      set(handles.contrast, 'min', 1, 'max', nii_view.numscan, ...
-         'sliderstep',[1/(nii_view.numscan-1) 1.00001/(nii_view.numscan-1)], ...
-         'Callback', 'view_nii(''slider_change_scan'');');
-   elseif colorindex < 2 | colorindex > 3
-      set(handles.contrast, 'visible', 'off');
-   elseif colorindex == 2
-      set(handles.contrast,'value',128);
-   end
-
-   set(handles.contrast,'position',pos);	% linux66
-
-   %  Brightness
-   %
-   x = info_pos(1) + info_pos(3)*0.5;
-   w = info_pos(3)*0.475;
-
-   pos = [x y w h];
-
-   Font.FontSize   = 12;
-
-   slider_step(1) = 1/50;
-   slider_step(2) = 1.00001/50;
-
-   handles.brightness = uicontrol('Parent',fig, ...
-      'Style','slider','Units','Normalized', Font, ...
-      'Position',pos, 'HorizontalAlignment', 'left',...
-      'BackgroundColor',[0.5 0.5 0.5],'ForegroundColor',[0 0 0],...
-      'BusyAction','queue',...
-      'TooltipString','Change brightness',...
-      'Min',-1,'Max',1,'SliderStep',slider_step, ...
-      'Value',0, ...
-      'visible','off', ...
-      'Callback','view_nii(''brightness'');');
-
-   if usepanel
-      set(handles.brightness, 'visible', 'on');
-   end
-
-   if nii.hdr.dime.datatype == 128 | nii.hdr.dime.datatype == 511
-      set(handles.brightness, 'enable', 'off');
-   end
-
-   set(handles.brightness,'position',pos);	% linux66
-
-   %  Contrast text/def
-   %
-   x = info_pos(1) + info_pos(3)*0.025;
-   y = y + inputline_space;
-   w = info_pos(3)*0.22;
-
-   pos = [x y w h];
-
-   handles.Tcontrast = uicontrol('Parent',fig,'Style','text', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, 'HorizontalAlignment', 'left',...
-      'BackgroundColor', [0.8 0.8 0.8], 'ForegroundColor', [0 0 0],...
-      'BusyAction','queue',...
-      'visible','off', ...
-      'String','Contrast:');
-
-   if usepanel
-      set(handles.Tcontrast, 'visible', 'on');
-   end
-
-   if (nii.hdr.dime.datatype == 128 | nii.hdr.dime.datatype == 511) & nii_view.numscan <= 1
-      set(handles.Tcontrast, 'enable', 'off');
-   end
-
-   if nii_view.numscan > 1
-      set(handles.Tcontrast, 'string', 'Scan ID:');
-      set(handles.contrast, 'TooltipString', 'Change Scan ID');
-   elseif colorindex < 2 | colorindex > 3
-      set(handles.Tcontrast, 'visible', 'off');
-   end
-
-   x = x + w;
-   w = info_pos(3)*0.18;
-
-   pos = [x y w h];
-
-   Font.FontSize   = 8;
-
-   handles.contrast_def = uicontrol('Parent',fig,'Style','push', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, 'HorizontalAlignment', 'center',...
-      'TooltipString','Restore initial contrast',...
-      'String','Reset',...
-      'visible','off', ...
-      'Callback','view_nii(''contrast_def'');');
-
-   if usepanel
-      set(handles.contrast_def, 'visible', 'on');
-   end
-
-   if (nii.hdr.dime.datatype == 128 | nii.hdr.dime.datatype == 511) & nii_view.numscan <= 1
-      set(handles.contrast_def, 'enable', 'off');
-   end
-
-   if nii_view.numscan > 1
-      set(handles.contrast_def, 'style', 'edit', 'background', 'w', ...
-         'TooltipString','Scan (or volume) index in the time series',...
-         'string', '1', 'Callback', 'view_nii(''edit_change_scan'');');
-   elseif colorindex < 2 | colorindex > 3
-      set(handles.contrast_def, 'visible', 'off');
-   end
-
-   %  Brightness text/def
-   %
-   x = info_pos(1) + info_pos(3)*0.5;
-   w = info_pos(3)*0.295;
-
-   pos = [x y w h];
-
-   Font.FontSize   = 12;
-
-   handles.Tbrightness = uicontrol('Parent',fig,'Style','text', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, 'HorizontalAlignment', 'left',...
-      'BackgroundColor', [0.8 0.8 0.8], 'ForegroundColor', [0 0 0],...
-      'BusyAction','queue',...
-      'visible','off', ...
-      'String','Brightness:');
-
-   if usepanel
-      set(handles.Tbrightness, 'visible', 'on');
-   end
-
-   if nii.hdr.dime.datatype == 128 | nii.hdr.dime.datatype == 511
-      set(handles.Tbrightness, 'enable', 'off');
-   end
-
-   x = x + w;
-   w = info_pos(3)*0.18;
-
-   pos = [x y w h];
-
-   Font.FontSize   = 8;
-
-   handles.brightness_def = uicontrol('Parent',fig,'Style','push', ...
-      'Units','Normalized', Font, ...
-      'Position',pos, 'HorizontalAlignment', 'center',...
-      'TooltipString','Restore initial brightness',...
-      'String','Reset',...
-      'visible','off', ...
-      'Callback','view_nii(''brightness_def'');');
-
-   if usepanel
-      set(handles.brightness_def, 'visible', 'on');
-   end
-
-   if nii.hdr.dime.datatype == 128 | nii.hdr.dime.datatype == 511
-      set(handles.brightness_def, 'enable', 'off');
-   end
-
-   %  init image handles
-   %
-   handles.axial_image = [];
-   handles.coronal_image = [];
-   handles.sagittal_image = [];
-
-   %  plot axial view
-   %
-   if ~isempty(nii_view.bgimg)
-      bg_slice = squeeze(bgimg(:,:,nii_view.slices.axi));
-      h1 = plot_view(fig, xdim, ydim, top_ax, bg_slice', clim, cbarminmax, ...
-		handles, useimagesc, colorindex, color_map, ...
-		colorlevel, highcolor, useinterp, nii_view.numscan);
-      handles.axial_bg = h1;
-   else
-      handles.axial_bg = [];
-   end
-
-   if nii.hdr.dime.datatype == 128 | nii.hdr.dime.datatype == 511
-      img_slice = squeeze(nii.img(:,:,nii_view.slices.axi,:,setscanid));
-      img_slice = permute(img_slice, [2 1 3]);
-   else
-      img_slice = squeeze(nii.img(:,:,nii_view.slices.axi,setscanid));
-      img_slice = img_slice';
-   end
-   h1 = plot_view(fig, xdim, ydim, top_ax, img_slice, clim, cbarminmax, ...
-	handles, useimagesc, colorindex, color_map, ...
-	colorlevel, highcolor, useinterp, nii_view.numscan);
-   set(h1,'buttondown','view_nii(''axial_image'');');
-   handles.axial_image = h1;
-   handles.axial_axes = top_ax;
-
-   if size(img_slice,1) == 1 | size(img_slice,2) == 1
-      set(top_ax,'visible','off');
-
-      if isfield(handles,'sagittal_slider') & ishandle(handles.sagittal_slider)
-         set(handles.sagittal_slider, 'visible', 'off');
-      end
-
-      if isfield(handles,'coronal_slider') & ishandle(handles.coronal_slider)
-         set(handles.coronal_slider, 'visible', 'off');
-      end
-
-      if isfield(handles,'axial_slider') & ishandle(handles.axial_slider)
-         set(handles.axial_slider, 'visible', 'off');
-      end
-   end
-
-   %  plot coronal view
-   %
-   if ~isempty(nii_view.bgimg)
-      bg_slice = squeeze(bgimg(:,nii_view.slices.cor,:));
-      h1 = plot_view(fig, xdim, zdim, front_ax, bg_slice', clim, cbarminmax, ...
-		handles, useimagesc, colorindex, color_map, ...
-		colorlevel, highcolor, useinterp, nii_view.numscan);
-      handles.coronal_bg = h1;
-   else
-      handles.coronal_bg = [];
-   end
-
-   if nii.hdr.dime.datatype == 128 | nii.hdr.dime.datatype == 511
-      img_slice = squeeze(nii.img(:,nii_view.slices.cor,:,:,setscanid));
-      img_slice = permute(img_slice, [2 1 3]);
-   else
-      img_slice = squeeze(nii.img(:,nii_view.slices.cor,:,setscanid));
-      img_slice = img_slice';
-   end
-   h1 = plot_view(fig, xdim, zdim, front_ax, img_slice, clim, cbarminmax, ...
-	handles, useimagesc, colorindex, color_map, ...
-	colorlevel, highcolor, useinterp, nii_view.numscan);
-   set(h1,'buttondown','view_nii(''coronal_image'');');
-   handles.coronal_image = h1;
-   handles.coronal_axes = front_ax;
-
-   if size(img_slice,1) == 1 | size(img_slice,2) == 1
-      set(front_ax,'visible','off');
-
-      if isfield(handles,'sagittal_slider') & ishandle(handles.sagittal_slider)
-         set(handles.sagittal_slider, 'visible', 'off');
-      end
-
-      if isfield(handles,'coronal_slider') & ishandle(handles.coronal_slider)
-         set(handles.coronal_slider, 'visible', 'off');
-      end
-
-      if isfield(handles,'axial_slider') & ishandle(handles.axial_slider)
-         set(handles.axial_slider, 'visible', 'off');
-      end
-   end
-
-   %  plot sagittal view
-   %
-   if ~isempty(nii_view.bgimg)
-      bg_slice = squeeze(bgimg(nii_view.slices.sag,:,:));
-
-      h1 = plot_view(fig, ydim, zdim, side_ax, bg_slice', clim, cbarminmax, ...
-		handles, useimagesc, colorindex, color_map, ...
-		colorlevel, highcolor, useinterp, nii_view.numscan);
-      handles.sagittal_bg = h1;
-   else
-      handles.sagittal_bg = [];
-   end
-
-   if nii.hdr.dime.datatype == 128 | nii.hdr.dime.datatype == 511
-      img_slice = squeeze(nii.img(nii_view.slices.sag,:,:,:,setscanid));
-      img_slice = permute(img_slice, [2 1 3]);
-   else
-      img_slice = squeeze(nii.img(nii_view.slices.sag,:,:,setscanid));
-      img_slice = img_slice';
-   end
-
-   h1 = plot_view(fig, ydim, zdim, side_ax, img_slice, clim, cbarminmax, ...
-	handles, useimagesc, colorindex, color_map, ...
-	colorlevel, highcolor, useinterp, nii_view.numscan);
-   set(h1,'buttondown','view_nii(''sagittal_image'');');
-   set(side_ax,'Xdir', 'reverse');
-   handles.sagittal_image = h1;
-   handles.sagittal_axes = side_ax;
-
-   if size(img_slice,1) == 1 | size(img_slice,2) == 1
-      set(side_ax,'visible','off');
-
-      if isfield(handles,'sagittal_slider') & ishandle(handles.sagittal_slider)
-         set(handles.sagittal_slider, 'visible', 'off');
-      end
-
-      if isfield(handles,'coronal_slider') & ishandle(handles.coronal_slider)
-         set(handles.coronal_slider, 'visible', 'off');
-      end
-
-      if isfield(handles,'axial_slider') & ishandle(handles.axial_slider)
-         set(handles.axial_slider, 'visible', 'off');
-      end
-   end
-
-   [top1_label, top2_label, side1_label, side2_label] = ...
-	dir_label(fig, top_ax, front_ax, side_ax);
-
-   %  store label handles
-   %
-   handles.top1_label = top1_label;
-   handles.top2_label = top2_label;
-   handles.side1_label = side1_label;
-   handles.side2_label = side2_label;
-
-   %  plot colorbar
-   %
-   if ~isempty(cbar_axes) & ~isempty(cbarminmax_axes)
-
-if 0
-      if isempty(color_map)
-         level = colorlevel + num_highcolor;
-      else
-         level = size([color_map; highcolor], 1);
-      end
-end
-
-      if isempty(color_map)
-         level = colorlevel;
-      else
-         level = size([color_map], 1);
-      end
-
-      niiclass = class(nii.img);
-
-      h1 = plot_cbar(fig, cbar_axes, cbarminmax_axes, cbarminmax, ...
-		level, handles, useimagesc, colorindex, color_map, ...
-		colorlevel, highcolor, niiclass, nii_view.numscan);
-      handles.cbar_image = h1;
-      handles.cbar_axes = cbar_axes;
-      handles.cbarminmax_axes = cbarminmax_axes;
-
-   end
-
-   nii_view.handles = handles;		% store handles
-
-   nii_view.usepanel = usepanel;		% whole panel at low right cornor
-   nii_view.usestretch = usestretch;	% stretch display of voxel_size
-   nii_view.useinterp = useinterp;	% use interpolation
-   nii_view.colorindex = colorindex;	% store colorindex variable
-   nii_view.buttondown = buttondown;	% command after button down click
-   nii_view.cbarminmax = cbarminmax;	% store min max value for colorbar
-
-   set_coordinates(nii_view,useinterp);	% coord unit
-
-   if ~isfield(nii_view, 'axi_xhair') |  ...
-      ~isfield(nii_view, 'cor_xhair') |  ...
-      ~isfield(nii_view, 'sag_xhair')
-
-      nii_view.axi_xhair = [];			% top cross hair
-      nii_view.cor_xhair = [];			% front cross hair
-      nii_view.sag_xhair = [];			% side cross hair
-
-   end
-
-   if ~isempty(color_map)
-      nii_view.color_map = color_map;
-   end
-
-   if ~isempty(colorlevel)
-      nii_view.colorlevel = colorlevel;
-   end
-
-   if ~isempty(highcolor)
-      nii_view.highcolor = highcolor;
-   end
-
-   update_nii_view(nii_view);
-
-   if ~isempty(setunit)
-      update_unit(fig, setunit);
-   end
-
-   if ~isempty(setviewpoint)
-      update_viewpoint(fig, setviewpoint);
-   end
-
-   if ~isempty(setcrosshaircolor)
-      update_crosshaircolor(fig, setcrosshaircolor);
-   end
-
-   if ~isempty(usecrosshair)
-      update_usecrosshair(fig, usecrosshair);
-   end
-
-   nii_menu = getappdata(fig, 'nii_menu');
-
-   if ~isempty(nii_menu)
-      if nii.hdr.dime.datatype == 128 | nii.hdr.dime.datatype == 511
-         set(nii_menu.Minterp,'Userdata',1,'Label','Interp on','enable','off');
-      elseif useinterp
-         set(nii_menu.Minterp,'Userdata',0,'Label','Interp off');
-      else
-         set(nii_menu.Minterp,'Userdata',1,'Label','Interp on');
-      end
-   end
-
-   windowbuttonmotion = get(fig, 'windowbuttonmotion');
-   windowbuttonmotion = [windowbuttonmotion '; view_nii(''move_cursor'');'];
-   set(fig, 'windowbuttonmotion', windowbuttonmotion);
-
-   return;						% init
-
-
-%----------------------------------------------------------------
-function fig = update_img(img, fig, opt)
-
-   nii_menu = getappdata(fig,'nii_menu');
-
-   if ~isempty(nii_menu)
-      set(nii_menu.Mzoom,'Userdata',1,'Label','Zoom on');   
-      set(fig,'pointer','arrow');
-      zoom off;
-   end
-
-   nii_view = getappdata(fig,'nii_view');
-   change_interp = 0;
-
-   if isfield(opt, 'useinterp') & opt.useinterp ~= nii_view.useinterp
-      nii_view.useinterp = opt.useinterp;
-      change_interp = 1;
-   end
-
-   setscanid = 1;
-
-   if isfield(opt, 'setscanid')
-      setscanid = round(opt.setscanid);
-
-      if setscanid < 1
-         setscanid = 1;
-      end
-
-      if setscanid > nii_view.numscan
-         setscanid = nii_view.numscan;
-      end
-   end
-
-   if isfield(opt, 'glblocminmax') & ~isempty(opt.glblocminmax)
-      minvalue = opt.glblocminmax(1);
-      maxvalue = opt.glblocminmax(2);
-   else
-      minvalue = img(:,:,:,setscanid);
-      minvalue = double(minvalue(:));
-      minvalue = min(minvalue(~isnan(minvalue)));
-      maxvalue = img(:,:,:,setscanid);
-      maxvalue = double(maxvalue(:));
-      maxvalue = max(maxvalue(~isnan(maxvalue)));
-   end
-
-   if isfield(opt, 'setvalue')
-      setvalue = opt.setvalue;
-
-      if isfield(opt, 'glblocminmax') & ~isempty(opt.glblocminmax)
-         minvalue = opt.glblocminmax(1);
-         maxvalue = opt.glblocminmax(2);
-      else
-         minvalue = double(min(setvalue.val));
-         maxvalue = double(max(setvalue.val));
-      end
-
-      bgimg = double(img);
-      minbg = double(min(bgimg(:)));
-      maxbg = double(max(bgimg(:)));
-
-      bgimg = scale_in(bgimg, minbg, maxbg, 55) + 200;	% scale to 201~256
-
-      cbarminmax = [minvalue maxvalue];
-
-      if nii_view.useinterp
-
-         %  scale signal data to 1~200
-         %
-         img = repmat(nan, size(img));
-         img(setvalue.idx) = setvalue.val;
-
-         %  200 level for source image
-         %
-         bgimg = single(scale_out(bgimg, cbarminmax(1), cbarminmax(2), 199));
-
-      else
-
-         bgimg(setvalue.idx) = NaN;
-         minbg = double(min(bgimg(:)));
-         maxbg = double(max(bgimg(:)));
-         bgimg(setvalue.idx) = minbg;
-
-         %  bgimg must be normalized to [201 256]
-         %
-         bgimg = 55 * (bgimg-min(bgimg(:))) / (max(bgimg(:))-min(bgimg(:))) + 201;
-         bgimg(setvalue.idx) = 0;
-
-         %  scale signal data to 1~200
-         %
-         img = zeros(size(img));
-         img(setvalue.idx) = scale_in(setvalue.val, minvalue, maxvalue, 199);
-         img = img + bgimg;
-         bgimg = [];
-         img = scale_out(img, cbarminmax(1), cbarminmax(2), 199);
-
-         minvalue = double(min(img(:)));
-         maxvalue = double(max(img(:)));
-
-         if isfield(opt,'glblocminmax') & ~isempty(opt.glblocminmax)
-            minvalue = opt.glblocminmax(1);
-         end
-
-      end
-
-      nii_view.bgimg = bgimg;
-      nii_view.setvalue = setvalue;
-
-   else
-      cbarminmax = [minvalue maxvalue];
-   end
-
-   update_cbarminmax(fig, cbarminmax);
-   nii_view.cbarminmax = cbarminmax;
-   nii_view.nii.img = img;
-   nii_view.minvalue = minvalue;
-   nii_view.maxvalue = maxvalue;
-   nii_view.scanid = setscanid;
-   change_colormap(fig);
-
-   %  init color (gray) scaling to make sure the slice clim take the
-   %  global clim [min(nii.img(:)) max(nii.img(:))]
-   %
-   if isempty(nii_view.bgimg)
-      clim = [minvalue maxvalue];
-   else
-      clim = [minvalue double(max(nii_view.bgimg(:)))];
-   end
-
-   if clim(1) == clim(2)
-      clim(2) = clim(1) + 0.000001;
-   end
-
-   if strcmpi(get(nii_view.handles.axial_image,'cdatamapping'), 'direct')
-      useimagesc = 0;
-   else
-      useimagesc = 1;
-   end
-
-   if ~isempty(nii_view.bgimg)			% with interpolation
-
-      Saxi = squeeze(nii_view.bgimg(:,:,nii_view.slices.axi));
-
-      if isfield(nii_view.handles,'axial_bg') & ~isempty(nii_view.handles.axial_bg)
-         set(nii_view.handles.axial_bg,'CData',double(Saxi)');
-      else
-         axes(nii_view.handles.axial_axes);
-
-         if useimagesc
-            nii_view.handles.axial_bg = surface(zeros(size(Saxi')),double(Saxi'),'edgecolor','none','facecolor','interp');
-         else
-            nii_view.handles.axial_bg = surface(zeros(size(Saxi')),double(Saxi'),'cdatamapping','direct','edgecolor','none','facecolor','interp');
-         end
-
-         order = get(gca,'child');
-         order(find(order == nii_view.handles.axial_bg)) = [];
-         order = [order; nii_view.handles.axial_bg];
-         set(gca, 'child', order);
-      end
-
-   end
-
-   if isfield(nii_view.handles,'axial_image'),
-      if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
-         Saxi = squeeze(nii_view.nii.img(:,:,nii_view.slices.axi,:,setscanid));
-         Saxi = permute(Saxi, [2 1 3]);
-      else
-         Saxi = squeeze(nii_view.nii.img(:,:,nii_view.slices.axi,setscanid));
-         Saxi = Saxi';
-      end
-
-      set(nii_view.handles.axial_image,'CData',double(Saxi));
-   end
-
-   set(nii_view.handles.axial_axes,'CLim',clim);
-
-   if ~isempty(nii_view.bgimg)
-      Scor = squeeze(nii_view.bgimg(:,nii_view.slices.cor,:));
-
-      if isfield(nii_view.handles,'coronal_bg') & ~isempty(nii_view.handles.coronal_bg)
-         set(nii_view.handles.coronal_bg,'CData',double(Scor)');
-      else
-         axes(nii_view.handles.coronal_axes);
-
-         if useimagesc
-            nii_view.handles.coronal_bg = surface(zeros(size(Scor')),double(Scor'),'edgecolor','none','facecolor','interp');
-         else
-            nii_view.handles.coronal_bg = surface(zeros(size(Scor')),double(Scor'),'cdatamapping','direct','edgecolor','none','facecolor','interp');
-         end
-
-         order = get(gca,'child');
-         order(find(order == nii_view.handles.coronal_bg)) = [];
-         order = [order; nii_view.handles.coronal_bg];
-         set(gca, 'child', order);
-      end
-   end
-
-   if isfield(nii_view.handles,'coronal_image'),
-      if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
-         Scor = squeeze(nii_view.nii.img(:,nii_view.slices.cor,:,:,setscanid));
-         Scor = permute(Scor, [2 1 3]);
-      else
-         Scor = squeeze(nii_view.nii.img(:,nii_view.slices.cor,:,setscanid));
-         Scor = Scor';
-      end
-
-      set(nii_view.handles.coronal_image,'CData',double(Scor));
-   end
-
-   set(nii_view.handles.coronal_axes,'CLim',clim);
-
-   if ~isempty(nii_view.bgimg)
-      Ssag = squeeze(nii_view.bgimg(nii_view.slices.sag,:,:));
-
-      if isfield(nii_view.handles,'sagittal_bg') & ~isempty(nii_view.handles.sagittal_bg)
-         set(nii_view.handles.sagittal_bg,'CData',double(Ssag)');
-      else
-         axes(nii_view.handles.sagittal_axes);
-
-         if useimagesc
-            nii_view.handles.sagittal_bg = surface(zeros(size(Ssag')),double(Ssag'),'edgecolor','none','facecolor','interp');
-         else
-            nii_view.handles.sagittal_bg = surface(zeros(size(Ssag')),double(Ssag'),'cdatamapping','direct','edgecolor','none','facecolor','interp');
-         end
-
-         order = get(gca,'child');
-         order(find(order == nii_view.handles.sagittal_bg)) = [];
-         order = [order; nii_view.handles.sagittal_bg];
-         set(gca, 'child', order);
-      end
-   end
-
-   if isfield(nii_view.handles,'sagittal_image'),
-      if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
-         Ssag = squeeze(nii_view.nii.img(nii_view.slices.sag,:,:,:,setscanid));
-         Ssag = permute(Ssag, [2 1 3]);
-      else
-         Ssag = squeeze(nii_view.nii.img(nii_view.slices.sag,:,:,setscanid));
-         Ssag = Ssag';
-      end
-
-      set(nii_view.handles.sagittal_image,'CData',double(Ssag));
-   end
-
-   set(nii_view.handles.sagittal_axes,'CLim',clim);
-
-   update_nii_view(nii_view);
-
-   if isfield(opt, 'setvalue')
-
-      if ~isfield(nii_view,'highcolor') | ~isequal(size(nii_view.highcolor),[56 3])
-
-         %  55 level for brain structure (paded 0 for highcolor level 1, i.e. normal level 201, to make 56 highcolor)
-         %
-         update_highcolor(fig, [zeros(1,3);gray(55)], []);
-
-      end
-
-      if nii_view.colorindex ~= 2
-         update_colorindex(fig, 2);
-      end
-
-      old_color = get(nii_view.handles.xhair_color,'user');
-
-      if isequal(old_color, [1 0 0])
-         update_crosshaircolor(fig, [1 1 0]);
-      end
-
-%      if change_interp
- %        update_useinterp(fig, nii_view.useinterp);
-  %    end
-
-   end
-
-   if change_interp
-      update_useinterp(fig, nii_view.useinterp);
-   end
-
-   return;						% update_img
-
-
-%----------------------------------------------------------------
-function [top_pos, front_pos, side_pos] = ...
-			axes_pos(fig,area,vol_size,usestretch)
-
-   set(fig,'unit','pixel');
-
-   fig_pos = get(fig,'position');
-
-   gap_x = 15/fig_pos(3);		% width of vertical scrollbar
-   gap_y = 15/fig_pos(4);		% width of horizontal scrollbar
-
-   a = (area(3) - gap_x * 1.3) * fig_pos(3) / (vol_size(1) + vol_size(2));	% no crosshair lost in zoom
-   b = (area(4) - gap_y * 3) * fig_pos(4) / (vol_size(2) + vol_size(3));
-   c = min([a b]);			% make sure 'ax' is inside 'area'
-
-   top_w = vol_size(1) * c / fig_pos(3);
-   side_w = vol_size(2) * c / fig_pos(3);
-   top_h = vol_size(2) * c / fig_pos(4);
-   side_h = vol_size(3) * c / fig_pos(4);
-   side_x = area(1) + top_w + gap_x * 1.3;	% no crosshair lost in zoom
-   side_y = area(2) + top_h + gap_y * 3;
-
-   if usestretch
-      if a > b				% top touched ceiling, use b
-         d = (area(3) - gap_x * 1.3) / (top_w + side_w);	% no crosshair lost in zoom
-         top_w = top_w * d;
-         side_w = side_w * d;
-         side_x = area(1) + top_w + gap_x * 1.3;	% no crosshair lost in zoom
-      else
-         d = (area(4) - gap_y * 3) / (top_h + side_h);
-         top_h = top_h * d;
-         side_h = side_h * d;
-         side_y = area(2) + top_h + gap_y * 3;
-      end
-   end
-
-   top_pos = [area(1) area(2)+gap_y top_w top_h];
-   front_pos = [area(1) side_y top_w side_h];
-   side_pos = [side_x side_y side_w side_h];
-
-   set(fig,'unit','normal');
-
-   return;						% axes_pos
-
-
-%----------------------------------------------------------------
-function [top_ax, front_ax, side_ax] ...
-		= create_ax(fig, area, vol_size, usestretch)
-
-   cur_fig = gcf;			% save h_wait fig
-   figure(fig);
-
-   [top_pos, front_pos, side_pos] = ...
-			axes_pos(fig,area,vol_size,usestretch);
-
-   nii_view = getappdata(fig, 'nii_view');
-
-   if isempty(nii_view)
-      top_ax = axes('position', top_pos);
-      front_ax = axes('position', front_pos);
-      side_ax = axes('position', side_pos);
-   else
-      top_ax = nii_view.handles.axial_axes;
-      front_ax = nii_view.handles.coronal_axes;
-      side_ax = nii_view.handles.sagittal_axes;
-
-      set(top_ax, 'position', top_pos);
-      set(front_ax, 'position', front_pos);
-      set(side_ax, 'position', side_pos);
-   end
-
-   figure(cur_fig);
-
-   return;						% create_ax
-
-
-%----------------------------------------------------------------
-function [cbar_axes, cbarminmax_axes] = create_cbar_axes(fig, cbar_area, nii_view)
-
-   if isempty(cbar_area)		% without_cbar
-      cbar_axes = [];
-      cbarminmax_axes = [];
-      return;
-   end
-
-   cur_fig = gcf;			% save h_wait fig
-   figure(fig);
-
-   if ~exist('nii_view', 'var')
-      nii_view = getappdata(fig, 'nii_view');
-   end
-
-   if isempty(nii_view) | ~isfield(nii_view.handles,'cbar_axes') | isempty(nii_view.handles.cbar_axes)
-      cbarminmax_axes = axes('position', cbar_area);
-      cbar_axes = axes('position', cbar_area);
-   else
-      cbarminmax_axes = nii_view.handles.cbarminmax_axes;
-      cbar_axes = nii_view.handles.cbar_axes;
-      set(cbarminmax_axes, 'position', cbar_area);
-      set(cbar_axes, 'position', cbar_area);
-   end
-
-   figure(cur_fig);
-
-   return;					% create_cbar_axes
-
-
-%----------------------------------------------------------------
-function h1 = plot_view(fig, x, y, img_ax, img_slice, clim, ...
-	cbarminmax, handles, useimagesc, colorindex, color_map, ...
-	colorlevel, highcolor, useinterp, numscan)
-
-   h1 = [];
-
-   if x > 1 & y > 1,
-
-      axes(img_ax);
-
-      nii_view = getappdata(fig, 'nii_view');
-
-      if isempty(nii_view)
-
-         %  set colormap first
-         %
-         nii.handles = handles;
-         nii.handles.axial_axes = img_ax;
-         nii.colorindex = colorindex;
-         nii.color_map = color_map;
-         nii.colorlevel = colorlevel;
-         nii.highcolor = highcolor;
-         nii.numscan = numscan;
-
-         change_colormap(fig, nii, colorindex, cbarminmax);
-
-         if useinterp
-            if useimagesc
-               h1 = surface(zeros(size(img_slice)),double(img_slice),'edgecolor','none','facecolor','interp');
-            else
-               h1 = surface(zeros(size(img_slice)),double(img_slice),'cdatamapping','direct','edgecolor','none','facecolor','interp');
-            end
-
-            set(gca,'clim',clim);
-         else
-            if useimagesc
-               h1 = imagesc(img_slice,clim);
-            else
-               h1 = image(img_slice);
-            end
-
-            set(gca,'clim',clim);
-         end
-
-      else
-
-         h1 = nii_view.handles.axial_image;
-
-         if ~isequal(get(h1,'parent'), img_ax)
-            h1 = nii_view.handles.coronal_image;
-         end
-
-         if ~isequal(get(h1,'parent'), img_ax)
-            h1 = nii_view.handles.sagittal_image;
-         end
-
-         set(h1, 'cdata', double(img_slice));
-         set(h1, 'xdata', 1:size(img_slice,2));
-         set(h1, 'ydata', 1:size(img_slice,1));
-
-      end
-
-      set(img_ax,'YDir','normal','XLimMode','manual','YLimMode','manual',...
-         'ClimMode','manual','visible','off', ...
-         'xtick',[],'ytick',[], 'clim', clim);
-
-   end
-
-   return;						% plot_view
-
-
-%----------------------------------------------------------------
-function h1 = plot_cbar(fig, cbar_axes, cbarminmax_axes, cbarminmax, ...
-	level, handles, useimagesc, colorindex, color_map, ...
-	colorlevel, highcolor, niiclass, numscan, nii_view)
-
-   cbar_image = [1:level]';
-
-   %  In a uint8 or uint16 indexed image, 0 points to the first row 
-   %  in the colormap
-   %
-   if 0 % strcmpi(niiclass,'uint8') | strcmpi(niiclass,'uint16')
-      % we use single for display anyway
-      ylim = [0, level-1];
-   else
-      ylim = [1, level];
-   end
-
-   axes(cbarminmax_axes);
-
-   plot([0 0], cbarminmax, 'w');
-   axis tight;
-
-   set(cbarminmax_axes,'YDir','normal', ...
-      'XLimMode','manual','YLimMode','manual','YColor',[0 0 0], ...
-      'XColor',[0 0 0],'xtick',[],'YAxisLocation','right');
-
-   ylimb = get(cbarminmax_axes,'ylim');
-   ytickb = get(cbarminmax_axes,'ytick');
-   ytick=(ylim(2)-ylim(1))*(ytickb-ylimb(1))/(ylimb(2)-ylimb(1))+ylim(1);
-
-   axes(cbar_axes);
-
-   if ~exist('nii_view', 'var')
-      nii_view = getappdata(fig, 'nii_view');
-   end
-
-   if isempty(nii_view) | ~isfield(nii_view.handles,'cbar_image') | isempty(nii_view.handles.cbar_image)
-
-      %  set colormap first
-      %
-      nii.handles = handles;
-      nii.colorindex = colorindex;
-      nii.color_map = color_map;
-      nii.colorlevel = colorlevel;
-      nii.highcolor = highcolor;
-      nii.numscan = numscan;
-
-      change_colormap(fig, nii, colorindex, cbarminmax);
-      h1 = image([0,1], [ylim(1),ylim(2)], cbar_image);
-
-   else
-      h1 = nii_view.handles.cbar_image;
-      set(h1, 'cdata', double(cbar_image));
-   end
-
-   set(cbar_axes,'YDir','normal','XLimMode','manual', ...
-	'YLimMode','manual','YColor',[0 0 0],'XColor',[0 0 0],'xtick',[], ...
-	'YAxisLocation','right','ylim',ylim,'ytick',ytick,'yticklabel','');
-
-   return;						% plot_cbar
-
-
-%----------------------------------------------------------------
-function set_coordinates(nii_view,useinterp)
-
-    imgPlim.vox = nii_view.dims;
-    imgNlim.vox = [1 1 1];
-
-    if useinterp    
-       xdata_ax = [imgNlim.vox(1) imgPlim.vox(1)];
-       ydata_ax = [imgNlim.vox(2) imgPlim.vox(2)];
-       zdata_ax = [imgNlim.vox(3) imgPlim.vox(3)];
-    else
-       xdata_ax = [imgNlim.vox(1)-0.5 imgPlim.vox(1)+0.5];
-       ydata_ax = [imgNlim.vox(2)-0.5 imgPlim.vox(2)+0.5];
-       zdata_ax = [imgNlim.vox(3)-0.5 imgPlim.vox(3)+0.5];
-    end
-
-    if isfield(nii_view.handles,'axial_image') & ~isempty(nii_view.handles.axial_image)
-        set(nii_view.handles.axial_axes,'Xlim',xdata_ax);
-        set(nii_view.handles.axial_axes,'Ylim',ydata_ax);
-    end;
-    if isfield(nii_view.handles,'coronal_image') & ~isempty(nii_view.handles.coronal_image)
-        set(nii_view.handles.coronal_axes,'Xlim',xdata_ax);
-        set(nii_view.handles.coronal_axes,'Ylim',zdata_ax);
-    end;
-    if isfield(nii_view.handles,'sagittal_image') & ~isempty(nii_view.handles.sagittal_image)
-        set(nii_view.handles.sagittal_axes,'Xlim',ydata_ax);
-        set(nii_view.handles.sagittal_axes,'Ylim',zdata_ax);
-    end;
-
-    return						% set_coordinates
-
-
-%----------------------------------------------------------------
-function set_image_value(nii_view),
-
-    %  get coordinates of selected voxel and the image intensity there
-    %
-    sag = round(nii_view.slices.sag);
-    cor = round(nii_view.slices.cor);
-    axi = round(nii_view.slices.axi);
-
-    if 0 % isfield(nii_view, 'disp')
-       img = nii_view.disp;    
-    else
-       img = nii_view.nii.img;
-    end
-
-    if nii_view.nii.hdr.dime.datatype == 128
-       imgvalue = [double(img(sag,cor,axi,1,nii_view.scanid)) double(img(sag,cor,axi,2,nii_view.scanid)) double(img(sag,cor,axi,3,nii_view.scanid))];
-       set(nii_view.handles.imval,'Value',imgvalue);
-       set(nii_view.handles.imval,'String',sprintf('%7.4g %7.4g %7.4g',imgvalue));
-    elseif nii_view.nii.hdr.dime.datatype == 511
-       R = double(img(sag,cor,axi,1,nii_view.scanid)) * (nii_view.nii.hdr.dime.glmax - ...
-		nii_view.nii.hdr.dime.glmin) + nii_view.nii.hdr.dime.glmin;
-       G = double(img(sag,cor,axi,2,nii_view.scanid)) * (nii_view.nii.hdr.dime.glmax - ...
-		nii_view.nii.hdr.dime.glmin) + nii_view.nii.hdr.dime.glmin;
-       B = double(img(sag,cor,axi,3,nii_view.scanid)) * (nii_view.nii.hdr.dime.glmax - ...
-		nii_view.nii.hdr.dime.glmin) + nii_view.nii.hdr.dime.glmin;
-       imgvalue = [double(img(sag,cor,axi,1,nii_view.scanid)) double(img(sag,cor,axi,2,nii_view.scanid)) double(img(sag,cor,axi,3,nii_view.scanid))];
-       set(nii_view.handles.imval,'Value',imgvalue);
-       imgvalue = [R G B];
-       set(nii_view.handles.imval,'String',sprintf('%7.4g %7.4g %7.4g',imgvalue));
-    else
-       imgvalue = double(img(sag,cor,axi,nii_view.scanid));
-       set(nii_view.handles.imval,'Value',imgvalue);
-
-       if isnan(imgvalue) | imgvalue > nii_view.cbarminmax(2)
-          imgvalue = 0;
-       end
-
-       set(nii_view.handles.imval,'String',sprintf('%.6g',imgvalue));
-    end
-
-    % Now update the coordinates of the selected voxel
-
-    nii_view = update_imgXYZ(nii_view);
-
-    if get(nii_view.handles.coord,'value') == 1,
-       sag = nii_view.imgXYZ.vox(1);
-       cor = nii_view.imgXYZ.vox(2);
-       axi = nii_view.imgXYZ.vox(3);
-       org = nii_view.origin;
-    elseif get(nii_view.handles.coord,'value') == 2,
-       sag = nii_view.imgXYZ.mm(1);
-       cor = nii_view.imgXYZ.mm(2);
-       axi = nii_view.imgXYZ.mm(3);
-       org = [0 0 0];
-    elseif get(nii_view.handles.coord,'value') == 3,
-       sag = nii_view.imgXYZ.tal(1);
-       cor = nii_view.imgXYZ.tal(2);
-       axi = nii_view.imgXYZ.tal(3);
-       org = [0 0 0];
-    end
-
-    set(nii_view.handles.impos,'Value',[sag,cor,axi]);
-
-    if get(nii_view.handles.coord,'value') == 1,
-        string = sprintf('%7.0f %7.0f %7.0f',sag,cor,axi);
-        org_str = sprintf('%7.0f %7.0f %7.0f', org(1), org(2), org(3));
-    else
-        string = sprintf('%7.1f %7.1f %7.1f',sag,cor,axi);
-        org_str = sprintf('%7.1f %7.1f %7.1f', org(1), org(2), org(3));
-    end;
-    
-    set(nii_view.handles.impos,'String',string);
-    set(nii_view.handles.origin, 'string', org_str);
-
-    return						% set_image_value
-
-
-%----------------------------------------------------------------
-function nii_view = get_slice_position(nii_view,view),
-
-    %  obtain slices that is in correct unit, then update slices
-    %
-    slices = nii_view.slices;
-	
-    switch view,
-    case 'sag',
-        currentpoint = get(nii_view.handles.sagittal_axes,'CurrentPoint');
-        slices.cor = currentpoint(1,1);
-        slices.axi = currentpoint(1,2);
-    case 'cor',
-        currentpoint = get(nii_view.handles.coronal_axes,'CurrentPoint');
-        slices.sag = currentpoint(1,1);
-        slices.axi = currentpoint(1,2);
-    case 'axi',
-        currentpoint = get(nii_view.handles.axial_axes,'CurrentPoint');
-        slices.sag = currentpoint(1,1);
-        slices.cor = currentpoint(1,2);
-    end
-
-    %  update nii_view.slices with the updated slices
-    %    
-    nii_view.slices.axi = round(slices.axi);
-    nii_view.slices.cor = round(slices.cor);
-    nii_view.slices.sag = round(slices.sag);
-
-    return						% get_slice_position
-
-
-%----------------------------------------------------------------
-function nii_view = get_slider_position(nii_view),
-
-    [nii_view.slices.sag,nii_view.slices.cor,nii_view.slices.axi] = deal(0);
-    
-    if isfield(nii_view.handles,'sagittal_slider'),
-        if ishandle(nii_view.handles.sagittal_slider),
-            nii_view.slices.sag = ...
-		round(get(nii_view.handles.sagittal_slider,'Value'));
-        end
-    end
-    
-    if isfield(nii_view.handles,'coronal_slider'),
-        if ishandle(nii_view.handles.coronal_slider),
-            nii_view.slices.cor = ...
-		round(nii_view.dims(2) - ...
-		get(nii_view.handles.coronal_slider,'Value') + 1);
-        end
-    end
-    
-    if isfield(nii_view.handles,'axial_slider'),
-        if ishandle(nii_view.handles.axial_slider),
-            nii_view.slices.axi = ...
-		round(get(nii_view.handles.axial_slider,'Value'));
-        end
-    end
-
-    nii_view = check_slices(nii_view);
-
-    return						% get_slider_position
-
-
-%----------------------------------------------------------------
-function nii_view = update_imgXYZ(nii_view),
-
-   nii_view.imgXYZ.vox = ...
-	[nii_view.slices.sag,nii_view.slices.cor,nii_view.slices.axi];
-   nii_view.imgXYZ.mm = ...
-	(nii_view.imgXYZ.vox - nii_view.origin) .* nii_view.voxel_size;
-%   nii_view.imgXYZ.tal = mni2tal(nii_view.imgXYZ.mni);
-
-   return						% update_imgXYZ
-
-
-%----------------------------------------------------------------
-function nii_view = convert2voxel(nii_view,slices),
-
-    if get(nii_view.handles.coord,'value') == 1,
-
-        %  [slices.axi, slices.cor, slices.sag] are in vox
-        %
-        nii_view.slices.axi = round(slices.axi);
-        nii_view.slices.cor = round(slices.cor);
-        nii_view.slices.sag = round(slices.sag);
-
-    elseif get(nii_view.handles.coord,'value') == 2,
-
-        %  [slices.axi, slices.cor, slices.sag] are in mm
-        %
-        xpix = nii_view.voxel_size(1);
-        ypix = nii_view.voxel_size(2);
-        zpix = nii_view.voxel_size(3);
-
-        nii_view.slices.axi = round(slices.axi / zpix + nii_view.origin(3));
-        nii_view.slices.cor = round(slices.cor / ypix + nii_view.origin(2));
-        nii_view.slices.sag = round(slices.sag / xpix + nii_view.origin(1));
-    elseif get(nii_view.handles.coord,'value') == 3,
-
-        %  [slices.axi, slices.cor, slices.sag] are in talairach
-        %
-        xpix = nii_view.voxel_size(1);
-        ypix = nii_view.voxel_size(2);
-        zpix = nii_view.voxel_size(3);
-
-        xyz_tal = [slices.sag, slices.cor, slices.axi];
-        xyz_mni = tal2mni(xyz_tal);
-
-        nii_view.slices.axi = round(xyz_mni(3) / zpix + nii_view.origin(3));
-        nii_view.slices.cor = round(xyz_mni(2) / ypix + nii_view.origin(2));
-        nii_view.slices.sag = round(xyz_mni(1) / xpix + nii_view.origin(1));
-
-    end
-
-    return						% convert2voxel
-
-
-%----------------------------------------------------------------
-function nii_view = check_slices(nii_view),
-
-    img = nii_view.nii.img;
-    
-    [ SagSize, CorSize, AxiSize, TimeSize ] = size(img);
-    if nii_view.slices.sag > SagSize, nii_view.slices.sag = SagSize; end;
-    if nii_view.slices.sag < 1, nii_view.slices.sag = 1; end;
-    if nii_view.slices.cor > CorSize, nii_view.slices.cor = CorSize; end;
-    if nii_view.slices.cor < 1, nii_view.slices.cor = 1; end;
-    if nii_view.slices.axi > AxiSize, nii_view.slices.axi = AxiSize; end;
-    if nii_view.slices.axi < 1, nii_view.slices.axi = 1; end;
-    if nii_view.scanid > TimeSize, nii_view.scanid = TimeSize; end;
-    if nii_view.scanid < 1, nii_view.scanid = 1; end;
-    
-    return						% check_slices
-
-
-%----------------------------------------------------------------
-%
-%  keep this function small, since it will be called for every click
-%
-function nii_view = update_nii_view(nii_view)
-
-   %  add imgXYZ into nii_view struct
-   %
-   nii_view = check_slices(nii_view);
-   nii_view = update_imgXYZ(nii_view);
-
-   %  update xhair
-   %
-   p_axi = nii_view.imgXYZ.vox([1 2]);
-   p_cor = nii_view.imgXYZ.vox([1 3]);
-   p_sag = nii_view.imgXYZ.vox([2 3]);
-
-   nii_view.axi_xhair = ...
-	rri_xhair(p_axi, nii_view.axi_xhair, nii_view.handles.axial_axes);
-
-   nii_view.cor_xhair = ...
-	rri_xhair(p_cor, nii_view.cor_xhair, nii_view.handles.coronal_axes);
-
-   nii_view.sag_xhair = ...
-	rri_xhair(p_sag, nii_view.sag_xhair, nii_view.handles.sagittal_axes);
-
-   setappdata(nii_view.fig, 'nii_view', nii_view);
-   set_image_value(nii_view);
-
-   return;						% update_nii_view
-
-
-%----------------------------------------------------------------
-function hist_plot(fig)
-
-   nii_view = getappdata(fig,'nii_view');
-
-   if isfield(nii_view, 'disp')
-      img = nii_view.disp;    
-   else
-      img = nii_view.nii.img;
-   end
-
-   img = double(img(:));
-
-   if length(unique(round(img))) == length(unique(img))
-      is_integer = 1;
-      range = max(img) - min(img) + 1;
-      figure; hist(img, range);
-      set(gca, 'xlim', [-range/5, max(img)]);
-   else
-      is_integer = 0;
-      figure; hist(img);
-   end
-
-   xlabel('Voxel Intensity');
-   ylabel('Voxel Numbers for Each Intensity');
-   set(gcf, 'NumberTitle','off','Name','Histogram Plot');
-
-   return;						% hist_plot
-
-
-%----------------------------------------------------------------
-function hist_eq(fig)
-
-   nii_view = getappdata(fig,'nii_view');
-
-   old_pointer = get(fig,'Pointer');
-   set(fig,'Pointer','watch');
-
-   if get(nii_view.handles.hist_eq,'value')
-      max_img = double(max(nii_view.nii.img(:)));
-      tmp = double(nii_view.nii.img) / max_img;		% normalize for histeq
-      tmp = histeq(tmp(:));
-      nii_view.disp = reshape(tmp, size(nii_view.nii.img));
-      min_disp = min(nii_view.disp(:));
-      nii_view.disp = (nii_view.disp - min_disp);		% range having eq hist
-      nii_view.disp = nii_view.disp * max_img / max(nii_view.disp(:));
-      nii_view.disp = single(nii_view.disp);
-   else
-      if isfield(nii_view, 'disp')
-         nii_view.disp = nii_view.nii.img;
-      else
-         set(fig,'Pointer',old_pointer);
-         return;
-      end
-   end
-
-   %  update axial view
-   %
-   img_slice = squeeze(double(nii_view.disp(:,:,nii_view.slices.axi)));
-   h1 = nii_view.handles.axial_image;
-   set(h1, 'cdata', double(img_slice)');
-
-   %  update coronal view
-   %
-   img_slice = squeeze(double(nii_view.disp(:,nii_view.slices.cor,:)));
-   h1 = nii_view.handles.coronal_image;
-   set(h1, 'cdata', double(img_slice)');
-
-   %  update sagittal view
-   %
-   img_slice = squeeze(double(nii_view.disp(nii_view.slices.sag,:,:)));
-
-   h1 = nii_view.handles.sagittal_image;
-   set(h1, 'cdata', double(img_slice)');
-
-   %  remove disp field if un-check 'histeq' button
-   %
-   if ~get(nii_view.handles.hist_eq,'value') & isfield(nii_view, 'disp')
-      nii_view = rmfield(nii_view, 'disp');
-   end
-
-   update_nii_view(nii_view);
-
-   set(fig,'Pointer',old_pointer);
-
-   return;						% hist_eq
-
-
-%----------------------------------------------------------------
-function [top1_label, top2_label, side1_label, side2_label] = ...
-		dir_label(fig, top_ax, front_ax, side_ax)
-
-   nii_view = getappdata(fig,'nii_view');
-
-   top_pos = get(top_ax,'position');
-   front_pos = get(front_ax,'position');
-   side_pos = get(side_ax,'position');
-
-   top_gap_x = (side_pos(1)-top_pos(1)-top_pos(3)) / (2*top_pos(3));
-   top_gap_y = (front_pos(2)-top_pos(2)-top_pos(4)) / (2*top_pos(4));
-   side_gap_x = (side_pos(1)-top_pos(1)-top_pos(3)) / (2*side_pos(3));
-   side_gap_y = (front_pos(2)-top_pos(2)-top_pos(4)) / (2*side_pos(4));
-
-   top1_label_pos = [0, 1];			% rot0
-   top2_label_pos = [1, 0];			% rot90
-   side1_label_pos = [1, - side_gap_y];		% rot0
-   side2_label_pos = [0, 0];			% rot90
-
-   if isempty(nii_view)
-      axes(top_ax);
-      top1_label = text(double(top1_label_pos(1)),double(top1_label_pos(2)), ...
-	'== X =>', ...
-	'vertical', 'bottom', ...
-	'unit', 'normal', 'fontsize', 8);
-
-      axes(top_ax);
-      top2_label = text(double(top2_label_pos(1)),double(top2_label_pos(2)), ...
-	'== Y =>', ...
-	'rotation', 90, 'vertical', 'top', ...
-	'unit', 'normal', 'fontsize', 8);
-
-      axes(side_ax);
-      side1_label = text(double(side1_label_pos(1)),double(side1_label_pos(2)), ...
-	'<= Y ==', ...
-	'horizontal', 'right', 'vertical', 'top', ...
-	'unit', 'normal', 'fontsize', 8);
-
-      axes(side_ax);
-      side2_label = text(double(side2_label_pos(1)),double(side2_label_pos(2)), ...
-	'== Z =>', ...
-	'rotation', 90, 'vertical', 'bottom', ...
-	'unit', 'normal', 'fontsize', 8);
-   else
-      top1_label = nii_view.handles.top1_label;
-      top2_label = nii_view.handles.top2_label;
-      side1_label = nii_view.handles.side1_label;
-      side2_label = nii_view.handles.side2_label;
-
-      set(top1_label, 'position', [top1_label_pos 0]);
-      set(top2_label, 'position', [top2_label_pos 0]);
-      set(side1_label, 'position', [side1_label_pos 0]);
-      set(side2_label, 'position', [side2_label_pos 0]);
-   end
-
-   return;						% dir_label
-
-
-%----------------------------------------------------------------
-function update_enable(h, opt);
-
-   nii_view = getappdata(h,'nii_view');
-   handles = nii_view.handles;
-
-   if isfield(opt,'enablecursormove')
-      if opt.enablecursormove
-         v = 'on';
-      else
-         v = 'off';
-      end
-
-      set(handles.Timposcur, 'visible', v);
-      set(handles.imposcur, 'visible', v);
-      set(handles.Timvalcur, 'visible', v);
-      set(handles.imvalcur, 'visible', v);
-   end
-
-   if isfield(opt,'enableviewpoint')
-      if opt.enableviewpoint
-         v = 'on';
-      else
-         v = 'off';
-      end
-
-      set(handles.Timpos, 'visible', v);
-      set(handles.impos, 'visible', v);
-      set(handles.Timval, 'visible', v);
-      set(handles.imval, 'visible', v);
-   end
-
-   if isfield(opt,'enableorigin')
-      if opt.enableorigin
-         v = 'on';
-      else
-         v = 'off';
-      end
-
-      set(handles.Torigin, 'visible', v);
-      set(handles.origin, 'visible', v);
-   end
-
-   if isfield(opt,'enableunit')
-      if opt.enableunit
-         v = 'on';
-      else
-         v = 'off';
-      end
-
-      set(handles.Tcoord, 'visible', v);
-      set(handles.coord_frame, 'visible', v);
-      set(handles.coord, 'visible', v);
-   end
-
-   if isfield(opt,'enablecrosshair')
-      if opt.enablecrosshair
-         v = 'on';
-      else
-         v = 'off';
-      end
-
-      set(handles.Txhair, 'visible', v);
-      set(handles.xhair_color, 'visible', v);
-      set(handles.xhair, 'visible', v);
-   end
-
-   if isfield(opt,'enablehistogram')
-      if opt.enablehistogram
-         v = 'on';
-         vv = 'off';
-      else
-         v = 'off';
-         vv = 'on';
-      end
-
-      set(handles.Tcoord, 'visible', vv);
-      set(handles.coord_frame, 'visible', vv);
-      set(handles.coord, 'visible', vv);
-
-      set(handles.Thist, 'visible', v);
-      set(handles.hist_frame, 'visible', v);
-      set(handles.hist_eq, 'visible', v);
-      set(handles.hist_plot, 'visible', v);
-   end
-
-   if isfield(opt,'enablecolormap')
-      if opt.enablecolormap
-         v = 'on';
-      else
-         v = 'off';
-      end
-
-      set(handles.Tcolor, 'visible', v);
-      set(handles.color_frame, 'visible', v);
-      set(handles.neg_color, 'visible', v);
-      set(handles.colorindex, 'visible', v);
-   end
-
-   if isfield(opt,'enablecontrast')
-      if opt.enablecontrast
-         v = 'on';
-      else
-         v = 'off';
-      end
-
-      set(handles.Tcontrast, 'visible', v);
-      set(handles.contrast_frame, 'visible', v);
-      set(handles.contrast_def, 'visible', v);
-      set(handles.contrast, 'visible', v);
-   end
-
-   if isfield(opt,'enablebrightness')
-      if opt.enablebrightness
-         v = 'on';
-      else
-         v = 'off';
-      end
-
-      set(handles.Tbrightness, 'visible', v);
-      set(handles.brightness_frame, 'visible', v);
-      set(handles.brightness_def, 'visible', v);
-      set(handles.brightness, 'visible', v);
-   end
-
-   if isfield(opt,'enabledirlabel')
-      if opt.enabledirlabel
-         v = 'on';
-      else
-         v = 'off';
-      end
-
-      set(handles.top1_label, 'visible', v);
-      set(handles.top2_label, 'visible', v);
-      set(handles.side1_label, 'visible', v);
-      set(handles.side2_label, 'visible', v);
-   end
-
-   if isfield(opt,'enableslider')
-      if opt.enableslider
-         v = 'on';
-      else
-         v = 'off';
-      end
-
-      if isfield(handles,'sagittal_slider') & ishandle(handles.sagittal_slider)
-         set(handles.sagittal_slider, 'visible', v);
-      end
-
-      if isfield(handles,'coronal_slider') & ishandle(handles.coronal_slider)
-         set(handles.coronal_slider, 'visible', v);
-      end
-
-      if isfield(handles,'axial_slider') & ishandle(handles.axial_slider)
-         set(handles.axial_slider, 'visible', v);
-      end
-   end
-
-   return;					% update_enable
-
-
-%----------------------------------------------------------------
-function update_usepanel(fig, usepanel)
-
-   if isempty(usepanel)
-      return;
-   end
-
-   if usepanel
-      opt.enablecursormove = 1;
-      opt.enableviewpoint = 1;
-      opt.enableorigin = 1;
-      opt.enableunit = 1;
-      opt.enablecrosshair = 1;
-%      opt.enablehistogram = 1;
-      opt.enablecolormap = 1;
-      opt.enablecontrast = 1;
-      opt.enablebrightness = 1;
-   else
-      opt.enablecursormove = 0;
-      opt.enableviewpoint = 0;
-      opt.enableorigin = 0;
-      opt.enableunit = 0;
-      opt.enablecrosshair = 0;
-%      opt.enablehistogram = 0;
-      opt.enablecolormap = 0;
-      opt.enablecontrast = 0;
-      opt.enablebrightness = 0;
-   end
-
-   update_enable(fig, opt);
-
-   nii_view = getappdata(fig,'nii_view');
-   nii_view.usepanel = usepanel;
-   setappdata(fig,'nii_view',nii_view);
-
-   return;					% update_usepanel
-
-
-%----------------------------------------------------------------
-function update_usecrosshair(fig, usecrosshair)
-
-   if isempty(usecrosshair)
-      return;
-   end
-
-   if usecrosshair
-      v=1;
-   else
-      v=2;
-   end
-
-   nii_view = getappdata(fig,'nii_view');
-   set(nii_view.handles.xhair,'value',v);
-
-   opt.command = 'crosshair';
-   view_nii(fig, opt);
-
-   return;					% update_usecrosshair
-
-
-%----------------------------------------------------------------
-function update_usestretch(fig, usestretch)
-
-   nii_view = getappdata(fig,'nii_view');
-
-   handles = nii_view.handles;
-   fig = nii_view.fig;
-   area = nii_view.area;
-   vol_size = nii_view.voxel_size .* nii_view.dims;
-
-   %  Three Axes & label
-   %
-   [top_ax, front_ax, side_ax] = ...
-	create_ax(fig, area, vol_size, usestretch);
-
-   dir_label(fig, top_ax, front_ax, side_ax);
-
-   top_pos = get(top_ax,'position');
-   front_pos = get(front_ax,'position');
-   side_pos = get(side_ax,'position');
-
-   %  Sagittal Slider
-   %
-   x = side_pos(1);
-   y = top_pos(2) + top_pos(4);
-   w = side_pos(3);
-   h = (front_pos(2) - y) / 2;
-   y = y + h;
-   pos = [x y w h];
-
-   if isfield(handles,'sagittal_slider') & ishandle(handles.sagittal_slider)
-      set(handles.sagittal_slider,'position',pos);
-   end
-
-   %  Coronal Slider
-   %
-   x = top_pos(1);
-   y = top_pos(2) + top_pos(4);
-   w = top_pos(3);
-   h = (front_pos(2) - y) / 2;
-   y = y + h;
-   pos = [x y w h];
-
-   if isfield(handles,'coronal_slider') & ishandle(handles.coronal_slider)
-      set(handles.coronal_slider,'position',pos);
-   end
-
-   %  Axial Slider
-   %
-   x = top_pos(1);
-   y = area(2);
-   w = top_pos(3);
-   h = top_pos(2) - y;
-   pos = [x y w h];
-
-   if isfield(handles,'axial_slider') & ishandle(handles.axial_slider)
-      set(handles.axial_slider,'position',pos);
-   end
-
-   %  plot info view
-   %
-%   info_pos = [side_pos([1,3]); top_pos([2,4])];
-%   info_pos = info_pos(:);
-   gap = side_pos(1)-(top_pos(1)+top_pos(3));
-   info_pos(1) = side_pos(1) + gap;
-   info_pos(2) = area(2);
-   info_pos(3) = side_pos(3) - gap;
-   info_pos(4) = top_pos(2) + top_pos(4) - area(2) - gap;
-
-   num_inputline = 10;
-   inputline_space =info_pos(4) / num_inputline;
-
-
-   %  Image Intensity Value at Cursor
-   %
-   x = info_pos(1);
-   y = info_pos(2);
-   w = info_pos(3)*0.5;
-   h = inputline_space*0.6;
-
-   pos = [x y w h];
-   set(handles.Timvalcur,'position',pos);
-
-   x = x + w;
-   w = info_pos(3)*0.5;
-
-   pos = [x y w h];
-   set(handles.imvalcur,'position',pos);
-
-   %  Position at Cursor
-   %
-   x = info_pos(1);
-   y = y + inputline_space;
-   w = info_pos(3)*0.5;
-
-   pos = [x y w h];
-   set(handles.Timposcur,'position',pos);
-
-   x = x + w;
-   w = info_pos(3)*0.5;
-
-   pos = [x y w h];
-   set(handles.imposcur,'position',pos);
-
-   %  Image Intensity Value at Mouse Click
-   %
-   x = info_pos(1);
-   y = y + inputline_space;
-   w = info_pos(3)*0.5;
-
-   pos = [x y w h];
-   set(handles.Timval,'position',pos);
-
-   x = x + w;
-   w = info_pos(3)*0.5;
-
-   pos = [x y w h];
-   set(handles.imval,'position',pos);
-
-   %  Viewpoint Position at Mouse Click
-   %
-   x = info_pos(1);
-   y = y + inputline_space;
-   w = info_pos(3)*0.5;
-
-   pos = [x y w h];
-   set(handles.Timpos,'position',pos);
-
-   x = x + w + 0.005;
-   y = y - 0.008;
-   w = info_pos(3)*0.5;
-   h = inputline_space*0.9;
-
-   pos = [x y w h];
-   set(handles.impos,'position',pos);
-
-   %  Origin Position
-   %
-   x = info_pos(1);
-   y = y + inputline_space*1.2;
-   w = info_pos(3)*0.5;
-   h = inputline_space*0.6;
-
-   pos = [x y w h];
-   set(handles.Torigin,'position',pos);
-
-   x = x + w;
-   w = info_pos(3)*0.5;
-
-   pos = [x y w h];
-   set(handles.origin,'position',pos);
-
-if 0
-   %  Axes Unit
-   %
-   x = info_pos(1);
-   y = y + inputline_space;
-   w = info_pos(3)*0.5;
-
-   pos = [x y w h];
-   set(handles.Tcoord,'position',pos);
-
-   x = x + w + 0.005;
-   w = info_pos(3)*0.5 - 0.005;
-
-   pos = [x y w h];
-   set(handles.coord,'position',pos);
-end
-
-   %  Crosshair
-   %
-   x = info_pos(1);
-   y = y + inputline_space;
-   w = info_pos(3)*0.4;
-
-   pos = [x y w h];
-   set(handles.Txhair,'position',pos);
-
-   x = info_pos(1) + info_pos(3)*0.5;
-   w = info_pos(3)*0.2;
-   h = inputline_space*0.7;
-
-   pos = [x y w h];
-   set(handles.xhair_color,'position',pos);
-
-   x = info_pos(1) + info_pos(3)*0.7;
-   w = info_pos(3)*0.3;
-
-   pos = [x y w h];
-   set(handles.xhair,'position',pos);
-
-   %  Histogram & Color
-   %
-   x = info_pos(1);
-   w = info_pos(3)*0.45;
-   h = inputline_space * 1.5;
-   pos = [x,  y+inputline_space*0.9,  w,  h];
-   set(handles.hist_frame,'position',pos);
-   set(handles.coord_frame,'position',pos);
-
-   x = info_pos(1) + info_pos(3)*0.475;
-   w = info_pos(3)*0.525;
-   h = inputline_space * 1.5;
-
-   pos = [x,  y+inputline_space*0.9,  w,  h];
-   set(handles.color_frame,'position',pos);
-
-   x = info_pos(1) + info_pos(3)*0.025;
-   y = y + inputline_space*1.2;
-   w = info_pos(3)*0.2;
-   h = inputline_space*0.7;
-
-   pos = [x y w h];
-   set(handles.hist_eq,'position',pos);
-
-   x = x + w;
-   w = info_pos(3)*0.2;
-
-   pos = [x y w h];
-   set(handles.hist_plot,'position',pos);
-
-   x = info_pos(1) + info_pos(3)*0.025;
-   w = info_pos(3)*0.4;
-
-   pos = [x y w h];
-   set(handles.coord,'position',pos);
-
-   x = info_pos(1) + info_pos(3)*0.5;
-   w = info_pos(3)*0.2;
-   pos = [x y w h];
-   set(handles.neg_color,'position',pos);
-
-   x = info_pos(1) + info_pos(3)*0.7;
-   w = info_pos(3)*0.275;
-
-   pos = [x y w h];
-   set(handles.colorindex,'position',pos);
-
-   x = info_pos(1) + info_pos(3)*0.1;
-   y = y + inputline_space;
-   w = info_pos(3)*0.28;
-   h = inputline_space*0.6;
-
-   pos = [x y w h];
-   set(handles.Thist,'position',pos);
-   set(handles.Tcoord,'position',pos);
-
-   x = info_pos(1) + info_pos(3)*0.60;
-   w = info_pos(3)*0.28;
-
-   pos = [x y w h];
-   set(handles.Tcolor,'position',pos);
-
-   %  Contrast Frame
-   %
-   x = info_pos(1);
-   w = info_pos(3)*0.45;
-   h = inputline_space * 2;
-
-   pos = [x,  y+inputline_space*0.8,  w,  h];
-   set(handles.contrast_frame,'position',pos);
-
-   %  Brightness Frame
-   %
-   x = info_pos(1) + info_pos(3)*0.475;
-   w = info_pos(3)*0.525;
-
-   pos = [x,  y+inputline_space*0.8,  w,  h];
-   set(handles.brightness_frame,'position',pos);
-
-   %  Contrast
-   %
-   x = info_pos(1) + info_pos(3)*0.025;
-   y = y + inputline_space;
-   w = info_pos(3)*0.4;
-   h = inputline_space*0.6;
-
-   pos = [x y w h];
-   set(handles.contrast,'position',pos);
-
-   %  Brightness
-   %
-   x = info_pos(1) + info_pos(3)*0.5;
-   w = info_pos(3)*0.475;
-
-   pos = [x y w h];
-   set(handles.brightness,'position',pos);
-
-   %  Contrast text/def
-   %
-   x = info_pos(1) + info_pos(3)*0.025;
-   y = y + inputline_space;
-   w = info_pos(3)*0.22;
-
-   pos = [x y w h];
-   set(handles.Tcontrast,'position',pos);
-
-   x = x + w;
-   w = info_pos(3)*0.18;
-
-   pos = [x y w h];
-   set(handles.contrast_def,'position',pos);
-
-   %  Brightness text/def
-   %
-   x = info_pos(1) + info_pos(3)*0.5;
-   w = info_pos(3)*0.295;
-
-   pos = [x y w h];
-   set(handles.Tbrightness,'position',pos);
-
-   x = x + w;
-   w = info_pos(3)*0.18;
-
-   pos = [x y w h];
-   set(handles.brightness_def,'position',pos);
-
-   return;					% update_usestretch
-
-
-%----------------------------------------------------------------
-function update_useinterp(fig, useinterp)
-
-   if isempty(useinterp)
-      return;
-   end
-
-   nii_menu = getappdata(fig, 'nii_menu');
-
-   if ~isempty(nii_menu)
-      if get(nii_menu.Minterp,'user')
-         set(nii_menu.Minterp,'Userdata',0,'Label','Interp off');
-      else
-         set(nii_menu.Minterp,'Userdata',1,'Label','Interp on');
-      end
-   end
-
-   nii_view = getappdata(fig, 'nii_view');
-   nii_view.useinterp = useinterp;
-
-   if ~isempty(nii_view.handles.axial_image)
-      if strcmpi(get(nii_view.handles.axial_image,'cdatamapping'), 'direct')
-         useimagesc = 0;
-      else
-         useimagesc = 1;
-      end
-   elseif ~isempty(nii_view.handles.coronal_image)
-      if strcmpi(get(nii_view.handles.coronal_image,'cdatamapping'), 'direct')
-         useimagesc = 0;
-      else
-         useimagesc = 1;
-      end
-   else
-      if strcmpi(get(nii_view.handles.sagittal_image,'cdatamapping'), 'direct')
-         useimagesc = 0;
-      else
-         useimagesc = 1;
-      end
-   end
-
-   if ~isempty(nii_view.handles.axial_image)
-      img_slice = get(nii_view.handles.axial_image, 'cdata');
-      delete(nii_view.handles.axial_image);
-      axes(nii_view.handles.axial_axes);
-      clim = get(gca,'clim');
-
-      if useinterp
-         if useimagesc
-            nii_view.handles.axial_image = surface(zeros(size(img_slice)),double(img_slice),'edgecolor','none','facecolor','interp');
-         else
-            nii_view.handles.axial_image = surface(zeros(size(img_slice)),double(img_slice),'cdatamapping','direct','edgecolor','none','facecolor','interp');
-         end
-      else
-         if useimagesc
-            nii_view.handles.axial_image = imagesc('cdata',img_slice);
-         else
-            nii_view.handles.axial_image = image('cdata',img_slice);
-         end
-      end
-
-      set(gca,'clim',clim);
-
-      order = get(gca,'child');
-      order(find(order == nii_view.handles.axial_image)) = [];
-      order = [order; nii_view.handles.axial_image];
-
-      if isfield(nii_view.handles,'axial_bg') & ~isempty(nii_view.handles.axial_bg)
-         order(find(order == nii_view.handles.axial_bg)) = [];
-         order = [order; nii_view.handles.axial_bg];
-      end
-
-      set(gca, 'child', order);
-
-      if ~useinterp
-         if isfield(nii_view.handles,'axial_bg') & ~isempty(nii_view.handles.axial_bg)
-            delete(nii_view.handles.axial_bg);
-            nii_view.handles.axial_bg = [];
-         end
-      end
-
-      set(nii_view.handles.axial_image,'buttondown','view_nii(''axial_image'');');
-   end
-
-   if ~isempty(nii_view.handles.coronal_image)
-      img_slice = get(nii_view.handles.coronal_image, 'cdata');
-      delete(nii_view.handles.coronal_image);
-      axes(nii_view.handles.coronal_axes);
-      clim = get(gca,'clim');
-
-      if useinterp
-         if useimagesc
-            nii_view.handles.coronal_image = surface(zeros(size(img_slice)),double(img_slice),'edgecolor','none','facecolor','interp');
-         else
-            nii_view.handles.coronal_image = surface(zeros(size(img_slice)),double(img_slice),'cdatamapping','direct','edgecolor','none','facecolor','interp');
-         end
-      else
-         if useimagesc
-            nii_view.handles.coronal_image = imagesc('cdata',img_slice);
-         else
-            nii_view.handles.coronal_image = image('cdata',img_slice);
-         end
-      end
-
-      set(gca,'clim',clim);
-
-      order = get(gca,'child');
-      order(find(order == nii_view.handles.coronal_image)) = [];
-      order = [order; nii_view.handles.coronal_image];
-
-      if isfield(nii_view.handles,'coronal_bg') & ~isempty(nii_view.handles.coronal_bg)
-         order(find(order == nii_view.handles.coronal_bg)) = [];
-         order = [order; nii_view.handles.coronal_bg];
-      end
-
-      set(gca, 'child', order);
-
-      if ~useinterp
-         if isfield(nii_view.handles,'coronal_bg') & ~isempty(nii_view.handles.coronal_bg)
-            delete(nii_view.handles.coronal_bg);
-            nii_view.handles.coronal_bg = [];
-         end
-      end
-
-      set(nii_view.handles.coronal_image,'buttondown','view_nii(''coronal_image'');');
-   end
-
-   if ~isempty(nii_view.handles.sagittal_image)
-      img_slice = get(nii_view.handles.sagittal_image, 'cdata');
-      delete(nii_view.handles.sagittal_image);
-      axes(nii_view.handles.sagittal_axes);
-      clim = get(gca,'clim');
-
-      if useinterp
-         if useimagesc
-            nii_view.handles.sagittal_image = surface(zeros(size(img_slice)),double(img_slice),'edgecolor','none','facecolor','interp');
-         else
-            nii_view.handles.sagittal_image = surface(zeros(size(img_slice)),double(img_slice),'cdatamapping','direct','edgecolor','none','facecolor','interp');
-         end
-      else
-         if useimagesc
-            nii_view.handles.sagittal_image = imagesc('cdata',img_slice);
-         else
-            nii_view.handles.sagittal_image = image('cdata',img_slice);
-         end
-      end
-
-      set(gca,'clim',clim);
-
-      order = get(gca,'child');
-      order(find(order == nii_view.handles.sagittal_image)) = [];
-      order = [order; nii_view.handles.sagittal_image];
-
-      if isfield(nii_view.handles,'sagittal_bg') & ~isempty(nii_view.handles.sagittal_bg)
-         order(find(order == nii_view.handles.sagittal_bg)) = [];
-         order = [order; nii_view.handles.sagittal_bg];
-      end
-
-      set(gca, 'child', order);
-
-      if ~useinterp
-         if isfield(nii_view.handles,'sagittal_bg') & ~isempty(nii_view.handles.sagittal_bg)
-            delete(nii_view.handles.sagittal_bg);
-            nii_view.handles.sagittal_bg = [];
-         end
-      end
-
-      set(nii_view.handles.sagittal_image,'buttondown','view_nii(''sagittal_image'');');
-   end
-
-   if ~useinterp
-      nii_view.bgimg = [];
-   end
-
-   set_coordinates(nii_view,useinterp);
-   setappdata(fig, 'nii_view', nii_view);
-
-   return;					% update_useinterp
-
-
-%----------------------------------------------------------------
-function update_useimagesc(fig, useimagesc)
-
-   if isempty(useimagesc)
-      return;
-   end
-
-   if useimagesc
-      v='scaled';
-   else
-      v='direct';
-   end
-
-   nii_view = getappdata(fig,'nii_view');
-   handles = nii_view.handles;
-
-   if isfield(handles,'cbar_image') & ishandle(handles.cbar_image)
-%      set(handles.cbar_image,'cdatamapping',v);
-   end
-
-   set(handles.axial_image,'cdatamapping',v);
-   set(handles.coronal_image,'cdatamapping',v);
-   set(handles.sagittal_image,'cdatamapping',v);
-
-   return;					% update_useimagesc
-
-
-%----------------------------------------------------------------
-function update_shape(fig, area, usecolorbar, usestretch, useimagesc)
-
-   nii_view = getappdata(fig,'nii_view');
-
-   if isempty(usestretch)		% no change, get usestretch
-      stretchchange = 0;
-      usestretch = nii_view.usestretch;
-   else					% change, set usestretch
-      stretchchange = 1;
-      nii_view.usestretch = usestretch;
-   end
-
-   if isempty(area)			% no change, get area
-
-      areachange = 0;
-      area = nii_view.area;
-
-   elseif ~isempty(nii_view.cbar_area)	% change, set area & cbar_area
-
-      areachange = 1;
-      cbar_area = area;
-      cbar_area(1) = area(1) + area(3)*0.93;
-      cbar_area(3) = area(3)*0.04;
-      area(3) = area(3)*0.9;		% 90% used for main axes
-
-      [cbar_axes cbarminmax_axes] = create_cbar_axes(fig, cbar_area);
-
-      nii_view.area = area;
-      nii_view.cbar_area = cbar_area;
-
-   else					% change, set area only
-      areachange = 1;
-      nii_view.area = area;
-   end
-
-   %  Add colorbar
-   %
-   if ~isempty(usecolorbar) & usecolorbar & isempty(nii_view.cbar_area)
-
-      colorbarchange = 1;
-
-      cbar_area = area;
-      cbar_area(1) = area(1) + area(3)*0.93;
-      cbar_area(3) = area(3)*0.04;
-      area(3) = area(3)*0.9;		% 90% used for main axes
-
-      %  create axes for colorbar
-      %
-      [cbar_axes cbarminmax_axes] = create_cbar_axes(fig, cbar_area);
-
-      nii_view.area = area;
-      nii_view.cbar_area = cbar_area;
-
-      %  useimagesc follows axial image
-      %
-      if isempty(useimagesc)
-         if strcmpi(get(nii_view.handles.axial_image,'cdatamap'),'scaled')
-            useimagesc = 1;
-         else
-            useimagesc = 0;
-         end
-      end
-
-      if isfield(nii_view, 'highcolor') & ~isempty(highcolor)
-         num_highcolor = size(nii_view.highcolor,1);
-      else
-         num_highcolor = 0;
-      end
-
-      if isfield(nii_view, 'colorlevel') & ~isempty(nii_view.colorlevel)
-         colorlevel = nii_view.colorlevel;
-      else
-         colorlevel = 256 - num_highcolor;
-      end
-
-      if isfield(nii_view, 'color_map')
-         color_map = nii_view.color_map;
-      else
-         color_map = [];
-      end
-
-      if isfield(nii_view, 'highcolor')
-         highcolor = nii_view.highcolor;
-      else
-         highcolor = [];
-      end
-
-      %  plot colorbar
-      %
-if 0
-      if isempty(color_map)
-         level = colorlevel + num_highcolor;
-      else
-         level = size([color_map; highcolor], 1);
-      end
-end
-
-      if isempty(color_map)
-         level = colorlevel;
-      else
-         level = size([color_map], 1);
-      end
-
-      cbar_image = [1:level]';
-
-      niiclass = class(nii_view.nii.img);
-
-      h1 = plot_cbar(fig, cbar_axes, cbarminmax_axes, nii_view.cbarminmax, ...
-		level, nii_view.handles, useimagesc, nii_view.colorindex, ...
-		color_map, colorlevel, highcolor, niiclass, nii_view.numscan);
-      nii_view.handles.cbar_image = h1;
-      nii_view.handles.cbar_axes = cbar_axes;
-      nii_view.handles.cbarminmax_axes = cbar_axes;
-
-   %  remove colorbar
-   %
-   elseif ~isempty(usecolorbar) & ~usecolorbar & ~isempty(nii_view.cbar_area)
-
-      colorbarchange = 1;
-
-      area(3) = area(3) / 0.9;
-
-      nii_view.area = area;
-      nii_view.cbar_area = [];
-
-      nii_view.handles = rmfield(nii_view.handles,'cbar_image');
-      delete(nii_view.handles.cbarminmax_axes);
-      nii_view.handles = rmfield(nii_view.handles,'cbarminmax_axes');
-      delete(nii_view.handles.cbar_axes);
-      nii_view.handles = rmfield(nii_view.handles,'cbar_axes');
-
-   else
-      colorbarchange = 0;
-   end
-
-   if colorbarchange | stretchchange | areachange
-      setappdata(fig,'nii_view',nii_view);
-      update_usestretch(fig, usestretch);
-   end
-
-   return;					% update_shape
-
-
-%----------------------------------------------------------------
-function update_unit(fig, setunit)
-
-   if isempty(setunit)
-      return;
-   end
-
-   if strcmpi(setunit,'mm') | strcmpi(setunit,'millimeter') | strcmpi(setunit,'mni')
-      v = 2;
-%   elseif strcmpi(setunit,'tal') | strcmpi(setunit,'talairach')
- %     v = 3;
-   elseif strcmpi(setunit,'vox') | strcmpi(setunit,'voxel')
-      v = 1;
-   else
-      v = 1;
-   end
-
-   nii_view = getappdata(fig,'nii_view');
-   set(nii_view.handles.coord, 'value', v);
-   set_image_value(nii_view);
-
-   return;					% update_unit
-
-
-%----------------------------------------------------------------
-function update_viewpoint(fig, setviewpoint)
-
-   if isempty(setviewpoint)
-      return;
-   end
-
-   nii_view = getappdata(fig,'nii_view');
-
-   if length(setviewpoint) ~= 3
-      error('Viewpoint position should contain [x y z]');
-   end
-
-   set(nii_view.handles.impos,'string',num2str(setviewpoint));
-
-   opt.command = 'impos_edit';
-   view_nii(fig, opt);
-
-   set(nii_view.handles.axial_axes,'selected','on');
-   set(nii_view.handles.axial_axes,'selected','off');
-   set(nii_view.handles.coronal_axes,'selected','on');
-   set(nii_view.handles.coronal_axes,'selected','off');
-   set(nii_view.handles.sagittal_axes,'selected','on');
-   set(nii_view.handles.sagittal_axes,'selected','off');
-
-   return;					% update_viewpoint
-
-
-%----------------------------------------------------------------
-function update_scanid(fig, setscanid)
-
-   if isempty(setscanid)
-      return;
-   end
-
-   nii_view = getappdata(fig,'nii_view');
-
-   if setscanid < 1
-      setscanid = 1;
-   end
-
-   if setscanid > nii_view.numscan
-      setscanid = nii_view.numscan;
-   end
-
-   set(nii_view.handles.contrast_def,'string',num2str(setscanid));
-   set(nii_view.handles.contrast,'value',setscanid);
-
-   opt.command = 'updateimg';
-   opt.setscanid = setscanid;
-
-   view_nii(fig, nii_view.nii.img, opt);
-
-   return;					% update_scanid
-
-
-%----------------------------------------------------------------
-function update_crosshaircolor(fig, new_color)
-
-   if isempty(new_color)
-      return;
-   end
-
-   nii_view = getappdata(fig,'nii_view');
-   xhair_color = nii_view.handles.xhair_color;
-
-   set(xhair_color,'user',new_color);
-   set(nii_view.axi_xhair.lx,'color',new_color);
-   set(nii_view.axi_xhair.ly,'color',new_color);
-   set(nii_view.cor_xhair.lx,'color',new_color);
-   set(nii_view.cor_xhair.ly,'color',new_color);
-   set(nii_view.sag_xhair.lx,'color',new_color);
-   set(nii_view.sag_xhair.ly,'color',new_color);
-
-   return;					% update_crosshaircolor
-
-
-%----------------------------------------------------------------
-function update_colorindex(fig, colorindex)
-
-   if isempty(colorindex)
-      return;
-   end
-
-   nii_view = getappdata(fig,'nii_view');
-   nii_view.colorindex = colorindex;
-   setappdata(fig, 'nii_view', nii_view);
-   set(nii_view.handles.colorindex,'value',colorindex);
-
-   opt.command = 'color';
-   view_nii(fig, opt);
-
-   return;					% update_colorindex
-
-
-%----------------------------------------------------------------
-function redraw_cbar(fig, colorlevel, color_map, highcolor)
-
-   nii_view = getappdata(fig,'nii_view');
-
-   if isempty(nii_view.cbar_area)
-      return;
-   end
-
-   colorindex = nii_view.colorindex;
-
-   if isempty(highcolor)
-      num_highcolor = 0;
-   else
-      num_highcolor = size(highcolor,1);
-   end
-
-   if isempty(colorlevel)
-      colorlevel=256;
-   end
-
-   if colorindex == 1
-      colorlevel = size(color_map, 1);
-   end
-
-%   level = colorlevel + num_highcolor;
-   level = colorlevel;
-
-   cbar_image = [1:level]';
-
-   cbar_area = nii_view.cbar_area;
-
-   %  useimagesc follows axial image
-   %
-   if strcmpi(get(nii_view.handles.axial_image,'cdatamap'),'scaled')
-      useimagesc = 1;
-   else
-      useimagesc = 0;
-   end
-
-   niiclass = class(nii_view.nii.img);
-
-   delete(nii_view.handles.cbar_image);
-   delete(nii_view.handles.cbar_axes);
-   delete(nii_view.handles.cbarminmax_axes);
-
-   [nii_view.handles.cbar_axes nii_view.handles.cbarminmax_axes] = ...
-	create_cbar_axes(fig, cbar_area, []);
-
-   nii_view.handles.cbar_image = plot_cbar(fig, ...
-	nii_view.handles.cbar_axes, nii_view.handles.cbarminmax_axes, ...
-	nii_view.cbarminmax, level, nii_view.handles, useimagesc, ...
-	colorindex, color_map, colorlevel, highcolor, niiclass, ...
-	nii_view.numscan, []);
-
-   setappdata(fig, 'nii_view', nii_view);
-
-   return;					% redraw_cbar
-
-
-%----------------------------------------------------------------
-function update_buttondown(fig, setbuttondown)
-
-   if isempty(setbuttondown)
-      return;
-   end
-
-   nii_view = getappdata(fig,'nii_view');
-   nii_view.buttondown = setbuttondown;
-   setappdata(fig, 'nii_view', nii_view);
-
-   return;					% update_buttondown
-
-
-%----------------------------------------------------------------
-function update_cbarminmax(fig, cbarminmax)
-
-   if isempty(cbarminmax)
-      return;
-   end
-
-   nii_view = getappdata(fig, 'nii_view');
-
-   if ~isfield(nii_view.handles, 'cbarminmax_axes')
-      return;
-   end
-
-   nii_view.cbarminmax = cbarminmax;
-   setappdata(fig, 'nii_view', nii_view);
-
-   axes(nii_view.handles.cbarminmax_axes);
-
-   plot([0 0], cbarminmax, 'w');
-   axis tight;
-
-   set(nii_view.handles.cbarminmax_axes,'YDir','normal', ...
-      'XLimMode','manual','YLimMode','manual','YColor',[0 0 0], ...
-      'XColor',[0 0 0],'xtick',[],'YAxisLocation','right');
-
-   ylim = get(nii_view.handles.cbar_axes,'ylim');
-   ylimb = get(nii_view.handles.cbarminmax_axes,'ylim');
-   ytickb = get(nii_view.handles.cbarminmax_axes,'ytick');
-   ytick=(ylim(2)-ylim(1))*(ytickb-ylimb(1))/(ylimb(2)-ylimb(1))+ylim(1);
-
-   axes(nii_view.handles.cbar_axes);
-
-   set(nii_view.handles.cbar_axes,'YDir','normal','XLimMode','manual', ...
-	'YLimMode','manual','YColor',[0 0 0],'XColor',[0 0 0],'xtick',[], ...
-	'YAxisLocation','right','ylim',ylim,'ytick',ytick,'yticklabel','');
-
-   return;					% update_cbarminmax
-
-
-%----------------------------------------------------------------
-function update_highcolor(fig, highcolor, colorlevel)
-
-   nii_view = getappdata(fig,'nii_view');
-
-   if ischar(highcolor) & (isempty(colorlevel) | nii_view.colorindex == 1)
-      return;
-   end
-
-   if ~ischar(highcolor)
-      nii_view.highcolor = highcolor;
-
-      if isempty(highcolor)
-         nii_view = rmfield(nii_view, 'highcolor');
-      end
-   else
-      highcolor = [];
-   end
-
-   if isempty(colorlevel) | nii_view.colorindex == 1
-      nii_view.colorlevel = nii_view.colorlevel - size(highcolor,1);
-   else
-      nii_view.colorlevel = colorlevel;
-   end
-
-   setappdata(fig, 'nii_view', nii_view);
-
-   if isfield(nii_view,'color_map')
-      color_map = nii_view.color_map;
-   else
-      color_map = [];
-   end
-
-   redraw_cbar(fig, nii_view.colorlevel, color_map, highcolor);
-   change_colormap(fig);
-
-   return;					% update_highcolor
-
-
-%----------------------------------------------------------------
-function update_colormap(fig, color_map)
-
-   if ischar(color_map)
-      return;
-   end
-
-   nii_view = getappdata(fig,'nii_view');
-   nii = nii_view.nii;
-   minvalue = nii_view.minvalue;
-
-   if isempty(color_map)
-      if minvalue < 0
-         colorindex = 2;
-      else
-         colorindex = 3;
-      end
-
-      nii_view = rmfield(nii_view, 'color_map');
-      setappdata(fig,'nii_view',nii_view);
-      update_colorindex(fig, colorindex);
-      return;
-   else
-      colorindex = 1;
-      nii_view.color_map = color_map;
-      nii_view.colorindex = colorindex;
-      setappdata(fig,'nii_view',nii_view);
-      set(nii_view.handles.colorindex,'value',colorindex);
-   end
-
-   colorlevel = nii_view.colorlevel;
-
-   if isfield(nii_view, 'highcolor')
-      highcolor = nii_view.highcolor;
-   else
-      highcolor = [];
-   end
-
-   redraw_cbar(fig, colorlevel, color_map, highcolor);
-   change_colormap(fig);
-
-   opt.enablecontrast = 0;
-   update_enable(fig, opt);
-
-   return;					% update_colormap
-
-
-%----------------------------------------------------------------
-function status = get_status(h);
-
-   nii_view = getappdata(h,'nii_view');
-
-   status.fig = h;
-   status.area = nii_view.area;
-
-   if isempty(nii_view.cbar_area)
-      status.usecolorbar = 0;
-   else
-      status.usecolorbar = 1;
-      width = status.area(3) / 0.9;
-      status.area(3) = width;
-   end
-
-   if strcmpi(get(nii_view.handles.imval,'visible'), 'on')
-      status.usepanel = 1;
-   else
-      status.usepanel = 0;
-   end
-
-   if get(nii_view.handles.xhair,'value') == 1
-      status.usecrosshair = 1;
-   else
-      status.usecrosshair = 0;
-   end
-
-   status.usestretch = nii_view.usestretch;
-
-   if strcmpi(get(nii_view.handles.axial_image,'cdatamapping'), 'direct')
-      status.useimagesc = 0;
-   else
-      status.useimagesc = 1;
-   end
-
-   status.useinterp = nii_view.useinterp;
-
-   if get(nii_view.handles.coord,'value') == 1
-      status.unit = 'vox';
-   elseif get(nii_view.handles.coord,'value') == 2
-      status.unit = 'mm';
-   elseif get(nii_view.handles.coord,'value') == 3
-      status.unit = 'tal';
-   end
-
-   status.viewpoint = get(nii_view.handles.impos,'value');
-   status.scanid = nii_view.scanid;
-   status.intensity = get(nii_view.handles.imval,'value');
-   status.colorindex = get(nii_view.handles.colorindex,'value');
-
-   if isfield(nii_view,'color_map')
-      status.colormap = nii_view.color_map;
-   else
-      status.colormap = [];
-   end
-
-   status.colorlevel = nii_view.colorlevel;
-
-   if isfield(nii_view,'highcolor')
-      status.highcolor = nii_view.highcolor;
-   else
-      status.highcolor = [];
-   end
-
-   status.cbarminmax = nii_view.cbarminmax;
-   status.buttondown = nii_view.buttondown;
-
-   return;					% get_status
-
-
-%----------------------------------------------------------------
-function [custom_color_map, colorindex] ...
-		 = change_colormap(fig, nii, colorindex, cbarminmax)
-
-   custom_color_map = [];
-
-   if ~exist('nii', 'var')
-      nii_view = getappdata(fig,'nii_view');
-   else
-      nii_view = nii;
-   end
-
-   if ~exist('colorindex', 'var')
-      colorindex = get(nii_view.handles.colorindex,'value');
-   end
-
-   if ~exist('cbarminmax', 'var')
-      cbarminmax = nii_view.cbarminmax;
-   end
-
-   if isfield(nii_view, 'highcolor') & ~isempty(nii_view.highcolor)
-      highcolor = nii_view.highcolor;
-      num_highcolor = size(highcolor,1);
-   else
-      highcolor = [];
-      num_highcolor = 0;
-   end
-
-%   if isfield(nii_view, 'colorlevel') & ~isempty(nii_view.colorlevel)
-   if nii_view.colorlevel < 256
-      num_color = nii_view.colorlevel;
-   else
-      num_color = 256 - num_highcolor;
-   end
-
-   contrast = [];
-
-   if colorindex == 3					% for gray
-      if nii_view.numscan > 1
-         contrast = 1;
-      else
-         contrast = (num_color-1)*(get(nii_view.handles.contrast,'value')-1)/255+1;
-         contrast = floor(contrast);
-      end
-   elseif colorindex == 2				% for bipolar
-      if nii_view.numscan > 1
-         contrast = 128;
-      else
-         contrast = get(nii_view.handles.contrast,'value');
-      end
-   end
-
-   if isfield(nii_view,'color_map') & ~isempty(nii_view.color_map)
-      color_map = nii_view.color_map;
-      custom_color_map = color_map;
-   elseif colorindex == 1
-      [f p] = uigetfile('*.txt', 'Input colormap text file');
-
-      if p==0
-         colorindex = nii_view.colorindex;
-         set(nii_view.handles.colorindex,'value',colorindex);
-         return; 
-      end;
-
-      try
-         custom_color_map = load(fullfile(p,f));
-         loadfail = 0;
-      catch
-         loadfail = 1;
-      end
-
-      if loadfail | isempty(custom_color_map) | size(custom_color_map,2)~=3 ...
-	| min(custom_color_map(:)) < 0 | max(custom_color_map(:)) > 1 
-
-         msg = 'Colormap should be a Mx3 matrix with value between 0 and 1';
-         msgbox(msg,'Error in colormap file');
-         colorindex = nii_view.colorindex;
-         set(nii_view.handles.colorindex,'value',colorindex);
-         return;         
-      end
-
-      color_map = custom_color_map;
-      nii_view.color_map = color_map;
-   end
-
-   switch colorindex
-   case {2}
-      color_map = bipolar(num_color, cbarminmax(1), cbarminmax(2), contrast);
-   case {3}
-      color_map = gray(num_color - contrast + 1);
-   case {4}
-      color_map = jet(num_color);
-   case {5}
-      color_map = cool(num_color);
-   case {6}
-      color_map = bone(num_color);
-   case {7}
-      color_map = hot(num_color);
-   case {8}
-      color_map = copper(num_color);
-   case {9}
-      color_map = pink(num_color);
-   end
-
-   nii_view.colorindex = colorindex;
-
-   if ~exist('nii', 'var')
-      setappdata(fig,'nii_view',nii_view);
-   end
-
-   if colorindex == 3
-      color_map = [zeros(contrast,3); color_map(2:end,:)];
-   end
-
-   if get(nii_view.handles.neg_color,'value') & isempty(highcolor)
-      color_map = flipud(color_map);
-   elseif get(nii_view.handles.neg_color,'value') & ~isempty(highcolor)
-      highcolor = flipud(highcolor);
-   end
-
-   brightness = get(nii_view.handles.brightness,'value');
-   color_map = brighten(color_map, brightness);
-
-   color_map = [color_map; highcolor];
-
-   set(fig, 'colormap', color_map);
-
-   return;					% change_colormap
-
-
-%----------------------------------------------------------------
-function move_cursor(fig)
-
-   nii_view = getappdata(fig, 'nii_view');
-
-   if isempty(nii_view)
-      return;
-   end
-
-   axi = get(nii_view.handles.axial_axes, 'pos');
-   cor = get(nii_view.handles.coronal_axes, 'pos');
-   sag = get(nii_view.handles.sagittal_axes, 'pos');
-   curr = get(fig, 'currentpoint');
-
-   if		curr(1) >= axi(1) & curr(1) <= axi(1)+axi(3) & ...
-		curr(2) >= axi(2) & curr(2) <= axi(2)+axi(4)
-
-      curr = get(nii_view.handles.axial_axes, 'current');
-      sag = curr(1,1);
-      cor = curr(1,2);
-      axi = nii_view.slices.axi;
-
-   elseif	curr(1) >= cor(1) & curr(1) <= cor(1)+cor(3) & ...
-		curr(2) >= cor(2) & curr(2) <= cor(2)+cor(4)
-
-      curr = get(nii_view.handles.coronal_axes, 'current');
-      sag = curr(1,1);
-      cor = nii_view.slices.cor;
-      axi = curr(1,2);
-
-   elseif	curr(1) >= sag(1) & curr(1) <= sag(1)+sag(3) & ...
-		curr(2) >= sag(2) & curr(2) <= sag(2)+sag(4)
-
-      curr = get(nii_view.handles.sagittal_axes, 'current');
-
-      sag = nii_view.slices.sag;
-      cor = curr(1,1);
-      axi = curr(1,2);
-
-   else
-
-      set(nii_view.handles.imvalcur,'String',' ');
-      set(nii_view.handles.imposcur,'String',' ');
-      return;
-
-   end
-
-    sag = round(sag);
-    cor = round(cor);
-    axi = round(axi);
-
-    if sag < 1
-       sag = 1;
-    elseif sag > nii_view.dims(1)
-       sag = nii_view.dims(1);
-    end
-
-    if cor < 1
-       cor = 1;
-    elseif cor > nii_view.dims(2)
-       cor = nii_view.dims(2);
-    end
-
-    if axi < 1
-       axi = 1;
-    elseif axi > nii_view.dims(3)
-       axi = nii_view.dims(3);
-    end
-
-    if 0 % isfield(nii_view, 'disp')
-       img = nii_view.disp;    
-    else
-       img = nii_view.nii.img;
-    end
-
-    if nii_view.nii.hdr.dime.datatype == 128
-       imgvalue = [double(img(sag,cor,axi,1,nii_view.scanid)) double(img(sag,cor,axi,2,nii_view.scanid)) double(img(sag,cor,axi,3,nii_view.scanid))];
-       set(nii_view.handles.imvalcur,'String',sprintf('%7.4g %7.4g %7.4g',imgvalue));
-    elseif nii_view.nii.hdr.dime.datatype == 511
-       R = double(img(sag,cor,axi,1,nii_view.scanid)) * (nii_view.nii.hdr.dime.glmax - ...
-		nii_view.nii.hdr.dime.glmin) + nii_view.nii.hdr.dime.glmin;
-       G = double(img(sag,cor,axi,2,nii_view.scanid)) * (nii_view.nii.hdr.dime.glmax - ...
-		nii_view.nii.hdr.dime.glmin) + nii_view.nii.hdr.dime.glmin;
-       B = double(img(sag,cor,axi,3,nii_view.scanid)) * (nii_view.nii.hdr.dime.glmax - ...
-		nii_view.nii.hdr.dime.glmin) + nii_view.nii.hdr.dime.glmin;
-       imgvalue = [R G B];
-       set(nii_view.handles.imvalcur,'String',sprintf('%7.4g %7.4g %7.4g',imgvalue));
-    else
-       imgvalue = double(img(sag,cor,axi,nii_view.scanid));
-
-       if isnan(imgvalue) | imgvalue > nii_view.cbarminmax(2)
-          imgvalue = 0;
-       end
-
-       set(nii_view.handles.imvalcur,'String',sprintf('%.6g',imgvalue));
-    end
-
-    nii_view.slices.sag = sag;
-    nii_view.slices.cor = cor;
-    nii_view.slices.axi = axi;
-
-    nii_view = update_imgXYZ(nii_view);
-
-    if get(nii_view.handles.coord,'value') == 1,
-       sag = nii_view.imgXYZ.vox(1);
-       cor = nii_view.imgXYZ.vox(2);
-       axi = nii_view.imgXYZ.vox(3);
-    elseif get(nii_view.handles.coord,'value') == 2,
-       sag = nii_view.imgXYZ.mm(1);
-       cor = nii_view.imgXYZ.mm(2);
-       axi = nii_view.imgXYZ.mm(3);
-    elseif get(nii_view.handles.coord,'value') == 3,
-       sag = nii_view.imgXYZ.tal(1);
-       cor = nii_view.imgXYZ.tal(2);
-       axi = nii_view.imgXYZ.tal(3);
-    end
-
-    if get(nii_view.handles.coord,'value') == 1,
-        string = sprintf('%7.0f %7.0f %7.0f',sag,cor,axi);
-    else
-        string = sprintf('%7.1f %7.1f %7.1f',sag,cor,axi);
-    end;
-    
-    set(nii_view.handles.imposcur,'String',string);
-
-    return;					% move_cursor
-
-
-%----------------------------------------------------------------
-function change_scan(hdl_str)
-
-   fig = gcbf;
-   nii_view = getappdata(fig,'nii_view');
-
-   if strcmpi(hdl_str, 'edit_change_scan')		% edit
-      hdl = nii_view.handles.contrast_def;
-      setscanid = round(str2num(get(hdl, 'string')));
-   else							% slider
-      hdl = nii_view.handles.contrast;
-      setscanid = round(get(hdl, 'value'));
-   end
-
-   update_scanid(fig, setscanid);
-
-   return;					% change_scan
-
-
-%----------------------------------------------------------------
-function val = scale_in(val, minval, maxval, range)
-
-   %  scale value into range
-   %
-   val = range*(double(val)-double(minval))/(double(maxval)-double(minval))+1;
-
-   return;					% scale_in
-
-
-%----------------------------------------------------------------
-function val = scale_out(val, minval, maxval, range)
-
-   %  according to [minval maxval] and range of color levels (e.g. 199)
-   %  scale val back from any thing between 1~256 to a small number that
-   %  is corresonding to [minval maxval].
-   %
-   val = (double(val)-1)*(double(maxval)-double(minval))/range+double(minval);
-
-   return;					% scale_out
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/view_nii_menu.m b/reg-test/matlab_tests/NIfTI_20140122/view_nii_menu.m
deleted file mode 100644
index 2269c937..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/view_nii_menu.m
+++ /dev/null
@@ -1,480 +0,0 @@
-%  Imbed Zoom, Interp, and Info menu to view_nii window.
-%
-%  Usage: view_nii_menu(fig);
-%
-
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-%--------------------------------------------------------------------
-function menu_hdl = view_nii_menu(fig, varargin)
-
-   if isnumeric(fig)
-      menu_hdl = init(fig);
-      return;
-   end
-
-   menu_hdl = [];
-
-   switch fig
-   case 'interp'
-      if nargin > 1
-         fig = varargin{1};
-      else
-         fig = gcbf;
-      end
-
-      nii_menu = getappdata(fig, 'nii_menu');
-      interp_on_state = get(nii_menu.Minterp,'Userdata');
-
-      if (interp_on_state == 1)
-         opt.useinterp = 1;
-         view_nii(fig,opt);
-         set(nii_menu.Minterp,'Userdata',0,'Label','Interp off');
-         reset_zoom(fig);
-      else
-         opt.useinterp = 0;
-         view_nii(fig,opt);
-         set(nii_menu.Minterp,'Userdata',1,'Label','Interp on');
-         reset_zoom(fig);
-      end
-   case 'reset_zoom'
-      if nargin > 1
-         fig = varargin{1};
-      else
-         fig = gcbf;
-      end
-
-      reset_zoom(fig);
-   case 'orient'
-      orient;
-   case 'editvox'
-      editvox;
-   case 'img_info'
-      img_info;
-   case 'img_hist'
-      img_hist;
-   case 'save_disp'
-      save_disp;
-   end
-
-   return					% view_nii_menu
-
-
-%--------------------------------------------------------------------
-function menu_hdl = init(fig)
-
-   %  search for edit, view menu
-   %
-   nii_menu.Mfile = [];
-   nii_menu.Medit = [];
-   nii_menu.Mview = [];
-   menuitems = findobj(fig, 'type', 'uimenu');
-
-   for i=1:length(menuitems)
-      filelabel = get(menuitems(i),'label');
-
-      if strcmpi(strrep(filelabel, '&', ''), 'file')
-         nii_menu.Mfile = menuitems(i);
-      end
-
-      editlabel = get(menuitems(i),'label');
-
-      if strcmpi(strrep(editlabel, '&', ''), 'edit')
-         nii_menu.Medit = menuitems(i);
-      end
-
-      viewlabel = get(menuitems(i),'label');
-
-      if strcmpi(strrep(viewlabel, '&', ''), 'view')
-         nii_menu.Mview = menuitems(i);
-      end
-   end
-
-   set(fig, 'menubar', 'none');
-
-   if isempty(nii_menu.Mfile)
-      nii_menu.Mfile = uimenu('Parent',fig, ...
-   	   'Label','File');
-
-      nii_menu.Mfile_save = uimenu('Parent',nii_menu.Mfile, ...
-   	   'Label','Save displayed image as ...', ...
-           'Callback','view_nii_menu(''save_disp'');');
-   else
-      nii_menu.Mfile_save = uimenu('Parent',nii_menu.Mfile, ...
-   	   'Label','Save displayed image as ...', ...
-           'separator','on', ...
-           'Callback','view_nii_menu(''save_disp'');');
-   end
-
-   if isempty(nii_menu.Medit)
-      nii_menu.Medit = uimenu('Parent',fig, ...
-   	   'Label','Edit');
-
-      nii_menu.Medit_orient = uimenu('Parent',nii_menu.Medit, ...
-   	   'Label','Convert to RAS orientation', ...
-           'Callback','view_nii_menu(''orient'');');
-
-      nii_menu.Medit_editvox = uimenu('Parent',nii_menu.Medit, ...
-   	   'Label','Edit voxel value at crosshair', ...
-           'Callback','view_nii_menu(''editvox'');');
-   else
-      nii_menu.Medit_orient = uimenu('Parent',nii_menu.Medit, ...
-   	   'Label','Convert to RAS orientation', ...
-           'separator','on', ...
-           'Callback','view_nii_menu(''orient'');');
-
-      nii_menu.Medit_editvox = uimenu('Parent',nii_menu.Medit, ...
-   	   'Label','Edit voxel value at crosshair', ...
-           'Callback','view_nii_menu(''editvox'');');
-   end
-
-   if isempty(nii_menu.Mview)
-      nii_menu.Mview = uimenu('Parent',fig, ...
-   	   'Label','View');
-
-      nii_menu.Mview_info = uimenu('Parent',nii_menu.Mview, ...
-   	   'Label','Image Information', ...
-           'Callback','view_nii_menu(''img_info'');');
-
-      nii_menu.Mview_info = uimenu('Parent',nii_menu.Mview, ...
-   	   'Label','Volume Histogram', ...
-           'Callback','view_nii_menu(''img_hist'');');
-   else
-      nii_menu.Mview_info = uimenu('Parent',nii_menu.Mview, ...
-   	   'Label','Image Information', ...
-           'separator','on', ...
-           'Callback','view_nii_menu(''img_info'');');
-
-      nii_menu.Mview_info = uimenu('Parent',nii_menu.Mview, ...
-   	   'Label','Volume Histogram', ...
-           'Callback','view_nii_menu(''img_hist'');');
-   end
-
-   nii_menu.Mzoom = rri_zoom_menu(fig);
-
-   nii_menu.Minterp = uimenu('Parent',fig, ...
-   	   'Label','Interp on', ...
-	   'Userdata', 1, ...
-           'Callback','view_nii_menu(''interp'');');
-
-   setappdata(fig,'nii_menu',nii_menu);
-   menu_hdl = nii_menu.Minterp;
-
-   return					% init
-
-
-%----------------------------------------------------------------
-function reset_zoom(fig)
-
-   old_handle_vis = get(fig, 'HandleVisibility');
-   set(fig, 'HandleVisibility', 'on');
-
-   nii_view = getappdata(fig, 'nii_view');
-   nii_menu = getappdata(fig, 'nii_menu');
-
-   set(nii_menu.Mzoom,'Userdata',1,'Label','Zoom on');
-   set(fig,'pointer','arrow');
-   zoom off;
-
-   axes(nii_view.handles.axial_axes);
-   setappdata(get(gca,'zlabel'), 'ZOOMAxesData', ...
-			[get(gca, 'xlim') get(gca, 'ylim')])
-%   zoom reset;
- %  zoom getlimits;
-   zoom out;
-
-   axes(nii_view.handles.coronal_axes);
-   setappdata(get(gca,'zlabel'), 'ZOOMAxesData', ...
-			[get(gca, 'xlim') get(gca, 'ylim')])
-%   zoom reset;
- %  zoom getlimits;
-   zoom out;
-
-   axes(nii_view.handles.sagittal_axes);
-   setappdata(get(gca,'zlabel'), 'ZOOMAxesData', ...
-			[get(gca, 'xlim') get(gca, 'ylim')])
-%   zoom reset;
- %  zoom getlimits;
-   zoom out;
-
-   set(fig, 'HandleVisibility', old_handle_vis);
-
-   return;					% reset_zoom
-
-
-%----------------------------------------------------------------
-function img_info
-
-   nii_view = getappdata(gcbf, 'nii_view');
-   hdr = nii_view.nii.hdr;
-
-   max_value = num2str(double(max(nii_view.nii.img(:))));
-   min_value = num2str(double(min(nii_view.nii.img(:))));
-
-   dim = sprintf('%d  %d  %d', double(hdr.dime.dim(2:4)));
-   vox = sprintf('%.3f  %.3f  %.3f', double(hdr.dime.pixdim(2:4)));
-
-   if double(hdr.dime.datatype) == 1
-      type = '1-bit binary';
-   elseif double(hdr.dime.datatype) == 2
-      type = '8-bit unsigned integer';
-   elseif double(hdr.dime.datatype) == 4
-      type = '16-bit signed integer';
-   elseif double(hdr.dime.datatype) == 8
-      type = '32-bit signed integer';
-   elseif double(hdr.dime.datatype) == 16
-      type = '32-bit single float';
-   elseif double(hdr.dime.datatype) == 64
-      type = '64-bit double precision';
-   elseif double(hdr.dime.datatype) == 128
-      type = '24-bit RGB true color';
-   elseif double(hdr.dime.datatype) == 256
-      type = '8-bit signed integer';
-   elseif double(hdr.dime.datatype) == 511
-      type = '96-bit RGB true color';
-   elseif double(hdr.dime.datatype) == 512
-      type = '16-bit unsigned integer';
-   elseif double(hdr.dime.datatype) == 768
-      type = '32-bit unsigned integer';
-   elseif double(hdr.dime.datatype) == 1024
-      type = '64-bit signed integer';
-   elseif double(hdr.dime.datatype) == 1280
-      type = '64-bit unsigned integer';
-   end
-
-   msg = {};
-   msg = [msg {''}];
-   msg = [msg {['Dimension:  [', dim, ']']}];
-   msg = [msg {''}];
-   msg = [msg {['Voxel Size:  [', vox, ']']}];
-   msg = [msg {''}];
-   msg = [msg {['Data Type:  [', type, ']']}];
-   msg = [msg {''}];
-   msg = [msg {['Max Value:  [', max_value, ']']}];
-   msg = [msg {''}];
-   msg = [msg {['Min Value:  [', min_value, ']']}];
-   msg = [msg {''}];
-
-   if isfield(nii_view.nii, 'fileprefix')
-      if isfield(nii_view.nii, 'filetype') & nii_view.nii.filetype == 2
-         msg = [msg {['File Name:  [', nii_view.nii.fileprefix, '.nii]']}];
-         msg = [msg {''}];
-      elseif isfield(nii_view.nii, 'filetype')
-         msg = [msg {['File Name:  [', nii_view.nii.fileprefix, '.img]']}];
-         msg = [msg {''}];
-      else
-         msg = [msg {['File Prefix:  [', nii_view.nii.fileprefix, ']']}];
-         msg = [msg {''}];
-      end
-   end
-
-   h = msgbox(msg, 'Image Information', 'modal');
-   set(h,'color',[1 1 1]);
-
-   return;					% img_info
-
-
-%----------------------------------------------------------------
-function orient
-
-   fig = gcbf;
-   nii_view = getappdata(fig, 'nii_view');
-   nii = nii_view.nii;
-
-   if ~isempty(nii_view.bgimg)
-      msg = 'You can not modify an overlay image';
-      h = msgbox(msg, 'Error', 'modal');
-      return;
-   end
-
-   old_pointer = get(fig,'Pointer');
-   set(fig,'Pointer','watch');
-
-   [nii orient] = rri_orient(nii);
-
-   if isequal(orient, [1 2 3])		% do nothing
-      set(fig,'Pointer',old_pointer);
-      return;
-   end
-
-   oldopt = view_nii(fig);
-   opt.command = 'updatenii';
-   opt.usecolorbar = oldopt.usecolorbar;
-   opt.usepanel = oldopt.usepanel;
-   opt.usecrosshair = oldopt.usecrosshair;
-   opt.usestretch = oldopt.usestretch;
-   opt.useimagesc = oldopt.useimagesc;
-   opt.useinterp = oldopt.useinterp;
-   opt.setarea = oldopt.area;
-   opt.setunit = oldopt.unit;
-   opt.setviewpoint = oldopt.viewpoint;
-   opt.setscanid = oldopt.scanid;
-   opt.setcbarminmax = oldopt.cbarminmax;
-   opt.setcolorindex = oldopt.colorindex;
-   opt.setcolormap = oldopt.colormap;
-   opt.setcolorlevel = oldopt.colorlevel;
-
-   if isfield(oldopt,'highcolor')
-      opt.sethighcolor = oldopt.highcolor;
-   end
-
-   view_nii(fig, nii, opt);
-   set(fig,'Pointer',old_pointer);
-   reset_zoom(fig);
-
-   return;					% orient
-
-
-%----------------------------------------------------------------
-function editvox
-
-   fig = gcbf;
-   nii_view = getappdata(fig, 'nii_view');
-
-   if ~isempty(nii_view.bgimg)
-      msg = 'You can not modify an overlay image';
-      h = msgbox(msg, 'Error', 'modal');
-      return;
-   end
-
-   nii = nii_view.nii;
-   oldopt = view_nii(fig);
-   sag = nii_view.imgXYZ.vox(1);
-   cor = nii_view.imgXYZ.vox(2);
-   axi = nii_view.imgXYZ.vox(3);
-
-   if nii_view.nii.hdr.dime.datatype == 128
-      imgvalue = [double(nii.img(sag,cor,axi,1,nii_view.scanid)) double(nii.img(sag,cor,axi,2,nii_view.scanid)) double(nii.img(sag,cor,axi,3,nii_view.scanid))];
-      init_val = sprintf('%7.4g %7.4g %7.4g',imgvalue);
-   elseif nii_view.nii.hdr.dime.datatype == 511
-      R = double(nii.img(sag,cor,axi,1,nii_view.scanid)) * (nii_view.nii.hdr.dime.glmax - ...
-		nii_view.nii.hdr.dime.glmin) + nii_view.nii.hdr.dime.glmin;
-      G = double(nii.img(sag,cor,axi,2,nii_view.scanid)) * (nii_view.nii.hdr.dime.glmax - ...
-		nii_view.nii.hdr.dime.glmin) + nii_view.nii.hdr.dime.glmin;
-      B = double(nii.img(sag,cor,axi,3,nii_view.scanid)) * (nii_view.nii.hdr.dime.glmax - ...
-		nii_view.nii.hdr.dime.glmin) + nii_view.nii.hdr.dime.glmin;
-      imgvalue = [R G B];
-      init_val = sprintf('%7.4g %7.4g %7.4g',imgvalue);
-   else
-      imgvalue = double(nii.img(sag,cor,axi,nii_view.scanid));
-      init_val = sprintf('%.6g',imgvalue);
-   end
-
-   old_pointer = get(fig,'Pointer');
-   set(fig,'Pointer','watch');
-
-   repeat = 1;
-   while repeat
-      if nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511
-         init_val = inputdlg({'Replace the current voxel values with 3 new numbers:'}, ...
-		'Edit voxel value at crosshair', 1, {num2str(init_val)});
-      else
-         init_val = inputdlg({'Replace the current voxel value with 1 new number:'}, ...
-		'Edit voxel value at crosshair', 1, {num2str(init_val)});
-      end
-
-      if isempty(init_val)
-         set(fig,'Pointer',old_pointer);
-         return
-      end
-
-      imgvalue = str2num(init_val{1});
-
-      if ( (nii_view.nii.hdr.dime.datatype == 128 | nii_view.nii.hdr.dime.datatype == 511) ...
-		& length(imgvalue) ~= 3 ) | ...
-         ( (nii_view.nii.hdr.dime.datatype ~= 128 & nii_view.nii.hdr.dime.datatype ~= 511) ...
-		& length(imgvalue) ~= 1 )
-	% do nothing
-      else
-         repeat = 0;
-      end
-   end
-
-   if nii_view.nii.hdr.dime.datatype == 128
-      nii.img(sag,cor,axi,1,nii_view.scanid) = imgvalue(1);
-      nii.img(sag,cor,axi,2,nii_view.scanid) = imgvalue(2);
-      nii.img(sag,cor,axi,3,nii_view.scanid) = imgvalue(3);
-   elseif nii_view.nii.hdr.dime.datatype == 511
-      nii.img(sag,cor,axi,1,nii_view.scanid) = (imgvalue(1) - nii_view.nii.hdr.dime.glmin) ...
-		/ (nii_view.nii.hdr.dime.glmax - nii_view.nii.hdr.dime.glmin);
-      nii.img(sag,cor,axi,2,nii_view.scanid) = (imgvalue(2) - nii_view.nii.hdr.dime.glmin) ...
-		/ (nii_view.nii.hdr.dime.glmax - nii_view.nii.hdr.dime.glmin);
-      nii.img(sag,cor,axi,3,nii_view.scanid) = (imgvalue(3) - nii_view.nii.hdr.dime.glmin) ...
-		/ (nii_view.nii.hdr.dime.glmax - nii_view.nii.hdr.dime.glmin);
-   else
-      nii.img(sag,cor,axi,nii_view.scanid) = imgvalue;
-   end
-
-   opt.command = 'updatenii';
-   opt.usecolorbar = oldopt.usecolorbar;
-   opt.usepanel = oldopt.usepanel;
-   opt.usecrosshair = oldopt.usecrosshair;
-   opt.usestretch = oldopt.usestretch;
-   opt.useimagesc = oldopt.useimagesc;
-   opt.useinterp = oldopt.useinterp;
-   opt.setarea = oldopt.area;
-   opt.setunit = oldopt.unit;
-   opt.setviewpoint = oldopt.viewpoint;
-   opt.setscanid = oldopt.scanid;
-   opt.setcbarminmax = oldopt.cbarminmax;
-   opt.setcolorindex = oldopt.colorindex;
-   opt.setcolormap = oldopt.colormap;
-   opt.setcolorlevel = oldopt.colorlevel;
-
-   if isfield(oldopt,'highcolor')
-      opt.sethighcolor = oldopt.highcolor;
-   end
-
-   view_nii(fig, nii, opt);
-   set(fig,'Pointer',old_pointer);
-   reset_zoom(fig);
-
-   return;					% editvox
-
-
-%----------------------------------------------------------------
-function save_disp
-
-   [filename pathname] = uiputfile('*.*', 'Save displayed image as (*.nii or *.img)');
-
-   if isequal(filename,0) | isequal(pathname,0)
-      return;
-   else
-      out_imgfile = fullfile(pathname, filename);	% original image file
-   end
-
-   old_pointer = get(gcbf,'Pointer');
-   set(gcbf,'Pointer','watch');
-
-   nii_view = getappdata(gcbf, 'nii_view');
-   nii = nii_view.nii;
-
-   try
-      save_nii(nii, out_imgfile);
-   catch
-      msg = 'File can not be saved.';
-      msgbox(msg, 'File write error', 'modal');
-   end
-
-   set(gcbf,'Pointer',old_pointer);
-
-   return;					% save_disp
-
-
-%----------------------------------------------------------------
-function img_hist
-
-   nii_view = getappdata(gcbf, 'nii_view');
-   N = hist(double(nii_view.nii.img(:)),256);
-   x = linspace(double(min(nii_view.nii.img(:))), double(max(nii_view.nii.img(:))), 256);
-   figure;bar(x,N);
-   set(gcf, 'number', 'off', 'name', 'Volume Histogram');
-   set(gcf, 'windowstyle', 'modal');	% no zoom ...
-
-   xspan = max(x) - min(x) + 1;
-   yspan = max(N) + 1;
-   set(gca, 'xlim', [min(x)-xspan/20, max(x)+xspan/20]);
-   set(gca, 'ylim', [-yspan/20, max(N)+yspan/20]);
-
-   return;					% img_hist
-
diff --git a/reg-test/matlab_tests/NIfTI_20140122/xform_nii.m b/reg-test/matlab_tests/NIfTI_20140122/xform_nii.m
deleted file mode 100644
index 7252a7c5..00000000
--- a/reg-test/matlab_tests/NIfTI_20140122/xform_nii.m
+++ /dev/null
@@ -1,521 +0,0 @@
-%  internal function
-
-%  'xform_nii.m' is an internal function called by "load_nii.m", so
-%  you do not need run this program by yourself. It does simplified
-%  NIfTI sform/qform affine transform, and supports some of the 
-%  affine transforms, including translation, reflection, and 
-%  orthogonal rotation (N*90 degree).
-%
-%  For other affine transforms, e.g. any degree rotation, shearing
-%  etc. you will have to use the included 'reslice_nii.m' program
-%  to reslice the image volume. 'reslice_nii.m' is not called by
-%  any other program, and you have to run 'reslice_nii.m' explicitly
-%  for those NIfTI files that you want to reslice them.
-%
-%  Since 'xform_nii.m' does not involve any interpolation or any
-%  slice change, the original image volume is supposed to be
-%  untouched, although it is translated, reflected, or even 
-%  orthogonally rotated, based on the affine matrix in the
-%  NIfTI header.
-%
-%  However, the affine matrix in the header of a lot NIfTI files
-%  contain slightly non-orthogonal rotation. Therefore, optional
-%  input parameter 'tolerance' is used to allow some distortion
-%  in the loaded image for any non-orthogonal rotation or shearing
-%  of NIfTI affine matrix. If you set 'tolerance' to 0, it means
-%  that you do not allow any distortion. If you set 'tolerance' to
-%  1, it means that you do not care any distortion. The image will
-%  fail to be loaded if it can not be tolerated. The tolerance will
-%  be set to 0.1 (10%), if it is default or empty.
-%
-%  Because 'reslice_nii.m' has to perform 3D interpolation, it can
-%  be slow depending on image size and affine matrix in the header.
-%  
-%  After you perform the affine transform, the 'nii' structure
-%  generated from 'xform_nii.m' or new NIfTI file created from
-%  'reslice_nii.m' will be in RAS orientation, i.e. X axis from
-%  Left to Right, Y axis from Posterior to Anterior, and Z axis
-%  from Inferior to Superior.
-%
-%  NOTE: This function should be called immediately after load_nii.
-%  
-%  Usage: [ nii ] = xform_nii(nii, [tolerance], [preferredForm])
-%  
-%  nii	- NIFTI structure (returned from load_nii)
-%
-%  tolerance (optional) - distortion allowed for non-orthogonal rotation
-%	or shearing in NIfTI affine matrix. It will be set to 0.1 (10%),
-%	if it is default or empty.
-%
-%  preferredForm (optional)  -  selects which transformation from voxels
-%	to RAS coordinates; values are s,q,S,Q.  Lower case s,q indicate
-%	"prefer sform or qform, but use others if preferred not present". 
-%	Upper case indicate the program is forced to use the specificied
-%	tranform or fail loading.  'preferredForm' will be 's', if it is
-%	default or empty.	- Jeff Gunter
-%  
-%  NIFTI data format can be found on: http://nifti.nimh.nih.gov
-%
-%  - Jimmy Shen (jimmy@rotman-baycrest.on.ca)
-%
-function nii = xform_nii(nii, tolerance, preferredForm)
-
-   %  save a copy of the header as it was loaded.  This is the
-   %  header before any sform, qform manipulation is done.
-   %
-   nii.original.hdr = nii.hdr;
-
-   if ~exist('tolerance','var') | isempty(tolerance)
-      tolerance = 0.1;
-   elseif(tolerance<=0)
-      tolerance = eps;
-   end
-
-   if ~exist('preferredForm','var') | isempty(preferredForm)
-      preferredForm= 's';				% Jeff
-   end
-
-   %  if scl_slope field is nonzero, then each voxel value in the
-   %  dataset should be scaled as: y = scl_slope * x + scl_inter
-   %  I bring it here because hdr will be modified by change_hdr.
-   %
-   if nii.hdr.dime.scl_slope ~= 0 & ...
-	ismember(nii.hdr.dime.datatype, [2,4,8,16,64,256,512,768]) & ...
-	(nii.hdr.dime.scl_slope ~= 1 | nii.hdr.dime.scl_inter ~= 0)
-
-      nii.img = ...
-	nii.hdr.dime.scl_slope * double(nii.img) + nii.hdr.dime.scl_inter;
-
-      if nii.hdr.dime.datatype == 64
-
-         nii.hdr.dime.datatype = 64;
-         nii.hdr.dime.bitpix = 64;
-      else
-         nii.img = single(nii.img);
-
-         nii.hdr.dime.datatype = 16;
-         nii.hdr.dime.bitpix = 32;
-      end
-
-      nii.hdr.dime.glmax = max(double(nii.img(:)));
-      nii.hdr.dime.glmin = min(double(nii.img(:)));
-
-      %  set scale to non-use, because it is applied in xform_nii
-      %
-      nii.hdr.dime.scl_slope = 0;
-
-   end
-
-   %  However, the scaling is to be ignored if datatype is DT_RGB24.
-
-   %  If datatype is a complex type, then the scaling is to be applied
-   %  to both the real and imaginary parts.
-   %
-   if nii.hdr.dime.scl_slope ~= 0 & ...
-	ismember(nii.hdr.dime.datatype, [32,1792])
-
-      nii.img = ...
-	nii.hdr.dime.scl_slope * double(nii.img) + nii.hdr.dime.scl_inter;
-
-      if nii.hdr.dime.datatype == 32
-         nii.img = single(nii.img);
-      end
-
-      nii.hdr.dime.glmax = max(double(nii.img(:)));
-      nii.hdr.dime.glmin = min(double(nii.img(:)));
-
-      %  set scale to non-use, because it is applied in xform_nii
-      %
-      nii.hdr.dime.scl_slope = 0;
-
-   end
-
-   %  There is no need for this program to transform Analyze data
-   %
-   if nii.filetype == 0 & exist([nii.fileprefix '.mat'],'file')
-      load([nii.fileprefix '.mat']);	% old SPM affine matrix
-      R=M(1:3,1:3);
-      T=M(1:3,4);
-      T=R*ones(3,1)+T;
-      M(1:3,4)=T;
-      nii.hdr.hist.qform_code=0;
-      nii.hdr.hist.sform_code=1;
-      nii.hdr.hist.srow_x=M(1,:);
-      nii.hdr.hist.srow_y=M(2,:);
-      nii.hdr.hist.srow_z=M(3,:);
-   elseif nii.filetype == 0
-      nii.hdr.hist.rot_orient = [];
-      nii.hdr.hist.flip_orient = [];
-      return;				% no sform/qform for Analyze format
-   end
-
-   hdr = nii.hdr;
-
-   [hdr,orient]=change_hdr(hdr,tolerance,preferredForm);
-
-   %  flip and/or rotate image data
-   %
-   if ~isequal(orient, [1 2 3])
-
-      old_dim = hdr.dime.dim([2:4]);
-
-      %  More than 1 time frame
-      %
-      if ndims(nii.img) > 3
-         pattern = 1:prod(old_dim);
-      else
-         pattern = [];
-      end
-
-      if ~isempty(pattern)
-         pattern = reshape(pattern, old_dim);
-      end
-
-      %  calculate for rotation after flip
-      %
-      rot_orient = mod(orient + 2, 3) + 1;
-
-      %  do flip:
-      %
-      flip_orient = orient - rot_orient;
-
-      for i = 1:3
-         if flip_orient(i)
-            if ~isempty(pattern)
-               pattern = flipdim(pattern, i);
-            else
-               nii.img = flipdim(nii.img, i);
-            end
-         end
-      end
-
-      %  get index of orient (rotate inversely)
-      %
-      [tmp rot_orient] = sort(rot_orient);
-
-      new_dim = old_dim;
-      new_dim = new_dim(rot_orient);
-      hdr.dime.dim([2:4]) = new_dim;
-
-      new_pixdim = hdr.dime.pixdim([2:4]);
-      new_pixdim = new_pixdim(rot_orient);
-      hdr.dime.pixdim([2:4]) = new_pixdim;
-
-      %  re-calculate originator
-      %
-      tmp = hdr.hist.originator([1:3]);
-      tmp = tmp(rot_orient);
-      flip_orient = flip_orient(rot_orient);
-
-      for i = 1:3
-         if flip_orient(i) & ~isequal(tmp(i), 0)
-            tmp(i) = new_dim(i) - tmp(i) + 1;
-         end
-      end
-
-      hdr.hist.originator([1:3]) = tmp;
-      hdr.hist.rot_orient = rot_orient;
-      hdr.hist.flip_orient = flip_orient;
-
-      %  do rotation:
-      %
-      if ~isempty(pattern)
-         pattern = permute(pattern, rot_orient);
-         pattern = pattern(:);
-
-         if hdr.dime.datatype == 32 | hdr.dime.datatype == 1792 | ...
-		hdr.dime.datatype == 128 | hdr.dime.datatype == 511
-
-            tmp = reshape(nii.img(:,:,:,1), [prod(new_dim) hdr.dime.dim(5:8)]);
-            tmp = tmp(pattern, :);
-            nii.img(:,:,:,1) = reshape(tmp, [new_dim       hdr.dime.dim(5:8)]);
-
-            tmp = reshape(nii.img(:,:,:,2), [prod(new_dim) hdr.dime.dim(5:8)]);
-            tmp = tmp(pattern, :);
-            nii.img(:,:,:,2) = reshape(tmp, [new_dim       hdr.dime.dim(5:8)]);
-
-            if hdr.dime.datatype == 128 | hdr.dime.datatype == 511
-               tmp = reshape(nii.img(:,:,:,3), [prod(new_dim) hdr.dime.dim(5:8)]);
-               tmp = tmp(pattern, :);
-               nii.img(:,:,:,3) = reshape(tmp, [new_dim       hdr.dime.dim(5:8)]);
-            end
-
-         else
-            nii.img = reshape(nii.img, [prod(new_dim) hdr.dime.dim(5:8)]);
-            nii.img = nii.img(pattern, :);
-            nii.img = reshape(nii.img, [new_dim       hdr.dime.dim(5:8)]);
-         end
-      else
-         if hdr.dime.datatype == 32 | hdr.dime.datatype == 1792 | ...
-		hdr.dime.datatype == 128 | hdr.dime.datatype == 511
-
-            nii.img(:,:,:,1) = permute(nii.img(:,:,:,1), rot_orient);
-            nii.img(:,:,:,2) = permute(nii.img(:,:,:,2), rot_orient);
-
-            if hdr.dime.datatype == 128 | hdr.dime.datatype == 511
-               nii.img(:,:,:,3) = permute(nii.img(:,:,:,3), rot_orient);
-            end
-         else
-            nii.img = permute(nii.img, rot_orient);
-         end
-      end
-   else
-      hdr.hist.rot_orient = [];
-      hdr.hist.flip_orient = [];
-   end
-
-   nii.hdr = hdr;
-
-   return;					% xform_nii
-
-
-%-----------------------------------------------------------------------
-function [hdr, orient] = change_hdr(hdr, tolerance, preferredForm)
-
-   orient = [1 2 3];
-   affine_transform = 1;
-
-   %  NIFTI can have both sform and qform transform. This program
-   %  will check sform_code prior to qform_code by default.
-   %
-   %  If user specifys "preferredForm", user can then choose the
-   %  priority.					- Jeff
-   %
-   useForm=[];					% Jeff
-
-   if isequal(preferredForm,'S')
-       if isequal(hdr.hist.sform_code,0)
-           error('User requires sform, sform not set in header');
-       else
-           useForm='s';
-       end
-   end						% Jeff
-
-   if isequal(preferredForm,'Q')
-       if isequal(hdr.hist.qform_code,0)
-           error('User requires qform, qform not set in header');
-       else
-           useForm='q';
-       end
-   end						% Jeff
-
-   if isequal(preferredForm,'s')
-       if hdr.hist.sform_code > 0
-           useForm='s';
-       elseif hdr.hist.qform_code > 0
-           useForm='q';
-       end
-   end						% Jeff
-   
-   if isequal(preferredForm,'q')
-       if hdr.hist.qform_code > 0
-           useForm='q';
-       elseif hdr.hist.sform_code > 0
-           useForm='s';
-       end
-   end						% Jeff
-
-   if isequal(useForm,'s')
-      R = [hdr.hist.srow_x(1:3)
-           hdr.hist.srow_y(1:3)
-           hdr.hist.srow_z(1:3)];
-
-      T = [hdr.hist.srow_x(4)
-           hdr.hist.srow_y(4)
-           hdr.hist.srow_z(4)];
-
-      if det(R) == 0 | ~isequal(R(find(R)), sum(R)')
-         hdr.hist.old_affine = [ [R;[0 0 0]] [T;1] ];
-         R_sort = sort(abs(R(:)));
-         R( find( abs(R) < tolerance*min(R_sort(end-2:end)) ) ) = 0;
-         hdr.hist.new_affine = [ [R;[0 0 0]] [T;1] ];
-
-         if det(R) == 0 | ~isequal(R(find(R)), sum(R)')
-            msg = [char(10) char(10) '   Non-orthogonal rotation or shearing '];
-            msg = [msg 'found inside the affine matrix' char(10)];
-            msg = [msg '   in this NIfTI file. You have 3 options:' char(10) char(10)];
-            msg = [msg '   1. Using included ''reslice_nii.m'' program to reslice the NIfTI' char(10)];
-            msg = [msg '      file. I strongly recommand this, because it will not cause' char(10)];
-            msg = [msg '      negative effect, as long as you remember not to do slice' char(10)];
-            msg = [msg '      time correction after using ''reslice_nii.m''.' char(10) char(10)];
-            msg = [msg '   2. Using included ''load_untouch_nii.m'' program to load image' char(10)];
-            msg = [msg '      without applying any affine geometric transformation or' char(10)];
-            msg = [msg '      voxel intensity scaling. This is only for people who want' char(10)];
-            msg = [msg '      to do some image processing regardless of image orientation' char(10)];
-            msg = [msg '      and to save data back with the same NIfTI header.' char(10) char(10)];
-            msg = [msg '   3. Increasing the tolerance to allow more distortion in loaded' char(10)];
-            msg = [msg '      image, but I don''t suggest this.' char(10) char(10)];
-            msg = [msg '   To get help, please type:' char(10) char(10) '   help reslice_nii.m' char(10)];
-            msg = [msg '   help load_untouch_nii.m' char(10) '   help load_nii.m'];
-            error(msg);
-         end
-      end
-
-   elseif isequal(useForm,'q')
-      b = hdr.hist.quatern_b;
-      c = hdr.hist.quatern_c;
-      d = hdr.hist.quatern_d;
-
-      if 1.0-(b*b+c*c+d*d) < 0
-         if abs(1.0-(b*b+c*c+d*d)) < 1e-5
-            a = 0;
-         else
-            error('Incorrect quaternion values in this NIFTI data.');
-         end
-      else
-         a = sqrt(1.0-(b*b+c*c+d*d));
-      end
-
-      qfac = hdr.dime.pixdim(1);
-      if qfac==0, qfac = 1; end
-      i = hdr.dime.pixdim(2);
-      j = hdr.dime.pixdim(3);
-      k = qfac * hdr.dime.pixdim(4);
-
-      R = [a*a+b*b-c*c-d*d     2*b*c-2*a*d        2*b*d+2*a*c
-           2*b*c+2*a*d         a*a+c*c-b*b-d*d    2*c*d-2*a*b
-           2*b*d-2*a*c         2*c*d+2*a*b        a*a+d*d-c*c-b*b];
-
-      T = [hdr.hist.qoffset_x
-           hdr.hist.qoffset_y
-           hdr.hist.qoffset_z];
-
-      %  qforms are expected to generate rotation matrices R which are
-      %  det(R) = 1; we'll make sure that happens.
-      %  
-      %  now we make the same checks as were done above for sform data
-      %  BUT we do it on a transform that is in terms of voxels not mm;
-      %  after we figure out the angles and squash them to closest 
-      %  rectilinear direction. After that, the voxel sizes are then
-      %  added.
-      %
-      %  This part is modified by Jeff Gunter.
-      %
-      if det(R) == 0 | ~isequal(R(find(R)), sum(R)')
-
-         %  det(R) == 0 is not a common trigger for this ---
-         %  R(find(R)) is a list of non-zero elements in R; if that
-         %  is straight (not oblique) then it should be the same as 
-         %  columnwise summation. Could just as well have checked the
-         %  lengths of R(find(R)) and sum(R)' (which should be 3)
-         %
-         hdr.hist.old_affine = [ [R * diag([i j k]);[0 0 0]] [T;1] ];
-         R_sort = sort(abs(R(:)));
-         R( find( abs(R) < tolerance*min(R_sort(end-2:end)) ) ) = 0;
-         R = R * diag([i j k]);
-         hdr.hist.new_affine = [ [R;[0 0 0]] [T;1] ];
-
-         if det(R) == 0 | ~isequal(R(find(R)), sum(R)')
-            msg = [char(10) char(10) '   Non-orthogonal rotation or shearing '];
-            msg = [msg 'found inside the affine matrix' char(10)];
-            msg = [msg '   in this NIfTI file. You have 3 options:' char(10) char(10)];
-            msg = [msg '   1. Using included ''reslice_nii.m'' program to reslice the NIfTI' char(10)];
-            msg = [msg '      file. I strongly recommand this, because it will not cause' char(10)];
-            msg = [msg '      negative effect, as long as you remember not to do slice' char(10)];
-            msg = [msg '      time correction after using ''reslice_nii.m''.' char(10) char(10)];
-            msg = [msg '   2. Using included ''load_untouch_nii.m'' program to load image' char(10)];
-            msg = [msg '      without applying any affine geometric transformation or' char(10)];
-            msg = [msg '      voxel intensity scaling. This is only for people who want' char(10)];
-            msg = [msg '      to do some image processing regardless of image orientation' char(10)];
-            msg = [msg '      and to save data back with the same NIfTI header.' char(10) char(10)];
-            msg = [msg '   3. Increasing the tolerance to allow more distortion in loaded' char(10)];
-            msg = [msg '      image, but I don''t suggest this.' char(10) char(10)];
-            msg = [msg '   To get help, please type:' char(10) char(10) '   help reslice_nii.m' char(10)];
-            msg = [msg '   help load_untouch_nii.m' char(10) '   help load_nii.m'];
-            error(msg);
-         end
-
-      else
-         R = R * diag([i j k]);
-      end					% 1st det(R)
-
-   else
-      affine_transform = 0;	% no sform or qform transform
-   end
-
-   if affine_transform == 1
-      voxel_size = abs(sum(R,1));
-      inv_R = inv(R);
-      originator = inv_R*(-T)+1;
-      orient = get_orient(inv_R);
-
-      %  modify pixdim and originator
-      %
-      hdr.dime.pixdim(2:4) = voxel_size;
-      hdr.hist.originator(1:3) = originator;
-
-      %  set sform or qform to non-use, because they have been
-      %  applied in xform_nii
-      %
-      hdr.hist.qform_code = 0;
-      hdr.hist.sform_code = 0;
-   end
-
-   %  apply space_unit to pixdim if not 1 (mm)
-   %
-   space_unit = get_units(hdr);
-
-   if space_unit ~= 1
-      hdr.dime.pixdim(2:4) = hdr.dime.pixdim(2:4) * space_unit;
-
-      %  set space_unit of xyzt_units to millimeter, because
-      %  voxel_size has been re-scaled
-      %
-      hdr.dime.xyzt_units = char(bitset(hdr.dime.xyzt_units,1,0));
-      hdr.dime.xyzt_units = char(bitset(hdr.dime.xyzt_units,2,1));
-      hdr.dime.xyzt_units = char(bitset(hdr.dime.xyzt_units,3,0));
-   end
-
-   hdr.dime.pixdim = abs(hdr.dime.pixdim);
-
-   return;					% change_hdr
-
-
-%-----------------------------------------------------------------------
-function orient = get_orient(R)
-
-   orient = [];
-
-   for i = 1:3
-      switch find(R(i,:)) * sign(sum(R(i,:)))
-      case 1
-         orient = [orient 1];		% Left to Right
-      case 2
-         orient = [orient 2];		% Posterior to Anterior
-      case 3
-         orient = [orient 3];		% Inferior to Superior
-      case -1
-         orient = [orient 4];		% Right to Left
-      case -2
-         orient = [orient 5];		% Anterior to Posterior
-      case -3
-         orient = [orient 6];		% Superior to Inferior
-      end
-   end
-
-   return;					% get_orient
-
-
-%-----------------------------------------------------------------------
-function [space_unit, time_unit] = get_units(hdr)
-
-   switch bitand(hdr.dime.xyzt_units, 7)	% mask with 0x07
-   case 1
-      space_unit = 1e+3;		% meter, m
-   case 3
-      space_unit = 1e-3;		% micrometer, um
-   otherwise
-      space_unit = 1;			% millimeter, mm
-   end
-
-   switch bitand(hdr.dime.xyzt_units, 56)	% mask with 0x38
-   case 16
-      time_unit = 1e-3;			% millisecond, ms
-   case 24
-      time_unit = 1e-6;			% microsecond, us
-   otherwise
-      time_unit = 1;			% second, s
-   end
-
-   return;					% get_units
-
diff --git a/reg-test/matlab_tests/SSD_test.m b/reg-test/matlab_tests/SSD_test.m
deleted file mode 100644
index 0368733b..00000000
--- a/reg-test/matlab_tests/SSD_test.m
+++ /dev/null
@@ -1,55 +0,0 @@
-function SSD_test(img1, img2, output_path)
-    current1 = load_untouch_nii(img1); % read the Nifti file
-    current2 = load_untouch_nii(img2); % read the Nifti file
-    currentImg1 = double(current1.img);
-    currentImg2 = double(current2.img);
-    %
-    dimVect1 = current1.hdr.dime.dim;
-    dimVect2 = current2.hdr.dime.dim;
-    %
-    nz1 = dimVect1(4);
-    nz2 = dimVect2(4);
-    if nz1 ~= nz2
-        error('Error. Images must have the same dimension.');
-    end
-    if nz1 > 1
-        imgDim = 3;
-    else
-        imgDim = 2;
-    end
-    %
-    nt1 = dimVect1(5);
-    nt2 = dimVect2(5);
-    %
-    if (nt1 ~= nt2)
-        error('Error. Images must have the same dimension.');
-    end
-    %
-    
-    SSDValue = 0;
-    for ii=1:nt1
-        img1 = currentImg1(:,:,:,ii);
-        img2 = currentImg2(:,:,:,ii);
-        minImg1 = min(img1(:));
-        maxImg1 = max(img1(:));
-        minImg2 = min(img2(:));
-        maxImg2 = max(img2(:));
-        min12 = min(minImg1, minImg2);
-        max12 = max(maxImg1, maxImg2);
-        range12 = max12 - min12;
-        min1=(minImg1 - min12)/range12;
-        min2=(minImg2 - min12)/range12;
-        max1=1 - ((max12 - maxImg1) / range12);
-        max2=1 - ((max12 - maxImg2) / range12);
-        img1 = ((img1-minImg1) ./ (maxImg1-minImg1)) .* ...
-            (max1-min1) + min1;
-        img2 = ((img2-minImg2) ./ (maxImg2-minImg2)) .* ...
-            (max2-min2) + min2;        
-        diff2 = (img1-img2).^2;
-        diff2Array=diff2(:);
-        SSDValue = SSDValue + sum(diff2Array(~isnan(diff2Array)))/sum(~isnan(diff2Array));
-    end
-    %% Write the result
-    expectedSSD = -SSDValue;
-    dlmwrite([output_path,'/expectedSSDValue',num2str(imgDim),'D.txt'],expectedSSD,'precision','%.6f','delimiter',' ');
-end
\ No newline at end of file
diff --git a/reg-test/matlab_tests/affineDeformationField_test.m b/reg-test/matlab_tests/affineDeformationField_test.m
deleted file mode 100644
index 46070131..00000000
--- a/reg-test/matlab_tests/affineDeformationField_test.m
+++ /dev/null
@@ -1,134 +0,0 @@
-function affineDeformationField_test(refImg2D_name, refImg3D_name, output_path)
-%% cout float  3.333333253860474
-%% cout double 3.333333333333334
-%% The number of digits of precision a value has depends on both the size 
-%% (floats have less precision than doubles) and the particular value being stored 
-%% (some values have more precision than others).
-%% Float values have between 6 and 9 digits of precision,
-%% with most float values having at least 7 significant digits
-%% (which is why everything after that many digits in our answer above is junk).
-%% Double values have between 15 and 18 digits of precision,
-%% with most double values having at least 16 significant digits.
-%% Long double has a minimum precision of 15, 18, or 33 significant digits
-%% depending on how many bytes it occupies.
-%%
-%% Create a vector field image from an affine transformation matrix
-%%
-double_datatype = 64;
-double_bitpix = 64;
-float_datatype = 16;
-float_bitpix = 32;
-uchar_datatype = 2;
-uchar_bitpix = 8;
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% 3D
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-refImg3D = load_untouch_nii(refImg3D_name); % read the Nifti file
-HMatrix = eye(4,4,'single');
-HMatrix(1,:) = refImg3D.hdr.hist.srow_x;
-HMatrix(2,:) = refImg3D.hdr.hist.srow_y;
-HMatrix(3,:) = refImg3D.hdr.hist.srow_z;
-%HMatrix
-%% Generate a random affine tansformation matrix:
-%A=rand(4,4,'single');
-A=rand(4,4)+ eye(4,4);
-A(end,:)  =[0 0 0 1];
-A=single(A);
-%%
-% A(1,:)=[0.9074931	0.01773963	-0.01136361	-1.596654];
-% A(2,:)=[0.009297408	0.9127377	-0.1370281	-7.986477];
-% A(3,:)=[0.01029972	0.1200682	0.8102149	-0.5980158];
-% A(4,:)=[0	0	0	1];
-% A
-dlmwrite([output_path,'/affine_mat3D.txt'],A,'precision','%.6f','delimiter',' ');
-%% READ THE FILE THAT WE HAVE JUST WRITTEN
-fileID = fopen([output_path,'/affine_mat3D.txt'],'r');
-formatSpec = '%f';
-sizeA = [4 4];
-A = fscanf(fileID,formatSpec,sizeA);
-fclose(fileID);
-A=single(A');
-%%
-expectedField = zeros(refImg3D.hdr.dime.dim(2),refImg3D.hdr.dime.dim(3),refImg3D.hdr.dime.dim(4),1,3,'single');
-%%
-globalMatrix = single(double(A) * double(HMatrix));
-%%
-for kk=1:size(refImg3D.img,3)
-    for jj=1:size(refImg3D.img,2)
-        for ii=1:size(refImg3D.img,1)
-            newPosition = single(double(globalMatrix) * double([ii-1 jj-1 kk-1 1]'));
-            expectedField(ii,jj,kk,1,1)=newPosition(1);
-            expectedField(ii,jj,kk,1,2)=newPosition(2);
-            expectedField(ii,jj,kk,1,3)=newPosition(3);
-        end
-    end
-end
-%% Usage: nii = make_nii(img, [voxel_size], [origin], [datatype], [description])
-%% 16 = float32
-%% 64 = float64
-expectedField_nii = make_nii(expectedField,...
-    [refImg3D.hdr.dime.pixdim(2),...
-    refImg3D.hdr.dime.pixdim(3),...
-    refImg3D.hdr.dime.pixdim(4)],...
-    [],float_datatype);
-%
-save_nii(expectedField_nii, [output_path,'/affine_def3D.nii.gz']);
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% 2D
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-refImg2D = load_untouch_nii(refImg2D_name); % read the Nifti file
-HMatrix = eye(4,4,'single');
-HMatrix(1,:) = refImg2D.hdr.hist.srow_x;
-HMatrix(2,:) = refImg2D.hdr.hist.srow_y;
-HMatrix(3,:) = refImg2D.hdr.hist.srow_z;
-%HMatrix
-%% Generate a random affine tansformation matrix:
-%A=rand(4,4,'single');
-A=rand(4,4) + eye(4,4);
-A(1,3)=0;
-A(2,3)=0;
-A(end-1,:) = [0 0 1 0];
-A(end,:) = [0 0 0 1];
-A=single(A);
-%%
-% A(1,:)=[1.032482 -0.007169947 0 -0.6956705];
-% A(2,:)=[0.07810403 1.005479 0 0.01127497];
-% A(3,:)=[0 0 1 0];
-% A(4,:)=[0	0 0	1];
-% A
-dlmwrite([output_path,'/affine_mat2D.txt'],A,'precision','%.6f','delimiter',' ');
-%% READ THE FILE THAT WE HAVE JUST WRITTEN
-fileID = fopen([output_path,'/affine_mat2D.txt'],'r');
-formatSpec = '%f';
-sizeA = [4 4];
-A = fscanf(fileID,formatSpec,sizeA);
-fclose(fileID);
-A=single(A');
-%%
-expectedField = zeros(refImg2D.hdr.dime.dim(2),refImg2D.hdr.dime.dim(3),refImg2D.hdr.dime.dim(4),1,2,'single');
-%%
-globalMatrix = single(double(A) * double(HMatrix));
-%%
-for kk=1:size(refImg2D.img,3)
-    for jj=1:size(refImg2D.img,2)
-        for ii=1:size(refImg2D.img,1)
-            newPosition = single(double(globalMatrix) * double([ii-1 jj-1 kk-1 1]'));
-            expectedField(ii,jj,kk,1,1)=newPosition(1);
-            expectedField(ii,jj,kk,1,2)=newPosition(2);
-        end
-    end
-end
-%% Usage: nii = make_nii(img, [voxel_size], [origin], [datatype], [description])
-%% 16 = float32
-%% 64 = float64
-expectedField_nii = make_nii(expectedField,...
-    [refImg2D.hdr.dime.pixdim(2),...
-    refImg2D.hdr.dime.pixdim(3),...
-    refImg2D.hdr.dime.pixdim(4)],...
-    [],float_datatype);
-%
-save_nii(expectedField_nii, [output_path,'/affine_def2D.nii.gz']);
\ No newline at end of file
diff --git a/reg-test/matlab_tests/blockMatching_test.m b/reg-test/matlab_tests/blockMatching_test.m
deleted file mode 100644
index a5767d7d..00000000
--- a/reg-test/matlab_tests/blockMatching_test.m
+++ /dev/null
@@ -1,235 +0,0 @@
-function blockMatching_test(refImg2D_name, refImg3D_name, output_path)
-indexImage=1;
-vectImageName = {refImg2D_name, refImg3D_name};
-%%2D and 3D version
-for dim=[2,3]
-    BLOCK_WIDTH = 4;
-    BLOCK_WIDTH_MINUS1 = BLOCK_WIDTH-1;
-    refImg=load_untouch_nii(vectImageName{indexImage});
-    HMatrix = eye(4,4,'single');
-    HMatrix(1,:) = refImg.hdr.hist.srow_x;
-    HMatrix(2,:) = refImg.hdr.hist.srow_y;
-    HMatrix(3,:) = refImg.hdr.hist.srow_z;
-    refImgImg = refImg.img;
-    %% Size of the input image:
-    [m,n,o]=size(refImgImg);
-    %%
-    floImg=load_untouch_nii(vectImageName{indexImage});
-    floImgImg = floImg.img;
-    expectedBlockMatching = zeros(0,6);
-    expectedBlockMatchingPixel = zeros(0,6);
-    %% Let's cut our image in BLOCK_WIDTH*BLOCK_WIDTH size
-    nbTotalBlock_m = ceil(m/BLOCK_WIDTH);
-    nbTotalBlock_n = ceil(n/BLOCK_WIDTH);
-    nbTotalBlock_o = ceil(o/BLOCK_WIDTH);
-    if dim==2
-        nMax_o=2;
-    else
-        nMax_o=nbTotalBlock_o-1;
-    end
-    %% Let's move the middle blocks
-    %[-5,5]. -5 + (5+5)*rand(10,1);
-    blockIndex=1;
-    for oo=2:3:nMax_o
-        for nn=2:3:nbTotalBlock_n-1
-            for mm=2:3:nbTotalBlock_m-1
-                if dim==2
-                    blockCoord_mno=[(1+(mm-1)*BLOCK_WIDTH),(1+(nn-1)*BLOCK_WIDTH),1];
-                else
-                    blockCoord_mno=[(1+(mm-1)*BLOCK_WIDTH),(1+(nn-1)*BLOCK_WIDTH),(1+(oo-1)*BLOCK_WIDTH)];
-                end
-                
-                blockCoord_xyz=[blockCoord_mno(1)-1, blockCoord_mno(2)-1, blockCoord_mno(3)-1];
-                
-                if dim==2
-                    if(blockCoord_mno(1) >= 1 && (blockCoord_mno(1)+BLOCK_WIDTH_MINUS1) <=m...
-                            && blockCoord_mno(2) >= 1 && (blockCoord_mno(2)+BLOCK_WIDTH_MINUS1) <=n)
-                        
-                        tmpImg = refImgImg(blockCoord_mno(1):blockCoord_mno(1)+BLOCK_WIDTH_MINUS1,...
-                            blockCoord_mno(2):blockCoord_mno(2)+BLOCK_WIDTH_MINUS1);
-                        
-                    else
-                        mEnd = min(m,blockCoord_mno(1)+BLOCK_WIDTH_MINUS1);
-                        nEnd = min(n,blockCoord_mno(2)+BLOCK_WIDTH_MINUS1);
-                        
-                        tmpImg = refImgImg(blockCoord_mno(1):mEnd,blockCoord_mno(2):nEnd);
-                        
-                    end
-                elseif dim==3
-                    if(blockCoord_mno(1) >= 1 && (blockCoord_mno(1)+BLOCK_WIDTH_MINUS1) <=m...
-                            && blockCoord_mno(2) >= 1 && (blockCoord_mno(2)+BLOCK_WIDTH_MINUS1) <=n...
-                            && blockCoord_mno(3) >= 1 && (blockCoord_mno(3)+BLOCK_WIDTH_MINUS1) <=o)
-                        
-                        tmpImg = refImgImg(blockCoord_mno(1):blockCoord_mno(1)+BLOCK_WIDTH_MINUS1,...
-                            blockCoord_mno(2):blockCoord_mno(2)+BLOCK_WIDTH_MINUS1,...
-                            blockCoord_mno(3):blockCoord_mno(3)+BLOCK_WIDTH_MINUS1);
-                        
-                    else
-                        mEnd = min(m,blockCoord_mno(1)+BLOCK_WIDTH_MINUS1);
-                        nEnd = min(n,blockCoord_mno(2)+BLOCK_WIDTH_MINUS1);
-                        oEnd = min(o,blockCoord_mno(3)+BLOCK_WIDTH_MINUS1);
-                        
-                        tmpImg = refImgImg(blockCoord_mno(1):mEnd,...
-                            blockCoord_mno(2):nEnd,...
-                            blockCoord_mno(3):oEnd);
-                    end
-                else
-                    error('dimension of the image not supported');
-                end
-                
-                refVar = std(double(tmpImg(:)),1)^2;
-                [mT,nT,oT] = size(tmpImg);
-                nbPixel = mT*nT*oT;
-                
-                if(refVar > 0 && nbPixel > (BLOCK_WIDTH^dim)/2)
-                    noiseOK = 1;
-                    while noiseOK
-                        %BLOCK_WIDTH_MINUS1 = in order to keep an overlap of at
-                        %least 1 pixel
-                        moveOK = 1;
-                        
-                        while moveOK
-                            moveVect=round(-BLOCK_WIDTH_MINUS1 + (BLOCK_WIDTH_MINUS1+BLOCK_WIDTH_MINUS1)*rand(1,3));
-                            if dim==2
-                                moveVect(end)=0;
-                            end
-                            newBlockCoord_mno = blockCoord_mno+moveVect;
-                            
-                            newmStart = newBlockCoord_mno(1);
-                            newnStart = newBlockCoord_mno(2);
-                            newoStart = newBlockCoord_mno(3);
-                            
-                            newmEnd = min(m,newBlockCoord_mno(1)+BLOCK_WIDTH_MINUS1);
-                            newnEnd = min(n,newBlockCoord_mno(2)+BLOCK_WIDTH_MINUS1);
-                            newoEnd = min(o,newBlockCoord_mno(3)+BLOCK_WIDTH_MINUS1);
-                            
-                            if (newmStart >=1 && newmStart <= m...
-                                    && newnStart >=1 && newnStart <= n...
-                                    && newoStart >=1 && newoStart <= o)
-                                [mT,nT,oT] = size(refImgImg(newmStart:newmEnd,newnStart:newnEnd,newoStart:newoEnd));
-                                nbPixel = mT*nT*oT;
-                                
-                                if(nbPixel > (BLOCK_WIDTH^dim)/2)
-                                    moveOK = 0;
-                                end
-                            end
-                            
-                        end
-                        
-                        newBlockCoord_xyz = [newBlockCoord_mno(1)-1,newBlockCoord_mno(2)-1, newBlockCoord_mno(3)-1];
-                        %
-                        referencePosition=HMatrix*[blockCoord_xyz,1]';
-                        warpedPosition=HMatrix*[newBlockCoord_xyz,1]';
-                        %
-                        expectedBlockMatching(blockIndex,:)=[referencePosition(1) referencePosition(2) referencePosition(3) warpedPosition(1) warpedPosition(2) warpedPosition(3)];
-                        expectedBlockMatchingPixel(blockIndex,:)=[blockCoord_xyz(1) blockCoord_xyz(2) blockCoord_xyz(3) newBlockCoord_xyz(1) newBlockCoord_xyz(2) newBlockCoord_xyz(3)];
-                        
-                        mStart=blockCoord_mno(1);
-                        nStart=blockCoord_mno(2);
-                        oStart=blockCoord_mno(3);
-                        mEnd = min(m,blockCoord_mno(1)+BLOCK_WIDTH_MINUS1);
-                        nEnd = min(n,blockCoord_mno(2)+BLOCK_WIDTH_MINUS1);
-                        oEnd = min(o,blockCoord_mno(3)+BLOCK_WIDTH_MINUS1);
-                        
-                        newmStart=newBlockCoord_mno(1);
-                        newnStart=newBlockCoord_mno(2);
-                        newoStart=newBlockCoord_mno(3);
-                        if dim==2
-                            newoStart=1;
-                        end
-                        newmEnd = min(m,newBlockCoord_mno(1)+BLOCK_WIDTH_MINUS1);
-                        newnEnd = min(n,newBlockCoord_mno(2)+BLOCK_WIDTH_MINUS1);
-                        newoEnd = min(o,newBlockCoord_mno(3)+BLOCK_WIDTH_MINUS1);
-                        if dim==2
-                            newoEnd=1;
-                        end
-                        
-                        %% Lets add noise to our floatingImage in order to not have the same block more than once
-                        floImgImg(mStart:mEnd,nStart:nEnd,oStart:oEnd)=...
-                            255*rand(length(mStart:mEnd),length(nStart:nEnd),length(oStart:oEnd));
-                        %% Lets move the block
-                        floImgImg(newmStart:newmEnd,newnStart:newnEnd,newoStart:newoEnd)=...
-                            refImgImg(mStart:mStart+newmEnd-newmStart,nStart:nStart+newnEnd-newnStart,oStart:oStart+newoEnd-newoStart);
-                        
-                        %% Let's check that the new block does not have multiple candidate - otherwise redo
-                        %% It should be 1 !
-                        tmpImg1 = floImgImg(newmStart:newmEnd,newnStart:newnEnd,newoStart:newoEnd);
-                        tmpImg2 = refImgImg(mStart:mStart+newmEnd-newmStart,nStart:nStart+newnEnd-newnStart,oStart:oStart+newoEnd-newoStart);
-                        bestCC = corr(double(tmpImg1(:)),double(tmpImg2(:)));
-                        
-                        if dim == 2
-                            %%
-                            for vv=-3:1:3
-                                for uu=-3:1:3
-                                    %% we should never have edge problems
-                                    currentmStart=mStart+uu;
-                                    currentnStart=nStart+vv;
-                                    currentmEnd=min(m,currentmStart+BLOCK_WIDTH_MINUS1);
-                                    currentnEnd=min(n,currentnStart+BLOCK_WIDTH_MINUS1);
-                                    
-                                    if (currentmStart >=1 && currentmStart <= m && currentnStart >=1 && currentnStart <= n)
-                                        tmpImg1 = floImgImg(currentmStart:currentmEnd,currentnStart:currentnEnd);
-                                        tmpImg2 = refImgImg(mStart:mStart+currentmEnd-currentmStart,nStart:nStart+currentnEnd-currentnStart);
-                                        currentCC = abs(corr(double(tmpImg1(:)),double(tmpImg2(:))));
-                                        
-                                        if (currentCC >= bestCC && currentmStart ~= newmStart && currentnStart ~= newnStart)
-                                            %% redo the noise
-                                            noiseOK = -1;
-                                        end
-                                    else
-                                        disp('edge problems 2D... strange')
-                                    end
-                                end
-                            end
-                            if noiseOK==-1
-                                noiseOK = 1;
-                            else
-                                noiseOK = 0;
-                            end
-                        else
-                            for ww=-3:1:3
-                                for vv=-3:1:3
-                                    for uu=-3:1:3
-                                        currentmStart=mStart+uu;
-                                        currentnStart=nStart+vv;
-                                        currentoStart=oStart+ww;
-                                        currentmEnd=min(m,currentmStart+BLOCK_WIDTH_MINUS1);
-                                        currentnEnd=min(n,currentnStart+BLOCK_WIDTH_MINUS1);
-                                        currentoEnd=min(o,currentoStart+BLOCK_WIDTH_MINUS1);
-                                        
-                                        if (currentmStart >=1 && currentmStart <= m && currentnStart >=1 && currentnStart <= n && currentoStart >=1 && currentoStart <= o)
-                                            tmpImg1 = floImgImg(currentmStart:currentmEnd,currentnStart:currentnEnd,currentoStart:currentoEnd);
-                                            tmpImg2 = refImgImg(mStart:mStart+currentmEnd-currentmStart,nStart:nStart+currentnEnd-currentnStart,oStart:oStart+currentoEnd-currentoStart);
-                                            currentCC = abs(corr(double(tmpImg1(:)),double(tmpImg2(:))));
-                                            if (currentCC >= bestCC && currentmStart ~= newmStart && currentnStart ~= newnStart && currentoEnd ~= newoStart)
-                                                %% redo the noise
-                                                noiseOK = -1;
-                                            end
-                                        else
-                                            disp('edge problems 3D... strange');
-                                        end
-                                    end
-                                end
-                            end
-                            if noiseOK==-1
-                                noiseOK = 1;
-                            else
-                                noiseOK = 0;
-                            end
-                        end
-                        %%
-                    end
-                    blockIndex = blockIndex+1;
-                end
-            end
-        end
-    end
-    %% SAVE THE EXPECTED BLOCK MATCHING MATRIX
-    dlmwrite(strcat([output_path, '/expectedBlockMatching_mat',num2str(dim),'D.txt']), ...
-        expectedBlockMatching,'precision','%.6f','delimiter',' ');
-    %% SAVE THE IMAGE
-    floImg.img = floImgImg;
-    save_untouch_nii(floImg, strcat([output_path, '/warpedBlockMatchingImg',num2str(dim),'D.nii.gz']));
-    
-    indexImage=indexImage+1;
-end
\ No newline at end of file
diff --git a/reg-test/matlab_tests/changeDataType_test.m b/reg-test/matlab_tests/changeDataType_test.m
deleted file mode 100644
index 5899810c..00000000
--- a/reg-test/matlab_tests/changeDataType_test.m
+++ /dev/null
@@ -1,80 +0,0 @@
-function changeDataType_test(refImg2D_name, refImg3D_name, output_path)
-%%
-%% Change image datatype tests
-%%
-double_datatype = 64;
-double_bitpix = 64;
-float_datatype = 16;
-float_bitpix = 32;
-uchar_datatype = 2;
-uchar_bitpix = 8;
-%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% 3D
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% DOUBLE
-refImg3D=load_untouch_nii(refImg3D_name);
-%
-double_nii = refImg3D;
-double_nii.img = double(refImg3D.img);
-double_nii.hdr.dime.datatype = double_datatype;
-double_nii.hdr.dime.bitpix = double_bitpix;
-%
-save_untouch_nii(double_nii, [output_path,'/refImg3D_double.nii.gz']);
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% SINGLE
-refImg3D=load_untouch_nii(refImg3D_name);
-%
-single_nii = refImg3D;
-single_nii.img = single(refImg3D.img);
-single_nii.hdr.dime.datatype = float_datatype;
-single_nii.hdr.dime.bitpix = float_bitpix;
-%
-save_untouch_nii(single_nii, [output_path,'/refImg3D_float.nii.gz']);
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% UCHAR
-refImg3D=load_untouch_nii(refImg3D_name);
-%
-uchar_nii = refImg3D;
-uchar_nii.img = uint8(refImg3D.img);
-uchar_nii.hdr.dime.datatype = uchar_datatype;
-uchar_nii.hdr.dime.bitpix = uchar_bitpix;
-%
-save_untouch_nii(uchar_nii, [output_path,'/refImg3D_uchar.nii.gz']);
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% 2D
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% DOUBLE
-refImg2D=load_untouch_nii(refImg2D_name);
-%
-double_nii = refImg2D;
-double_nii.img = double(refImg2D.img);
-double_nii.hdr.dime.datatype = double_datatype;
-double_nii.hdr.dime.bitpix = double_bitpix;
-%
-save_untouch_nii(double_nii, [output_path,'/refImg2D_double.nii.gz']);
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% SINGLE
-refImg2D=load_untouch_nii(refImg2D_name);
-%
-single_nii = refImg2D;
-single_nii.img = single(refImg2D.img);
-single_nii.hdr.dime.datatype = float_datatype;
-single_nii.hdr.dime.bitpix = float_bitpix;
-%
-save_untouch_nii(single_nii, [output_path,'/refImg2D_float.nii.gz']);
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% UCHAR
-refImg2D=load_untouch_nii(refImg2D_name);
-%
-uchar_nii = refImg2D;
-uchar_nii.img = uint8(refImg2D.img);
-uchar_nii.hdr.dime.datatype = uchar_datatype;
-uchar_nii.hdr.dime.bitpix = uchar_bitpix;
-%
-save_untouch_nii(uchar_nii, [output_path,'/refImg2D_uchar.nii.gz']);
-end
\ No newline at end of file
diff --git a/reg-test/matlab_tests/create_test_data.m b/reg-test/matlab_tests/create_test_data.m
deleted file mode 100644
index efa87961..00000000
--- a/reg-test/matlab_tests/create_test_data.m
+++ /dev/null
@@ -1,296 +0,0 @@
-function create_test_data(ref2D_path, ref3D_path, output_path)
-%% Add the required files to read and write nifti images
-addpath('./NIfTI_20140122');
-%% Create the folder to store the result files
-if (strcmp(output_path,'.') == 1 || strcmp(output_path,'..') == 1)
-    error('[NiftyReg Build Tests] cannot create in . or ..');
-end
-if ~exist(output_path, 'dir')
-    mkdir(output_path);
-end
-%% Copy the input images into the output folder
-if ~exist([output_path, '/refImg2D.nii.gz'], 'file')
-    [~,~,ext] = fileparts(ref2D_path);
-    if strcmp(ext,'.gz')
-        copyfile(ref2D_path, [output_path, '/refImg2D.nii.gz'], 'f');
-    else
-        copyfile(ref2D_path, [output_path, '/refImg2D.nii'], 'f');
-        gzip([output_path, '/refImg2D.nii'])
-    end
-    fprintf('[NiftyReg Build Tests] Input 2D file copied\n');
-else
-    fprintf(['[NiftyReg Build Tests] ', output_path, ...
-        '/refImg2D.nii.gz already exists\n'])
-end
-if ~exist([output_path, '/refImg3D.nii.gz'], 'file')
-
-    [~,~,ext] = fileparts(ref2D_path);
-    if strcmp(ext,'.gz')
-        copyfile(ref3D_path, [output_path, '/refImg3D.nii.gz'], 'f');
-    else
-        copyfile(ref3D_path, [output_path, '/refImg3D.nii'], 'f');
-        gzip([output_path, '/refImg3D.nii'])
-
-    end
-    fprintf('[NiftyReg Build Tests]Input 3D file copied\n');
-else
-    fprintf(['[NiftyReg Build Tests] ', output_path, ...
-        '/refImg3D.nii.gz already exists\n'])
-end
-
-ref2D=[output_path, '/refImg2D.nii.gz'];
-ref3D=[output_path, '/refImg3D.nii.gz'];
-
-%% Create affine matrix and associated deformation fields
-fprintf('[NiftyReg Build Tests] Starting to generate affine deformation fields\n')
-if ~exist([output_path,'/affine_mat2D.txt'], 'file') || ...
-    ~exist([output_path,'/affine_mat3D.txt'], 'file') || ...
-    ~exist([output_path,'/affine_def2D.nii.gz'], 'file') || ...
-    ~exist([output_path,'/affine_def2D.nii.gz'], 'file')
-    affineDeformationField_test(ref2D, ref3D, output_path);
-    fprintf('[NiftyReg Build Tests] Affine deformation fields created\n');
-else
-    fprintf('[NiftyReg Build Tests] Affine deformation fields already exist\n');
-end
-%% Create control point grids and associated deformation fields
-fprintf('[NiftyReg Build Tests] Starting to generate spline deformation fields\n')
-if ~exist([output_path,'/bspline_def2D.nii.gz'], 'file') || ...
-    ~exist([output_path,'/bspline_def3D.nii.gz'], 'file') || ...
-    ~exist([output_path,'/bspline_grid2D.nii.gz'], 'file') || ...
-    ~exist([output_path,'/bspline_grid3D.nii.gz'], 'file')
-    getBSplineField_test(ref2D, ref3D, output_path);
-    fprintf('[NiftyReg Build Tests] Spline deformation fields created\n');
-else
-    fprintf('[NiftyReg Build Tests] Spline deformation fields already exist\n');
-end
-%% Create data to test the block matching
-fprintf('[NiftyReg Build Tests] Starting to generate Block matching test data\n')
-if ~exist([output_path,'/expectedBlockMatching_mat2D.txt'], 'file') || ...
-    ~exist([output_path,'/expectedBlockMatching_mat3D.txt'], 'file') || ...
-    ~exist([output_path,'/warpedBlockMatchingImg2D.nii.gz'], 'file') || ...
-    ~exist([output_path,'/warpedBlockMatchingImg3D.nii.gz'], 'file')
-    blockMatching_test(ref2D, ref3D, output_path);
-    fprintf('[NiftyReg Build Tests] Block matching test data created\n');
-else
-    fprintf('[NiftyReg Build Tests] Block matching test data already exist\n');
-end
-
-%% Convert input images to different data type
-fprintf('[NiftyReg Build Tests] Starting to generate datatype tests\n')
-if ~exist([output_path,'/refImg2D_uchar.nii.gz'], 'file') || ...
-    ~exist([output_path,'/refImg3D_uchar.nii.gz'], 'file') || ...
-    ~exist([output_path,'/refImg2D_float.nii.gz'], 'file') || ...
-    ~exist([output_path,'/refImg3D_float.nii.gz'], 'file') || ...
-    ~exist([output_path,'/refImg2D_double.nii.gz'], 'file') || ...
-    ~exist([output_path,'/refImg3D_double.nii.gz'], 'file')
-    changeDataType_test(ref2D, ref3D, output_path);
-    fprintf('[NiftyReg Build Tests] datatype tests data created\n');
-else
-    fprintf('[NiftyReg Build Tests] datatype tests data already exist\n');
-end
-%% Create interpolated images
-fprintf('[NiftyReg Build Tests] Starting to generate interpolation tests\n')
-if ~exist([output_path,'/warped_nearest2D.nii.gz'], 'file') || ...
-    ~exist([output_path,'/warped_linear2D.nii.gz'], 'file') || ...
-    ~exist([output_path,'/warped_cubic2D.nii.gz'], 'file') || ...
-    ~exist([output_path,'/warped_nearest3D.nii.gz'], 'file') || ...
-    ~exist([output_path,'/warped_linear3D.nii.gz'], 'file') || ...
-    ~exist([output_path,'/warped_cubic3D.nii.gz'], 'file')
-    interpolation_test(ref2D, ref3D, ...
-        [output_path,'/affine_def2D.nii.gz'], ...
-        [output_path,'/affine_def3D.nii.gz'], ...
-        output_path);
-    fprintf('[NiftyReg Build Tests] interpolation tests data created\n');
-else
-    fprintf('[NiftyReg Build Tests] interpolation tests data already exist\n');
-end
-%% Create data to test the SVD function
-fprintf('[NiftyReg Build Tests] Starting to generate SVD tests\n')
-if ~exist([output_path,'/inputSVDMatrix.txt'], 'file') || ...
-    ~exist([output_path,'/expectedUMatrix.txt'], 'file') || ...
-    ~exist([output_path,'/expectedSMatrix.txt'], 'file') || ...
-    ~exist([output_path,'/expectedVMatrix.txt'], 'file')
-    svd_test(output_path);
-    fprintf('[NiftyReg Build Tests] SVD tests data created\n');
-else
-    fprintf('[NiftyReg Build Tests] SVD tests data already exist\n');
-end
-%% Create data to test each matrix operations
-fprintf('[NiftyReg Build Tests] Starting to generate matrix operation tests\n')
-if ~exist([output_path,'/inputMatrix1.txt'], 'file') || ...
-    ~exist([output_path,'/inputMatrix2.txt'], 'file') || ...
-    ~exist([output_path,'/expectedMulMatrix.txt'], 'file') || ...
-    ~exist([output_path,'/expectedAddMatrix.txt'], 'file') || ...
-    ~exist([output_path,'/expectedSubMatrix.txt'], 'file') || ...
-    ~exist([output_path,'/expectedExpMatrix.txt'], 'file') || ...
-    ~exist([output_path,'/expectedLogMatrix.txt'], 'file') || ...
-    ~exist([output_path,'/expectedInvMatrix.txt'], 'file')
-    matrix_operation_test(output_path);
-    fprintf('[NiftyReg Build Tests] matrix operation tests data created\n');
-else
-    fprintf('[NiftyReg Build Tests] matrix operation tests data already exist\n');
-end
-%% Create data to test the LS and LTS functions
-fprintf('[NiftyReg Build Tests] Starting to generate LTS tests\n')
-if ~exist([output_path,'/P1_2D.txt'], 'file') || ...
-    ~exist([output_path,'/P1_3D.txt'], 'file') || ...
-    ~exist([output_path,'/expectedRigidLTS_2D_70.txt'], 'file') || ...
-    ~exist([output_path,'/expectedRigidLTS_2D_100.txt'], 'file') || ...
-    ~exist([output_path,'/expectedRigidLTS_3D_70.txt'], 'file') || ...
-    ~exist([output_path,'/expectedRigidLTS_3D_100.txt'], 'file') || ...
-    ~exist([output_path,'/expectedAffineLTS_2D_70.txt'], 'file') || ...
-    ~exist([output_path,'/expectedAffineLTS_2D_100.txt'], 'file') || ...
-    ~exist([output_path,'/expectedAffineLTS_3D_70.txt'], 'file') || ...
-    ~exist([output_path,'/expectedAffineLTS_3D_100.txt'], 'file')
-    LTS_test(output_path);
-    fprintf('[NiftyReg Build Tests] LTS tests data created\n');
-else
-    fprintf('[NiftyReg Build Tests] LTS tests data already exist\n');
-end
-%% Create data to test MIND
-fprintf('[NiftyReg Build Tests] Starting to generate MIND tests\n')
-if ~exist([output_path,'/P1_2D.txt'], 'file') || ...
-    ~exist([output_path,'/P1_3D.txt'], 'file') || ...
-    ~exist([output_path,'/expectedMINDDescriptor2D_1.nii.gz'], 'file') || ...
-    ~exist([output_path,'/expectedMINDDescriptor3D_1.nii.gz'], 'file')
-    mindDescriptor_test(ref2D, ref3D, output_path, false);
-    movefile([output_path,'/expectedMINDDescriptor2D.nii.gz'], ...
-        [output_path,'/expectedMINDDescriptor2D_1.nii.gz']);
-    movefile([output_path,'/expectedMINDDescriptor3D.nii.gz'], ...
-        [output_path,'/expectedMINDDescriptor3D_1.nii.gz']);
-    fprintf('[NiftyReg Build Tests] MIND 1 tests data created\n');
-else
-    fprintf('[NiftyReg Build Tests] MIND 1 tests data already exist\n');
-end
-if ~exist([output_path,'/P1_2D.txt'], 'file') || ...
-    ~exist([output_path,'/P1_3D.txt'], 'file') || ...
-    ~exist([output_path,'/expectedMINDDescriptor2D_2.nii.gz'], 'file') || ...
-    ~exist([output_path,'/expectedMINDDescriptor3D_2.nii.gz'], 'file')
-    mindDescriptor_test([output_path,'/warped_linear2D.nii.gz'], ...
-        [output_path,'/warped_linear3D.nii.gz'], ...
-        output_path, false);
-    movefile([output_path,'/expectedMINDDescriptor2D.nii.gz'], ...
-        [output_path,'/expectedMINDDescriptor2D_2.nii.gz']);
-    movefile([output_path,'/expectedMINDDescriptor3D.nii.gz'], ...
-        [output_path,'/expectedMINDDescriptor3D_2.nii.gz']);
-    fprintf('[NiftyReg Build Tests] MIND 2 tests data created\n');
-else
-    fprintf('[NiftyReg Build Tests] MIND 2 tests data already exist\n');
-end
-%% Create data to test SSD similarity measure
-fprintf('[NiftyReg Build Tests] Starting to generate SSD tests\n')
-if ~exist([output_path,'/expectedSSDValue2D.txt'], 'file') || ...
-    ~exist([output_path,'/expectedSSDValue3D.txt'], 'file')
-    SSD_test([output_path,'/expectedMINDDescriptor2D_1.nii.gz'], ...
-        [output_path,'/expectedMINDDescriptor2D_2.nii.gz'],  ...
-        output_path);
-    SSD_test([output_path,'/expectedMINDDescriptor3D_1.nii.gz'], ...
-        [output_path,'/expectedMINDDescriptor3D_2.nii.gz'], ...
-        output_path);
-    fprintf('[NiftyReg Build Tests] SSD tests data created\n');
-else
-    fprintf('[NiftyReg Build Tests] SSD tests data already exist\n');
-end
-%% Create data to test MIND similarity measure
-fprintf('[NiftyReg Build Tests] Starting to generate MIND SSD tests\n')
-if ~exist([output_path,'/expectedMINDSSDValue2D.txt'], 'file') || ...
-    ~exist([output_path,'/expectedMINDSSDValue3D.txt'], 'file')
-    MINDSSD_test(ref2D,[output_path,'/warped_linear2D.nii.gz'], ...
-                 ref3D,[output_path,'/warped_linear3D.nii.gz'], ...
-                 output_path);
-    fprintf('[NiftyReg Build Tests] MIND SSD tests data created\n');
-else
-    fprintf('[NiftyReg Build Tests] MIND SSD tests data already exist\n');
-end
-%% Create data to test gradient
-fprintf('[NiftyReg Build Tests] Starting to generate gradient tests\n')
-if ~exist([output_path,'/expectedImageGradient2D.nii.gz'], 'file') || ...
-    ~exist([output_path,'/expectedImageGradient3D.nii.gz'], 'file')
-    imageGradient_test([output_path,'/expectedMINDDescriptor2D_1.nii.gz'],...
-                       [output_path,'/expectedMINDDescriptor3D_1.nii.gz'],...
-                        output_path);
-    fprintf('[NiftyReg Build Tests] gradient tests data created\n');
-else
-    fprintf('[NiftyReg Build Tests] gradient tests data already exist\n');
-end
-%% Create data to test MIND-SSC
-fprintf('[NiftyReg Build Tests] Starting to generate MINDSSC tests\n')
-if ~exist([output_path,'/P1_2D.txt'], 'file') || ...
-    ~exist([output_path,'/P1_3D.txt'], 'file') || ...
-    ~exist([output_path,'/expectedMINDSSCDescriptor2D_1.nii.gz'], 'file') || ...
-    ~exist([output_path,'/expectedMINDSSCDescriptor3D_1.nii.gz'], 'file')
-    mindsscDescriptor_test(ref2D, ref3D, output_path, false);
-    movefile([output_path,'/expectedMINDSSCDescriptor2D.nii.gz'], ...
-        [output_path,'/expectedMINDSSCDescriptor2D_1.nii.gz']);
-    movefile([output_path,'/expectedMINDSSCDescriptor3D.nii.gz'], ...
-        [output_path,'/expectedMINDSSCDescriptor3D_1.nii.gz']);
-    fprintf('[NiftyReg Build Tests] MINDSSC 1 tests data created\n');
-else
-    fprintf('[NiftyReg Build Tests] MINDSSC 1 tests data already exist\n');
-end
-if ~exist([output_path,'/P1_2D.txt'], 'file') || ...
-    ~exist([output_path,'/P1_3D.txt'], 'file') || ...
-    ~exist([output_path,'/expectedMINDSSCDescriptor2D_2.nii.gz'], 'file') || ...
-    ~exist([output_path,'/expectedMINDSSCDescriptor3D_2.nii.gz'], 'file')
-    mindsscDescriptor_test([output_path,'/warped_linear2D.nii.gz'], ...
-        [output_path,'/warped_linear3D.nii.gz'], ...
-        output_path, false);
-    movefile([output_path,'/expectedMINDSSCDescriptor2D.nii.gz'], ...
-        [output_path,'/expectedMINDSSCDescriptor2D_2.nii.gz']);
-    movefile([output_path,'/expectedMINDSSCDescriptor3D.nii.gz'], ...
-        [output_path,'/expectedMINDSSCDescriptor3D_2.nii.gz']);
-    fprintf('[NiftyReg Build Tests] MINDSSC 2 tests data created\n');
-else
-    fprintf('[NiftyReg Build Tests] MINDSSC 2 tests data already exist\n');
-end
-%% Create data to test the convolution
-fprintf('[NiftyReg Build Tests] Starting to generate convolution\n')
-if ~exist([output_path,'/convolution2D_mea.nii.gz'], 'file') || ...
-    ~exist([output_path,'/convolution2D_lin.nii.gz'], 'file') || ...
-    ~exist([output_path,'/convolution2D_gau.nii.gz'], 'file') || ...
-    ~exist([output_path,'/convolution2D_spl.nii.gz'], 'file') || ...
-    ~exist([output_path,'/convolution3D_mea.nii.gz'], 'file') || ...
-    ~exist([output_path,'/convolution3D_lin.nii.gz'], 'file') || ...
-    ~exist([output_path,'/convolution3D_gau.nii.gz'], 'file') || ...
-    ~exist([output_path,'/convolution3D_spl.nii.gz'], 'file')
-    getConvolution_test(ref2D, ref3D, output_path);
-    fprintf('[NiftyReg Build Tests] Convolution tests data created\n');
-else
-    fprintf('[NiftyReg Build Tests] Convolution tests data already exist\n');
-end
-%% Create data to test the linear elasticity
-fprintf('[NiftyReg Build Tests] Starting to generate linear elasticity data\n')
-if  ~exist([output_path,'/le_spline_approx2D.txt'], 'file') || ...
-    ~exist([output_path,'/le_spline_dense2D.txt'], 'file') || ...
-    ~exist([output_path,'/le_field_dense2D.txt'], 'file') || ...
-    ~exist([output_path,'/le_spline_approx3D.txt'], 'file') || ...
-    ~exist([output_path,'/le_spline_dense3D.txt'], 'file') || ...
-    ~exist([output_path,'/le_field_dense3D.txt'], 'file')
-    getLinearElasticityValue_test( ...
-        [output_path,'/bspline_grid2D.nii.gz'] , ...
-        [output_path,'/bspline_def2D.nii.gz'] , ...
-        [output_path,'/bspline_grid3D.nii.gz'] , ...
-        [output_path,'/bspline_def3D.nii.gz'] , ...
-        output_path);
-    fprintf('[NiftyReg Build Tests] Linear elasticity data tests data created\n');
-else
-    fprintf('[NiftyReg Build Tests] Linear elasticity data tests data already exist\n');
-end
-%% Create data to test the linear elasticity gradient
-fprintf('[NiftyReg Build Tests] Starting to generate linear elasticity gradient data\n')
-if  ~exist([output_path,'/le_grad_spline_approx2D.nii.gz'], 'file') || ...
-    ~exist([output_path,'/le_grad_spline_dense2D.nii.gz'], 'file') || ...
-    ~exist([output_path,'/le_grad_field_dense2D.nii.gz'], 'file') || ...
-    ~exist([output_path,'/le_grad_spline_approx3D.nii.gz'], 'file') || ...
-    ~exist([output_path,'/le_grad_spline_dense3D.nii.gz'], 'file') || ...
-    ~exist([output_path,'/le_grad_field_dense3D.nii.gz'], 'file')
-    getLinearElasticityGradient_test( ...
-        [output_path,'/bspline_grid2D.nii.gz'] , ...
-        [output_path,'/bspline_def2D.nii.gz'] , ...
-        [output_path,'/bspline_grid3D.nii.gz'] , ...
-        [output_path,'/bspline_def3D.nii.gz'] , ...
-        output_path);
-    fprintf('[NiftyReg Build Tests] Linear elasticity gradient data tests data created\n');
-else
-    fprintf('[NiftyReg Build Tests] Linear elasticity gradient data tests data already exist\n');
-end
diff --git a/reg-test/matlab_tests/fGaussian3D.m b/reg-test/matlab_tests/fGaussian3D.m
deleted file mode 100644
index eaa7a7ca..00000000
--- a/reg-test/matlab_tests/fGaussian3D.m
+++ /dev/null
@@ -1,32 +0,0 @@
-function h = fGaussian3D(siz, sigma)
-%
-if(nargin == 1)
-    if length(siz) ~= 1
-        error('size not well defined');
-    end
-    sig = siz/(4*sqrt(2*log(2)));
-elseif nargin == 2
-    if length(siz) ~= 1
-        error('size not well defined');
-    end
-    if length(sigma) == 1
-        sig = sigma;
-    else
-        error('sigma not well defined');
-    end
-else
-    error('not enought input arguments');
-end
-%
-size = (siz-1)/2 * ones(1,3);
-[x,y,z] = ndgrid(-size(1):size(1),-size(2):size(2),-size(3):size(3));
-arg = -(x.*x + y.*y + z.*z)/(2*sig*sig);
-h = exp(arg);
-h(h<eps*max(h(:))) = 0;
-%
-sumh = sum(h(:));
-if sumh ~= 0
-    h  = h/sumh;
-end
-%
-end
diff --git a/reg-test/matlab_tests/getBSplineField_test.m b/reg-test/matlab_tests/getBSplineField_test.m
deleted file mode 100644
index e45b484d..00000000
--- a/reg-test/matlab_tests/getBSplineField_test.m
+++ /dev/null
@@ -1,180 +0,0 @@
-function getBSplineField_test(refImg2D_name, refImg3D_name, output_path)
-input_image_name={refImg2D_name, refImg3D_name};
-spacing=5;
-%% Loop over the input images
-for i=1:2
-    %% Read the input image
-    input_image = load_untouch_nii(input_image_name{i});
-    %% Generate the required deformation field image    
-    input_ndim=2;
-    if input_image.hdr.dime.dim(4) > 1
-        input_ndim=3;
-    end
-    input_dim=[input_image.hdr.dime.dim(2), ...
-        input_image.hdr.dime.dim(3), ...
-        input_image.hdr.dime.dim(4) ...
-        ];
-    expectedField = zeros(input_dim(1), ...
-        input_dim(2), ...
-        input_dim(3),...
-        1,...
-        input_ndim,...
-        'single' ...
-        );
-    %% Overlay a control point grid of random value
-    grid_dim=[ceil(3+input_dim(1)/spacing), ...
-        ceil(3+input_dim(2)/spacing), ...
-        ceil(3+input_dim(3)/spacing), ...
-        ];
-    if input_ndim==2
-           grid_dim(3)=1;
-    end
-    gridField = random('unif', -spacing, spacing, ...
-        grid_dim(1), ...
-        grid_dim(2), ...
-        grid_dim(3),...
-        1,...
-        input_ndim ...
-        );
-    % Convert from displacement to deformation
-    def_matrix = eye(4,4,'single');
-    def_matrix(1,:)=input_image.hdr.hist.srow_x;
-    def_matrix(2,:)=input_image.hdr.hist.srow_y;
-    def_matrix(3,:)=input_image.hdr.hist.srow_z;
-    spl_matrix = eye(4,4,'single');
-    spl_matrix(1:3, 1) = def_matrix(1:3, 1) .* spacing;
-    spl_matrix(1:3, 2) = def_matrix(1:3, 2) .* spacing;
-    spl_matrix(1:3, 3) = def_matrix(1:3, 3) .* spacing;
-    spl_matrix(:,4) = def_matrix(:,4);
-    new_origin = spl_matrix * [-1, -1, -1, 1]';
-    spl_matrix(:,4) = new_origin;
-    for kk=1:grid_dim(3)
-        for jj=1:grid_dim(2)
-            for ii=1:grid_dim(1)
-                newPosition = single(double(spl_matrix) * ...
-                    double([ii-1 jj-1 kk-1 1]'));
-                gridField(ii,jj,kk,1,1)= ...
-                    gridField(ii,jj,kk,1,1)+newPosition(1);
-                gridField(ii,jj,kk,1,2)= ...
-                    gridField(ii,jj,kk,1,2)+newPosition(2);
-                if grid_dim(3) > 1
-                    gridField(ii,jj,kk,1,3)= ...
-                        gridField(ii,jj,kk,1,3)+newPosition(3);
-                end
-            end
-        end
-    end
-    %% Fill the deformation field image using the slowest approach
-    % known to mankind
-    for x=0:input_dim(1)-1
-        first_x = floor(x/spacing);
-        norm_x = x/spacing - first_x;
-        basis_x = getBSplineCoefficient(norm_x);
-        for y=0:input_dim(2)-1
-            first_y = floor(y/spacing);
-            norm_y = y/spacing - first_y;
-            basis_y = getBSplineCoefficient(norm_y);
-       
-            if input_ndim==2
-                current_value_x=0;
-                current_value_y=0;
-                for a=1:4
-                    for b=1:4
-                        basis = basis_x(a) * basis_y(b);
-                        current_value_x=current_value_x + basis * ...
-                            gridField(first_x+a, first_y+b, 1, 1, 1);
-                        current_value_y=current_value_y + basis * ...
-                            gridField(first_x+a, first_y+b, 1, 1, 2);
-                    end
-                end
-                expectedField(x+1, y+1, 1, 1, 1)=current_value_x;
-                expectedField(x+1, y+1, 1, 1, 2)=current_value_y;
-            else
-                for z=0:input_dim(3)-1
-                    first_z = floor(z/spacing);
-                    norm_z = z/spacing - first_z;
-                    basis_z = getBSplineCoefficient(norm_z);
-                    
-                    current_value_x=0;
-                    current_value_y=0;
-                    current_value_z=0;
-                    for a=1:4
-                        for b=1:4
-                            for c=1:4
-                                basis = basis_x(a) * basis_y(b) * ...
-                                    basis_z(c);
-                                current_value_x=current_value_x+basis*...
-                                    gridField(first_x+a, ...
-                                    first_y+b, ...
-                                    first_z+c, ...
-                                    1, 1);
-                                current_value_y=current_value_y+basis*...
-                                    gridField(first_x+a, ...
-                                    first_y+b, ...
-                                    first_z+c, ...
-                                    1, 2);
-                                current_value_z=current_value_z+basis*...
-                                    gridField(first_x+a, ...
-                                    first_y+b, ...
-                                    first_z+c, ...
-                                    1, 3);
-                            end
-                        end
-                    end
-                    expectedField(x+1, y+1, z+1, 1, 1)=current_value_x;
-                    expectedField(x+1, y+1, z+1, 1, 2)=current_value_y;
-                    expectedField(x+1, y+1, z+1, 1, 3)=current_value_z;
-                end
-            end            
-        end
-    end
-    %% Save the deformation field image
-    expectedField_nii=make_nii(expectedField,...
-        [input_image.hdr.dime.pixdim(2),...
-         input_image.hdr.dime.pixdim(3),...
-         input_image.hdr.dime.pixdim(4)],...
-        [], ...
-        16 ...
-        );
-    expectedField_nii.hdr.dime.pixdim(1)=input_image.hdr.dime.pixdim(1);
-    expectedField_nii.hdr.hist.quatern_b=input_image.hdr.hist.quatern_b;
-    expectedField_nii.hdr.hist.quatern_c=input_image.hdr.hist.quatern_c;
-    expectedField_nii.hdr.hist.quatern_d=input_image.hdr.hist.quatern_d;
-    expectedField_nii.hdr.hist.qoffset_x=input_image.hdr.hist.qoffset_x;
-    expectedField_nii.hdr.hist.qoffset_y=input_image.hdr.hist.qoffset_y;
-    expectedField_nii.hdr.hist.qoffset_z=input_image.hdr.hist.qoffset_z;
-    expectedField_nii.hdr.hist.srow_x=def_matrix(1,:);
-    expectedField_nii.hdr.hist.srow_y=def_matrix(2,:);
-    expectedField_nii.hdr.hist.srow_z=def_matrix(3,:);
-    expectedField_nii.hdr.hist=input_image.hdr.hist;
-    save_nii(expectedField_nii, [output_path,'/bspline_def', ...
-        int2str(input_ndim), 'D.nii.gz']);
-    %% Save the control point grid
-    gridField_nii=make_nii(gridField,...
-        [spacing*input_image.hdr.dime.pixdim(2),...
-         spacing*input_image.hdr.dime.pixdim(3),...
-         spacing*input_image.hdr.dime.pixdim(4)],...
-        [], ...
-        16 ...
-        );
-    gridField_nii.hdr.dime.pixdim(1)=input_image.hdr.dime.pixdim(1);
-    gridField_nii.hdr.hist.quatern_b=input_image.hdr.hist.quatern_b;
-    gridField_nii.hdr.hist.quatern_c=input_image.hdr.hist.quatern_c;
-    gridField_nii.hdr.hist.quatern_d=input_image.hdr.hist.quatern_d;
-    gridField_nii.hdr.hist.qoffset_x=input_image.hdr.hist.qoffset_x;
-    gridField_nii.hdr.hist.qoffset_y=input_image.hdr.hist.qoffset_y;
-    gridField_nii.hdr.hist.qoffset_z=input_image.hdr.hist.qoffset_z;
-    gridField_nii.hdr.hist=input_image.hdr.hist;
-    gridField_nii.hdr.hist.srow_x=spl_matrix(1,:);
-    gridField_nii.hdr.hist.srow_y=spl_matrix(2,:);
-    gridField_nii.hdr.hist.srow_z=spl_matrix(3,:);
-    save_nii(gridField_nii, [output_path,'/bspline_grid', ...
-        int2str(input_ndim), 'D.nii.gz']);
-end
-
-function basis = getBSplineCoefficient(dist)
-%% Given a normalise position return the 4 corresponding basis values
-basis(1) = (1-dist)*(1-dist)*(1-dist)/6;
-basis(2) = (3*dist*dist*dist - 6*dist*dist + 4)/6.0;
-basis(3) = (-3*dist*dist*dist + 3*dist*dist + 3*dist + 1)/6;
-basis(4) = dist*dist*dist/6;
diff --git a/reg-test/matlab_tests/getConvolution_test.m b/reg-test/matlab_tests/getConvolution_test.m
deleted file mode 100644
index 46d1cc6e..00000000
--- a/reg-test/matlab_tests/getConvolution_test.m
+++ /dev/null
@@ -1,92 +0,0 @@
-function getConvolution_test(refImg2D_name, refImg3D_name, output_path)
-%% Apply convolution to the input images
-%% Read the input images
-input_image_name = {refImg2D_name, refImg3D_name};
-%% Initialse the kernels
-convolution_type = {'mea', 'lin', 'gau', 'spl'};
-%% Mean kernel computation
-med_kernel=ones(11,11,11) ./ 125;
-%% Linear kernel computation
-lin_function = [0:0.2:1, 0.8:-0.2:0];
-lin_kernel=zeros(length(lin_function), ...
-    length(lin_function), ...
-    length(lin_function));
-for z=1:length(lin_function)
-    for y=1:length(lin_function)
-        for x=1:length(lin_function)
-            lin_kernel(x, y, z) = lin_function(x) * ...
-                lin_function(y) * lin_function(z);
-        end
-    end
-end
-%% Gaussian kernel computation
-gau_kernel=zeros(31,31,31);
-gauss_function = gaussmf(-15:1:15, [5, 0]);
-gauss_function = gauss_function ./ sum(gauss_function);
-for z=1:31
-    for y=1:31
-        for x=1:31
-            gau_kernel(x,y,z) = gauss_function(x) * ...
-                gauss_function(y) * ...
-                gauss_function(z);
-        end
-    end
-end
-%% Spline kernel
-spline_function = zeros(length(-2:0.2:2),1);
-for x=-10:1:10
-    dist=abs(x/5);
-    if dist < 1
-         spline_function(x+11) = 2/3 - dist*dist + 0.5*dist*dist*dist;
-    elseif dist < 2
-        spline_function(x+11) = -(dist-2)*(dist-2)*(dist-2)/6;
-    end
-end
-spline_function = spline_function / sum(spline_function);
-spl_kernel=zeros(length(spline_function), ...
-    length(spline_function), ...
-    length(spline_function));
-for z=1:length(spline_function)
-    for y=1:length(spline_function)
-        for x=1:length(spline_function)
-            spl_kernel(x, y, z) = spline_function(x) * ...
-                spline_function(y) * spline_function(z);
-        end
-    end
-end
-%% Loop over dimension
-convolution_kernel ={med_kernel, lin_kernel, gau_kernel, spl_kernel};
-for i=1:2
-    %% Load the input data
-    input_image = load_untouch_nii(input_image_name{i});
-    input_data = input_image.img;
-    %% Loop over the convolution type
-    for c=1:4
-        output_data = convn(input_data, convolution_kernel{c}, 'same');
-        output_norm = convn(ones(size(input_data)), convolution_kernel{c}, 'same');
-        output_data = output_data ./ output_norm;
-        input_matrix(1,:)=input_image.hdr.hist.srow_x;
-        input_matrix(2,:)=input_image.hdr.hist.srow_y;
-        input_matrix(3,:)=input_image.hdr.hist.srow_z;
-        convolved_nii=make_nii(output_data,...
-            [input_image.hdr.dime.pixdim(2),...
-            input_image.hdr.dime.pixdim(3),...
-            input_image.hdr.dime.pixdim(4)],...
-            [], ...
-            16 ...
-            );
-        convolved_nii.hdr.dime.pixdim(1)=input_image.hdr.dime.pixdim(1);
-        convolved_nii.hdr.hist.quatern_b=input_image.hdr.hist.quatern_b;
-        convolved_nii.hdr.hist.quatern_c=input_image.hdr.hist.quatern_c;
-        convolved_nii.hdr.hist.quatern_d=input_image.hdr.hist.quatern_d;
-        convolved_nii.hdr.hist.qoffset_x=input_image.hdr.hist.qoffset_x;
-        convolved_nii.hdr.hist.qoffset_y=input_image.hdr.hist.qoffset_y;
-        convolved_nii.hdr.hist.qoffset_z=input_image.hdr.hist.qoffset_z;
-        convolved_nii.hdr.hist.srow_x=input_matrix(1,:);
-        convolved_nii.hdr.hist.srow_y=input_matrix(2,:);
-        convolved_nii.hdr.hist.srow_z=input_matrix(3,:);
-        convolved_nii.hdr.hist=input_image.hdr.hist;
-        save_nii(convolved_nii, [output_path,'/convolution', ...
-            int2str(i+1), 'D_', convolution_type{c}, '.nii.gz']);
-    end
-end
diff --git a/reg-test/matlab_tests/getLinearElasticityGradient_test.m b/reg-test/matlab_tests/getLinearElasticityGradient_test.m
deleted file mode 100644
index 0e18e644..00000000
--- a/reg-test/matlab_tests/getLinearElasticityGradient_test.m
+++ /dev/null
@@ -1,484 +0,0 @@
-function getLinearElasticityGradient_test(grid2D_name, ...
-    def2D_name, grid3D_name, def3D_name, output_path)
-%%
-grid_name = {grid2D_name, grid3D_name};
-defField_name = {def2D_name, def3D_name};
-
-for i=1:2
-    %Read the grid image
-    grid_image = load_untouch_nii(grid_name{i});
-    grid_data = grid_image.img;
-    orientation = zeros(3,3);
-    orientation(1:3,1) = grid_image.hdr.hist.srow_x(1:3);
-    orientation(1:3,2) = grid_image.hdr.hist.srow_y(1:3);
-    orientation(1:3,3) = grid_image.hdr.hist.srow_z(1:3);
-    orientation = inv(orientation);
-    grid_dim=[grid_image.hdr.dime.dim(2), ...
-        grid_image.hdr.dime.dim(3), ...
-        grid_image.hdr.dime.dim(4) ...
-        ];
-
-    grad_data = zeros(size(grid_data));
-
-    % Precompute the basis values
-    basis = getBSplineCoefficient(0);
-    first = getBSplineCoefficientFirstOrder(0);
-    % Compute the value at the control point position only
-    for x=2:grid_dim(1)-1
-        for y=2:grid_dim(2)-1
-            if (i+1)==2
-                jacobian = zeros(2,2);
-                for a=1:3
-                    for b=1:3
-                        jacobian(1,1)=jacobian(1,1) + ...
-                            first(a) * basis(b) * ...
-                            grid_data(x+a-2, y+b-2, 1, 1, 1);
-                        jacobian(1,2)=jacobian(1,2) + ...
-                            basis(a) * first(b) * ...
-                            grid_data(x+a-2, y+b-2, 1, 1, 1);
-                        jacobian(2,1)=jacobian(2,1) + ...
-                            first(a) * basis(b) * ...
-                            grid_data(x+a-2, y+b-2, 1, 1, 2);
-                        jacobian(2,2)=jacobian(2,2) + ...
-                            basis(a) * first(b) * ...
-                            grid_data(x+a-2, y+b-2, 1, 1, 2);
-                    end
-                end
-                jacobian = orientation(1:2,1:2) * jacobian';
-                rotation = polarDecomposition(jacobian);
-                jacobian = (rotation) \ jacobian;
-                jacobian = jacobian - eye(2);
-                for a=1:3
-                    for b=1:3
-                        if x+a-2<=grid_dim(1) && x+a-2>0 && ...
-                           y+b-2<=grid_dim(2) && y+b-2>0
-                            gradient(1) = - 2 * jacobian(1,1) * ...
-                                first(-a+4) * basis(-b+4);
-                            gradient(2) = - 2 * jacobian(2,2) * ...
-                                basis(-a+4) * first(-b+4);
-                            grad_data(x+a-2,y+b-2,1,1,1:2) = ...
-                                squeeze(grad_data(x+a-2,y+b-2,1,1,1:2)) + ...
-                                orientation(1:2,1:2) \ ...
-                                [gradient(1), gradient(2)]' ...
-                                ./ prod(grid_dim);
-                        end
-                    end
-                end
-            else
-                for z=2:grid_dim(3)-1
-                    jacobian = zeros(3,3);
-                    for a=1:3
-                        for b=1:3
-                            for c=1:3
-                                jacobian(1,1)=jacobian(1,1) +  ...
-                                    first(a) * basis(b) * basis(c) * ...
-                                    grid_data(x+a-2, y+b-2, z+c-2, 1, 1);
-                                jacobian(1,2)=jacobian(1,2) +  ...
-                                    basis(a) * first(b) * basis(c) * ...
-                                    grid_data(x+a-2, y+b-2, z+c-2, 1, 1);
-                                jacobian(1,3)=jacobian(1,3) +  ...
-                                    basis(a) * basis(b) * first(c) * ...
-                                    grid_data(x+a-2, y+b-2, z+c-2, 1, 1);
-
-                                jacobian(2,1)=jacobian(2,1) +  ...
-                                    first(a) * basis(b) * basis(c) * ...
-                                    grid_data(x+a-2, y+b-2, z+c-2, 1, 2);
-                                jacobian(2,2)=jacobian(2,2) +  ...
-                                    basis(a) * first(b) * basis(c) * ...
-                                    grid_data(x+a-2, y+b-2, z+c-2, 1, 2);
-                                jacobian(2,3)=jacobian(2,3) +  ...
-                                    basis(a) * basis(b) * first(c) * ...
-                                    grid_data(x+a-2, y+b-2, z+c-2, 1, 2);
-
-                                jacobian(3,1)=jacobian(3,1) +  ...
-                                    first(a) * basis(b) * basis(c) * ...
-                                    grid_data(x+a-2, y+b-2, z+c-2, 1, 3);
-                                jacobian(3,2)=jacobian(3,2) +  ...
-                                    basis(a) * first(b) * basis(c) * ...
-                                    grid_data(x+a-2, y+b-2, z+c-2, 1, 3);
-                                jacobian(3,3)=jacobian(3,3) +  ...
-                                    basis(a) * basis(b) * first(c) * ...
-                                    grid_data(x+a-2, y+b-2, z+c-2, 1, 3);
-                            end
-                        end
-                    end
-                    jacobian = orientation(:,:) * jacobian';
-                    rotation = polarDecomposition(jacobian);
-                    jacobian = (rotation) \ jacobian;
-                    jacobian = jacobian - eye(3);
-                    for a=1:3
-                        for b=1:3
-                            for c=1:3
-                                if x+a-2<=grid_dim(1) && x+a-2>0 && ...
-                                   y+b-2<=grid_dim(2) && y+b-2>0 && ...
-                                   z+c-2<=grid_dim(3) && z+c-2>0
-                                    gradient(1) = - 2 * ...
-                                        jacobian(1,1) * first(-a+4) * basis(-b+4) * basis(-c+4);
-                                    gradient(2) = - 2 * ...
-                                        jacobian(2,2) * basis(-a+4) * first(-b+4) * basis(-c+4);
-                                    gradient(3) = - 2 * ...
-                                        jacobian(3,3) * basis(-a+4) * basis(-b+4) * first(-c+4);
-                                    grad_data(x+a-2,y+b-2,z+c-2,1,1:3) = ...
-                                        squeeze(grad_data(x+a-2,y+b-2,z+c-2,1,1:3)) + ...
-                                        orientation \ ...
-                                        [gradient(1), gradient(2), gradient(3)]' ...
-                                        ./ prod(grid_dim);
-                                end
-                            end
-                        end
-                    end
-                end
-            end
-        end
-    end
-    clear basis first
-    % Save the control point gradient
-    gradField_nii=make_nii(grad_data,...
-        [grid_image.hdr.dime.pixdim(2),...
-         grid_image.hdr.dime.pixdim(3),...
-         grid_image.hdr.dime.pixdim(4)],...
-        [], ...
-        16 ...
-        );
-    gradField_nii.hdr.dime.pixdim(1)=grid_image.hdr.dime.pixdim(1);
-    gradField_nii.hdr.hist.quatern_b=grid_image.hdr.hist.quatern_b;
-    gradField_nii.hdr.hist.quatern_c=grid_image.hdr.hist.quatern_c;
-    gradField_nii.hdr.hist.quatern_d=grid_image.hdr.hist.quatern_d;
-    gradField_nii.hdr.hist.qoffset_x=grid_image.hdr.hist.qoffset_x;
-    gradField_nii.hdr.hist.qoffset_y=grid_image.hdr.hist.qoffset_y;
-    gradField_nii.hdr.hist.qoffset_z=grid_image.hdr.hist.qoffset_z;
-    gradField_nii.hdr.hist=grid_image.hdr.hist;
-    gradField_nii.hdr.hist.srow_x=grid_image.hdr.hist.srow_x;
-    gradField_nii.hdr.hist.srow_y=grid_image.hdr.hist.srow_y;
-    gradField_nii.hdr.hist.srow_z=grid_image.hdr.hist.srow_z;
-    filename_nii=[output_path,'/le_grad_spline_approx', ...
-        int2str(i+1), 'D.nii.gz'];
-    save_nii(gradField_nii, filename_nii);
-    fprintf('%s has been saved\n', filename_nii);
-
-    % Read the def image
-    def_image = load_untouch_nii(defField_name{i});
-    def_dim=[def_image.hdr.dime.dim(2), ...
-        def_image.hdr.dime.dim(3), ...
-        def_image.hdr.dime.dim(4) ...
-        ];
-    spacing = grid_image.hdr.dime.pixdim(2) / def_image.hdr.dime.pixdim(2);
-    % reset to gradient data
-    grad_data = zeros(size(grid_data));
-    % Compute the value from all voxel position
-    for x=0:def_dim(1)-1
-         pre_x = floor(x/spacing);
-         norm_x = x/spacing - pre_x;
-         basis_x = getBSplineCoefficient(norm_x);
-         first_x = getBSplineCoefficientFirstOrder(norm_x);
-         for y=0:def_dim(2)-1
-             pre_y = floor(y/spacing);
-             norm_y = y/spacing - pre_y;
-             basis_y = getBSplineCoefficient(norm_y);
-             first_y = getBSplineCoefficientFirstOrder(norm_y);
-             if (i+1)==2
-                 jacobian = zeros(2,2);
-                 for a=1:4
-                     for b=1:4
-                         jacobian(1,1)=jacobian(1,1) + ...
-                             first_x(a) * basis_y(b) * ...
-                             grid_data(pre_x+a, pre_y+b, 1, 1, 1);
-                         jacobian(1,2)=jacobian(1,2) + ...
-                             basis_x(a) * first_y(b) * ...
-                             grid_data(pre_x+a, pre_y+b, 1, 1, 1);
-                         jacobian(2,1)=jacobian(2,1) + ...
-                             first_x(a) * basis_y(b) * ...
-                             grid_data(pre_x+a, pre_y+b, 1, 1, 2);
-                         jacobian(2,2)=jacobian(2,2) + ...
-                             basis_x(a) * first_y(b) * ...
-                             grid_data(pre_x+a, pre_y+b, 1, 1, 2);
-                     end
-                 end
-                 jacobian = orientation(1:2,1:2) * jacobian';
-                 rotation = polarDecomposition(jacobian);
-                 jacobian = (rotation) \ jacobian;
-                 jacobian = jacobian - eye(2);
-                 for b=1:4
-                     for a=1:4
-                         gradient(1) = - 2 * jacobian(1,1) * ...
-                             first_x(-a+5) * basis_y(-b+5);
-                         gradient(2) = - 2 * jacobian(2,2) * ...
-                             basis_x(-a+5) * first_y(-b+5);
-                         grad_data(pre_x+a,pre_y+b,1,1,1:2) = ...
-                             squeeze(grad_data(pre_x+a,pre_y+b,1,1,1:2)) + ...
-                             orientation(1:2,1:2) \ ...
-                             [gradient(1), gradient(2)]' ...
-                             ./ prod(def_dim);
-                     end
-                 end
-             else
-                 for z=0:def_dim(3)-1
-                     pre_z = floor(z/spacing);
-                     norm_z = z/spacing - pre_z;
-                     basis_z = getBSplineCoefficient(norm_z);
-                     first_z = getBSplineCoefficientFirstOrder(norm_z);
-                     jacobian = zeros(3,3);
-                     for a=1:4
-                         for b=1:4
-                             for c=1:4
-                                 jacobian(1,1)=jacobian(1,1) +  ...
-                                     first_x(a) * basis_y(b) * basis_z(c) * ...
-                                     grid_data(pre_x+a, pre_y+b, pre_z+c, 1, 1);
-                                 jacobian(1,2)=jacobian(1,2) +  ...
-                                     basis_x(a) * first_y(b) * basis_z(c) * ...
-                                     grid_data(pre_x+a, pre_y+b, pre_z+c, 1, 1);
-                                 jacobian(1,3)=jacobian(1,3) +  ...
-                                     basis_x(a) * basis_y(b) * first_z(c) * ...
-                                     grid_data(pre_x+a, pre_y+b, pre_z+c, 1, 1);
-
-                                 jacobian(2,1)=jacobian(2,1) +  ...
-                                     first_x(a) * basis_y(b) * basis_z(c) * ...
-                                     grid_data(pre_x+a, pre_y+b, pre_z+c, 1, 2);
-                                 jacobian(2,2)=jacobian(2,2) +  ...
-                                     basis_x(a) * first_y(b) * basis_z(c) * ...
-                                     grid_data(pre_x+a, pre_y+b, pre_z+c, 1, 2);
-                                 jacobian(2,3)=jacobian(2,3) +  ...
-                                     basis_x(a) * basis_y(b) * first_z(c) * ...
-                                     grid_data(pre_x+a, pre_y+b, pre_z+c, 1, 2);
-
-                                 jacobian(3,1)=jacobian(3,1) +  ...
-                                     first_x(a) * basis_y(b) * basis_z(c) * ...
-                                     grid_data(pre_x+a, pre_y+b, pre_z+c, 1, 3);
-                                 jacobian(3,2)=jacobian(3,2) +  ...
-                                     basis_x(a) * first_y(b) * basis_z(c) * ...
-                                     grid_data(pre_x+a, pre_y+b, pre_z+c, 1, 3);
-                                 jacobian(3,3)=jacobian(3,3) +  ...
-                                     basis_x(a) * basis_y(b) * first_z(c) * ...
-                                     grid_data(pre_x+a, pre_y+b, pre_z+c, 1, 3);
-                             end
-                         end
-                     end
-                     jacobian = orientation(:,:) * jacobian';
-                     rotation = polarDecomposition(jacobian);
-                     jacobian = (rotation) \ jacobian;
-                     jacobian = jacobian - eye(3);
-                     for a=1:4
-                         for b=1:4
-                             for c=1:4
-                                 gradient(1) = - 2 * ...
-                                     jacobian(1,1) * ...
-                                     first_x(-a+5) * basis_y(-b+5) * basis_z(-c+5);
-                                 gradient(2) = - 2 * ...
-                                     jacobian(2,2) * ...
-                                     basis_x(-a+5) * first_y(-b+5) * basis_z(-c+5);
-                                 gradient(3) = - 2 * ...
-                                     jacobian(3,3) * ...
-                                     basis_x(-a+5) * basis_y(-b+5) * first_z(-c+5);
-                                 grad_data(pre_x+a,pre_y+b,pre_z+c,1,1:3) = ...
-                                     squeeze(grad_data(pre_x+a,pre_y+b,pre_z+c,1,1:3)) + ...
-                                     orientation \ ...
-                                     [gradient(1), gradient(2), gradient(3)]' ...
-                                     ./ prod(def_dim);
-                             end
-                         end
-                     end
-                 end
-             end
-         end
-     end
-     % Save the control point gradient
-     clear gradField_nii
-     gradField_nii=make_nii(grad_data,...
-         [grid_image.hdr.dime.pixdim(2),...
-          grid_image.hdr.dime.pixdim(3),...
-          grid_image.hdr.dime.pixdim(4)],...
-         [], ...
-         16 ...
-         );
-     gradField_nii.hdr.dime.pixdim(1)=grid_image.hdr.dime.pixdim(1);
-     gradField_nii.hdr.hist.quatern_b=grid_image.hdr.hist.quatern_b;
-     gradField_nii.hdr.hist.quatern_c=grid_image.hdr.hist.quatern_c;
-     gradField_nii.hdr.hist.quatern_d=grid_image.hdr.hist.quatern_d;
-     gradField_nii.hdr.hist.qoffset_x=grid_image.hdr.hist.qoffset_x;
-     gradField_nii.hdr.hist.qoffset_y=grid_image.hdr.hist.qoffset_y;
-     gradField_nii.hdr.hist.qoffset_z=grid_image.hdr.hist.qoffset_z;
-     gradField_nii.hdr.hist=grid_image.hdr.hist;
-     gradField_nii.hdr.hist.srow_x=grid_image.hdr.hist.srow_x;
-     gradField_nii.hdr.hist.srow_y=grid_image.hdr.hist.srow_y;
-     gradField_nii.hdr.hist.srow_z=grid_image.hdr.hist.srow_z;
-     filename_nii=[output_path,'/le_grad_spline_dense', ...
-         int2str(i+1), 'D.nii.gz'];
-     save_nii(gradField_nii, filename_nii);
-     fprintf('%s has been saved\n', filename_nii);
-     clear grid_image;
-
-    % Gradient from deformation field
-    def_data = def_image.img;
-    grad_data = zeros(size(def_data));
-    orientation(1:3,1) = def_image.hdr.hist.srow_x(1:3);
-    orientation(1:3,2) = def_image.hdr.hist.srow_y(1:3);
-    orientation(1:3,3) = def_image.hdr.hist.srow_z(1:3);
-    orientation = inv(orientation);
-    basis=[1,0];
-    first=[-1,1];
-    for x=1:def_dim(1)
-        if x==def_dim(1)
-            X=x-1;
-        else
-            X=x;
-        end
-        for y=1:def_dim(2)
-            if y==def_dim(2)
-                Y=y-1;
-            else
-                Y=y;
-            end
-            if (i+1)==2
-                jacobian = zeros(2,2);
-                for a=1:2
-                    for b=1:2
-                        jacobian(1,1)=jacobian(1,1) + ...
-                            first(a) * basis(b) * ...
-                            def_data(X+a-1, Y+b-1, 1, 1, 1);
-                        jacobian(1,2)=jacobian(1,2) + ...
-                            basis(a) * first(b) * ...
-                            def_data(X+a-1, Y+b-1, 1, 1, 1);
-                        jacobian(2,1)=jacobian(2,1) + ...
-                            first(a) * basis(b) * ...
-                            def_data(X+a-1, Y+b-1, 1, 1, 2);
-                        jacobian(2,2)=jacobian(2,2) + ...
-                            basis(a) * first(b) * ...
-                            def_data(X+a-1, Y+b-1, 1, 1, 2);
-                    end
-                end
-                jacobian = orientation(1:2,1:2) * jacobian';
-                rotation = polarDecomposition(jacobian);
-                jacobian = (rotation) \ jacobian;
-                jacobian = jacobian - eye(2);
-                for b=1:2
-                    for a=1:2
-                        gradient(1) = - 2 * jacobian(1,1) * ...
-                            first(-a+3) * basis(-b+3);
-                        gradient(2) = - 2 * jacobian(2,2) * ...
-                            basis(-a+3) * first(-b+3);
-                        grad_data(X+a-1,Y+b-1,1,1,1:2) = ...
-                            squeeze(grad_data(X+a-1,Y+b-1,1,1,1:2)) + ...
-                            orientation(1:2,1:2) \ ...
-                            [gradient(1), gradient(2)]' ...
-                            ./ prod(def_dim);
-                    end
-                end
-            else
-                for z=1:def_dim(3)
-                    if z==def_dim(3)
-                        Z=z-1;
-                    else
-                        Z=z;
-                    end
-                    jacobian = zeros(3,3);
-                    for a=1:2
-                        for b=1:2
-                            for c=1:2
-                                jacobian(1,1)=jacobian(1,1) + ...
-                                    first(a) * basis(b) * basis(c) * ...
-                                    def_data(X+a-1, Y+b-1, Z+c-1, 1, 1);
-                                jacobian(1,2)=jacobian(1,2) + ...
-                                    basis(a) * first(b) * basis(c) * ...
-                                    def_data(X+a-1, Y+b-1, Z+c-1, 1, 1);
-                                jacobian(1,3)=jacobian(1,3) + ...
-                                    basis(a) * basis(b) * first(c) * ...
-                                    def_data(X+a-1, Y+b-1, Z+c-1, 1, 1);
-
-                                jacobian(2,1)=jacobian(2,1) + ...
-                                    first(a) * basis(b) * basis(c) * ...
-                                    def_data(X+a-1, Y+b-1, Z+c-1, 1, 2);
-                                jacobian(2,2)=jacobian(2,2) + ...
-                                    basis(a) * first(b) * basis(c) * ...
-                                    def_data(X+a-1, Y+b-1, Z+c-1, 1, 2);
-                                jacobian(2,3)=jacobian(2,3) + ...
-                                    basis(a) * basis(b) * first(c) * ...
-                                    def_data(X+a-1, Y+b-1, Z+c-1, 1, 2);
-
-                                jacobian(3,1)=jacobian(3,1) + ...
-                                    first(a) * basis(b) * basis(c) * ...
-                                    def_data(X+a-1, Y+b-1, Z+c-1, 1, 3);
-                                jacobian(3,2)=jacobian(3,2) + ...
-                                    basis(a) * first(b) * basis(c) * ...
-                                    def_data(X+a-1, Y+b-1, Z+c-1, 1, 3);
-                                jacobian(3,3)=jacobian(3,3) + ...
-                                    basis(a) * basis(b) * first(c) * ...
-                                    def_data(X+a-1, Y+b-1, Z+c-1, 1, 3);
-                            end
-                        end
-                    end
-                    jacobian = orientation(:,:) * jacobian';
-                    rotation = polarDecomposition(jacobian);
-                    jacobian = (rotation) \ jacobian;
-                    jacobian = jacobian - eye(3);
-                    for a=1:2
-                        for b=1:2
-                            for c=1:2
-                                gradient(1) = - 2 * ...
-                                    jacobian(1,1) * ...
-                                    first(-a+3) * basis(-b+3) * basis(-c+3);
-                                gradient(2) = - 2 * ...
-                                    jacobian(2,2) * ...
-                                    basis(-a+3) * first(-b+3) * basis(-c+3);
-                                gradient(3) = - 2 * ...
-                                    jacobian(3,3) * ...
-                                    basis(-a+3) * basis(-b+3) * first(-c+3);
-                                grad_data(X+a-1,Y+b-1,Z+c-1,1,1:3) = ...
-                                    squeeze(grad_data(X+a-1,Y+b-1,Z+c-1,1,1:3)) + ...
-                                    orientation \ ...
-                                    [gradient(1), gradient(2), gradient(3)]' ...
-                                    ./ prod(def_dim);
-                            end
-                        end
-                    end
-                end
-            end
-        end
-    end
-    clear gradField_nii
-    gradField_nii=make_nii(grad_data,...
-        [def_image.hdr.dime.pixdim(2),...
-         def_image.hdr.dime.pixdim(3),...
-         def_image.hdr.dime.pixdim(4)],...
-        [], ...
-        16 ...
-        );
-    gradField_nii.hdr.dime.pixdim(1)=def_image.hdr.dime.pixdim(1);
-    gradField_nii.hdr.hist.quatern_b=def_image.hdr.hist.quatern_b;
-    gradField_nii.hdr.hist.quatern_c=def_image.hdr.hist.quatern_c;
-    gradField_nii.hdr.hist.quatern_d=def_image.hdr.hist.quatern_d;
-    gradField_nii.hdr.hist.qoffset_x=def_image.hdr.hist.qoffset_x;
-    gradField_nii.hdr.hist.qoffset_y=def_image.hdr.hist.qoffset_y;
-    gradField_nii.hdr.hist.qoffset_z=def_image.hdr.hist.qoffset_z;
-    gradField_nii.hdr.hist=def_image.hdr.hist;
-    gradField_nii.hdr.hist.srow_x=def_image.hdr.hist.srow_x;
-    gradField_nii.hdr.hist.srow_y=def_image.hdr.hist.srow_y;
-    gradField_nii.hdr.hist.srow_z=def_image.hdr.hist.srow_z;
-    filename_nii=[output_path,'/le_grad_field_dense', ...
-        int2str(i+1), 'D.nii.gz'];
-    save_nii(gradField_nii, filename_nii);
-    fprintf('%s has been saved\n', filename_nii);
-end
-
-return
-
-function R = polarDecomposition(F)
-%% Polar decomposition of a given matrix
-C = F'*F;
-[Q0, lambdasquare] = eig(C);
-lambda = sqrt(diag((lambdasquare)));
-Uinv = repmat(1./lambda',size(F,1),1).*Q0*Q0';
-R = F*Uinv;
-
-function basis = getBSplineCoefficient(dist)
-%% Given a normalise position return the 4 corresponding basis values
-basis(1) = (1-dist)*(1-dist)*(1-dist)/6;
-basis(2) = (3*dist*dist*dist - 6*dist*dist + 4)/6.0;
-basis(3) = (-3*dist*dist*dist + 3*dist*dist + 3*dist + 1)/6;
-basis(4) = dist*dist*dist/6;
-
-function first = getBSplineCoefficientFirstOrder(dist)
-%% Given a normalise position return the 4 corresponding basis values
-first(4)= dist * dist / 2;
-first(1)= dist - 0.5 - first(4);
-first(3)= 1 + first(1) - 2*first(4);
-first(2)= - first(1) - first(3) - first(4);
diff --git a/reg-test/matlab_tests/getLinearElasticityValue_test.m b/reg-test/matlab_tests/getLinearElasticityValue_test.m
deleted file mode 100644
index 2a119dd2..00000000
--- a/reg-test/matlab_tests/getLinearElasticityValue_test.m
+++ /dev/null
@@ -1,354 +0,0 @@
-function getLinearElasticityValue_test(grid2D_name, ...
-    def2D_name, grid3D_name, def3D_name, output_path)
-%%
-grid_name = {grid2D_name, grid3D_name};
-defField_name = {def2D_name, def3D_name};
-
-for i=1:2
-    %Read the grid image
-    grid_image = load_untouch_nii(grid_name{i});
-    grid_data = grid_image.img;
-    orientation = zeros(3,3);
-    orientation(1:3,1) = grid_image.hdr.hist.srow_x(1:3);
-    orientation(1:3,2) = grid_image.hdr.hist.srow_y(1:3);
-    orientation(1:3,3) = grid_image.hdr.hist.srow_z(1:3);
-    orientation = inv(orientation);
-    grid_dim=[grid_image.hdr.dime.dim(2), ...
-        grid_image.hdr.dime.dim(3), ...
-        grid_image.hdr.dime.dim(4) ...
-        ];
-    
-    constraint_approx = 0;
-    % Precompute the basis values
-    basis = getBSplineCoefficient(0);
-    first = getBSplineCoefficientFirstOrder(0);
-    % Compute the value at the control point position only
-    for x=2:grid_dim(1)-1
-        for y=2:grid_dim(2)-1
-            if (i+1)==2
-                jacobian = zeros(2,2);
-                for a=1:3
-                    for b=1:3
-                        jacobian(1,1)=jacobian(1,1) + ...
-                            first(a) * basis(b) * ...
-                            grid_data(x+a-2, y+b-2, 1, 1, 1);
-                        jacobian(1,2)=jacobian(1,2) + ...
-                            basis(a) * first(b) * ...
-                            grid_data(x+a-2, y+b-2, 1, 1, 1);
-                        jacobian(2,1)=jacobian(2,1) + ...
-                            first(a) * basis(b) * ...
-                            grid_data(x+a-2, y+b-2, 1, 1, 2);
-                        jacobian(2,2)=jacobian(2,2) + ...
-                            basis(a) * first(b) * ...
-                            grid_data(x+a-2, y+b-2, 1, 1, 2);
-                    end
-                end
-                jacobian = orientation(1:2,1:2) * jacobian';
-                rotation = polarDecomposition(jacobian);
-                jacobian = (rotation) \ jacobian;
-                jacobian = jacobian - eye(2);
-                for a=1:2
-                    for b=1:2
-                        constraint_approx = constraint_approx + ...
-                            (0.5*(jacobian(a,b)+jacobian(b,a)))^2;
-                    end
-                end
-            else
-                for z=2:grid_dim(3)-1
-                    jacobian = zeros(3,3);
-                    for a=1:3
-                        for b=1:3
-                            for c=1:3
-                                jacobian(1,1)=jacobian(1,1) +  ...
-                                    first(a) * basis(b) * basis(c) * ...
-                                    grid_data(x+a-2, y+b-2, z+c-2, 1, 1);
-                                jacobian(1,2)=jacobian(1,2) +  ...
-                                    basis(a) * first(b) * basis(c) * ...
-                                    grid_data(x+a-2, y+b-2, z+c-2, 1, 1);
-                                jacobian(1,3)=jacobian(1,3) +  ...
-                                    basis(a) * basis(b) * first(c) * ...
-                                    grid_data(x+a-2, y+b-2, z+c-2, 1, 1);
-                                
-                                jacobian(2,1)=jacobian(2,1) +  ...
-                                    first(a) * basis(b) * basis(c) * ...
-                                    grid_data(x+a-2, y+b-2, z+c-2, 1, 2);
-                                jacobian(2,2)=jacobian(2,2) +  ...
-                                    basis(a) * first(b) * basis(c) * ...
-                                    grid_data(x+a-2, y+b-2, z+c-2, 1, 2);
-                                jacobian(2,3)=jacobian(2,3) +  ...
-                                    basis(a) * basis(b) * first(c) * ...
-                                    grid_data(x+a-2, y+b-2, z+c-2, 1, 2);
-                                
-                                jacobian(3,1)=jacobian(3,1) +  ...
-                                    first(a) * basis(b) * basis(c) * ...
-                                    grid_data(x+a-2, y+b-2, z+c-2, 1, 3);
-                                jacobian(3,2)=jacobian(3,2) +  ...
-                                    basis(a) * first(b) * basis(c) * ...
-                                    grid_data(x+a-2, y+b-2, z+c-2, 1, 3);
-                                jacobian(3,3)=jacobian(3,3) +  ...
-                                    basis(a) * basis(b) * first(c) * ...
-                                    grid_data(x+a-2, y+b-2, z+c-2, 1, 3);
-                            end
-                        end
-                    end
-                    jacobian = orientation * jacobian';
-                    rotation = polarDecomposition(jacobian);
-                    jacobian = (rotation) \ jacobian;
-                    jacobian = jacobian - eye(3);
-                    for a=1:3
-                        for b=1:3
-                            constraint_approx = constraint_approx + ...
-                                (0.5*(jacobian(a,b)+jacobian(b,a)))^2;
-                        end
-                    end
-                end
-            end
-        end
-    end
-    dlmwrite([output_path,'/le_spline_approx',num2str(i+1),'D.txt'], ...
-        constraint_approx/ numel(grid_data), ...
-        'precision','%.6f','delimiter',' ');
-    
-    %Read the deformation field image
-    def_image = load_untouch_nii(defField_name{i});
-    def_data = def_image.img;
-    def_dim=[def_image.hdr.dime.dim(2), ...
-        def_image.hdr.dime.dim(3), ...
-        def_image.hdr.dime.dim(4) ...
-        ];
-    spacing = grid_image.hdr.dime.pixdim(2) / def_image.hdr.dime.pixdim(2);
-    constraint_dense = 0;
-    
-    % Compute the value at all voxel position
-    for x=0:def_dim(1)-1
-        pre_x = floor(x/spacing);
-        norm_x = x/spacing - pre_x;
-        basis_x = getBSplineCoefficient(norm_x);
-        first_x = getBSplineCoefficientFirstOrder(norm_x);
-        for y=0:def_dim(2)-1
-            pre_y = floor(y/spacing);
-            norm_y = y/spacing - pre_y;
-            basis_y = getBSplineCoefficient(norm_y);
-            first_y = getBSplineCoefficientFirstOrder(norm_y);
-            if (i+1)==2
-                jacobian = zeros(2,2);
-                for a=1:4
-                    for b=1:4
-                        jacobian(1,1)=jacobian(1,1) + ...
-                            first_x(a) * basis_y(b) * ...
-                            grid_data(pre_x+a, pre_y+b, 1, 1, 1);
-                        jacobian(1,2)=jacobian(1,2) + ...
-                            basis_x(a) * first_y(b) * ...
-                            grid_data(pre_x+a, pre_y+b, 1, 1, 1);
-                        jacobian(2,1)=jacobian(2,1) + ...
-                            first_x(a) * basis_y(b) * ...
-                            grid_data(pre_x+a, pre_y+b, 1, 1, 2);
-                        jacobian(2,2)=jacobian(2,2) + ...
-                            basis_x(a) * first_y(b) * ...
-                            grid_data(pre_x+a, pre_y+b, 1, 1, 2);
-                    end
-                end
-                jacobian = orientation(1:2,1:2) * jacobian';
-                rotation = polarDecomposition(jacobian);
-                jacobian = (rotation) \ jacobian;
-                jacobian = jacobian - eye(2);
-                for a=1:2
-                    for b=1:2
-                        constraint_dense = constraint_dense + ...
-                            (0.5*(jacobian(a,b)+jacobian(b,a)))^2;
-                    end
-                end
-            else
-                for z=0:def_dim(3)-1
-                    pre_z = floor(z/spacing);
-                    norm_z = z/spacing - pre_z;
-                    basis_z = getBSplineCoefficient(norm_z);
-                    first_z = getBSplineCoefficientFirstOrder(norm_z);
-                    jacobian = zeros(3,3);
-                    for a=1:4
-                        for b=1:4
-                            for c=1:4
-                                jacobian(1,1)=jacobian(1,1) +  ...
-                                    first_x(a) * basis_y(b) * basis_z(c) * ...
-                                    grid_data(pre_x+a, pre_y+b, pre_z+c, 1, 1);
-                                jacobian(1,2)=jacobian(1,2) +  ...
-                                    basis_x(a) * first_y(b) * basis_z(c) * ...
-                                    grid_data(pre_x+a, pre_y+b, pre_z+c, 1, 1);
-                                jacobian(1,3)=jacobian(1,3) +  ...
-                                    basis_x(a) * basis_y(b) * first_z(c) * ...
-                                    grid_data(pre_x+a, pre_y+b, pre_z+c, 1, 1);
-                                
-                                jacobian(2,1)=jacobian(2,1) +  ...
-                                    first_x(a) * basis_y(b) * basis_z(c) * ...
-                                    grid_data(pre_x+a, pre_y+b, pre_z+c, 1, 2);
-                                jacobian(2,2)=jacobian(2,2) +  ...
-                                    basis_x(a) * first_y(b) * basis_z(c) * ...
-                                    grid_data(pre_x+a, pre_y+b, pre_z+c, 1, 2);
-                                jacobian(2,3)=jacobian(2,3) +  ...
-                                    basis_x(a) * basis_y(b) * first_z(c) * ...
-                                    grid_data(pre_x+a, pre_y+b, pre_z+c, 1, 2);
-                                
-                                jacobian(3,1)=jacobian(3,1) +  ...
-                                    first_x(a) * basis_y(b) * basis_z(c) * ...
-                                    grid_data(pre_x+a, pre_y+b, pre_z+c, 1, 3);
-                                jacobian(3,2)=jacobian(3,2) +  ...
-                                    basis_x(a) * first_y(b) * basis_z(c) * ...
-                                    grid_data(pre_x+a, pre_y+b, pre_z+c, 1, 3);
-                                jacobian(3,3)=jacobian(3,3) +  ...
-                                    basis_x(a) * basis_y(b) * first_z(c) * ...
-                                    grid_data(pre_x+a, pre_y+b, pre_z+c, 1, 3);
-                            end
-                        end
-                    end
-                    jacobian = orientation * jacobian';
-                    rotation = polarDecomposition(jacobian);
-                    jacobian = (rotation) \ jacobian;
-                    jacobian = jacobian - eye(3);
-                    for a=1:3
-                        for b=1:3
-                            constraint_dense = constraint_dense + ...
-                                (0.5*(jacobian(a,b)+jacobian(b,a)))^2;
-                        end
-                    end
-                end
-            end
-        end
-    end
-    dlmwrite([output_path,'/le_spline_dense',num2str(i+1),'D.txt'], ...
-        constraint_dense/ numel(def_data), ...
-        'precision','%.6f','delimiter',' ');
-    clear grid_image;
-    
-    orientation(1:3,1) = def_image.hdr.hist.srow_x(1:3);
-    orientation(1:3,2) = def_image.hdr.hist.srow_y(1:3);
-    orientation(1:3,3) = def_image.hdr.hist.srow_z(1:3);
-    orientation = inv(orientation);
-    basis=[1,0];
-    first=[-1,1];
-    constraint_dense=0;
-    for x=1:def_dim(1)
-        if x==def_dim(1)
-            X=x-1;
-        else
-            X=x;
-        end
-        for y=1:def_dim(2)
-            if y==def_dim(2)
-                Y=y-1;
-            else
-                Y=y;
-            end
-            if (i+1)==2
-                jacobian = zeros(2,2);
-                for a=1:2
-                    for b=1:2
-                        jacobian(1,1)=jacobian(1,1) + ...
-                            first(a) * basis(b) * ...
-                            def_data(X+a-1, Y+b-1, 1, 1, 1);
-                        jacobian(1,2)=jacobian(1,2) + ...
-                            basis(a) * first(b) * ...
-                            def_data(X+a-1, Y+b-1, 1, 1, 1);
-                        jacobian(2,1)=jacobian(2,1) + ...
-                            first(a) * basis(b) * ...
-                            def_data(X+a-1, Y+b-1, 1, 1, 2);
-                        jacobian(2,2)=jacobian(2,2) + ...
-                            basis(a) * first(b) * ...
-                            def_data(X+a-1, Y+b-1, 1, 1, 2);
-                    end
-                end
-                jacobian = orientation(1:2,1:2) * jacobian';
-                rotation = polarDecomposition(jacobian);
-                jacobian = (rotation) \ jacobian;
-                jacobian = jacobian - eye(2);
-                for a=1:2
-                    for b=1:2
-                        constraint_dense = constraint_dense + ...
-                            (0.5*(jacobian(a,b)+jacobian(b,a)))^2;
-                    end
-                end
-            else
-                for z=1:def_dim(3)
-                    if z==def_dim(3)
-                        Z=z-1;
-                    else
-                        Z=z;
-                    end
-                    jacobian = zeros(3,3);
-                    for a=1:2
-                        for b=1:2
-                            for c=1:2
-                                jacobian(1,1)=jacobian(1,1) + ...
-                                    first(a) * basis(b) * basis(c) * ...
-                                    def_data(X+a-1, Y+b-1, Z+c-1, 1, 1);
-                                jacobian(1,2)=jacobian(1,2) + ...
-                                    basis(a) * first(b) * basis(c) * ...
-                                    def_data(X+a-1, Y+b-1, Z+c-1, 1, 1);
-                                jacobian(1,3)=jacobian(1,3) + ...
-                                    basis(a) * basis(b) * first(c) * ...
-                                    def_data(X+a-1, Y+b-1, Z+c-1, 1, 1);
-                                
-                                jacobian(2,1)=jacobian(2,1) + ...
-                                    first(a) * basis(b) * basis(c) * ...
-                                    def_data(X+a-1, Y+b-1, Z+c-1, 1, 2);
-                                jacobian(2,2)=jacobian(2,2) + ...
-                                    basis(a) * first(b) * basis(c) * ...
-                                    def_data(X+a-1, Y+b-1, Z+c-1, 1, 2);
-                                jacobian(2,3)=jacobian(2,3) + ...
-                                    basis(a) * basis(b) * first(c) * ...
-                                    def_data(X+a-1, Y+b-1, Z+c-1, 1, 2);
-                                
-                                jacobian(3,1)=jacobian(3,1) + ...
-                                    first(a) * basis(b) * basis(c) * ...
-                                    def_data(X+a-1, Y+b-1, Z+c-1, 1, 3);
-                                jacobian(3,2)=jacobian(3,2) + ...
-                                    basis(a) * first(b) * basis(c) * ...
-                                    def_data(X+a-1, Y+b-1, Z+c-1, 1, 3);
-                                jacobian(3,3)=jacobian(3,3) + ...
-                                    basis(a) * basis(b) * first(c) * ...
-                                    def_data(X+a-1, Y+b-1, Z+c-1, 1, 3);
-                            end
-                        end
-                    end
-                    jacobian = orientation * jacobian';
-                    rotation = polarDecomposition(jacobian);
-                    jacobian = (rotation) \ jacobian;
-                    jacobian = jacobian - eye(3);
-                    for a=1:3
-                        for b=1:3
-                            constraint_dense = constraint_dense + ...
-                                (0.5*(jacobian(a,b)+jacobian(b,a)))^2;
-                        end
-                    end
-                end
-            end
-        end
-    end
-    
-    dlmwrite([output_path,'/le_field_dense',num2str(i+1),'D.txt'], ...
-        constraint_dense/ numel(def_data), ...
-        'precision','%.6f','delimiter',' ');
-end
-
-return
-
-function R = polarDecomposition(F)
-%% Polar decomposition of a given matrix
-C = F'*F;
-[Q0, lambdasquare] = eig(C);
-lambda = sqrt(diag((lambdasquare)));
-Uinv = repmat(1./lambda',size(F,1),1).*Q0*Q0';
-R = F*Uinv;
-
-function basis = getBSplineCoefficient(dist)
-%% Given a normalise position return the 4 corresponding basis values
-basis(1) = (1-dist)*(1-dist)*(1-dist)/6;
-basis(2) = (3*dist*dist*dist - 6*dist*dist + 4)/6.0;
-basis(3) = (-3*dist*dist*dist + 3*dist*dist + 3*dist + 1)/6;
-basis(4) = dist*dist*dist/6;
-
-function first = getBSplineCoefficientFirstOrder(dist)
-%% Given a normalise position return the 4 corresponding basis values
-first(4)= dist * dist / 2;
-first(1)= dist - 0.5 - first(4);
-first(3)= 1 + first(1) - 2*first(4);
-first(2)= - first(1) - first(3) - first(4);
\ No newline at end of file
diff --git a/reg-test/matlab_tests/imageGradient_test.m b/reg-test/matlab_tests/imageGradient_test.m
deleted file mode 100644
index 59aca39b..00000000
--- a/reg-test/matlab_tests/imageGradient_test.m
+++ /dev/null
@@ -1,89 +0,0 @@
-%% COMPUTE GRADIENT
-function imageGradient_test(img2D, img3D, output_path)
-imgCell={img2D img3D};
-for img=1:length(imgCell)
-    % Read the nifti file
-    current = load_untouch_nii(imgCell{img});
-    % Define the input image dim
-    inDimVect = current.hdr.dime.dim;
-    if inDimVect(4) > 1
-        imgDim = 3;
-    else
-        imgDim = 2;
-    end
-    % Define the padded image dim
-    padDimVect = inDimVect;
-    padDimVect(2) = padDimVect(2) + 2;
-    padDimVect(3) = padDimVect(3) + 2;
-    if imgDim > 2
-        padDimVect(4) = padDimVect(4) + 2;
-    end
-    % pad the input image with zeros
-    currentImgnD = zeros(padDimVect(2:end));
-    if imgDim > 2
-        currentImgnD(2:end-1,2:end-1,2:end-1,:) = current.img;
-    else
-        currentImgnD(2:end-1,2:end-1,:,:) = current.img;
-    end
-    % Define the kernel to use
-    if imgDim == 2
-        convKernelX = [1 0 -1]/2;
-        convKernelY = convKernelX';
-    else
-        convKernelX = [1 0 -1]/2;
-        convKernelY = convKernelX';
-        convKernelZ(1,1,1) = 1/2;
-        convKernelZ(1,1,2) = 0;
-        convKernelZ(1,1,3)= -1/2;
-    end
-    % Create an image to save the gradient
-    sizeImgGrad = [size(currentImgnD),imgDim];
-    imgGradient = zeros(sizeImgGrad);
-    % Iterate over the time points
-    for ii=1:inDimVect(5)
-        currentImg=currentImgnD(:,:,:,ii);
-        % Convolution of the x axis
-        imgGradientX = single(convn(double(currentImg),convKernelX,'valid'));
-        imgGradientX(isnan(imgGradientX))=0;
-        % Convolution of the y axis
-        imgGradientY = single(convn(double(currentImg),convKernelY,'valid'));
-        imgGradientY(isnan(imgGradientY))=0;
-        % Convolution of the z axis
-        if imgDim == 3
-            imgGradientZ = single(convn(double(currentImg),convKernelZ,'valid'));
-            imgGradientZ(isnan(imgGradientZ))=0;
-        end
-        %
-        if imgDim == 2
-            %
-            imgGradient(2:end-1,:,1,ii,1)=imgGradientY;
-            imgGradient(:,2:end-1,1,ii,2)=imgGradientX;
-        else
-            %
-            imgGradient(2:end-1,:,:,ii,1)=imgGradientY;
-            imgGradient(:,2:end-1,:,ii,2)=imgGradientX;
-            imgGradient(:,:,2:end-1,ii,3)=imgGradientZ;
-        end
-    end
-    %% SAVE
-    % The floating and warped image should have the same datatype !
-    if imgDim > 2
-        gradient_nii = make_nii(imgGradient(2:end-1,2:end-1,2:end-1,:),...
-            [current.hdr.dime.pixdim(2),...
-            current.hdr.dime.pixdim(3),...
-            current.hdr.dime.pixdim(4)],...
-            [],...
-            16); % 16 is float
-    else
-        gradient_nii = make_nii(imgGradient(2:end-1,2:end-1,:,:),...
-            [current.hdr.dime.pixdim(2),...
-            current.hdr.dime.pixdim(3),...
-            current.hdr.dime.pixdim(4)],...
-            [],...
-            16); % 16 is float
-    end
-    %
-    save_nii(gradient_nii, ...
-        [output_path,'/expectedImageGradient',num2str(imgDim),'D.nii.gz']);
-end
-end
\ No newline at end of file
diff --git a/reg-test/matlab_tests/interpolation_test.m b/reg-test/matlab_tests/interpolation_test.m
deleted file mode 100644
index 1e1eb6ab..00000000
--- a/reg-test/matlab_tests/interpolation_test.m
+++ /dev/null
@@ -1,92 +0,0 @@
-function interpolation_test(img2D_name, img3D_name, def2D_name, def3D_name, output_path)
-%%
-%% Create a warped image from an affine deformation field according to an interpolation order
-%%
-inputImg_name= {img2D_name, img3D_name};
-inputDef_name=  {def2D_name, def3D_name};
-
-for d=2:3
-    % Read the input images
-    inputImage = load_untouch_nii(inputImg_name{d-1}); % read the Nifti file
-    inputData = single(inputImage.img);
-    HMatrix = eye(4,4,'single');
-    HMatrix(1,:) = inputImage.hdr.hist.srow_x;
-    HMatrix(2,:) = inputImage.hdr.hist.srow_y;
-    HMatrix(3,:) = inputImage.hdr.hist.srow_z;
-    worldToVoxelMatrix = single(inv(double(HMatrix)));
-    inputDef = load_untouch_nii(inputDef_name{d-1}); % read the Nifti file
-    inputDefData = single(inputDef.img);
-    
-    for type={'nearest', 'linear', 'cubic'}
-        
-        expectedWarpedImage = zeros(inputDef.hdr.dime.dim(2),...
-            inputDef.hdr.dime.dim(3),inputDef.hdr.dime.dim(4),...
-            'single');
-        
-        if d==2
-            [X,Y] = ndgrid((0:size(inputData,1)-1),...
-                (0:size(inputData,2)-1));
-            X=single(X);
-            Y=single(Y);
-            Z='';
-        elseif d==3
-            [X,Y,Z] = ndgrid((0:size(inputData,1)-1),...
-                (0:size(inputData,2)-1),...
-                (0:size(inputData,3)-1));
-            X=single(X);
-            Y=single(Y);
-            Z=single(Z);
-        end
-        for kk=1:size(expectedWarpedImage,3)
-            for jj=1:size(expectedWarpedImage,2)
-                for ii=1:size(expectedWarpedImage,1)
-                    if d==2
-                        currentWorldPosition = [...
-                            inputDefData(ii,jj,kk,1,1) ...
-                            inputDefData(ii,jj,kk,1,2) 0 1];
-                    elseif d==3
-                        currentWorldPosition = [...
-                            inputDefData(ii,jj,kk,1,1) ...
-                            inputDefData(ii,jj,kk,1,2) ...
-                            inputDefData(ii,jj,kk,1,3) ...
-                            1];
-                    end
-                    correspondingVoxelPosition = single(...
-                        double(worldToVoxelMatrix) * ...
-                        double(currentWorldPosition)');
-                    if d==2
-                        intensityValue = interpn(...
-                            double(X),...
-                            double(Y),...
-                            double(inputData),...
-                            double(correspondingVoxelPosition(1)),...
-                            double(correspondingVoxelPosition(2)),...
-                            type{1}, -999999);
-                    elseif d==3
-                        intensityValue = interpn(...
-                            double(X),...
-                            double(Y),...
-                            double(Z),...
-                            double(inputData),...
-                            double(correspondingVoxelPosition(1)),...
-                            double(correspondingVoxelPosition(2)),...
-                            double(correspondingVoxelPosition(3)),...
-                            type{1}, -999999);
-                    end
-                    expectedWarpedImage(ii,jj,kk)=single(intensityValue);
-                end
-            end
-        end
-        expectedWarpedImage(expectedWarpedImage(:,:,:)==single(-999999)) = NaN;
-        % The floating and warped image should have the same datatype !
-        expectedWarpedImage_nii = make_nii(expectedWarpedImage,...
-            [inputDef.hdr.dime.pixdim(2),...
-            inputDef.hdr.dime.pixdim(3),...
-            inputDef.hdr.dime.pixdim(4)],...
-            [],...
-            16); % 16 is float
-        %
-        save_nii(expectedWarpedImage_nii,...
-            [output_path,'/warped_', type{1}, num2str(d), 'D.nii.gz']);
-    end
-end
\ No newline at end of file
diff --git a/reg-test/matlab_tests/matrix_operation_test.m b/reg-test/matlab_tests/matrix_operation_test.m
deleted file mode 100644
index 127444c5..00000000
--- a/reg-test/matlab_tests/matrix_operation_test.m
+++ /dev/null
@@ -1,41 +0,0 @@
-function matrix_operation_test(output_path)
-%%
-%% mat44 operation tests
-%%
-m=4;
-M1 = rand(m,m,'single')+ eye(4,4,'single');
-M1(end,:)=[0 0 0 1];
-M2 = rand(m,m,'single')+ eye(4,4,'single');
-dlmwrite([output_path,'/inputMatrix1.txt'],M1,'precision','%.6f','delimiter',' ');
-dlmwrite([output_path,'/inputMatrix2.txt'],M2,'precision','%.6f','delimiter',' ');
-%% READ THE FILES THAT WE HAVE JUST WRITTEN
-fileID = fopen([output_path,'/inputMatrix1.txt'],'r');
-formatSpec = '%f';
-sizeM1 = [m m];
-M1 = fscanf(fileID,formatSpec,sizeM1);
-fclose(fileID);
-M1=single(M1');
-fileID2 = fopen([output_path,'/inputMatrix2.txt'],'r');
-formatSpec = '%f';
-sizeM2 = [m m];
-M2 = fscanf(fileID2,formatSpec,sizeM2);
-fclose(fileID2);
-M2=single(M2');
-%% 1. Multiplication
-expectedMul = single(double(M1)*double(M2));
-dlmwrite([output_path,'/expectedMulMatrix.txt'],expectedMul,'precision','%.6f','delimiter',' ');
-%% 2. Addition
-expectedAdd = single(double(M1)+double(M2));
-dlmwrite([output_path,'/expectedAddMatrix.txt'],expectedAdd,'precision','%.6f','delimiter',' ');
-%% 3. Subtraction
-expectedSub = single(double(M1)-double(M2));
-dlmwrite([output_path,'/expectedSubMatrix.txt'],expectedSub,'precision','%.6f','delimiter',' ');
-%% 4. Exp
-expectedExp = single(expm(double(M1)));
-dlmwrite([output_path,'/expectedExpMatrix.txt'],expectedExp,'precision','%.6f','delimiter',' ');
-%% 5. Log
-expectedLog = single(logm(double(M1)));
-dlmwrite([output_path,'/expectedLogMatrix.txt'],expectedLog,'precision','%.6f','delimiter',' ');
-%% 6. Inv
-expectedInv = single(inv(double(M1)));
-dlmwrite([output_path,'/expectedInvMatrix.txt'],expectedInv,'precision','%.6f','delimiter',' ');
diff --git a/reg-test/matlab_tests/mindDescriptor_test.m b/reg-test/matlab_tests/mindDescriptor_test.m
deleted file mode 100644
index b8b0f623..00000000
--- a/reg-test/matlab_tests/mindDescriptor_test.m
+++ /dev/null
@@ -1,172 +0,0 @@
-function [expectedMIND2DDescriptorImage_nii, expectedMIND3DDescriptorImage_nii] = ...
-                            mindDescriptor_test(img2D, img3D, output_path,rescaleImg, mask2D, mask3D)
-%
-p=1;
-%
-%% 2D
-%convUniformKernel=ones(2*p+1,2*p+1);
-convKernel = fspecial('gaussian', 2*p+1, 0.5);
-%%
-refImg2D = load_untouch_nii(img2D); % read the Nifti file
-RSampling = [-1 1 0 0;0 0 -1 1];
-refImg2DImg = single(refImg2D.img);
-%
-if (nargin < 5)
-    inputMask2D = ones(size(refImg2DImg));
-else
-    inputMask2D = mask2D;
-end
-%
-idZeros=find(inputMask2D==0);
-refImg2DImg(idZeros) = 0;%NaN
-%
-if(rescaleImg)
-    %% TO BE Consitent with NiftyReg - image rescaling
-    minrefImg2D = double(min(refImg2DImg(:)));
-    maxrefImg2D = double(max(refImg2DImg(:)));
-    refImg2DImg = single((double(refImg2DImg)-minrefImg2D)./(maxrefImg2D-minrefImg2D));
-    %refImg2DPrime = (refImg2DPrime-minrefImg2D)./(maxrefImg2D-minrefImg2D);
-    %%
-end
-%
-Dp_array = zeros([size(refImg2DImg) size(RSampling,2)],'single');
-Vp_array = zeros([size(refImg2DImg) size(RSampling,2)],'single');
-%
-for id=1:size(RSampling,2)
-    %% Let's translate the image by rx, ry pixel
-    rx=RSampling(1,id);
-    ry=RSampling(2,id);
-    idNaN = find(isnan(refImg2DImg));
-    refImg2DImg(idNaN)=-999;
-    refImg2DPrimeImg = imtranslate(refImg2DImg, [ry, rx], 'FillValues', 0);%NaN
-    id999 = find(refImg2DImg==-999);
-    refImg2DImg(id999)=NaN;
-    id999 = find(refImg2DPrimeImg==-999);
-    refImg2DPrimeImg(id999)=NaN;
-    diffImg = single((double(refImg2DImg)-double(refImg2DPrimeImg)));
-    diffImg = single(double(diffImg).^2);
-    %% Have to correct the borders by hand
-    maskImg = zeros(size(diffImg));%2*p+1-1
-    maskImg(diffImg > -1) = 1;
-    %inputMask2DT = imtranslate(inputMask2D, [ry, rx], 'FillValues', 0);
-    maskImg=maskImg.*inputMask2D;
-    %diffImgPadded = padarray(diffImg,[1 1],'circular');
-    diffImg(isnan(diffImg))=0;
-    diffImg=diffImg.*maskImg;
-    imgConv = single(conv2(double(diffImg),convKernel,'same'));
-    maskConv = single(conv2(double(maskImg),convKernel,'same'));
-    imgConv = single(double(imgConv)./double(maskConv));
-    imgConv(maskImg==0)=NaN;
-    Dp_array(:,:,1,id) = imgConv;
-    %%
-    Vp_array(:,:,id) = Dp_array(:,:,1,id);
-end
-Vp_image = mean(Vp_array,3);
-idZeros=find(Vp_image==0);
-Vp_image(idZeros)=eps;
-%%
-for id=1:size(RSampling,2)
-    MIND2D_descriptor(:,:,1,id) = single(exp(double(-Dp_array(:,:,1,id))./double(Vp_image)));
-end
-%% Normalise MIND max = 1
-maxMind=max(MIND2D_descriptor,[],4);
-%
-for id=1:size(RSampling,2)
-    MIND2D_descriptor(:,:,1,id)=single(double(MIND2D_descriptor(:,:,1,id))./double(maxMind));
-end
-%% SAVE
-% The floating and warped image should have the same datatype !
-expectedMIND2DDescriptorImage_nii = make_nii(MIND2D_descriptor,...
-    [refImg2D.hdr.dime.pixdim(2),...
-    refImg2D.hdr.dime.pixdim(3),...
-    refImg2D.hdr.dime.pixdim(4)],...
-    [],...
-    16); % 16 is float
-%
-save_nii(expectedMIND2DDescriptorImage_nii, [output_path,'/expectedMINDDescriptor2D.nii.gz']);
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% 3D
-convKernel = fGaussian3D(2*p+1, 0.5);
-%%
-refImg3D = load_untouch_nii(img3D); % read the Nifti file
-RSampling = [-1 1 0 0 0 0;0 0 -1 1 0 0;0 0 0 0 -1 1];
-refImg3DImg = single(refImg3D.img);
-%
-if (nargin < 6)
-    inputMask3D = ones(size(refImg3DImg));
-else
-    inputMask3D = mask3D;
-end
-%
-idZeros=find(inputMask3D==0);
-refImg3DImg(idZeros) = 0;%NaN
-%
-if(rescaleImg)
-    %% TO BE Consitent with NiftyReg - image rescaling
-    minrefImg3D = double(min(refImg3DImg(:)));
-    maxrefImg3D = double(max(refImg3DImg(:)));
-    refImg3DImg = single((double(refImg3DImg)-minrefImg3D)./(maxrefImg3D-minrefImg3D));
-    %refImg3DPrime = (refImg3DPrime-minrefImg3D)./(maxrefImg3D-minrefImg3D);
-    %%
-end
-%
-Dp_array = zeros([size(refImg3D.img) size(RSampling,2)],'single');
-Vp_array = zeros([size(refImg3D.img) size(RSampling,2)],'single');
-%
-for id=1:size(RSampling,2)
-    %% Let's translate the image by rx, ry pixel
-    rx=RSampling(1,id);
-    ry=RSampling(2,id);
-    rz=RSampling(3,id);
-    idNaN = find(isnan(refImg3DImg));
-    refImg3DImg(idNaN)=-999;
-    refImg3DPrimeImg = imtranslate(refImg3DImg, [ry, rx, rz], 'FillValues', 0);%NaN
-    id999 = find(refImg3DImg==-999);
-    refImg3DImg(id999)=NaN;
-    id999 = find(refImg3DPrimeImg==-999);
-    refImg3DPrimeImg(id999)=NaN;
-    diffImg = single(double(refImg3DImg) - double(refImg3DPrimeImg));
-    diffImg = single(double(diffImg).^2);
-    %% Have to correct the borders by hand
-    maskImg = zeros(size(diffImg));%2*p+1-1
-    maskImg(diffImg > -1) = 1;
-    %inputMask3DT = imtranslate(inputMask3D, [ry, rx, rz], 'FillValues', 0);
-    maskImg=maskImg.*inputMask3D;
-    %diffImgPadded = padarray(diffImg,[1 1],'circular');
-    diffImg(isnan(diffImg))=0;
-    diffImg=diffImg.*maskImg;
-    imgConv = single(convn(double(diffImg),convKernel,'same'));
-    maskConv = single(convn(double(maskImg),convKernel,'same'));
-    imgConv = single(double(imgConv)./double(maskConv));
-    imgConv(maskImg==0)=NaN;
-    Dp_array(:,:,:,id) = imgConv;
-    %%
-    Vp_array(:,:,:,id) = Dp_array(:,:,:,id);
-end
-Vp_image = mean(Vp_array,4);
-idZeros=find(Vp_image==0);
-Vp_image(idZeros)=eps;
-%%
-for id=1:size(RSampling,2)
-    MIND3D_descriptor(:,:,:,id) = single(exp(double(-Dp_array(:,:,:,id))./double(Vp_image)));
-end
-%% Normalise MIND max = 1
-maxMind=max(MIND3D_descriptor,[],4);
-%max1=mean(mind,3);
-for id=1:size(RSampling,2)
-    MIND3D_descriptor(:,:,:,id)=single(double(MIND3D_descriptor(:,:,:,id))./double(maxMind));
-end
-%% SAVE
-% The floating and warped image should have the same datatype !
-expectedMIND3DDescriptorImage_nii = make_nii(MIND3D_descriptor,...
-    [refImg3D.hdr.dime.pixdim(2),...
-    refImg3D.hdr.dime.pixdim(3),...
-    refImg3D.hdr.dime.pixdim(4)],...
-    [],...
-    16); % 16 is float
-%
-save_nii(expectedMIND3DDescriptorImage_nii, [output_path,'/expectedMINDDescriptor3D.nii.gz']);
-end
diff --git a/reg-test/matlab_tests/mindsscDescriptor_test.m b/reg-test/matlab_tests/mindsscDescriptor_test.m
deleted file mode 100644
index 8d51d3dd..00000000
--- a/reg-test/matlab_tests/mindsscDescriptor_test.m
+++ /dev/null
@@ -1,209 +0,0 @@
-%
-% mindDescriptor_test('/home/bpresles/OneDriveBusiness/NiftyReg/refImg2D.nii.gz', ...
-% '/home/bpresles/OneDriveBusiness/NiftyReg/refImg3D.nii.gz', './test-mind');
-%
-function [expectedMIND2DDescriptorImage_nii, expectedMIND3DDescriptorImage_nii] = ...
-                            mindsscDescriptor_test(img2D, img3D, output_path,rescaleImg, mask2D, mask3D)
-%
-p=1;
-%
-%% 2D
-%convUniformKernel=ones(2*p+1,2*p+1);
-convKernel = fspecial('gaussian', 2*p+1, 0.5);
-%%
-refImg2D = load_untouch_nii(img2D); % read the Nifti file
-RSampling = [+1 +1;+1 -1];
-tx=[-1,+0,-1,+0];
-ty=[+0,-1,+0,+1];
-lengthDescriptor=4;
-refImg2DImg = single(refImg2D.img);
-%
-if (nargin < 5)
-    inputMask2D = ones(size(refImg2DImg));
-else
-    inputMask2D = mask2D;
-end
-%
-idZeros=find(inputMask2D==0);
-refImg2DImg(idZeros) = NaN;
-%
-if(rescaleImg)
-    %% TO BE Consitent with NiftyReg - image rescaling
-    minrefImg2D = double(min(refImg2DImg(:)));
-    maxrefImg2D = double(max(refImg2DImg(:)));
-    refImg2DImg = single((double(refImg2DImg)-minrefImg2D)./(maxrefImg2D-minrefImg2D));
-    %refImg2DPrime = (refImg2DPrime-minrefImg2D)./(maxrefImg2D-minrefImg2D);
-    %%
-end
-%
-Dp_array = zeros([size(refImg2DImg) lengthDescriptor],'single');
-Vp_array = zeros([size(refImg2DImg) lengthDescriptor],'single');
-%
-store_id=1;
-%
-for id=1:size(RSampling,2)
-    %% Let's translate the image by rx, ry pixel
-    rx=RSampling(1,id);
-    ry=RSampling(2,id);
-    idNaN = find(isnan(refImg2DImg));
-    refImg2DImg(idNaN)=-999;
-    refImg2DPrimeImg = imtranslate(refImg2DImg, [ry, rx], 'FillValues', 0); %NaN
-    id999 = find(refImg2DImg==-999);
-    refImg2DImg(id999)=NaN;
-    id999 = find(refImg2DPrimeImg==-999);
-    refImg2DPrimeImg(id999)=NaN;
-    diffImg = single((double(refImg2DImg)-double(refImg2DPrimeImg)));
-    diffImg = single(double(diffImg).^2);
-    %% Have to correct the borders by hand
-    maskImg = zeros(size(diffImg));%2*p+1-1
-    maskImg(diffImg > -1) = 1;
-    %inputMask2DT = imtranslate(inputMask2D, [ry, rx], 'FillValues', 0);
-    maskImg=maskImg.*inputMask2D;
-    %diffImgPadded = padarray(diffImg,[1 1],'circular');
-    diffImg(isnan(diffImg))=0;
-    diffImg=diffImg.*maskImg;
-    imgConv = single(conv2(double(diffImg),convKernel,'same'));
-    maskConv = single(conv2(double(maskImg),convKernel,'same'));
-    imgConv = single(double(imgConv)./double(maskConv));
-    imgConv(maskImg==0)=NaN;
-    for idtr = 1:2
-        idNaN = find(isnan(imgConv));
-        imgConv(idNaN)=-999;
-        imgConvPrime = imtranslate(imgConv, [ty(store_id), tx(store_id)], 'FillValues', 0);%NaN
-        id999 = find(imgConv==-999);
-        imgConv(id999)=NaN;
-        id999 = find(imgConvPrime==-999);
-        imgConvPrime(id999)=NaN;
-        %%%%%%%%
-        Dp_array(:,:,1,store_id) = imgConvPrime;
-        Vp_array(:,:,store_id) = Dp_array(:,:,1,store_id);
-        store_id = store_id +1;
-    end
-end
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-Vp_image = mean(Vp_array,3);
-idZeros=find(Vp_image==0);
-Vp_image(idZeros)=eps;
-%%
-for id=1:lengthDescriptor
-    MIND2D_descriptor(:,:,1,id) = single(exp(double(-Dp_array(:,:,1,id))./double(Vp_image)));
-end
-%% Normalise MIND max = 1
-maxMind=max(MIND2D_descriptor,[],4);
-%
-for id=1:lengthDescriptor
-    MIND2D_descriptor(:,:,1,id)=single(double(MIND2D_descriptor(:,:,1,id))./double(maxMind));
-end
-%% SAVE
-% The floating and warped image should have the same datatype !
-expectedMIND2DDescriptorImage_nii = make_nii(MIND2D_descriptor,...
-    [refImg2D.hdr.dime.pixdim(2),...
-    refImg2D.hdr.dime.pixdim(3),...
-    refImg2D.hdr.dime.pixdim(4)],...
-    [],...
-    16); % 16 is float
-%
-save_nii(expectedMIND2DDescriptorImage_nii, [output_path,'/expectedMINDSSCDescriptor2D.nii.gz']);
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% 3D
-convKernel = fGaussian3D(2*p+1, 0.5);
-%%
-refImg3D = load_untouch_nii(img3D); % read the Nifti file
-RSampling = [+1 +1 -1 0 +1 0;+1 -1 0 -1 0 +1;0 0 +1 +1 +1 +1];
-tx=[-1,+0,-1,+0,+0,+1,+0,+0,+0,-1,+0,+0];
-ty=[+0,-1,+0,+1,+0,+0,+0,+1,+0,+0,+0,-1];
-tz=[+0,+0,+0,+0,-1,+0,-1,+0,-1,+0,-1,+0];
-lengthDescriptor=12;
-refImg3DImg = single(refImg3D.img);
-%
-if (nargin < 6)
-    inputMask3D = ones(size(refImg3DImg));
-else
-    inputMask3D = mask3D;
-end
-%
-idZeros=find(inputMask3D==0);
-refImg3DImg(idZeros) = NaN;
-%
-if(rescaleImg)
-    %% TO BE Consitent with NiftyReg - image rescaling
-    minrefImg3D = double(min(refImg3DImg(:)));
-    maxrefImg3D = double(max(refImg3DImg(:)));
-    refImg3DImg = single((double(refImg3DImg)-minrefImg3D)./(maxrefImg3D-minrefImg3D));
-    %refImg3DPrime = (refImg3DPrime-minrefImg3D)./(maxrefImg3D-minrefImg3D);
-    %%
-end
-%
-Dp_array = zeros([size(refImg3D.img) lengthDescriptor],'single');
-Vp_array = zeros([size(refImg3D.img) lengthDescriptor],'single');
-%
-store_id=1;
-%
-for id=1:size(RSampling,2)
-    %% Let's translate the image by rx, ry pixel
-    rx=RSampling(1,id);
-    ry=RSampling(2,id);
-    rz=RSampling(3,id);
-    idNaN = find(isnan(refImg3DImg));
-    refImg3DImg(idNaN)=-999;
-    refImg3DPrimeImg = imtranslate(refImg3DImg, [ry, rx, rz], 'FillValues', 0);%NaN
-    id999 = find(refImg3DImg==-999);
-    refImg3DImg(id999)=NaN;
-    id999 = find(refImg3DPrimeImg==-999);
-    refImg3DPrimeImg(id999)=NaN;
-    diffImg = single(double(refImg3DImg) - double(refImg3DPrimeImg));
-    diffImg = single(double(diffImg).^2);
-    %% Have to correct the borders by hand
-    maskImg = zeros(size(diffImg));%2*p+1-1
-    maskImg(diffImg > -1) = 1;
-    %inputMask3DT = imtranslate(inputMask3D, [ry, rx, rz], 'FillValues', 0);
-    maskImg=maskImg.*inputMask3D;
-    %diffImgPadded = padarray(diffImg,[1 1],'circular');
-    diffImg(isnan(diffImg))=0;
-    diffImg=diffImg.*maskImg;
-    imgConv = single(convn(double(diffImg),convKernel,'same'));
-    maskConv = single(convn(double(maskImg),convKernel,'same'));
-    imgConv = single(double(imgConv)./double(maskConv));
-    imgConv(maskImg==0)=NaN;
-    for idtr = 1:2
-        idNaN = find(isnan(imgConv));
-        imgConv(idNaN)=-999;
-        imgConvPrime = imtranslate(imgConv, [ty(store_id), tx(store_id), tz(store_id)], 'FillValues', 0);%NaN
-        id999 = find(imgConv==-999);
-        imgConv(id999)=NaN;
-        id999 = find(imgConvPrime==-999);
-        imgConvPrime(id999)=NaN;
-        %%%%%%%%
-        Dp_array(:,:,:,store_id) = imgConvPrime;
-        Vp_array(:,:,:,store_id) = Dp_array(:,:,:,store_id);
-        store_id = store_id +1;
-    end
-end
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-Vp_image = mean(Vp_array,4);
-idZeros=find(Vp_image==0);
-Vp_image(idZeros)=eps;
-%%
-for id=1:lengthDescriptor
-    MIND3D_descriptor(:,:,:,id) = single(exp(double(-Dp_array(:,:,:,id))./double(Vp_image)));
-end
-%% Normalise MIND max = 1
-maxMind=max(MIND3D_descriptor,[],4);
-%max1=mean(mind,3);
-for id=1:lengthDescriptor
-    MIND3D_descriptor(:,:,:,id)=single(double(MIND3D_descriptor(:,:,:,id))./double(maxMind));
-end
-%% SAVE
-% The floating and warped image should have the same datatype !
-expectedMIND3DDescriptorImage_nii = make_nii(MIND3D_descriptor,...
-    [refImg3D.hdr.dime.pixdim(2),...
-    refImg3D.hdr.dime.pixdim(3),...
-    refImg3D.hdr.dime.pixdim(4)],...
-    [],...
-    16); % 16 is float
-%
-save_nii(expectedMIND3DDescriptorImage_nii, [output_path,'/expectedMINDSSCDescriptor3D.nii.gz']);
-end
diff --git a/reg-test/matlab_tests/svd_test.m b/reg-test/matlab_tests/svd_test.m
deleted file mode 100644
index e6b509f9..00000000
--- a/reg-test/matlab_tests/svd_test.m
+++ /dev/null
@@ -1,31 +0,0 @@
-function svd_test(output_path)
-%%
-%% SVD decomposition
-%%
-maxSizeMatrix=10;%arbitrary value
-m=randi(maxSizeMatrix);
-n=randi(maxSizeMatrix);
-%
-A=single(double(rand(m,n,'single'))+ double(eye(m,n,'single')));
-%
-%% Save to file now
-dlmwrite([output_path,'/inputSVDMatrix.txt'],A,'precision','%.6f','delimiter',' ');
-%% READ THE FILE THAT WE HAVE JUST WRITTEN
-fileID = fopen([output_path,'/inputSVDMatrix.txt'],'r');
-formatSpec = '%f';
-sizeA = [n m];
-A = fscanf(fileID,formatSpec,sizeA);
-fclose(fileID);
-A=single(A');
-[U,S,V] = svd(double(A),'econ');
-U=single(U);
-S=single(S);
-V=single(V);
-%% DEBUG
-%A,U,S,V
-%% DEBUG
-%% Save to file now
-dlmwrite([output_path,'/inputSVDMatrix.txt'],A,'precision','%.6f','delimiter',' ');
-dlmwrite([output_path,'/expectedUMatrix.txt'],U,'precision','%.6f','delimiter',' ');
-dlmwrite([output_path,'/expectedSMatrix.txt'],S,'precision','%.6f','delimiter',' ');
-dlmwrite([output_path,'/expectedVMatrix.txt'],V,'precision','%.6f','delimiter',' ');
\ No newline at end of file
diff --git a/reg-test/reg_test_affine_deformation_field.cpp b/reg-test/reg_test_affine_deformation_field.cpp
index 62f99157..2812ef52 100644
--- a/reg-test/reg_test_affine_deformation_field.cpp
+++ b/reg-test/reg_test_affine_deformation_field.cpp
@@ -1,47 +1,151 @@
-#include "_reg_ReadWriteImage.h"
 #include "_reg_ReadWriteMatrix.h"
-#include "_reg_globalTrans.h"
 #include "_reg_tools.h"
 
 #include "Kernel.h"
 #include "AffineDeformationFieldKernel.h"
 #include "Platform.h"
 
+#include <catch2/catch_test_macros.hpp>
+
 #include "AladinContent.h"
 #ifdef _USE_CUDA
 #include "CUDAAladinContent.h"
 #endif
-
 #ifdef _USE_OPENCL
 #include "CLAladinContent.h"
 #endif
 
-#define EPS 0.000001
 #define EPS_SINGLE 0.0001
 
-void test(AladinContent *con, int platformCode) {
-
-    Platform *platform = new Platform(platformCode);
-
-    Kernel *affineDeformKernel = platform->createKernel(AffineDeformationFieldKernel::getName(), con);
-    affineDeformKernel->castTo<AffineDeformationFieldKernel>()->calculate();
-
-    delete affineDeformKernel;
-    delete platform;
-}
-
-int main(int argc, char **argv)
-{
-    if (argc != 5) {
-        fprintf(stderr, "Usage: %s <refImage> <inputMatrix> <expectedField> <platformCode>\n", argv[0]);
-        return EXIT_FAILURE;
+TEST_CASE("Affine deformation field", "[Affine]") {
+    SECTION("2D") {
+        // Create a reference 2D image
+        int dim[8]= {2, 2, 2, 1, 1, 1, 1, 1};
+        nifti_image *reference = nifti_make_new_nim(
+                dim,
+                NIFTI_TYPE_FLOAT32,
+                true);
+        reg_checkAndCorrectDimension(reference);
+
+        // Generate the different use cases
+        typedef std::tuple<std::string, mat44 *, float *, float *> test_data;
+        std::vector<test_data> test_use_cases;
+        // Identity use case
+        auto *identity = new mat44;
+        reg_mat44_eye(identity);
+        // Test order [0,0] [1,0] [0,1] [1,1]
+        float identity_result_x[4] = {0, 1, 0, 1};
+        float identity_result_y[4] = {0, 0, 1, 1};
+        test_use_cases.emplace_back(test_data(
+                "- identity",
+                identity,
+                identity_result_x,
+                identity_result_y)
+        );
+        // Translation
+        auto *translation = new mat44;
+        reg_mat44_eye(translation);
+        translation->m[0][3] = -0.5;
+        translation->m[1][3] = 1.5;
+        // Test order [0,0] [1,0] [0,1] [1,1]
+        float translation_result_x[4] = {-0.5, .5, -0.5, .5};
+        float translation_result_y[4] = {1.5, 1.5, 2.5, 2.5};
+        test_use_cases.emplace_back(test_data(
+                "- translation",
+                translation,
+                translation_result_x,
+                translation_result_y)
+        );
+
+
+        for(auto && test_use_case: test_use_cases) {
+
+            std::string test_name;
+            mat44 *test_mat;
+            float *test_res_x;
+            float *test_res_y;
+            std::tie(test_name, test_mat, test_res_x, test_res_y) = test_use_case;
+
+            SECTION(test_name) {
+                typedef std::tuple<AladinContent *, std::string, int> content_desc;
+                std::vector<content_desc> listContent;
+                // Compute the transformation field
+                listContent.push_back(content_desc(
+                        new AladinContent(
+                                reference,
+                                nullptr,
+                                nullptr,
+                                test_mat,
+                                sizeof(float)),
+                        "-- CPU",
+                        0));
+#ifdef _USE_CUDA
+                listContent.push_back(content_desc(
+                        new CudaAladinContent(
+                                reference,
+                                nullptr,
+                                nullptr,
+                                test_mat,
+                                sizeof(float)),
+                        "-- CUDA",
+                        1));
+#endif
+#ifdef _USE_OPENCL
+                listContent.push_back(content_desc(
+                        new ClAladinContent(
+                                reference,
+                                nullptr,
+                                nullptr,
+                                test_mat,
+                                sizeof(float)),
+                        "-- OpenCL",
+                        2));
+#endif
+                for (auto &&content: listContent) {
+
+                    AladinContent *con;
+                    std::string desc;
+                    int plat_value;
+                    std::tie(con, desc, plat_value) = content;
+
+                    SECTION(desc) {
+                        auto *platform = new Platform(plat_value);
+
+                        Kernel *affineDeformKernel = platform->createKernel(
+                                AffineDeformationFieldKernel::getName(),
+                                con);
+                        affineDeformKernel->castTo<AffineDeformationFieldKernel>()->calculate();
+
+                        nifti_image *defField =
+                                con->getCurrentDeformationField();
+
+                        // Check all values
+                        auto *defFieldPtrX = static_cast<float *>(defField->data);
+                        auto *defFieldPtrY = &defFieldPtrX[defField->nx *
+                                                           defField->ny];
+                        for (int i = 0; i < defField->nx*defField->ny; ++i) {
+                            REQUIRE(fabs(
+                                    defFieldPtrX[i] - test_res_x[i]) <
+                                    EPS_SINGLE);
+                            REQUIRE(fabs(
+                                    defFieldPtrY[i] - test_res_y[i]) <
+                                    EPS_SINGLE);
+                        }
+                        delete affineDeformKernel;
+                        delete platform;
+                    }
+                    delete con;
+                }
+                listContent.clear();
+            }
+            delete test_mat;
+        }
+        test_use_cases.clear();
+        nifti_image_free(reference);
     }
+}
 
-    char *inputRefImageName = argv[1];
-    char *inputMatFileName = argv[2];
-    char *inputDefImageName = argv[3];
-    int platformCode = atoi(argv[4]);
-
+/*
     // Read the input reference image
     nifti_image *referenceImage = reg_io_ReadImageFile(inputRefImageName);
     if (referenceImage == NULL) {
@@ -127,4 +231,5 @@ int main(int argc, char **argv)
 
     return EXIT_SUCCESS;
 }
+ */
 
diff --git a/reg-test/target_2D.nii.gz b/reg-test/target_2D.nii.gz
deleted file mode 100755
index 71389170..00000000
Binary files a/reg-test/target_2D.nii.gz and /dev/null differ
diff --git a/reg-test/target_3D.nii.gz b/reg-test/target_3D.nii.gz
deleted file mode 100755
index 84f7961d..00000000
Binary files a/reg-test/target_3D.nii.gz and /dev/null differ