Skip to content
Snippets Groups Projects
Commit d00a6d23 authored by Simon Wittl's avatar Simon Wittl
Browse files

io update

parent 5bdc3d54
No related branches found
No related tags found
No related merge requests found
/build/
\ No newline at end of file
/build/
/example/data/
\ No newline at end of file
{
"focal_spot_mm": [
0.14,
100.13,
0.12
],
"detector_postion_mm": [
0.101,
-100.11,
0.9
],
"detector_orientation_quad": [
1.8,
0.7,
0.6,
1.5
],
"focal_spot_orientation_quad": [
0.1,
0.2,
0.3,
1.4
],
"pixel_pitch_x_mm": 2.0,
"pixel_pitch_y_mm": 3.0,
"detector_heigth_mm": 4.0,
"detector_width_mm": 5.0,
"exposure_time_ms": 6.0,
"voltage_kv": 7.0,
"current_ua": 8.0,
"frame_id": "projection_1"
}
\ No newline at end of file
File added
from rq_controller.common import PyProjection
from rq_controller.common.io.rq_json import RqJsonWriter, RqJsonLoader
from pathlib import Path
FOLDER = Path('./example/data')
def main():
projection = PyProjection.dummy()
writer = RqJsonWriter()
loader = RqJsonLoader()
writer.write_projection(writer.get_next_projection_save_path(FOLDER), projection)
projection_1 = loader.load_projection(writer.get_projection_save_path_i(FOLDER, 1))
if __name__ == '__main__':
main()
\ No newline at end of file
from .json_load import RqJsonLoader
from .json_write import RqJsonWriter
\ No newline at end of file
......@@ -22,12 +22,13 @@ class RqJsonLoader(BaseDataLoader):
focal_spot_mm=np.array([data_dict['focal_spot_mm']]),
detector_postion_mm=np.array([data_dict['detector_postion_mm']]),
detector_orientation_quad=np.array([data_dict['detector_orientation_quad']]),
frame_id=data_dict['frame_id'])
frame_id=data_dict['frame_id'],
focal_spot_orientation_quad=np.array(data_dict['focal_spot_orientation_quad']))
return projection_geometry
def load_projection(self, load_path: Path) -> PyProjection:
load_path_projection_geometry = load_path.parent / f'{load_path.stem}.{self.porjection_geometry_suffix}'
load_path_projection_geometry = load_path.parent / f'{load_path.stem}{self.porjection_geometry_suffix}'
data_dict = self.load_json(load_path_projection_geometry)
image = np.asarray(Image.open(load_path))
......@@ -38,7 +39,11 @@ class RqJsonLoader(BaseDataLoader):
image=image,
detector_heigth_mm=data_dict['detector_heigth_mm'],
detector_width_mm=data_dict['detector_width_mm'],
frame_id=data_dict['frame_id'])
frame_id=data_dict['frame_id'],
focal_spot_orientation_quad=np.array(data_dict['focal_spot_orientation_quad']),
voltage_kv=data_dict['voltage_kv'],
current_ua=data_dict['current_ua'],
exposure_time_ms=data_dict['exposure_time_ms'])
return projection
......@@ -47,6 +52,8 @@ class RqJsonLoader(BaseDataLoader):
region_of_intrest = PyRegionOfIntrest(
start_point_mm=np.array(data_dict['start_point_mm']),
end_point_mm=np.array(data_dict['end_point_mm']))
end_point_mm=np.array(data_dict['end_point_mm']),
frame_id=data_dict['resoluion_mm'],
resoluion_mm=np.array(data_dict['resoluion_mm']))
return region_of_intrest
......@@ -16,23 +16,37 @@ class RqJsonWriter(BaseDataWriter):
def write_projection_geometry(self, save_path: Path, projection_geometry: PyProjectionGeometry):
data_dict = dict()
#geometry
data_dict['focal_spot_mm'] = projection_geometry.focal_spot_mm.tolist()
data_dict['detector_postion_mm'] = projection_geometry.detector_postion_mm.tolist()
data_dict['detector_orientation_quad'] = projection_geometry.detector_orientation_quad.tolist()
data_dict['focal_spot_orientation_quad'] = projection_geometry.focal_spot_orientation_quad.tolist()
data_dict['frame_id'] = projection_geometry.frame_id
self.write_json(save_path, data_dict)
def write_projection(self, save_path: Path, projection: PyProjection):
save_path_projection_geometry = save_path.parent / f'{save_path.stem}.{self.porjection_geometry_suffix}'
save_path_projection_geometry = save_path.parent / f'{save_path.stem}{self.porjection_geometry_suffix}'
data_dict = dict()
# geometry
data_dict['focal_spot_mm'] = projection.focal_spot_mm.tolist()
data_dict['detector_postion_mm'] = projection.detector_postion_mm.tolist()
data_dict['detector_orientation_quad'] = projection.detector_orientation_quad.tolist()
data_dict['focal_spot_orientation_quad'] = projection.focal_spot_orientation_quad.tolist()
# detector
data_dict['pixel_pitch_x_mm'] = projection.pixel_pitch_x_mm
data_dict['pixel_pitch_y_mm'] = projection.pixel_pitch_y_mm
data_dict['detector_heigth_mm'] = projection.detector_heigth_mm
data_dict['detector_width_mm'] = projection.detector_width_mm
# xray
data_dict['exposure_time_ms'] = projection.exposure_time_ms
data_dict['voltage_kv'] = projection.voltage_kv
data_dict['current_ua'] = projection.current_ua
data_dict['frame_id'] = projection.frame_id
self.write_json(save_path_projection_geometry, data_dict)
......@@ -42,8 +56,11 @@ class RqJsonWriter(BaseDataWriter):
def write_region_of_intrest(self, save_path: Path, region_of_intrest: PyRegionOfIntrest):
data_dict = dict()
data_dict['focal_spot_mm'] = region_of_intrest.start_point_mm.tolist()
data_dict['detector_postion_mm'] = region_of_intrest.end_point_mm.tolist()
# geometry
data_dict['center_points_mm'] = region_of_intrest.center_points_mm.tolist()
data_dict['dimensions_mm'] = region_of_intrest.dimensions_mm.tolist()
data_dict['frame_id'] = region_of_intrest.frame_id
data_dict['resoluion_mm'] = region_of_intrest.resolution_mm.tolist()
self.write_json(save_path, data_dict)
......@@ -5,6 +5,10 @@ from ...common import PyProjectionGeometry, PyProjection, PyRegionOfIntrest
class BaseDataWriter():
projection_name: str = 'projection'
projection_geometry_name: str ='geometry'
region_of_intrest_name: str = 'roi'
def __init__(self,
porjection_geometry_suffix: str,
projection_suffix: str,
......@@ -23,18 +27,29 @@ class BaseDataWriter():
def write_region_of_intrest(self, save_path: Path, region_of_intrest: PyRegionOfIntrest):
raise NotImplementedError
def get_projection_geometry_geometry_save_path(self, save_folder: Path, save_name: str) -> Path:
raise NotImplementedError
def get_next_projection_save_path(self, save_folder: Path) -> Path:
return self.get_projection_save_path_i(save_folder, self.number_of_projections(save_folder) + 1)
def get_projection_save_path_i(self, save_folder: Path, i) -> Path:
return save_folder / f'{self.projection_name}_{i:05}{self.projection_suffix}'
def get_projection_geometry_save_path(self, save_folder: Path, save_name: str) -> Path:
raise NotImplementedError
def get_next_projection_geometry_save_path(self, save_folder: Path) -> Path:
return self.get_projection_geometry_save_path_i(save_folder, self.number_of_projection_geometries(save_folder) + 1)
def get_projection_geometry_save_path_i(self, save_folder: Path, i) -> Path:
return save_folder / f'{self.projection_geometry_name}_{i:05}{self.porjection_geometry_suffix}'
def get_region_of_intrest_save_path(self, save_folder: Path, save_name: str) -> Path:
raise NotImplementedError
def get_next_region_of_intrest_save_path(self, save_folder: Path) -> Path:
return self.get_region_of_intrest_save_path_i(save_folder, self.number_of_region_of_intrests(save_folder) + 1)
def get_region_of_intrest_save_path_i(self, save_folder: Path, i) -> Path:
return save_folder / f'{self.region_of_intrest_name}_{i:05}{self.region_of_intrest_suffix}'
def number_of_projection_geometries(self, folder: Path) -> int:
return len(list(folder.glob(f'*{self.porjection_geometry_suffix}')))
return len(list(folder.glob(f'{self.projection_geometry_name}*{self.porjection_geometry_suffix}')))
def number_of_projections(self, folder: Path) -> int:
return self.number_of_projection_geometries(folder)
return len(list(folder.glob(f'{self.projection_name}*{self.projection_suffix}')))
def number_of_region_of_intrests(self, folder: Path) -> int:
return len(list(folder.glob(f'{self.region_of_intrest_name}*{self.region_of_intrest_suffix}')))
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