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/ /build/
\ No newline at end of file /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): ...@@ -22,12 +22,13 @@ class RqJsonLoader(BaseDataLoader):
focal_spot_mm=np.array([data_dict['focal_spot_mm']]), focal_spot_mm=np.array([data_dict['focal_spot_mm']]),
detector_postion_mm=np.array([data_dict['detector_postion_mm']]), detector_postion_mm=np.array([data_dict['detector_postion_mm']]),
detector_orientation_quad=np.array([data_dict['detector_orientation_quad']]), 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 return projection_geometry
def load_projection(self, load_path: Path) -> PyProjection: 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) data_dict = self.load_json(load_path_projection_geometry)
image = np.asarray(Image.open(load_path)) image = np.asarray(Image.open(load_path))
...@@ -38,7 +39,11 @@ class RqJsonLoader(BaseDataLoader): ...@@ -38,7 +39,11 @@ class RqJsonLoader(BaseDataLoader):
image=image, image=image,
detector_heigth_mm=data_dict['detector_heigth_mm'], detector_heigth_mm=data_dict['detector_heigth_mm'],
detector_width_mm=data_dict['detector_width_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 return projection
...@@ -47,6 +52,8 @@ class RqJsonLoader(BaseDataLoader): ...@@ -47,6 +52,8 @@ class RqJsonLoader(BaseDataLoader):
region_of_intrest = PyRegionOfIntrest( region_of_intrest = PyRegionOfIntrest(
start_point_mm=np.array(data_dict['start_point_mm']), 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 return region_of_intrest
...@@ -16,23 +16,37 @@ class RqJsonWriter(BaseDataWriter): ...@@ -16,23 +16,37 @@ class RqJsonWriter(BaseDataWriter):
def write_projection_geometry(self, save_path: Path, projection_geometry: PyProjectionGeometry): def write_projection_geometry(self, save_path: Path, projection_geometry: PyProjectionGeometry):
data_dict = dict() data_dict = dict()
#geometry
data_dict['focal_spot_mm'] = projection_geometry.focal_spot_mm.tolist() 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_postion_mm'] = projection_geometry.detector_postion_mm.tolist()
data_dict['detector_orientation_quad'] = projection_geometry.detector_orientation_quad.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 data_dict['frame_id'] = projection_geometry.frame_id
self.write_json(save_path, data_dict) self.write_json(save_path, data_dict)
def write_projection(self, save_path: Path, projection: PyProjection): 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() data_dict = dict()
# geometry
data_dict['focal_spot_mm'] = projection.focal_spot_mm.tolist() data_dict['focal_spot_mm'] = projection.focal_spot_mm.tolist()
data_dict['detector_postion_mm'] = projection.detector_postion_mm.tolist() data_dict['detector_postion_mm'] = projection.detector_postion_mm.tolist()
data_dict['detector_orientation_quad'] = projection.detector_orientation_quad.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_x_mm'] = projection.pixel_pitch_x_mm
data_dict['pixel_pitch_y_mm'] = projection.pixel_pitch_y_mm data_dict['pixel_pitch_y_mm'] = projection.pixel_pitch_y_mm
data_dict['detector_heigth_mm'] = projection.detector_heigth_mm data_dict['detector_heigth_mm'] = projection.detector_heigth_mm
data_dict['detector_width_mm'] = projection.detector_width_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 data_dict['frame_id'] = projection.frame_id
self.write_json(save_path_projection_geometry, data_dict) self.write_json(save_path_projection_geometry, data_dict)
...@@ -42,8 +56,11 @@ class RqJsonWriter(BaseDataWriter): ...@@ -42,8 +56,11 @@ class RqJsonWriter(BaseDataWriter):
def write_region_of_intrest(self, save_path: Path, region_of_intrest: PyRegionOfIntrest): def write_region_of_intrest(self, save_path: Path, region_of_intrest: PyRegionOfIntrest):
data_dict = dict() 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['frame_id'] = region_of_intrest.frame_id
data_dict['resoluion_mm'] = region_of_intrest.resolution_mm.tolist()
self.write_json(save_path, data_dict) self.write_json(save_path, data_dict)
...@@ -5,6 +5,10 @@ from ...common import PyProjectionGeometry, PyProjection, PyRegionOfIntrest ...@@ -5,6 +5,10 @@ from ...common import PyProjectionGeometry, PyProjection, PyRegionOfIntrest
class BaseDataWriter(): class BaseDataWriter():
projection_name: str = 'projection'
projection_geometry_name: str ='geometry'
region_of_intrest_name: str = 'roi'
def __init__(self, def __init__(self,
porjection_geometry_suffix: str, porjection_geometry_suffix: str,
projection_suffix: str, projection_suffix: str,
...@@ -23,18 +27,29 @@ class BaseDataWriter(): ...@@ -23,18 +27,29 @@ class BaseDataWriter():
def write_region_of_intrest(self, save_path: Path, region_of_intrest: PyRegionOfIntrest): def write_region_of_intrest(self, save_path: Path, region_of_intrest: PyRegionOfIntrest):
raise NotImplementedError raise NotImplementedError
def get_projection_geometry_geometry_save_path(self, save_folder: Path, save_name: str) -> Path: def get_next_projection_save_path(self, save_folder: Path) -> Path:
raise NotImplementedError 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: def get_next_projection_geometry_save_path(self, save_folder: Path) -> Path:
raise NotImplementedError 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: def get_next_region_of_intrest_save_path(self, save_folder: Path) -> Path:
raise NotImplementedError 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: 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: 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