Source code for toor.ImageReader.Interfile.interfile_writer
# Copyright (c) 2025. Pedro Encarnação . Universidade de Aveiro LICENSE: CC BY-NC-SA 4.0 # ****************************
#
# *******************************************************
# * FILE: interfile_writer
# * AUTHOR: Pedro Encarnação
# * DATE: 16/05/2025
# * LICENSE: "CC BY-NC-SA 4.0"
# *******************************************************
import numpy as np
[docs]
class InterfileWriter:
def __init__(self, file_name, data):
self._fileName = file_name
self._data = None
self._header = None
self._modality = 'CT'
self._version = '3.3'
self._typeOfData = 'Image'
self._totalNumberOfImages = '1'
self._imageScaleFactor = '1'
self._imagedataByteOrder = 'LITTLEENDIAN'
self._numberFormat = 'float'
self._numberOfBytesPerPixel = '4'
self._nameOfPatient = 'Patient'
self._numberOfDimensions = '3'
self._matrixAxisLabel = ['x', 'y', 'z']
self._matrixSize = [str(data.shape[0]), str(data.shape[1]), str(data.shape[2])]
self._voxelSize = ['1', '1', '1']
@property
def header(self):
return self._header
[docs]
def saveHeaderFile(self):
"""
Save the header file in the same directory as the data file.
Example:
!INTERFILE :=
name of data file := teste.v
!GENERAL DATA :=
data description := CT scan of thorax
imaging modality := CT
!GENERAL ACQUISITION PARAMETERS :=
patient name := John Doe
patient ID := 123456
patient sex := M
patient birth date := 19700101
study ID := CT teste
acquisition date := 20250515
acquisition time := 093015
operator name := Dr. Smith
institution name := Example Medical Center
!IMAGE DATA DESCRIPTION :=
number of dimensions := 3
matrix size [1] := 71
matrix size [2] := 71
matrix size [3] := 73
scaling factor (mm/pixel) [1] := 0.5
scaling factor (mm/pixel) [2] := 0.5
scaling factor (mm/pixel) [3] := 0.5
!number format := float
!number of bytes per pixel := 4
imagedata byte order := LITTLEENDIAN
number of time frames := 1
!DATA ACQUISITION PARAMETERS :=
energy window lower level (keV) := 80
energy window upper level (keV) := 140
slice thickness (mm) := 0.5
reconstruction diameter (mm) := 250.0
reconstruction algorithm := LM-MLEM
!END OF INTERFILE :=
"""
self._header
# Open the file in write mode
with open(f"{self._fileName}.h", 'w') as f:
# Write the header to the file
for key, value in self.header.items():
f.write("{} :={}\n".format(key, value))
# Write the end of file marker
f.write("!END OF INTERFILE :=\n")