Skip to content

Commit 894068a

Browse files
Fix the computation of the crop region end index (#7825)
Fixes #7824. ### Description The main impact of the PR is to change the computation of the end index for the extended box that `RandCropBoxByPosNegLabeld` uses to sample foreground centers in when `self.whole_box = True`. The problem and the fix is described in detail in the issue. The PR furthermore makes a minor change to the computation of the start index of the extended box to ensure a center chosen at the margin will fully contain the original box. I have not run the full test suite, but I have checked that I do not break the relevant unit-test: test_rand_crop_by_pos_neg_labeld.py ### Types of changes <!--- Put an `x` in all the boxes that apply, and remove the not applicable items --> - [x] Non-breaking change (fix or new feature that would not break existing functionality). - [ ] Breaking change (fix or new feature that would cause existing functionality to change). - [ ] New tests added to cover the changes. - [ ] Integration tests passed locally by running `./runtests.sh -f -u --net --coverage`. - [ ] Quick tests passed locally by running `./runtests.sh --quick --unittests --disttests`. - [ ] In-line docstrings updated. - [ ] Documentation updated, tested `make html` command in the `docs/` folder. Signed-off-by: Anders Mollgaard <anders.mollgaard@gmail.com> Co-authored-by: Eric Kerfoot <17726042+ericspod@users.noreply.github.com>
1 parent 1e3d29b commit 894068a

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

monai/apps/detection/transforms/dictionary.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1137,11 +1137,14 @@ def generate_fg_center_boxes_np(self, boxes: NdarrayOrTensor, image_size: Sequen
11371137
extended_boxes[:, axis] = boxes_start[:, axis] - self.spatial_size[axis] // 2 + 1
11381138
extended_boxes[:, axis + spatial_dims] = boxes_stop[:, axis] + self.spatial_size[axis] // 2 - 1
11391139
else:
1140+
# the cropper will extend an additional pixel to the left side when the size is even
1141+
radius_left = self.spatial_size[axis] // 2
1142+
radius_right = self.spatial_size[axis] - radius_left - 1 # we subtract 1 for the center voxel
11401143
# extended box start
1141-
extended_boxes[:, axis] = boxes_stop[:, axis] - self.spatial_size[axis] // 2 - 1
1144+
extended_boxes[:, axis] = boxes_stop[:, axis] - radius_right
11421145
extended_boxes[:, axis] = np.minimum(extended_boxes[:, axis], boxes_start[:, axis])
11431146
# extended box stop
1144-
extended_boxes[:, axis + spatial_dims] = extended_boxes[:, axis] + self.spatial_size[axis] // 2
1147+
extended_boxes[:, axis + spatial_dims] = boxes_start[:, axis] + radius_left
11451148
extended_boxes[:, axis + spatial_dims] = np.maximum(
11461149
extended_boxes[:, axis + spatial_dims], boxes_stop[:, axis]
11471150
)

0 commit comments

Comments
 (0)