Bruker2Analyze Paravision Converter

This is a simple program for converting medical images from Paravision format (a proprietary format from Bruker) to Analyze format (popular with scientists). This Windows program is easy to use and can batch process thousands of images quickly. I am providing the compiled program as well as the Delphi (object Pascal) source. The source code can be easily adapted to process other formats. Please use this software with caution and report problems to me (in particular, the Paravision format is unclear about how to compute inter-slice distances with some types of images). This code was inspired by a Perl scripts from Andrew Janke and Matthew Brett. For a large listing of medical image converters, please see my list. To download a zipped copy of this converter (both source and a compiled program) shift+click here.

Technical notes:

The Bruker Paravision format is a kludge. I have explicitly decided NOT to include this converter with my MRIcro software, recent Bruker software can export to the simpler DICOM format. Here are details for those who are determined to read Bruker files. First of all, to read each image, you need to locate three files:

  1. 'reco': text header file
  2. 'acqp': another text header file
  3. '2dseq' binary image data (uncompressed)

The important components of the 'reco' file are:

Name Type Values, meaining
'RECO_WORDTYPE' text '16BIT_SGN_INT' or '_32BIT_SGN_INT'
'RECO_BYTE_ORDER' text 'LITTLEENDIAN' otherwise bigendian. Bruker Bug: with old Bruker images, EPI images are always bigendian,
but often claim to be littleendian! Bruker appears to have fixed this bug.
'RECO_SIZE' integers X, Y, (and sometimes) Z image size (in voxels)
'RECO_TRANSPOSITION' integer Are the images saved in sequential (0) slices or are slices interleaved on a plane?
'RECO_FOV' floats X, Y, (and sometimes) Z field of view.

The important components of the 'acqp' file are:

Name Type Values, meaining
'ACQ_SLICE_SEPN_MODE' text Hopefully reads 'EQUIDISTANT', otherwise varies
'ACQ_SLICE_SEPN' float Space between volumes - (often in terms of time?)
'ACQ_NS_LIST_SIZE' integer Something like a mosaic, number of images per slice
'NI' integer Number of images: Z value in voxels
'BLIP_EPI' - This text indicates that you are dealing with an EPI image. Treat data as bigendian irregardless of 'RECO_BYTE_ORDER' value.
'ACQ_NR_COMPLETED' integer Number of volumes for 4D files.

Because the 2dseq file's image data is uncompressed, it is often easy to read the image data. The only difficulties arise when multiple slices are packed onto a contiguous slice of data (as indicated by RECO_TRANSPOSITION and ACQ_NS_LIST_SIZE).