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 ...@@ -3,7 +3,7 @@ from typing import Dict, Tuple
import numpy as np import numpy as np
from pydicom.dataset import FileDataset as DCMImage 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]: 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 ...@@ -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 :param image: the image as a numpy array
:return: the header and image in INTERFILE format :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("{SPACING_X}", f"{dcm.PixelSpacing[0]:.4f}")
header = header.replace("{COLUMNS}", str(dcm.Columns)) header = header.replace("{COLUMNS}", str(dcm.Columns))
header = header.replace("{SPACING_Y}", f"{dcm.PixelSpacing[1]:.4f}") header = header.replace("{SPACING_Y}", f"{dcm.PixelSpacing[1]:.4f}")
......
...@@ -3,56 +3,58 @@ from typing import Dict, Tuple ...@@ -3,56 +3,58 @@ from typing import Dict, Tuple
import numpy as np import numpy as np
Interfile = Tuple[Dict[str, str], np.ndarray]
""" """
Several keys defined in INTERFILE headers. Several keys defined in INTERFILE headers.
""" """
KEY_DIM_1 = "!matrix size [1]" KEY_DIM_1 = "matrix size [1]"
KEY_DIM_2 = "!matrix size [2]" KEY_DIM_2 = "matrix size [2]"
KEY_DIM_3 = "!matrix size [3]" KEY_DIM_3 = "matrix size [3]"
KEY_SPACING_1 = "scaling factor (mm/pixel) [1]" KEY_SPACING_1 = "scaling factor (mm/pixel) [1]"
KEY_SPACING_2 = "scaling factor (mm/pixel) [2]" KEY_SPACING_2 = "scaling factor (mm/pixel) [2]"
KEY_SPACING_3 = "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_DATA_FILE = "name of data file"
KEY_BYTES_PER_PIXEL = "!number of bytes per pixel" KEY_BYTES_PER_PIXEL = "number of bytes per pixel"
KEY_NUMBER_FORMAT = "!number format" KEY_NUMBER_FORMAT = "number format"
""" """
A template of an INTERFILE header. A template of an INTERFILE header.
""" """
HEADER_TEMPLATE = """ TEMPLATE_HEADER_IMAGE = """
!INTERFILE := INTERFILE :=
!imaging modality := nucmed imaging modality := nucmed
!version of keys := STIR4.0 version of keys := STIR4.0
name of data file := {DATA_FILE} name of data file := {DATA_FILE}
!GENERAL DATA := GENERAL DATA :=
!GENERAL IMAGE DATA := GENERAL IMAGE DATA :=
!type of data := Tomographic type of data := Tomographic
imagedata byte order := LITTLEENDIAN imagedata byte order := LITTLEENDIAN
isotope name := ^99m^Technetium isotope name := ^99m^Technetium
!SPECT STUDY (General) := SPECT STUDY (General) :=
process status := Reconstructed process status := Reconstructed
!number format := float number format := float
!number of bytes per pixel := 4 number of bytes per pixel := 4
number of dimensions := 3 number of dimensions := 3
matrix axis label [1] := x matrix axis label [1] := x
!matrix size [1] := {ROWS} matrix size [1] := {ROWS}
scaling factor (mm/pixel) [1] := {SPACING_X} scaling factor (mm/pixel) [1] := {SPACING_X}
matrix axis label [2] := y matrix axis label [2] := y
!matrix size [2] := {COLUMNS} matrix size [2] := {COLUMNS}
scaling factor (mm/pixel) [2] := {SPACING_Y} scaling factor (mm/pixel) [2] := {SPACING_Y}
matrix axis label [3] := z matrix axis label [3] := z
!matrix size [3] := {SLICES} matrix size [3] := {SLICES}
scaling factor (mm/pixel) [3] := {SPACING_Z} scaling factor (mm/pixel) [3] := {SPACING_Z}
first pixel offset (mm) [1] := {OFFSET_X} first pixel offset (mm) [1] := {OFFSET_X}
first pixel offset (mm) [2] := {OFFSET_Y} first pixel offset (mm) [2] := {OFFSET_Y}
first pixel offset (mm) [3] := 0 first pixel offset (mm) [3] := 0
number of time frames := 1 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]: ...@@ -80,6 +82,7 @@ def parse_interfile_header_str(header: str) -> Dict[str, str]:
:param header: the text of an INTERFILE header :param header: the text of an INTERFILE header
:return: a dictionary of value in the header :return: a dictionary of value in the header
""" """
header = header.replace("!", "")
lines = header.strip().split("\n") lines = header.strip().split("\n")
items = map(lambda line: line.split(":="), lines) items = map(lambda line: line.split(":="), lines)
items = filter(lambda item: len(item) == 2, items) 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