You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
After I tried to rotate my 3D matrix in shape of 512 * 512 * 10 on z plane, where on each img[:, :, i] we should just expect to observe rotation and nothing else. But the last layer img[:, :, 9] lost all the info. So it would generate 9 slices with the original(actually, it is interpolated) info and the 10th be a constant plane if the mode is "constant".
The issue behind this
Here is where I think triggered this issue:
In the functionals.py file, In your rotate3D, you called generate_coords which maps the center of the 3D matrix to be (0, 0, 0), using
Then in your recenter_coords function which maps the top left peak of the 3D matrix to be (0, 0, 0), using
coords[d] += int(np.round(coords.shape[d+1]/2))
this -1 difference making the z coords for img[:, :, 9] change from 9 to 9.5. So it got interpolated, which is not supposed to happen.
Details:
volumentations: I cloned your code to my laptop because of the resize issue. So in the import below, I imported the local volumentations.
python: 3.7.4
numpy: 1.21.5
How to regenerate the situation:
from vp.volumentations import * # where I set the code of your 3D data aug code
import numpy as np
import random
import matplotlib.pyplot as plt
# generate some pattern
img = np.arange(512)
img = np.repeat(img, 512).reshape(512, 512)
img = np.repeat(img[..., np.newaxis], 10, axis=-1)
print("The shape of image is :", img.shape) # 512, 512, 10
# just rotate the 512*512*512 matrix on the z plane
def get_augmentation(patch_size):
return Compose([
Rotate((0, 0), (0, 0), (10, 10), p=1, value=1, interpolation=1),
], p=1.0)
# make the rotation, just on z plane. so z coord remains. and x, y coords rotate.
aug = get_augmentation((512, 512, 10))
np.random.seed(1234)
random.seed(1234)
data = {"image": img}
augData = aug(**data)
augImg = augData["image"]
# visualize the result
mats = [img, augImg]
modes = ["Original", "After Rotation"]
for i in range(2):
fig, axes = plt.subplots(2, 5, figsize=(8, 3))
mat = mats[i]
mode = modes[i]
for j in range(2):
for k in range(5):
ax = axes[j, k]
ax.imshow(mat[:, :, j * 5 + k], cmap="hot", interpolation="none")
ax.axis("off")
ax.set_title(f"slice {j * 5 + k} -- {mode}", fontsize=9)
plt.tight_layout()
plt.show()
BTW I like how u code and thanks for sharing.
The text was updated successfully, but these errors were encountered:
Problem description
After I tried to rotate my 3D matrix in shape of 512 * 512 * 10 on z plane, where on each
img[:, :, i]
we should just expect to observe rotation and nothing else. But the last layer img[:, :, 9] lost all the info. So it would generate 9 slices with the original(actually, it is interpolated) info and the 10th be a constant plane if the mode is "constant".The issue behind this
Here is where I think triggered this issue:
In the functionals.py file, In your rotate3D, you called
generate_coords
which maps the center of the 3D matrix to be (0, 0, 0), usingThen in your
recenter_coords
function which maps the top left peak of the 3D matrix to be (0, 0, 0), usingthis -1 difference making the z coords for
img[:, :, 9]
change from 9 to 9.5. So it got interpolated, which is not supposed to happen.Details:
volumentations: I cloned your code to my laptop because of the resize issue. So in the import below, I imported the local volumentations.
python: 3.7.4
numpy: 1.21.5
How to regenerate the situation:
BTW I like how u code and thanks for sharing.
The text was updated successfully, but these errors were encountered: