74 lines
2.6 KiB
Python
74 lines
2.6 KiB
Python
# ops_reader.py
|
|
from dagster import op
|
|
import os
|
|
import pysera
|
|
|
|
@op
|
|
def read_images():
|
|
# Match Radiuma.exe by processing a single pair or a flat folder.
|
|
# Here we keep folders; PySERA will find matching pairs.
|
|
image_dir = "data/images"
|
|
mask_dir = "data/masks"
|
|
return {"image_dir": image_dir, "mask_dir": mask_dir}
|
|
|
|
@op
|
|
def extract_features(data):
|
|
# Exact PySERA config mirrored from Radiuma.exe logs
|
|
result = pysera.process_batch(
|
|
image_input=data["image_dir"],
|
|
mask_input=data["mask_dir"],
|
|
output_path="./artifacts/results",
|
|
# Core run behavior
|
|
enable_parallelism=False,
|
|
num_workers=1,
|
|
apply_preprocessing=True,
|
|
roi_selection_mode="per_region",
|
|
roi_num=2,
|
|
min_roi_volume=50,
|
|
feature_value_mode="REAL_VALUE",
|
|
# Feature scope
|
|
categories="diag,morph,glcm,glrlm,glszm,ngtdm,ngldm",
|
|
dimensions="1st,2D",
|
|
bin_size=25,
|
|
# Logging/report
|
|
report="info",
|
|
# Temp path (matching Radiuma.exe run)
|
|
temporary_files_path=r"C:\Users\Omen16\AppData\Local\ViSERA\res\memory\memmap\pysera_temp",
|
|
# IBSI-based parameters mirrored from Radiuma.exe
|
|
IBSI_based_parameters={
|
|
"radiomics_DataType": "CT",
|
|
"radiomics_DiscType": "FBS",
|
|
"radiomics_isScale": 0,
|
|
"radiomics_VoxInterp": "Nearest",
|
|
"radiomics_ROIInterp": "Nearest",
|
|
"radiomics_isotVoxSize": 1.0,
|
|
"radiomics_isotVoxSize2D": 2.0,
|
|
"radiomics_isIsot2D": 0,
|
|
"radiomics_isGLround": 0,
|
|
"radiomics_isReSegRng": 0,
|
|
"radiomics_isOutliers": 0,
|
|
"radiomics_isQuntzStat": 1,
|
|
"radiomics_ReSegIntrvl01": -1000,
|
|
"radiomics_ReSegIntrvl02": 400,
|
|
"radiomics_ROI_PV": 0.5,
|
|
"radiomics_qntz": "Uniform",
|
|
"radiomics_IVH_Type": 3,
|
|
"radiomics_IVH_DiscCont": 1,
|
|
"radiomics_IVH_binSize": 2.0,
|
|
},
|
|
)
|
|
return result
|
|
|
|
@op
|
|
def write_report(result):
|
|
os.makedirs("artifacts", exist_ok=True)
|
|
report_path = "artifacts/radiomics_batch_report_radiuma_match.txt"
|
|
|
|
with open(report_path, "w") as f:
|
|
f.write(f"Success: {result['success']}\n")
|
|
f.write(f"Processed files: {result['processed_files']}\n")
|
|
f.write(f"Processing time: {result['processing_time']:.2f} seconds\n")
|
|
f.write(f"Output path: {result['output_path']}\n")
|
|
f.write("Note: Excel with Radiomics_Features, Parameters, Report is saved in output_path.\n")
|
|
|
|
return report_path |