From 69165393cb767037a78b1bae0ce5357d8b6cc3fd Mon Sep 17 00:00:00 2001
From: Igor Gnatenko <i.gnatenko.brain@gmail.com>
Date: Sat, 5 Dec 2015 14:48:16 +0100
Subject: [PATCH] allow nifti, openjpeg2 be system
Signed-off-by: Igor Gnatenko <i.gnatenko.brain@gmail.com>
---
CMakeLists.txt | 11 +++-
cmake/Modules/FindNIFTI.cmake | 20 +++++++
console/CMakeLists.txt | 26 ++++++--
console/config.h.in | 6 ++
console/nifti1_io_core.cpp | 135 +-----------------------------------------
console/nifti1_io_core.h | 51 ++++------------
console/nifti1_io_ext.cpp | 127 +++++++++++++++++++++++++++++++++++++++
console/nifti1_io_ext.h | 39 ++++++++++++
console/nii_dicom.cpp | 4 +-
console/nii_dicom_batch.cpp | 2 +-
console/nii_io.mm | 4 ++
11 files changed, 241 insertions(+), 184 deletions(-)
create mode 100644 cmake/Modules/FindNIFTI.cmake
create mode 100644 console/config.h.in
create mode 100644 console/nifti1_io_ext.cpp
create mode 100644 console/nifti1_io_ext.h
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ef8324d..85dc6a8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,10 +1,15 @@
project(dcm2niix)
cmake_minimum_required(VERSION 2.6)
-#
-# Zlib
-#
+
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
+
find_package(ZLIB)
+find_package(NIFTI)
+find_package(PkgConfig)
+if(PKG_CONFIG_FOUND)
+ pkg_check_modules(OpenJPEG2 libopenjp2)
+endif()
# Predefined permission set to enforce proper permissions
# during install even if files in the sources have different
diff --git a/cmake/Modules/FindNIFTI.cmake b/cmake/Modules/FindNIFTI.cmake
new file mode 100644
index 0000000..8653975
--- /dev/null
+++ b/cmake/Modules/FindNIFTI.cmake
@@ -0,0 +1,20 @@
+# - Try to find NIFTI
+# Once done this will define
+# NIFTI_FOUND - System has NIFTI
+# NIFTI_INCLUDE_DIRS - The NIFTI include directories
+# NIFTI_LIBRARIES - The libraries needed to use NIFTI
+# NIFTI_DEFINITIONS - Compiler switches required for using NIFTI
+
+find_path(NIFTI_INCLUDE_DIR nifti1.h nifti1_io.h
+ PATH_SUFFIXES nifti)
+
+find_library(NIFTI_LIBRARY NAMES niftiio)
+
+set(NIFTI_LIBRARIES ${NIFTI_LIBRARY})
+set(NIFTI_INCLUDE_DIRS ${NIFTI_INCLUDE_DIR})
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(NIFTI DEFAULT_MSG
+ NIFTI_LIBRARY NIFTI_INCLUDE_DIR)
+
+mark_as_advanced(NIFTI_INCLUDE_DIR NIFTI_LIBRARY)
diff --git a/console/CMakeLists.txt b/console/CMakeLists.txt
index fc82984..24d3613 100755
--- a/console/CMakeLists.txt
+++ b/console/CMakeLists.txt
@@ -1,12 +1,16 @@
project(console)
set(PROGRAMS dcm2niix)
+CONFIGURE_FILE(config.h.in config.h)
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
add_executable(dcm2niix
main_console.cpp
nii_dicom.cpp
jpg_0XC3.cpp
ujpeg.cpp
nifti1_io_core.cpp
+ nifti1_io_ext.cpp
nii_ortho.cpp
nii_dicom_batch.cpp)
@@ -23,12 +27,22 @@ endif()
#We now use miniz, removing zlib dependency
-#if(ZLIB_FOUND)
-# TARGET_LINK_LIBRARIES(dcm2niix z)
-#else(ZLIB_FOUND)
-# ADD_DEFINITIONS(-DmyDisableZlib)
-#endif(ZLIB_FOUND)
+if(ZLIB_FOUND)
+ ADD_DEFINITIONS(-DmyDisableMiniZ)
+ TARGET_LINK_LIBRARIES(dcm2niix ${ZLIB_LIBRARIES})
+endif(ZLIB_FOUND)
+if(NIFTI_FOUND)
+ include_directories(${NIFTI_INCLUDE_DIRS})
+ target_link_libraries(dcm2niix ${NIFTI_LIBRARIES})
+else()
+ include_directories(nifti)
+endif()
+if(OpenJPEG2_FOUND)
+ include_directories(${OpenJPEG2_INCLUDE_DIRS})
+ target_link_libraries(dcm2niix ${OpenJPEG2_LIBRARIES})
+else()
+ ADD_DEFINITIONS(-DmyDisableOpenJPEG)
+endif()
ADD_DEFINITIONS(-DmyDisableJasper)
-ADD_DEFINITIONS(-DmyDisableOpenJPEG)
install(TARGETS ${PROGRAMS} DESTINATION bin)
diff --git a/console/config.h.in b/console/config.h.in
new file mode 100644
index 0000000..6665e25
--- /dev/null
+++ b/console/config.h.in
@@ -0,0 +1,6 @@
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#cmakedefine NIFTI_FOUND
+
+#endif // CONFIG_H
diff --git a/console/nifti1_io_core.cpp b/console/nifti1_io_core.cpp
index 660416b..bc61e37 100755
--- a/console/nifti1_io_core.cpp
+++ b/console/nifti1_io_core.cpp
@@ -1,4 +1,5 @@
#include "nifti1_io_core.h"
+#ifndef NIFTI_FOUND
#include <math.h>
#include <stdlib.h>
#include <sys/stat.h>
@@ -59,108 +60,6 @@ void nifti_swap_2bytes( size_t n , void *ar ) // 2 bytes at a time
return ;
}
-int isSameFloat (float a, float b) {
- return (fabs (a - b) <= FLT_EPSILON);
-}
-
-vec3 setVec3(float x, float y, float z)
-{
- vec3 v = {x, y, z};
- return v;
-}
-
-vec4 setVec4(float x, float y, float z)
-{
- vec4 v= {x, y, z, 1};
- return v;
-}
-
-vec3 crossProduct(vec3 u, vec3 v)
-{
- return setVec3(u.v[1]*v.v[2] - v.v[1]*u.v[2],
- -u.v[0]*v.v[2] + v.v[0]*u.v[2],
- u.v[0]*v.v[1] - v.v[0]*u.v[1]);
-}
-
-float dotProduct(vec3 u, vec3 v)
-{
- return (u.v[0]*v.v[0] + v.v[1]*u.v[1] + v.v[2]*u.v[2]);
-}
-
-vec3 nifti_vect33_norm (vec3 v) { //normalize vector length
- vec3 vO = v;
- float vLen = sqrt( (v.v[0]*v.v[0])
- + (v.v[1]*v.v[1])
- + (v.v[2]*v.v[2]));
- if (vLen <= FLT_EPSILON) return vO; //avoid divide by zero
- for (int i = 0; i < 3; i++)
- vO.v[i] = v.v[i]/vLen;
- return vO;
-}
-
-vec3 nifti_vect33mat33_mul(vec3 v, mat33 m ) { //multiply vector * 3x3matrix
- vec3 vO;
- for (int i=0; i<3; i++) { //multiply Pcrs * m
- vO.v[i] = 0;
- for(int j=0; j<3; j++)
- vO.v[i] += m.m[i][j]*v.v[j];
- }
- return vO;
-}
-
-vec4 nifti_vect44mat44_mul(vec4 v, mat44 m ) { //multiply vector * 4x4matrix
- vec4 vO;
- for (int i=0; i<4; i++) { //multiply Pcrs * m
- vO.v[i] = 0;
- for(int j=0; j<4; j++)
- vO.v[i] += m.m[i][j]*v.v[j];
- }
- return vO;
-}
-
-mat44 nifti_dicom2mat(float orient[7], float patientPosition[4], float xyzMM[4]) {
- //create NIfTI header based on values from DICOM header
- //note orient has 6 values, indexed from 1, patient position and xyzMM have 3 values indexed from 1
- mat33 Q, diagVox;
- Q.m[0][0] = orient[1]; Q.m[0][1] = orient[2] ; Q.m[0][2] = orient[3] ; // load Q
- Q.m[1][0] = orient[4]; Q.m[1][1] = orient[5] ; Q.m[1][2] = orient[6];
- //printf("Orient %g %g %g %g %g %g\n",orient[1],orient[2],orient[3],orient[4],orient[5],orient[6] );
- /* normalize row 1 */
- double val = Q.m[0][0]*Q.m[0][0] + Q.m[0][1]*Q.m[0][1] + Q.m[0][2]*Q.m[0][2] ;
- if( val > 0.0l ){
- val = 1.0l / sqrt(val) ;
- Q.m[0][0] *= (float)val ; Q.m[0][1] *= (float)val ; Q.m[0][2] *= (float)val ;
- } else {
- Q.m[0][0] = 1.0l ; Q.m[0][1] = 0.0l ; Q.m[0][2] = 0.0l ;
- }
- /* normalize row 2 */
- val = Q.m[1][0]*Q.m[1][0] + Q.m[1][1]*Q.m[1][1] + Q.m[1][2]*Q.m[1][2] ;
- if( val > 0.0l ){
- val = 1.0l / sqrt(val) ;
- Q.m[1][0] *= (float)val ; Q.m[1][1] *= (float)val ; Q.m[1][2] *= (float)val ;
- } else {
- Q.m[1][0] = 0.0l ; Q.m[1][1] = 1.0l ; Q.m[1][2] = 0.0l ;
- }
- /* row 3 is the cross product of rows 1 and 2*/
- Q.m[2][0] = Q.m[0][1]*Q.m[1][2] - Q.m[0][2]*Q.m[1][1] ; /* cross */
- Q.m[2][1] = Q.m[0][2]*Q.m[1][0] - Q.m[0][0]*Q.m[1][2] ; /* product */
- Q.m[2][2] = Q.m[0][0]*Q.m[1][1] - Q.m[0][1]*Q.m[1][0] ;
- Q = nifti_mat33_transpose(Q);
- if (nifti_mat33_determ(Q) < 0.0) {
- Q.m[0][2] = -Q.m[0][2];
- Q.m[1][2] = -Q.m[1][2];
- Q.m[2][2] = -Q.m[2][2];
- }
- //next scale matrix
- LOAD_MAT33(diagVox, xyzMM[1],0.0l,0.0l, 0.0l,xyzMM[2],0.0l, 0.0l,0.0l, xyzMM[3]);
- Q = nifti_mat33_mul(Q,diagVox);
- mat44 Q44; //4x4 matrix includes translations
- LOAD_MAT44(Q44, Q.m[0][0],Q.m[0][1],Q.m[0][2],patientPosition[1],
- Q.m[1][0],Q.m[1][1],Q.m[1][2],patientPosition[2],
- Q.m[2][0],Q.m[2][1],Q.m[2][2],patientPosition[3]);
- return Q44;
-}
-
float nifti_mat33_determ( mat33 R ) /* determinant of 3x3 matrix */
{
double r11,r12,r13,r21,r22,r23,r31,r32,r33 ;
@@ -184,28 +83,6 @@ mat33 nifti_mat33_mul( mat33 A , mat33 B ) /* multiply 2 3x3 matrices */
return C ;
}
-mat44 nifti_mat44_mul( mat44 A , mat44 B ) /* multiply 2 3x3 matrices */
-{
- mat44 C ; int i,j ;
- for( i=0 ; i < 4 ; i++ )
- for( j=0 ; j < 4; j++ )
- C.m[i][j] = A.m[i][0] * B.m[0][j]
- + A.m[i][1] * B.m[1][j]
- + A.m[i][2] * B.m[2][j]
- + A.m[i][3] * B.m[3][j];
- return C ;
-}
-
-mat33 nifti_mat33_transpose( mat33 A ) /* transpose 3x3 matrix */
-//see http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c
-{
- mat33 B; int i,j ;
- for( i=0 ; i < 3 ; i++ )
- for( j=0 ; j < 3 ; j++ )
- B.m[i][j] = A.m[j][i];
- return B;
-}
-
mat33 nifti_mat33_inverse( mat33 R ) /* inverse of 3x3 matrix */
{
double r11,r12,r13,r21,r22,r23,r31,r32,r33 , deti ;
@@ -462,12 +339,4 @@ mat44 nifti_mat44_inverse( mat44 R )
Q.m[3][3] = (deti == 0.0l) ? 0.0l : 1.0l ; // failure flag if deti == 0
return Q ;
}
-
-
-
-
-
-
-
-
-
+#endif // NIFTI_FOUND
diff --git a/console/nifti1_io_core.h b/console/nifti1_io_core.h
index 3fc3763..b2a968e 100755
--- a/console/nifti1_io_core.h
+++ b/console/nifti1_io_core.h
@@ -7,7 +7,13 @@
#ifdef __cplusplus
extern "C" {
#endif
-
+
+#include "config.h"
+
+#ifdef NIFTI_FOUND
+#include <nifti1_io.h>
+#else
+
#include <stdbool.h>
#include <string.h>
@@ -17,52 +23,15 @@ typedef struct { /** 4x4 matrix struct **/
typedef struct { /** 4x4 matrix struct **/
float m[4][4] ;
} mat44 ;
-typedef struct { /** x4 vector struct **/
- float v[4] ;
-} vec4 ;
-typedef struct { /** x3 vector struct **/
- float v[3] ;
-} vec3 ;
-typedef struct { /** x4 vector struct INTEGER**/
- int v[3] ;
-} ivec3 ;
-
-#define LOAD_MAT33(AA,a11,a12,a13 ,a21,a22,a23 ,a31,a32,a33) \
-( AA.m[0][0]=a11 , AA.m[0][1]=a12 , AA.m[0][2]=a13 , \
-AA.m[1][0]=a21 , AA.m[1][1]=a22 , AA.m[1][2]=a23 , \
-AA.m[2][0]=a31 , AA.m[2][1]=a32 , AA.m[2][2]=a33 )
-
-#define LOAD_MAT44(AA,a11,a12,a13,a14,a21,a22,a23,a24,a31,a32,a33,a34) \
-( AA.m[0][0]=a11 , AA.m[0][1]=a12 , AA.m[0][2]=a13 , AA.m[0][3]=a14 , \
-AA.m[1][0]=a21 , AA.m[1][1]=a22 , AA.m[1][2]=a23 , AA.m[1][3]=a24 , \
-AA.m[2][0]=a31 , AA.m[2][1]=a32 , AA.m[2][2]=a33 , AA.m[2][3]=a34 , \
-AA.m[3][0]=AA.m[3][1]=AA.m[3][2]=0.0f , AA.m[3][3]=1.0f )
#undef ASSIF // assign v to *p, if possible
#define ASSIF(p,v) if( (p)!=NULL ) *(p) = (v)
-float dotProduct(vec3 u, vec3 v);
float nifti_mat33_determ( mat33 R ) ;
-int isSameFloat (float a, float b) ;
mat33 nifti_mat33_inverse( mat33 R );
mat33 nifti_mat33_mul( mat33 A , mat33 B );
mat33 nifti_mat33_mul( mat33 A , mat33 B );
-mat33 nifti_mat33_transpose( mat33 A ) ;
-mat33 nifti_mat33_transpose( mat33 A ) ;
-mat44 nifti_dicom2mat(float orient[7], float patientPosition[4], float xyzMM[4]);
-mat44 nifti_dicom2mat(float orient[7], float patientPosition[4], float xyzMM[4]);
mat44 nifti_mat44_inverse( mat44 R );
mat44 nifti_mat44_inverse( mat44 R );
-mat44 nifti_mat44_mul( mat44 A , mat44 B );
-mat44 nifti_mat44_mul( mat44 A , mat44 B );
-vec3 crossProduct(vec3 u, vec3 v);
-vec3 nifti_vect33_norm (vec3 v);
-//vec3 nifti_vect33_norm (vec3 v);
-vec3 nifti_vect33mat33_mul(vec3 v, mat33 m );
-//vec3 nifti_vect33mat33_mul(vec3 v, mat33 m );
-vec3 setVec3(float x, float y, float z);
-//vec4 nifti_vect44mat44_mul(vec4 v, mat44 m );
-vec4 setVec4(float x, float y, float z);
-vec4 nifti_vect44mat44_mul(vec4 v, mat44 m );
void nifti_swap_2bytes( size_t n , void *ar ); // 2 bytes at a time
void nifti_swap_4bytes( size_t n , void *ar ); // 4 bytes at a time
void nifti_swap_8bytes( size_t n , void *ar ); // 8 bytes at a time
@@ -74,8 +43,12 @@ mat44 nifti_quatern_to_mat44( float qb, float qc, float qd,
float qx, float qy, float qz,
float dx, float dy, float dz, float qfac );
+#endif // NIFTI_FOUND
+
+#include "nifti1_io_ext.h"
+
#ifdef __cplusplus
}
#endif
-#endif
\ No newline at end of file
+#endif
diff --git a/console/nifti1_io_ext.cpp b/console/nifti1_io_ext.cpp
new file mode 100644
index 0000000..c3e31b2
--- /dev/null
+++ b/console/nifti1_io_ext.cpp
@@ -0,0 +1,127 @@
+#include "nifti1_io_core.h"
+#include <float.h>
+#include <math.h>
+
+int isSameFloat (float a, float b) {
+ return (fabs (a - b) <= FLT_EPSILON);
+}
+
+vec3 setVec3(float x, float y, float z)
+{
+ vec3 v = {x, y, z};
+ return v;
+}
+
+vec4 setVec4(float x, float y, float z)
+{
+ vec4 v= {x, y, z, 1};
+ return v;
+}
+
+vec3 crossProduct(vec3 u, vec3 v)
+{
+ return setVec3(u.v[1]*v.v[2] - v.v[1]*u.v[2],
+ -u.v[0]*v.v[2] + v.v[0]*u.v[2],
+ u.v[0]*v.v[1] - v.v[0]*u.v[1]);
+}
+
+float dotProduct(vec3 u, vec3 v)
+{
+ return (u.v[0]*v.v[0] + v.v[1]*u.v[1] + v.v[2]*u.v[2]);
+}
+
+vec3 nifti_vect33_norm (vec3 v) { //normalize vector length
+ vec3 vO = v;
+ float vLen = sqrt( (v.v[0]*v.v[0])
+ + (v.v[1]*v.v[1])
+ + (v.v[2]*v.v[2]));
+ if (vLen <= FLT_EPSILON) return vO; //avoid divide by zero
+ for (int i = 0; i < 3; i++)
+ vO.v[i] = v.v[i]/vLen;
+ return vO;
+}
+
+vec3 nifti_vect33mat33_mul(vec3 v, mat33 m ) { //multiply vector * 3x3matrix
+ vec3 vO;
+ for (int i=0; i<3; i++) { //multiply Pcrs * m
+ vO.v[i] = 0;
+ for(int j=0; j<3; j++)
+ vO.v[i] += m.m[i][j]*v.v[j];
+ }
+ return vO;
+}
+
+vec4 nifti_vect44mat44_mul(vec4 v, mat44 m ) { //multiply vector * 4x4matrix
+ vec4 vO;
+ for (int i=0; i<4; i++) { //multiply Pcrs * m
+ vO.v[i] = 0;
+ for(int j=0; j<4; j++)
+ vO.v[i] += m.m[i][j]*v.v[j];
+ }
+ return vO;
+}
+
+mat44 nifti_dicom2mat(float orient[7], float patientPosition[4], float xyzMM[4]) {
+ //create NIfTI header based on values from DICOM header
+ //note orient has 6 values, indexed from 1, patient position and xyzMM have 3 values indexed from 1
+ mat33 Q, diagVox;
+ Q.m[0][0] = orient[1]; Q.m[0][1] = orient[2] ; Q.m[0][2] = orient[3] ; // load Q
+ Q.m[1][0] = orient[4]; Q.m[1][1] = orient[5] ; Q.m[1][2] = orient[6];
+ //printf("Orient %g %g %g %g %g %g\n",orient[1],orient[2],orient[3],orient[4],orient[5],orient[6] );
+ /* normalize row 1 */
+ double val = Q.m[0][0]*Q.m[0][0] + Q.m[0][1]*Q.m[0][1] + Q.m[0][2]*Q.m[0][2] ;
+ if( val > 0.0l ){
+ val = 1.0l / sqrt(val) ;
+ Q.m[0][0] *= (float)val ; Q.m[0][1] *= (float)val ; Q.m[0][2] *= (float)val ;
+ } else {
+ Q.m[0][0] = 1.0l ; Q.m[0][1] = 0.0l ; Q.m[0][2] = 0.0l ;
+ }
+ /* normalize row 2 */
+ val = Q.m[1][0]*Q.m[1][0] + Q.m[1][1]*Q.m[1][1] + Q.m[1][2]*Q.m[1][2] ;
+ if( val > 0.0l ){
+ val = 1.0l / sqrt(val) ;
+ Q.m[1][0] *= (float)val ; Q.m[1][1] *= (float)val ; Q.m[1][2] *= (float)val ;
+ } else {
+ Q.m[1][0] = 0.0l ; Q.m[1][1] = 1.0l ; Q.m[1][2] = 0.0l ;
+ }
+ /* row 3 is the cross product of rows 1 and 2*/
+ Q.m[2][0] = Q.m[0][1]*Q.m[1][2] - Q.m[0][2]*Q.m[1][1] ; /* cross */
+ Q.m[2][1] = Q.m[0][2]*Q.m[1][0] - Q.m[0][0]*Q.m[1][2] ; /* product */
+ Q.m[2][2] = Q.m[0][0]*Q.m[1][1] - Q.m[0][1]*Q.m[1][0] ;
+ Q = nifti_mat33_transpose(Q);
+ if (nifti_mat33_determ(Q) < 0.0) {
+ Q.m[0][2] = -Q.m[0][2];
+ Q.m[1][2] = -Q.m[1][2];
+ Q.m[2][2] = -Q.m[2][2];
+ }
+ //next scale matrix
+ LOAD_MAT33(diagVox, xyzMM[1],0.0l,0.0l, 0.0l,xyzMM[2],0.0l, 0.0l,0.0l, xyzMM[3]);
+ Q = nifti_mat33_mul(Q,diagVox);
+ mat44 Q44; //4x4 matrix includes translations
+ LOAD_MAT44(Q44, Q.m[0][0],Q.m[0][1],Q.m[0][2],patientPosition[1],
+ Q.m[1][0],Q.m[1][1],Q.m[1][2],patientPosition[2],
+ Q.m[2][0],Q.m[2][1],Q.m[2][2],patientPosition[3]);
+ return Q44;
+}
+
+mat44 nifti_mat44_mul( mat44 A , mat44 B ) /* multiply 2 3x3 matrices */
+{
+ mat44 C ; int i,j ;
+ for( i=0 ; i < 4 ; i++ )
+ for( j=0 ; j < 4; j++ )
+ C.m[i][j] = A.m[i][0] * B.m[0][j]
+ + A.m[i][1] * B.m[1][j]
+ + A.m[i][2] * B.m[2][j]
+ + A.m[i][3] * B.m[3][j];
+ return C ;
+}
+
+mat33 nifti_mat33_transpose( mat33 A ) /* transpose 3x3 matrix */
+//see http://nifti.nimh.nih.gov/pub/dist/src/niftilib/nifti1_io.c
+{
+ mat33 B; int i,j ;
+ for( i=0 ; i < 3 ; i++ )
+ for( j=0 ; j < 3 ; j++ )
+ B.m[i][j] = A.m[j][i];
+ return B;
+}
diff --git a/console/nifti1_io_ext.h b/console/nifti1_io_ext.h
new file mode 100644
index 0000000..cdf3c5d
--- /dev/null
+++ b/console/nifti1_io_ext.h
@@ -0,0 +1,39 @@
+#ifndef NIFTI1_IO_EXT_H
+#define NIFTI1_IO_EXT_H
+
+typedef struct { /** x4 vector struct **/
+ float v[4] ;
+} vec4 ;
+typedef struct { /** x3 vector struct **/
+ float v[3] ;
+} vec3 ;
+typedef struct { /** x4 vector struct INTEGER**/
+ int v[3] ;
+} ivec3 ;
+
+#define LOAD_MAT33(AA,a11,a12,a13 ,a21,a22,a23 ,a31,a32,a33) \
+( AA.m[0][0]=a11 , AA.m[0][1]=a12 , AA.m[0][2]=a13 , \
+AA.m[1][0]=a21 , AA.m[1][1]=a22 , AA.m[1][2]=a23 , \
+AA.m[2][0]=a31 , AA.m[2][1]=a32 , AA.m[2][2]=a33 )
+
+#define LOAD_MAT44(AA,a11,a12,a13,a14,a21,a22,a23,a24,a31,a32,a33,a34) \
+( AA.m[0][0]=a11 , AA.m[0][1]=a12 , AA.m[0][2]=a13 , AA.m[0][3]=a14 , \
+AA.m[1][0]=a21 , AA.m[1][1]=a22 , AA.m[1][2]=a23 , AA.m[1][3]=a24 , \
+AA.m[2][0]=a31 , AA.m[2][1]=a32 , AA.m[2][2]=a33 , AA.m[2][3]=a34 , \
+AA.m[3][0]=AA.m[3][1]=AA.m[3][2]=0.0f , AA.m[3][3]=1.0f )
+
+float dotProduct(vec3 u, vec3 v);
+int isSameFloat (float a, float b) ;
+mat33 nifti_mat33_transpose( mat33 A ) ;
+mat44 nifti_dicom2mat(float orient[7], float patientPosition[4], float xyzMM[4]);
+mat44 nifti_mat44_mul( mat44 A , mat44 B );
+vec3 crossProduct(vec3 u, vec3 v);
+vec3 nifti_vect33_norm (vec3 v);
+//vec3 nifti_vect33_norm (vec3 v);
+vec3 nifti_vect33mat33_mul(vec3 v, mat33 m );
+//vec3 nifti_vect33mat33_mul(vec3 v, mat33 m );
+vec3 setVec3(float x, float y, float z);
+//vec4 nifti_vect44mat44_mul(vec4 v, mat44 m );
+vec4 setVec4(float x, float y, float z);
+vec4 nifti_vect44mat44_mul(vec4 v, mat44 m );
+#endif // NIFTI1_IO_EXT_H
diff --git a/console/nii_dicom.cpp b/console/nii_dicom.cpp
index 52c8060..b919a58 100755
--- a/console/nii_dicom.cpp
+++ b/console/nii_dicom.cpp
@@ -20,6 +20,7 @@
#include "jpg_0XC3.h"
#include "ujpeg.h"
#include "nifti1.h"
+#include "nifti1_io_core.h"
#include "nii_dicom.h"
#include <sys/types.h>
#include <sys/stat.h> // discriminate files from folders
@@ -31,7 +32,6 @@
#include <stddef.h>
#include <float.h>
#include <stdint.h>
-#include "nifti1_io_core.h"
#ifdef myUseCOut
#include <iostream>
#endif
@@ -40,7 +40,7 @@
#endif
#ifndef myDisableOpenJPEG
- #include <openjpeg-2.1/openjpeg.h>//"openjpeg.h"
+ #include <openjpeg.h>//"openjpeg.h"
#ifdef myEnableJasper
ERROR: YOU CAN NOT COMPILE WITH myEnableJasper AND NOT myDisableOpenJPEG OPTIONS SET SIMULTANEOUSLY
diff --git a/console/nii_dicom_batch.cpp b/console/nii_dicom_batch.cpp
index 0b430df..885af22 100755
--- a/console/nii_dicom_batch.cpp
+++ b/console/nii_dicom_batch.cpp
@@ -35,11 +35,11 @@
#ifdef myUseCOut
#include <iostream>
#endif
+#include "tinydir.h"
#include "nifti1_io_core.h"
#include "nifti1.h"
#include "nii_dicom_batch.h"
#include "nii_dicom.h"
-#include "tinydir.h"
#include <ctype.h> //toupper
#include <float.h>
#include <math.h>
diff --git a/console/nii_io.mm b/console/nii_io.mm
index c863a4c..e62e62d 100644
--- a/console/nii_io.mm
+++ b/console/nii_io.mm
@@ -156,7 +156,11 @@ nifti_image* nifti_convert_nhdr2nim(struct nifti_1_header nhdr, const char * fna
if( doswap )
swap_nifti_header( &nhdr , is_nifti ) ;
// if ( g_opts.debug > 2 ) disp_nifti_1_header("-d nhdr2nim : ", &nhdr);
+#ifdef NIFTI_FOUND
+ if( nhdr.datatype == DT_BINARY || nhdr.datatype == DT_UNKNOWN ) {
+#else
if( nhdr.datatype == DT_BINARY || nhdr.datatype == DT_UNKNOWN_DT ) {
+#endif
NSLog(@"unknown or unsupported datatype (%d). Will attempt to view as unsigned 8-bit (assuming ImageJ export)", nhdr.datatype);
nhdr.datatype =DT_UNSIGNED_CHAR;
--
2.6.3