Add All Folders
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,27 @@
|
||||
from app.engine.core import Node
|
||||
from app.nodes.imaging import image_reader_fn, image_registration_fn, image_filter_fn, image_writer_fn
|
||||
|
||||
def build_nodes():
|
||||
return [
|
||||
Node("image_reader", image_reader_fn, inputs=[], outputs=["image_path"]),
|
||||
Node("image_registration", image_registration_fn, inputs=["image_path"], outputs=["registered_path"]),
|
||||
Node("image_filter", image_filter_fn, inputs=["registered_path"], outputs=["filtered_path"]),
|
||||
Node("image_writer", image_writer_fn, inputs=["filtered_path"], outputs=["final_output_path"]),
|
||||
]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# from app.engine.core import Node
|
||||
# from app.nodes.imaging import image_reader_fn, image_registration_fn, image_filter_fn, image_writer_fn
|
||||
# from app.features.pysera_node import pysera_extract_fn
|
||||
|
||||
# def build_nodes():
|
||||
# return [
|
||||
# Node("image_reader", image_reader_fn, [], ["image_path"]),
|
||||
# Node("image_registration", image_registration_fn, ["image_path"], ["registered_path"]),
|
||||
# Node("image_filter", image_filter_fn, ["registered_path"], ["filtered_path"]),
|
||||
# Node("pysera_extract", pysera_extract_fn, ["filtered_path"], ["features_path"]),
|
||||
# Node("image_writer", image_writer_fn, ["filtered_path"], ["final_output_path"]),
|
||||
# ]
|
||||
@@ -0,0 +1,54 @@
|
||||
from pathlib import Path
|
||||
import numpy as np
|
||||
import SimpleITK as sitk
|
||||
|
||||
ARTIFACTS = Path("app/storage/artifacts")
|
||||
ARTIFACTS.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
def image_reader_fn(state):
|
||||
# Decide input file (DICOM series or NIfTI)
|
||||
input_image_path = Path("data/images/CT_AVM.nii.gz") # adapt as needed
|
||||
img = sitk.ReadImage(str(input_image_path))
|
||||
out_path = ARTIFACTS / "image_reader.nii.gz"
|
||||
sitk.WriteImage(img, str(out_path))
|
||||
return {"image_path": str(out_path)}
|
||||
|
||||
def image_registration_fn(state):
|
||||
fixed_path = state.get_outputs("image_reader").get("image_path")
|
||||
moving_path = fixed_path # demo: register image to itself; replace with real moving image
|
||||
fixed = sitk.ReadImage(fixed_path)
|
||||
moving = sitk.ReadImage(moving_path)
|
||||
|
||||
# Simple rigid registration (demo)
|
||||
registration_method = sitk.ImageRegistrationMethod()
|
||||
registration_method.SetMetricAsMeanSquares()
|
||||
registration_method.SetOptimizerAsRegularStepGradientDescent(
|
||||
learningRate=1.0, minStep=1e-4, numberOfIterations=100
|
||||
)
|
||||
registration_method.SetInterpolator(sitk.sitkLinear)
|
||||
initial_transform = sitk.CenteredTransformInitializer(
|
||||
fixed, moving, sitk.Euler3DTransform(), sitk.CenteredTransformInitializerFilter.GEOMETRY
|
||||
)
|
||||
registration_method.SetInitialTransform(initial_transform, inPlace=False)
|
||||
final_transform = registration_method.Execute(fixed, moving)
|
||||
|
||||
resampled = sitk.Resample(moving, fixed, final_transform, sitk.sitkLinear, 0.0, moving.GetPixelID())
|
||||
out_path = ARTIFACTS / "registered.nii.gz"
|
||||
sitk.WriteImage(resampled, str(out_path))
|
||||
return {"registered_path": str(out_path), "transform": "euler3d"}
|
||||
|
||||
def image_filter_fn(state):
|
||||
reg_path = state.get_outputs("image_registration").get("registered_path")
|
||||
img = sitk.ReadImage(reg_path)
|
||||
# Example filter: Gaussian smoothing
|
||||
filtered = sitk.DiscreteGaussian(img, variance=1.5)
|
||||
out_path = ARTIFACTS / "filtered.nii.gz"
|
||||
sitk.WriteImage(filtered, str(out_path))
|
||||
return {"filtered_path": str(out_path)}
|
||||
|
||||
def image_writer_fn(state):
|
||||
# Writer here is just saving; already done by previous steps; simulate final export
|
||||
filtered_path = state.get_outputs("image_filter").get("filtered_path")
|
||||
final_path = ARTIFACTS / "final_output.nii.gz"
|
||||
Path(final_path).write_bytes(Path(filtered_path).read_bytes())
|
||||
return {"final_output_path": str(final_path)}
|
||||
Reference in New Issue
Block a user