Skip to content

Commit a786e6b

Browse files
joselfriasdiazandr3spre-commit-ci[bot]
authored
Add transform to apply orientation to guidance: Updated (#1853)
* Add transform to apply orientation to guidance Signed-off-by: Andres <[email protected]> * Remove log sentence Signed-off-by: Andres <[email protected]> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Remove unnecessary flag Signed-off-by: Andres <[email protected]> * Update for loop and affine argument Signed-off-by: Andres <[email protected]> * Add ref_image arg Signed-off-by: Andres <[email protected]> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix pre-commit code formatting Signed-off-by: José Frias <[email protected]> --------- Signed-off-by: Andres <[email protected]> Signed-off-by: José Frias <[email protected]> Co-authored-by: Andres <[email protected]> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent bf3f603 commit a786e6b

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

sample-apps/radiology/lib/infers/deepedit.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import logging
1212
from typing import Callable, Sequence, Union
1313

14-
from lib.transforms.transforms import GetCentroidsd
14+
from lib.transforms.transforms import GetCentroidsd, OrientationGuidanceMultipleLabelDeepEditd
1515
from monai.apps.deepedit.transforms import (
1616
AddGuidanceFromPointsDeepEditd,
1717
AddGuidanceSignalDeepEditd,
@@ -88,6 +88,7 @@ def pre_transforms(self, data=None):
8888
if self.type == InferType.DEEPEDIT:
8989
t.extend(
9090
[
91+
OrientationGuidanceMultipleLabelDeepEditd(ref_image="image", label_names=self.labels),
9192
AddGuidanceFromPointsDeepEditd(ref_image="image", guidance="guidance", label_names=self.labels),
9293
Resized(keys="image", spatial_size=self.spatial_size, mode="area"),
9394
ResizeGuidanceMultipleLabelDeepEditd(guidance="guidance", ref_image="image"),

sample-apps/radiology/lib/transforms/transforms.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import numpy as np
1616
import torch
17+
from einops import rearrange
1718
from monai.config import KeysCollection, NdarrayOrTensor
1819
from monai.data import MetaTensor
1920
from monai.networks.layers import GaussianFilter
@@ -511,6 +512,39 @@ def __call__(self, data: Mapping[Hashable, NdarrayOrTensor]) -> Dict[Hashable, N
511512
return d
512513

513514

515+
class OrientationGuidanceMultipleLabelDeepEditd(Transform):
516+
def __init__(self, ref_image: str, label_names=None):
517+
"""
518+
Convert the guidance to the RAS orientation
519+
"""
520+
self.ref_image = ref_image
521+
self.label_names = label_names
522+
523+
def transform_points(self, point, affine):
524+
"""transform point to the coordinates of the transformed image
525+
point: numpy array [bs, N, 3]
526+
"""
527+
bs, N = point.shape[:2]
528+
point = np.concatenate((point, np.ones((bs, N, 1))), axis=-1)
529+
point = rearrange(point, "b n d -> d (b n)")
530+
point = affine @ point
531+
point = rearrange(point, "d (b n)-> b n d", b=bs)[:, :, :3]
532+
return point
533+
534+
def __call__(self, data):
535+
d: Dict = dict(data)
536+
for key_label in self.label_names.keys():
537+
points = d.get(key_label, [])
538+
if len(points) < 1:
539+
continue
540+
reoriented_points = self.transform_points(
541+
np.array(points)[None],
542+
np.linalg.inv(d[self.ref_image].meta["affine"].numpy()) @ d[self.ref_image].meta["original_affine"],
543+
)
544+
d[key_label] = reoriented_points[0]
545+
return d
546+
547+
514548
def get_guidance_tensor_for_key_label(data, key_label, device) -> torch.Tensor:
515549
"""Makes sure the guidance is in a tensor format."""
516550
tmp_gui = data.get(key_label, torch.tensor([], dtype=torch.int32, device=device))

0 commit comments

Comments
 (0)