FAQ icon

Data Formats.

What formats are accepted for the input projections?

You can have input projections in format meeting the following restrictions:

  • Projections have to be presented in the form of "one projection per file";
  • Projection names are sequential and may be described by conventional C/C++ format string;
  • Projections may have headers but the length of the headers is consistent over the current dataset (note that DICOMs sometimes may have variable header length)
  • Projections may contain unsigned/signed 2-byte int or 4-byte float pixel data
  • COBRA handles little Endian or big Endian
  • COBRA handles raw data (ADC output) or preprocessed data on the client SW side (see details in Docs)
  • Please also note that one can feed projections directly from the PC's memory (no header, plain row-by-row array).

What information, contained inside some images (TIFF, DICOM), can be utilized?

COBRA does not utilize/decode any information embedded into TIFF, DICOM, etc. To make this info effective, one should explicitly put it into the xxm file (like image size) or make the corresponding SDK calls.

Can slices be saved in DICOM format with .dcm file extension? Is it possible to modify the tag values or add new tags into the DICOM header?

COBRA provides output into a subset of standard DICOM format; restrictions are:
1) One file per image (slice)
2) Files are non-compressed
3) Exxim provides files with conventional file names (without Exxim ID and study ID embedded into file names).
As you see since our format is rather simple and straightforward and we did not create situations that any viewer/workstation could not handle. At the same time, obviously, we cannot exclude a situation when a tool you have by some reason and in some point "is unhappy" with our DICOM. In this case, we will need more information from you.
Some further comments:
1) DICOM file names do not necessarily possess .dcm extension. Getting slice extension does not mean that they are not DICOM files. If you prefer .dcm please set it up through OPTTAG_SLCNAMEFORMAT. For example
PARTAG_DICOM = 1
OPTTAG_SLCNAMEFORMAT = %04i.dcm
2) Created files contain DICOM header with a minimal set of DICOM tags. The demographic tags are generated using "dummy" values (see below); the geometry is available and grabbed from .xxm files. After first reconstruction you can observe these parameters in the research.xxm file in the source data folder. This file contains all tags applied. The syntax is very simple. For example, for study description it will be
DCM_TAG_0008_1030=DESCRIPTION
This file can be pre-created or/and edited. For example, you may add new tags you need:
DCM_TAG_NNNN_MMMM = VALUE,
where NNNN and MMMM are corresponding the applied tag codes.
Also see User Manual Section 5.2

Give some more information about the data types and sizes of the preprocd_proj.000 and logged_proj.000 files?

The logged_proj.000 and and preprocd_proj.000 files are represented in the form as it is prepared for filtering and back-projecting. In general the size can be different. In simple words differences may be pretty big if such parameters are set:
PARTAG_CROP_LEFT
PARTAG_CROP_RIGHT
PARTAG_CROP_UP
PARTAG_CROP_DOWN
PARTAG_CATFORMAT
PARTAG_HBTC
PARTAG_3XVIEW
PARTAG_INPUTDOWNSAMPLE_X
PARTAG_INPUTDOWNSAMPLE_Y
The logged_proj.000 and and preprocd_proj.000 files are containing short signed integers (2 bytes per pixel). No header.
In full beam case a factual width is shorter when PARTAG_CROP_LEFT and PARTAG_CROP_RIGHT are set. For example if the physical detector width is 512 and PARTAG_CROP_LEFT=10 and PARTAG_CROP_RIGHT=12 then the width of discussed files W1 is 512-10-12 = 490. If PARTAG_HBTC or PARTAG_3XVIEW is set then W1 should be multiply by factor 2 or 3 (respectively).
Since COBRA is making automatic y-down-sampling and loading only needed strip, a vertical size may vary.

How to define a factual slice number that have been saved on the disk in a stacked volume mode?

In SDK there is the following callback method that should be used
CDispatcherCallbackTemplate::ShowMessage()
One has to implement this method and then be looking for the following character string:
Output Volume Size Z = zzz, where zzz is factual cube size in Z
In GUI you will see this number reported in a visualized log sequence (reconstruction progress tab)

How to calibrate the reconstruction output to Hounsfield units (HU)? How does calibration depend on scanner settings?

Regarding parameters that have to be used for calibrating a scanner:
a) PARTAG_SCALEFACTOR in general does not make any impact; it is canceled out. COBRA pipeline is the following:
input signal (16-bit integers) --> preprocessed signal (64 bit floats)
preprocessed signal (16 bit integers) =  preprocessed signal (64 bit floats) * PARTAG_SCALEFACTOR.
Internal output (32 bit integers) = backprojecting / accumulating N projections, each = preprocessed signal (16 bit integers).
Final output = Internal output (32 bit integers) / N projections / PARTAG_SCALEFACTOR * const * OPTTAG_SLICESCALE;
So if PARTAG_SCALEFACTOR does not cause over- or under-flow the output slice values do not depend on it.
b) PARTAG_SCALEFACTOR is needed for converting 64-bit double result of FFT into integers for accumulation. For biological objects the good value is 600 (-1 in that case means the same 600 as the result of automatic scaling). For dental scans, which usually contain metal, we recommend to apply 300.
c) The parameter that has to be used for calibrating is OPTTAG_SLICESCALE.
How to calibrate:
We would recommend doing it with a water phantom fitting into the field of view. Check the output water density and correct OPTTAG_SLICESCALE accordingly. For example, if the output water level is 500 and the applied OPTTAG_SLICESCALE = 1.25, it then is necessary to set OPTTAG_SLICESCALE = 2.5 to get the density of water as 1000 (mg/cm3).
The calibration (and therefore OPTTAG_SLICESCALE value measurement) in general has to be independently performed for all scanner configurations: all X-Ray source kV's and all bowtie filters (if any). Please note that you do all calibrations w/o PARTAG_MINUS1000 applied. When the calibration is done this tag is just shifting all values to get -1000 for air and 0 for water.

lb