54 lines
1.7 KiB
Python
54 lines
1.7 KiB
Python
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
|
|
from scipy import ndimage
|
|
|
|
img = np.array([-2, -1, 0, 1, 2], float)
|
|
x = np.linspace(-2, 6, num=1000)
|
|
|
|
modes = ['constant', 'grid-constant', 'nearest', 'reflect', 'mirror', 'wrap',
|
|
'grid-wrap']
|
|
fig, axes = plt.subplots(len(modes), 3, figsize=(11, 8), sharex=True,
|
|
sharey=True)
|
|
|
|
|
|
for mode, (ax0, ax1, ax2) in zip(modes, axes):
|
|
|
|
y = ndimage.map_coordinates(img, [x], order=0, mode=mode)
|
|
ax0.scatter(np.arange(img.size), img)
|
|
ax0.plot(x, y, '-')
|
|
ax0.set_title(f'mode={mode}, order=0')
|
|
|
|
y2 = ndimage.map_coordinates(img, [x], order=1, mode=mode)
|
|
ax1.scatter(np.arange(img.size), img)
|
|
ax1.plot(x, y2, '-')
|
|
ax1.set_title(f'mode={mode}, order=1')
|
|
|
|
y3 = ndimage.map_coordinates(img, [x], order=3, mode=mode)
|
|
ax2.scatter(np.arange(img.size), img)
|
|
ax2.plot(x, y3, '-')
|
|
ax2.set_title(f'mode={mode}, order=3')
|
|
|
|
sz = len(img)
|
|
for ax in (ax0, ax1, ax2):
|
|
if mode in ['grid-wrap', 'reflect']:
|
|
ax.plot([-0.5, -0.5], [-2.5, 2.5], 'k--')
|
|
ax.plot([sz - 0.5, sz - 0.5], [-2.5, 2.5], 'k--')
|
|
elif mode in ['wrap', 'mirror']:
|
|
ax.plot([0, 0], [-2.5, 2.5], 'k--')
|
|
ax.plot([sz - 1, sz - 1], [-2.5, 2.5], 'k--')
|
|
|
|
if mode != 'constant':
|
|
for xx in range(int(x[0]), int(x[-1] + 1)):
|
|
if (xx < 0) or (xx > img.size - 1):
|
|
idx = np.argmin(np.abs(x - xx))
|
|
|
|
for y_vals, ax in zip((y, y2, y3), (ax0, ax1, ax2)):
|
|
ax.scatter(
|
|
[x[idx]], [y_vals[idx]], facecolors='none',
|
|
edgecolor='#0343df', marker='o'
|
|
)
|
|
|
|
plt.tight_layout()
|
|
plt.show()
|