Skip to content
Snippets Groups Projects
Commit 5f6917dd authored by Tamino Huxohl's avatar Tamino Huxohl
Browse files

update header template for interfile recon

parent adc8795f
No related branches found
No related tags found
No related merge requests found
......@@ -3,7 +3,7 @@ from typing import Dict, Tuple
import numpy as np
from pydicom.dataset import FileDataset as DCMImage
from mu_map.file.interfile import HEADER_TEMPLATE, parse_interfile_header_str
from mu_map.file.interfile import TEMPLATE_HEADER_IMAGE, parse_interfile_header_str
def to_interfile(dcm: DCMImage, image: np.ndarray) -> Tuple[Dict[str, str], np.ndarray]:
......@@ -14,7 +14,7 @@ def to_interfile(dcm: DCMImage, image: np.ndarray) -> Tuple[Dict[str, str], np.n
:param image: the image as a numpy array
:return: the header and image in INTERFILE format
"""
header = HEADER_TEMPLATE.replace("{ROWS}", str(dcm.Rows))
header = TEMPLATE_HEADER_IMAGE.replace("{ROWS}", str(dcm.Rows))
header = header.replace("{SPACING_X}", f"{dcm.PixelSpacing[0]:.4f}")
header = header.replace("{COLUMNS}", str(dcm.Columns))
header = header.replace("{SPACING_Y}", f"{dcm.PixelSpacing[1]:.4f}")
......
......@@ -3,56 +3,58 @@ from typing import Dict, Tuple
import numpy as np
Interfile = Tuple[Dict[str, str], np.ndarray]
"""
Several keys defined in INTERFILE headers.
"""
KEY_DIM_1 = "!matrix size [1]"
KEY_DIM_2 = "!matrix size [2]"
KEY_DIM_3 = "!matrix size [3]"
KEY_DIM_1 = "matrix size [1]"
KEY_DIM_2 = "matrix size [2]"
KEY_DIM_3 = "matrix size [3]"
KEY_SPACING_1 = "scaling factor (mm/pixel) [1]"
KEY_SPACING_2 = "scaling factor (mm/pixel) [2]"
KEY_SPACING_3 = "scaling factor (mm/pixel) [2]"
KEY_NPROJECTIONS = "!number of projections"
KEY_NPROJECTIONS = "number of projections"
KEY_DATA_FILE = "name of data file"
KEY_BYTES_PER_PIXEL = "!number of bytes per pixel"
KEY_NUMBER_FORMAT = "!number format"
KEY_BYTES_PER_PIXEL = "number of bytes per pixel"
KEY_NUMBER_FORMAT = "number format"
"""
A template of an INTERFILE header.
"""
HEADER_TEMPLATE = """
!INTERFILE :=
!imaging modality := nucmed
!version of keys := STIR4.0
TEMPLATE_HEADER_IMAGE = """
INTERFILE :=
imaging modality := nucmed
version of keys := STIR4.0
name of data file := {DATA_FILE}
!GENERAL DATA :=
!GENERAL IMAGE DATA :=
!type of data := Tomographic
GENERAL DATA :=
GENERAL IMAGE DATA :=
type of data := Tomographic
imagedata byte order := LITTLEENDIAN
isotope name := ^99m^Technetium
!SPECT STUDY (General) :=
SPECT STUDY (General) :=
process status := Reconstructed
!number format := float
!number of bytes per pixel := 4
number format := float
number of bytes per pixel := 4
number of dimensions := 3
matrix axis label [1] := x
!matrix size [1] := {ROWS}
matrix size [1] := {ROWS}
scaling factor (mm/pixel) [1] := {SPACING_X}
matrix axis label [2] := y
!matrix size [2] := {COLUMNS}
matrix size [2] := {COLUMNS}
scaling factor (mm/pixel) [2] := {SPACING_Y}
matrix axis label [3] := z
!matrix size [3] := {SLICES}
matrix size [3] := {SLICES}
scaling factor (mm/pixel) [3] := {SPACING_Z}
first pixel offset (mm) [1] := {OFFSET_X}
first pixel offset (mm) [2] := {OFFSET_Y}
first pixel offset (mm) [3] := 0
number of time frames := 1
!END OF INTERFILE :=
END OF INTERFILE :=
"""
......@@ -80,6 +82,7 @@ def parse_interfile_header_str(header: str) -> Dict[str, str]:
:param header: the text of an INTERFILE header
:return: a dictionary of value in the header
"""
header = header.replace("!", "")
lines = header.strip().split("\n")
items = map(lambda line: line.split(":="), lines)
items = filter(lambda item: len(item) == 2, items)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment