Skip to content

Commit

Permalink
Merge remote-tracking branch 'joshuacwnewton/jn/1951-clarify-docs-sim…
Browse files Browse the repository at this point in the history
…pleitk-axis-order'
  • Loading branch information
FabianIsensee committed Mar 27, 2024
2 parents 6ef3476 + e9ea09f commit 927d201
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 1 deletion.
5 changes: 5 additions & 0 deletions nnunetv2/inference/predict_from_raw_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,11 @@ def predict_single_npy_array(self, input_image: np.ndarray, image_properties: di
output_file_truncated: str = None,
save_or_return_probabilities: bool = False):
"""
WARNING: SLOW. ONLY USE THIS IF YOU CANNOT GIVE NNUNET MULTIPLE IMAGES AT ONCE FOR SOME REASON.
input_image must use SimpleITK axis ordering!
(NB: if array comes from a nibabel-loaded image, you must swap the
axes of both the array *and* the spacing from [x,y,z] to [z,y,x]!)
image_properties must only have a 'spacing' key!
"""
ppa = PreprocessAdapterFromNpy([input_image], [segmentation_previous_stage], [image_properties],
Expand Down
9 changes: 8 additions & 1 deletion nnunetv2/inference/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ cons:

tldr:
- you give one image as npy array
- array must use [SimpleITK axis order](http://insightsoftwareconsortium.github.io/SimpleITK-Notebooks/Python_html/03_Image_Details.html#Conversion-between-numpy-and-SimpleITK) (see examples below)
- everything is done in the main process: preprocessing, prediction, resampling, (export)
- no interlacing, slowest variant!
- ONLY USE THIS IF YOU CANNOT GIVE NNUNET MULTIPLE IMAGES AT ONCE FOR SOME REASON
Expand All @@ -160,9 +161,15 @@ cons:
- never the right choice unless you can only give a single image at a time to nnU-Net

```python
# predict a single numpy array
# predict a single numpy array (SimpleITK)
img, props = SimpleITKIO().read_images([join(nnUNet_raw, 'Dataset003_Liver/imagesTr/liver_63_0000.nii.gz')])
ret = predictor.predict_single_npy_array(img, props, None, None, False)

# predict a single numpy array (Nibabel with axes swapped)
img_nii = nib.load('Dataset003_Liver/imagesTr/liver_63_0000.nii.gz')
img = np.asanyarray(img_nii.dataobj).transpose([2, 1, 0]) # reverse axis order to match SITK
props = {'spacing': img_nii.header.get_zooms()[::-1]} # reverse axis order to match SITK
ret = predictor.predict_single_npy_array(img, props, None, None, False)
```

## Predicting with a custom data iterator
Expand Down

0 comments on commit 927d201

Please sign in to comment.