question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Please add another interpolation mode for NiftiSaver to avoid ziazag pattern caused by 'nearest'

See original GitHub issue

Is your feature request related to a problem? Please describe. In the current NiftiSaver, there are only two interpolation modes: “nereast” and “bilinear”. It is not enough. Detailed explanication as follows.

If I have an lung CT image with shape (1024, 512, 512). To do lung or lobe segmentation, I need to down sample the original CT image to a smaller size (256, 256, 256). So the resample factors are (0.25, 0.5, 0.5). After I finish the model training, the predicted lung or lobe segmentation needs to be up-sampled to the original shape during inference. If I use “bilinear” mode for NiftiSaver, some zigzag pattern would appear along the edge of lung or lobe.

Describe the solution you’d like Using current MONAI, I came up with several possible solutions to avoid the zigzag pattern in NiftiSaver :

  1. Use “bilinear” mode in NiftiSaver at first, and then use a threshold of 0.5 to binarize the results. However this method only applies to binary segmentation tasks, like lung segmentation. In multi-label segmentation, there is not a proper threshold for the whole image.
  2. I can use “nearest” mode at first to get the output with zigzag pattern. Then use some smooth algorithms to remove the zigzag pattern.

I do not have a satisfied solution in current MONAI. I hope NiftiSaver can have a mode “bilinear2nearest”. In this mode, the NiftiSaver will:

# In a n-label image segmentation
1. apply `argmax` to prediction, get the discreted masks.
2. apply `on_hot_encode` to the discreted masks, to get `n` channels of binary masks.
3. apply `bilinear` interpolation mode to eac channel of binary mask, get `n` channels of masks of original size.
4. apply `threshold=0.5` to all channels, get `n` channels of binary masks.
5. apply `on_hot_decode` to get the final n-label mask.

I have implementated this workflow in my own code, and it works well. I hope MONAI can also add this feature to NiftiSaver.

Note: The zigzag pattern matters especially when the interpolation factor is far from 1.

Note: this initial idea was implementated by myself these days and this idea can not remove zigzag pattern. So I followed [#3178 ], changed his Gaussian filter to Mean filter, and then got satisfied results. More details were shown bellow.

Issue Analytics

  • State:closed
  • Created 2 years ago
  • Comments:7 (3 by maintainers)

github_iconTop GitHub Comments

1reaction
Jingnan-Jiacommented, Mar 22, 2022

However, now I am not sure if we should add this feature to MONAI. Because it is not easy to select a good smooth hyper parameter or threshold for different masks with different resolutions.

0reactions
wylicommented, Oct 5, 2022

closing this in favour of https://github.com/Project-MONAI/MONAI/issues/3333 and https://github.com/Project-MONAI/MONAI/issues/5264

NiftiSaver is also deprecated, the current preferred way is to have a postprocessing transform sequence:

https://github.com/Project-MONAI/tutorials/blob/8abcbc62c704af0bb22bedba617ae914c7802b97/modules/engines/unet_evaluation_dict.py#L89-L96

val_post_transforms = Compose(
    [
        EnsureTyped(keys="pred"),
        Activationsd(keys="pred", sigmoid=True),
        AsDiscreted(keys="pred", threshold=0.5),
        KeepLargestConnectedComponentd(keys="pred", applied_labels=[1]),
        SaveImaged(keys="pred", resample=False, output_dir="./runs/")
    ]
)
Read more comments on GitHub >

github_iconTop Results From Across the Web

Data — MONAI 1.1.0 Documentation
Load common 2D image format (supports PNG, JPG, BMP) file or files from provided path. Parameters. converter ( Optional [ Callable ]) –...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found