Skip to content

Commit

Permalink
Updated dcm2niix
Browse files Browse the repository at this point in the history
  • Loading branch information
neurolabusc committed Sep 21, 2016
1 parent 3056e39 commit 973530a
Show file tree
Hide file tree
Showing 15 changed files with 155 additions and 50 deletions.
Binary file added .DS_Store
Binary file not shown.
Binary file not shown.
4 changes: 2 additions & 2 deletions MRIcroPro.plist
Original file line number Diff line number Diff line change
Expand Up @@ -101,11 +101,11 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.8.6</string>
<string>1.8.7</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>186</string>
<string>187</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.medical</string>
<key>LSMinimumSystemVersion</key>
Expand Down
Binary file added MRIcroX/.DS_Store
Binary file not shown.
4 changes: 2 additions & 2 deletions MRIcroX/MRIcro-Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -101,11 +101,11 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.8.6</string>
<string>1.8.7</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>186</string>
<string>187</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.medical</string>
<key>LSMinimumSystemVersion</key>
Expand Down
3 changes: 3 additions & 0 deletions MRIcroX/MRIcroAppDelegate.m
Original file line number Diff line number Diff line change
Expand Up @@ -549,6 +549,9 @@ - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
//[[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:[[NSApplication sharedApplication] delegate]] ;
[[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:self];
//[self imgLoad ];
//NSString *niiFile = @"/Users/rorden/Downloads/comp/fubar/25943524";
//NSString *niiFile = @"/Users/rorden/Downloads/comp/fubar/outC";
//[ self processFile: niiFile];
//NSString *niiFile = @"/Users/rorden/Desktop/c/t1-head_lzw.tiff";
//[ self processFile: niiFile];
/*NSMutableArray * list = [[NSMutableArray alloc] init];
Expand Down
Binary file added MRIcroX/en.lproj/.DS_Store
Binary file not shown.
12 changes: 9 additions & 3 deletions MRIcroX/jpg_0XC3.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,12 +101,15 @@ int decodePixelDifference(unsigned char *lRawRA, long *lRawPos, int *lCurrentBit
return lDiff;
} //end decodePixelDifference()

unsigned char * decode_JPEG_SOF_0XC3 (const char *fn, int skipBytes, bool verbose, int *dimX, int *dimY, int *bits, int *frames) {
unsigned char * decode_JPEG_SOF_0XC3 (const char *fn, int skipBytes, bool verbose, int *dimX, int *dimY, int *bits, int *frames, int diskBytes) {
//decompress JPEG image named "fn" where image data is located skipBytes into file. diskBytes is compressed size of image (set to 0 if unknown)
#define abortGoto() free(lRawRA); return NULL;
unsigned char *lImgRA8 = NULL;
FILE *reader = fopen(fn, "rb");
fseek(reader, 0, SEEK_END);
long lRawSz = ftell(reader)- skipBytes;
if ((diskBytes > 0) and (diskBytes < lRawSz)) //only if diskBytes is known and does not exceed length of file
lRawSz = diskBytes;
if (lRawSz <= 8) {
printf("Error opening %s\n", fn);
return NULL; //read failure
Expand All @@ -119,8 +122,11 @@ unsigned char * decode_JPEG_SOF_0XC3 (const char *fn, int skipBytes, bool verbo
printf("Error: JPEG signature 0xFFD8FF not found at offset %d of %s\n", skipBytes, fn);
abortGoto();//goto abortGoto; //signature failure http://en.wikipedia.org/wiki/List_of_file_signatures
}
if (verbose)
printf("JPEG signature 0xFFD8FF found at offset %d of %s\n", skipBytes, fn);
//next: read header
long lRawPos = 2; //Skip initial 0xFFD8, begin with third byte
//long lRawPos = 0; //Skip initial 0xFFD8, begin with third byte
unsigned char btS1, btS2, SOSss, SOSse, SOSahal, SOSpttrans, btMarkerType, SOSns = 0x00; //tag
uint8_t SOFnf, SOFprecision;
uint16_t SOFydim, SOFxdim; //, lRestartSegmentSz;
Expand Down Expand Up @@ -286,8 +292,6 @@ unsigned char * decode_JPEG_SOF_0XC3 (const char *fn, int skipBytes, bool verbo
l[lFrameCount].LookUpRA[lInc] = 255; //Impossible value for SSSS, suggests 8-bits can not describe answer
}
//NEXT: fill lookuptable


for (int lFrameCount = 1; lFrameCount <= lnHufTables; lFrameCount ++) {
int lIncY = 0;
for (int lSz = 1; lSz <= 8; lSz ++) { //set the huffman lookup table for keys with lengths <=8
Expand Down Expand Up @@ -487,6 +491,8 @@ unsigned char * decode_JPEG_SOF_0XC3 (const char *fn, int skipBytes, bool verbo
*dimX = SOFxdim;
*dimY = SOFydim;
*frames = SOFnf;
if (verbose)
printf("JPEG ends %ld@%ld\n", lRawPos, lRawPos+skipBytes);
return lImgRA8;
} //end decode_JPEG_SOF_0XC3()

2 changes: 1 addition & 1 deletion MRIcroX/jpg_0XC3.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
extern "C" {
#endif

unsigned char * decode_JPEG_SOF_0XC3 (const char *fn, int skipBytes, bool verbose, int *dimX, int *dimY, int *bits, int *frames);
unsigned char * decode_JPEG_SOF_0XC3 (const char *fn, int skipBytes, bool verbose, int *dimX, int *dimY, int *bits, int *frames, int diskBytes);

#ifdef __cplusplus
}
Expand Down
142 changes: 112 additions & 30 deletions MRIcroX/nii_dicom.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -567,7 +567,7 @@ mat44 xform_mat(struct TDICOMdata d) {
//reportMat44((char*)"iR44",R44);
return R44;
} else if (true) {
//SliceNormalVector 666 TO DO
//SliceNormalVector TO DO
printf("Not completed");
exit(2);
return R44;
Expand Down Expand Up @@ -851,15 +851,15 @@ float dcmFloat(int lByteLength, unsigned char lBuffer[], bool littleEndian) {//r
float retVal;
memcpy(&retVal, (char*)&lBuffer[0], 4);
if (!swap) return retVal;
char *floatToConvert = ( char* ) & lBuffer;
char *returnFloat = ( char* ) & retVal;
//swap the bytes into a temporary buffer
returnFloat[0] = floatToConvert[3];
returnFloat[1] = floatToConvert[2];
returnFloat[2] = floatToConvert[1];
returnFloat[3] = floatToConvert[0];
//printf("swapped val = %f\n",retVal);
return retVal;
float swapVal;
char *inFloat = ( char* ) & retVal;
char *outFloat = ( char* ) & swapVal;
outFloat[0] = inFloat[3];
outFloat[1] = inFloat[2];
outFloat[2] = inFloat[1];
outFloat[3] = inFloat[0];
//printf("swapped val = %f\n",swapVal);
return swapVal;
} //dcmFloat()

double dcmFloatDouble(int lByteLength, unsigned char lBuffer[], bool littleEndian) {//read binary 32-bit float
Expand Down Expand Up @@ -1212,6 +1212,7 @@ float dcmStrFloat (int lByteLength, unsigned char lBuffer[]) { //read float stor

int headerDcm2Nii(struct TDICOMdata d, struct nifti_1_header *h) {
//printf("bytes %dx%dx%d %d, %d\n",d.XYZdim[1],d.XYZdim[2],d.XYZdim[3], d.Allocbits_per_pixel, d.samplesPerPixel);
memset(h, 0, sizeof(nifti_1_header)); //zero-fill structure so unused items are consistent
for (int i = 0; i < 80; i++) h->descrip[i] = 0;
for (int i = 0; i < 24; i++) h->aux_file[i] = 0;
for (int i = 0; i < 18; i++) h->db_name[i] = 0;
Expand Down Expand Up @@ -1240,7 +1241,6 @@ int headerDcm2Nii(struct TDICOMdata d, struct nifti_1_header *h) {
#else
printf("Unsupported DICOM bit-depth %d with %d samples per pixel\n",d.bitsAllocated,d.samplesPerPixel);
#endif

return EXIT_FAILURE;
}
if ((h->datatype == DT_UINT16) && (d.bitsStored > 0) &&(d.bitsStored < 16))
Expand All @@ -1249,7 +1249,13 @@ int headerDcm2Nii(struct TDICOMdata d, struct nifti_1_header *h) {
h->pixdim[i] = 0.0f;
h->dim[i] = 0;
}
h->regular = 114;
//next items listed as unused in NIfTI format, but zeroed for consistency across runs
h->extents = 0;
h->session_error = 0;
h->glmin = 0; //unused, but make consistent
h->glmax = 0; //unused, but make consistent
h->regular = 114; //in legacy Analyze this was always 114
//these are important
h->scl_inter = d.intenIntercept;
h->scl_slope = d.intenScale;
h->cal_max = 0;
Expand Down Expand Up @@ -1309,12 +1315,6 @@ bool isFloatDiff (float a, float b) {
return (fabs (a - b) > FLT_EPSILON);
} //isFloatDiff()

ivec3 setVec3i(int x, int y, int z)
{
ivec3 v = {x, y, z};
return v;
} //setVec3i()

mat33 nifti_mat33_reorder_cols( mat33 m, ivec3 v ) {
// matlab equivalent ret = m(:, v); where v is 1,2,3 [INDEXED FROM ONE!!!!]
mat33 ret;
Expand All @@ -1334,7 +1334,6 @@ void changeExt (char *file_name, const char* ext) {
}
} //changeExt()


float PhilipsPreciseVal (float lPV, float lRS, float lRI, float lSS) {
if ((lRS*lSS) == 0) //avoid divide by zero
return 0.0;
Expand Down Expand Up @@ -1613,14 +1612,14 @@ struct TDICOMdata nii_readParRec (char * parname, int isVerbose, struct TDTI4D
LOAD_MAT33(rz, ca.v[2], -sa.v[2], 0.0f, sa.v[2], ca.v[2], 0.0f, 0.0f, 0.0f, 1.0f);
mat33 R = nifti_mat33_mul( rx,ry );
R = nifti_mat33_mul( R,rz);
ivec3 ixyz = setVec3i(1,2,3);
ivec3 ixyz = setiVec3(1,2,3);
if (d.sliceOrient == kSliceOrientSag) {
ixyz = setVec3i(2,3,1);
ixyz = setiVec3(2,3,1);
for (int r = 0; r < 3; r++)
for (int c = 0; c < 3; c++)
if (c != 1) R.m[r][c] = -R.m[r][c]; //invert first and final columns
}else if (d.sliceOrient == kSliceOrientCor) {
ixyz = setVec3i(1,3,2);
ixyz = setiVec3(1,3,2);
for (int r = 0; r < 3; r++)
R.m[r][2] = -R.m[r][2]; //invert rows of final column
}
Expand Down Expand Up @@ -1695,6 +1694,15 @@ struct TDICOMdata nii_readParRec (char * parname, int isVerbose, struct TDTI4D

return d;
} //nii_readParRec()

size_t nii_SliceBytes(struct nifti_1_header hdr) {
//size of 2D slice
size_t imgsz = hdr.bitpix/8;
for (int i = 1; i < 3; i++)
if (hdr.dim[i] > 1)
imgsz = imgsz * hdr.dim[i];
return imgsz;
} //nii_ImgBytes()

size_t nii_ImgBytes(struct nifti_1_header hdr) {
size_t imgsz = hdr.bitpix/8;
Expand Down Expand Up @@ -2240,14 +2248,85 @@ unsigned char * nii_loadImgCoreJasper(char* imgname, struct nifti_1_header hdr,
return img;
} //nii_loadImgCoreJasper()
#endif

struct TJPEG {
long offset;
long size;
};

TJPEG * decode_JPEG_SOF_0XC3_stack (const char *fn, int skipBytes, bool isVerbose, int frames, bool isLittleEndian) {
#define abortGoto() free(lOffsetRA); return NULL;
TJPEG *lOffsetRA = (TJPEG*) malloc(frames * sizeof(TJPEG));
FILE *reader = fopen(fn, "rb");
fseek(reader, 0, SEEK_END);
long lRawSz = ftell(reader)- skipBytes;
if (lRawSz <= 8) {
printf("Error opening %s\n", fn);
abortGoto(); //read failure
}
fseek(reader, skipBytes, SEEK_SET);
unsigned char *lRawRA = (unsigned char*) malloc(lRawSz);
fread(lRawRA, 1, lRawSz, reader);
fclose(reader);
long lRawPos = 0; //starting position
int frame = 0;
while ((frame < frames) && ((lRawPos+10) < lRawSz)) {
int tag = dcmInt(4,&lRawRA[lRawPos],isLittleEndian);
lRawPos += 4; //read tag
int tagLength = dcmInt(4,&lRawRA[lRawPos],isLittleEndian);
long tagEnd =lRawPos + tagLength + 4;
if (isVerbose)
printf("Tag %#x length %d end at %ld\n", tag, tagLength, tagEnd+skipBytes);
lRawPos += 4; //read tag length
if ((lRawRA[lRawPos] != 0xFF) || (lRawRA[lRawPos+1] != 0xD8) || (lRawRA[lRawPos +2] != 0xFF)) {
if (isVerbose)
printf("Warning: JPEG signature 0xFFD8FF not found at offset %d of %s\n", skipBytes, fn);
} else {
lOffsetRA[frame].offset = lRawPos+skipBytes;
lOffsetRA[frame].size = tagLength;
frame ++;
}
lRawPos = tagEnd;
}
free(lRawRA);
if (frame < frames) {
printf("Only found %d of %d JPEG fragments. Please use dcmdjpeg to uncompress data.\n", frame, frames);
abortGoto();
}
return lOffsetRA;
}

unsigned char * nii_loadImgJPEGC3(char* imgname, struct nifti_1_header hdr, struct TDICOMdata dcm) {
//printf("offset %d\n", dcm.imageStart);
unsigned char * nii_loadImgJPEGC3(char* imgname, struct nifti_1_header hdr, struct TDICOMdata dcm, bool isVerbose) {
//arcane and inefficient lossless compression method popularized by dcmcjpeg, examples at http://www.osirix-viewer.com/resources/dicom-image-library/
int dimX, dimY, bits, frames;
//clock_t start = clock();
//return decode_JPEG_SOF_0XC3 (imgname, dcm.imageStart, false, &dimX, &dimY, &bits, &frames);
unsigned char * ret = decode_JPEG_SOF_0XC3 (imgname, dcm.imageStart, false, &dimX, &dimY, &bits, &frames);
unsigned char * ret = decode_JPEG_SOF_0XC3 (imgname, dcm.imageStart, isVerbose, &dimX, &dimY, &bits, &frames, 0);
//printf("JPEG %fms\n", ((double)(clock()-start))/1000);
if (hdr.dim[3] != frames) { //multi-slice image saved as multiple image fragments rather than a single image
//printf("Unable to decode all slices (%d/%d). Please use dcmdjpeg to uncompress data.\n", frames, hdr.dim[3]);
if (ret != NULL) free(ret);
TJPEG * offsetRA = decode_JPEG_SOF_0XC3_stack (imgname, dcm.imageStart-8, isVerbose, hdr.dim[3], dcm.isLittleEndian);
if (offsetRA == NULL) return NULL;
size_t slicesz = nii_SliceBytes(hdr);
size_t imgsz = slicesz * hdr.dim[3];
size_t pos = 0;
unsigned char *bImg = (unsigned char *)malloc(imgsz);
for (int frame = 0; frame < hdr.dim[3]; frame++) {
if (isVerbose)
printf("JPEG frame %d has %ld bytes @ %ld\n", frame, offsetRA[frame].size, offsetRA[frame].offset);
unsigned char * ret = decode_JPEG_SOF_0XC3 (imgname, (int)offsetRA[frame].offset, false, &dimX, &dimY, &bits, &frames, (int)offsetRA[frame].size);
if (ret == NULL) {
printf("Unable to decode JPEG. Please use dcmdjpeg to uncompress data.\n");
free(bImg);
return NULL;
}
memcpy(&bImg[pos], ret, slicesz); //dest, src, size
free(ret);
pos += slicesz;
}
free(offsetRA);
return bImg;
}
return ret;
}

Expand Down Expand Up @@ -2288,15 +2367,14 @@ unsigned char * nii_loadImgJPEG50(char* imgname, struct nifti_1_header hdr, stru
return bImg;
}


unsigned char * nii_loadImgXL(char* imgname, struct nifti_1_header *hdr, struct TDICOMdata dcm, bool iVaries, int compressFlag) {
unsigned char * nii_loadImgXL(char* imgname, struct nifti_1_header *hdr, struct TDICOMdata dcm, bool iVaries, int compressFlag, int isVerbose) {
//provided with a filename (imgname) and DICOM header (dcm), creates NIfTI header (hdr) and img
if (headerDcm2Nii(dcm, hdr) == EXIT_FAILURE) return NULL;
unsigned char * img;
if (dcm.compressionScheme == kCompress50) {
img = nii_loadImgJPEG50(imgname, *hdr, dcm);
} else if (dcm.compressionScheme == kCompressC3) {
img = nii_loadImgJPEGC3(imgname, *hdr, dcm);
img = nii_loadImgJPEGC3(imgname, *hdr, dcm, (isVerbose > 0));
} else
#ifndef myDisableOpenJPEG
if ( ((dcm.compressionScheme == kCompress50) || (dcm.compressionScheme == kCompressYes)) && (compressFlag != kCompressNone) )
Expand Down Expand Up @@ -2491,7 +2569,6 @@ struct TDICOMdata readDICOMv(char * fname, int isVerbose, int compressFlag, stru
//#define kObjectGraphics 0x0029+(0x1210 << 16 ) //0029,1210 syngoPlatformOOGInfo Object Oriented Graphics
#define kRealWorldIntercept 0x0040+uint32_t(0x9224 << 16 ) //IS dicm2nii's SlopInt_6_9
#define kRealWorldSlope 0x0040+uint32_t(0x9225 << 16 ) //IS dicm2nii's SlopInt_6_9

#define kDiffusionBFactorGE 0x0043+(0x1039 << 16 ) //IS dicm2nii's SlopInt_6_9
#define kCoilSiemens 0x0051+(0x100F << 16 )
#define kLocationsInAcquisition 0x0054+(0x0081 << 16 )
Expand Down Expand Up @@ -2961,6 +3038,7 @@ struct TDICOMdata readDICOMv(char * fname, int isVerbose, int compressFlag, stru
dti4D->S[0].V[2] = d.CSA.dtiV[2];
dti4D->S[0].V[3] = d.CSA.dtiV[3];
}

d.CSA.dtiV[0] = dcmFloat(lLength, &buffer[lPos],d.isLittleEndian);
if ((d.CSA.numDti > 1) && (d.CSA.numDti < kMaxDTI4D))
dti4D->S[d.CSA.numDti-1].V[0] = d.CSA.dtiV[0];
Expand Down Expand Up @@ -3134,6 +3212,8 @@ struct TDICOMdata readDICOMv(char * fname, int isVerbose, int compressFlag, stru
d.CSA.mosaicSlices = (d.xyzDim[1] / phaseEncodingSteps) * (d.xyzDim[2] / phaseEncodingSteps);
printf("Warning: mosaic inferred without CSA header (check number of slices and spatial orientation)\n");
}
if ((d.manufacturer == kMANUFACTURER_SIEMENS) && (d.CSA.dtiV[1] < -1.0) && (d.CSA.dtiV[2] < -1.0) && (d.CSA.dtiV[3] < -1.0))
d.CSA.dtiV[0] = 0; //SiemensTrio-Syngo2004A reports B=0 images as having impossible b-vectors.
if ((d.manufacturer == kMANUFACTURER_GE) && (strlen(d.seriesDescription) > 1)) //GE uses a generic session name here: do not overwrite kProtocolNameGE
strcpy(d.protocolName, d.seriesDescription);
if ((strlen(d.protocolName) < 1) && (strlen(d.seriesDescription) > 1))
Expand All @@ -3151,6 +3231,8 @@ struct TDICOMdata readDICOMv(char * fname, int isVerbose, int compressFlag, stru
if (isVerbose) {
printf("%s\n patient position\t%g\t%g\t%g\n",fname, d.patientPosition[1],d.patientPosition[2],d.patientPosition[3]);
printf(" acq %d img %d ser %ld dim %dx%dx%d mm %gx%gx%g offset %d dyn %d loc %d valid %d ph %d mag %d posReps %d nDTI %d 3d %d bits %d littleEndian %d echo %d coil %d\n",d.acquNum,d.imageNum,d.seriesNum,d.xyzDim[1],d.xyzDim[2],d.xyzDim[3],d.xyzMM[1],d.xyzMM[2],d.xyzMM[3],d.imageStart, d.numberOfDynamicScans, d.locationsInAcquisition, d.isValid, d.isHasPhase, d.isHasMagnitude,d.patientPositionSequentialRepeats, d.CSA.numDti, d.is3DAcq, d.bitsAllocated, d.isLittleEndian, d.echoNum, d.coilNum);
if (d.CSA.dtiV[0] > 0)
printf(" DWI bxyz %g %g %g %g\n", d.CSA.dtiV[0], d.CSA.dtiV[1], d.CSA.dtiV[2], d.CSA.dtiV[3]);
}
if (d.CSA.numDti >= kMaxDTI4D) {
printf("Error: unable to convert DTI [increase kMaxDTI4D]\n");
Expand Down
8 changes: 4 additions & 4 deletions MRIcroX/nii_dicom.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ extern "C" {
#endif

#ifdef myEnableJasper
#define kDCMvers "26Aug2016j" //JASPER for JPEG2000
#define kDCMvers "21Sept2016j" //JASPER for JPEG2000
#else
#ifdef myDisableOpenJPEG
#define kDCMvers "26Aug2016" //no decompressor
#define kDCMvers "21Sept2016" //no decompressor
#else
#define kDCMvers "26Aug2016o" //OPENJPEG for JPEG2000
#define kDCMvers "21Sept2016o" //OPENJPEG for JPEG2000
#endif
#endif

Expand Down Expand Up @@ -76,7 +76,7 @@ static const int kCompress50 = 3; //obsolete JPEG lossy

int headerDcm2Nii2(struct TDICOMdata d, struct TDICOMdata d2, struct nifti_1_header *h);
//unsigned char * nii_loadImgX(char* imgname, struct nifti_1_header *hdr, struct TDICOMdata dcm, bool iVaries);
unsigned char * nii_loadImgXL(char* imgname, struct nifti_1_header *hdr, struct TDICOMdata dcm, bool iVaries, int compressFlag);
unsigned char * nii_loadImgXL(char* imgname, struct nifti_1_header *hdr, struct TDICOMdata dcm, bool iVaries, int compressFlag, int isVerbose);
//int foo (float vx);
#ifdef __cplusplus
}
Expand Down
4 changes: 2 additions & 2 deletions MRIcroX/nii_dicom_batch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1346,7 +1346,7 @@ int saveDcm2Nii(int nConvert, struct TDCMsort dcmSort[],struct TDICOMdata dcmLis
uint64_t indx0 = dcmSort[0].indx;
bool saveAs3D = dcmList[indx].isHasPhase;
struct nifti_1_header hdr0;
unsigned char * img = nii_loadImgXL(nameList->str[indx], &hdr0,dcmList[indx], iVaries, opts.compressFlag);
unsigned char * img = nii_loadImgXL(nameList->str[indx], &hdr0,dcmList[indx], iVaries, opts.compressFlag, opts.isVerbose);
if ( (dcmList[indx0].compressionScheme != kCompressNone) && (opts.compressFlag != kCompressNone))
printf("Image Decompression is new: please validate conversions\n");
if (opts.isVerbose)
Expand Down Expand Up @@ -1446,7 +1446,7 @@ int saveDcm2Nii(int nConvert, struct TDCMsort dcmSort[],struct TDICOMdata dcmLis
for (int i = 1; i < nConvert; i++) { //stack additional images
indx = dcmSort[i].indx;
//if (headerDcm2Nii(dcmList[indx], &hdrI) == EXIT_FAILURE) return EXIT_FAILURE;
img = nii_loadImgXL(nameList->str[indx], &hdrI, dcmList[indx],iVaries, opts.compressFlag);
img = nii_loadImgXL(nameList->str[indx], &hdrI, dcmList[indx],iVaries, opts.compressFlag, opts.isVerbose);
if (img == NULL) return EXIT_FAILURE;
if ((hdr0.dim[1] != hdrI.dim[1]) || (hdr0.dim[2] != hdrI.dim[2]) || (hdr0.bitpix != hdrI.bitpix)) {
#ifdef myUseCOut
Expand Down
Loading

0 comments on commit 973530a

Please sign in to comment.