Skip to content

Refactor morphological functions as transform (or transform utils) #8003

Closed

Description

@mingxin-zheng

Describe the bug

The original discussion was in PR comment:
#7893 (comment)

Will a refactor of the erodeand dilate functions make it easier in different applications/networks/pre-processing?

https://github.com/Project-MONAI/MONAI/blob/dev/monai/apps/generation/maisi/utils/morphological_ops.py

Expected behavior

class Erode3D(Transform):
   ...

# erode with a 3D filter when needed
input_img = torch.rand(b, l, h, d)
eroder = Erode3D(...)
output = eroder(input_img) 

Activity

  1. mingxin-zheng commented on Aug 8, 2024

    @mingxin-zheng
    CollaboratorAuthor

    Since this operation is used by MAISI and VISTA3D both, do you think it will help? @heyufan1995 @Can-Zhao @guopengf ?

  2. changed the title [-]Refactor morphological functions as transform *or transform utils)[/-] [+]Refactor morphological functions as transform (or transform utils)[/+] on Aug 8, 2024
  3. KumoLiu commented on Aug 8, 2024

    @KumoLiu
    Contributor
  4. ericspod commented on Aug 13, 2024

    @ericspod
    Member

    We should look at what other requirements there are but I think it would make sense to have a morphological operations transform to encapsulate them.

  5. aylward commented on Aug 13, 2024

    @aylward
    Collaborator

    +1 for making them transforms.

    Should MONAI use ITK's / SimpleITK's implementations? They offer a multitude of options: binary, grayscale, open, close, generalized - and all are multi-threaded, I believe some contain logic to specifically to only perform convolution only at an object's edges to significantly speed results compared to full convolution, and other developers have created GPU/CUDA accelerated versions but they aren't in ITK by default.

  6. ericspod commented on Aug 13, 2024

    @ericspod
    Member

    We should look into what the implementation would look like, it's definitely possible to at least support using ITK implementations, though the virtue of what was added with MAISI was that it is only Pytorch. We could support using ITK if present but then default to Pytorch implementations if not.

  7. qic999 commented on Aug 13, 2024

    @qic999

    I meet the error ModuleNotFoundError: No module named 'monai.transforms.morphological_ops'

  8. KumoLiu commented on Aug 13, 2024

    @KumoLiu
    Contributor

    I meet the error ModuleNotFoundError: No module named 'monai.transforms.morphological_ops'

    Hi @qic999, it should be monai.transforms.utils_morphological_ops.

  9. qic999 commented on Aug 13, 2024

    @qic999

    I meet the error ModuleNotFoundError: No module named 'monai.transforms.morphological_ops'

    Hi @qic999, it should be monai.transforms.utils_morphological_ops.

    OK. Thanks. This error occurs on line 24 of https://github.com/Project-MONAI/tutorials/tree/main/generation/maisi/scripts/utils.py.

  10. KumoLiu commented on Aug 13, 2024

    @KumoLiu
    Contributor

    OK. Thanks. This error occurs on line 24 of https://github.com/Project-MONAI/tutorials/tree/main/generation/maisi/scripts/utils.py.

    Thanks, will fix it in the following prs.

  11. qic999 commented on Aug 13, 2024

    @qic999

    OK. Thanks. This error occurs on line 24 of https://github.com/Project-MONAI/tutorials/tree/main/generation/maisi/scripts/utils.py.

    Thanks, will fix it in the following prs.

    new error: ModuleNotFoundError: No module named 'monai.transforms.utils_morphological_ops'
    my env is
    image

  12. mingxin-zheng commented on Aug 14, 2024

    @mingxin-zheng
    CollaboratorAuthor

    Hi @aylward , the current implementations of erode/dilate are basically padding and conv2d/3d with torch

    def get_morphological_filter_result_t(mask_t: Tensor, filter_size: int | Sequence[int], pad_value: float) -> Tensor:

    Currently the usage of erode/dilate needs to be on GPUs, and it will be more work to do if we deviate from the torch implementation.

    In my opinion, the role of itk is more like another backend on top of numpy and torch. So my gut feeling of ITK integration is that a wrapper that can bridge torch and itk/simple-itk, but I could be wrong here.

  13. mingxin-zheng commented on Aug 14, 2024

    @mingxin-zheng
    CollaboratorAuthor

    OK. Thanks. This error occurs on line 24 of https://github.com/Project-MONAI/tutorials/tree/main/generation/maisi/scripts/utils.py.

    Thanks, will fix it in the following prs.

    new error: ModuleNotFoundError: No module named 'monai.transforms.utils_morphological_ops' my env is image

    Hi @qic999 , you'll need the dev version or the weekly build. The morphological operations are added recently and they are not available in monai 1.3.2, which is the version you are using. Check this page for installation guide:

    https://docs.monai.io/en/stable/installation.html

    If my comment above can't resolve your issue, please open a new issue so that the team can better support you. I would like to keep this thread simply focus the implementation plan. Thank you!

  14. mingxin-zheng commented on Apr 4, 2025

    @mingxin-zheng
    CollaboratorAuthor

    Closing this ticket as there are no similar requests, and I am using the function calls for the morph operation right now in my work.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions