DOC: add visual example of edge modes

This commit is contained in:
Gregory R. Lee
2015-08-13 23:39:53 -04:00
parent a36ab880fc
commit c5a735420f
3 changed files with 65 additions and 2 deletions
+36
View File
@@ -0,0 +1,36 @@
"""
=========================
Interpolation: Edge Modes
=========================
This example illustrates the different edge modes available during
interpolation in routines such as ``skimage.transform.rescale`` and
``skimage.transform.resize``.
"""
from skimage._shared._interpolation_test import extend_image
import skimage.data
import matplotlib.pyplot as plt
import numpy as np
img = np.zeros((9, 9))
img[:8, :8] += 1
img[:4, :4] += 1
img[:2, :2] += 1
img[:1, :1] += 2
modes = ['constant', 'nearest', 'wrap', 'reflect']
fig, axes = plt.subplots(1, 4, figsize=(15, 5))
for n, mode in enumerate(modes):
img_extended = extend_image(img, pad=img.shape[0], mode=mode)
axes[n].imshow(img_extended, cmap=plt.cm.gray, interpolation='nearest')
axes[n].plot([8.5, 8.5], [8.5, 17.5], 'y--', linewidth=0.5)
axes[n].plot([17.5, 17.5], [8.5, 17.5], 'y--', linewidth=0.5)
axes[n].plot([8.5, 17.5], [8.5, 8.5], 'y--', linewidth=0.5)
axes[n].plot([8.5, 17.5], [17.5, 17.5], 'y--', linewidth=0.5)
axes[n].set_axis_off()
axes[n].set_aspect('equal')
axes[n].set_title(mode)
plt.tight_layout()
plt.show()
+27 -1
View File
@@ -1,5 +1,31 @@
from interpolation cimport coord_map as _coord_map
from interpolation cimport get_pixel2d
import numpy as np
cimport numpy as cnp
def coord_map(Py_ssize_t dim, long coord, mode):
""" interpolation.coord_map python wrapper """
cdef char mode_c = ord(mode[0].upper())
return _coord_map(dim, coord, mode_c)
return _coord_map(dim, coord, mode_c)
def extend_image(image, pad=10, mode='C', cval=0):
""" can be used to verify proper get_pixel2d behavior. """
cdef:
Py_ssize_t rows = image.shape[0]
Py_ssize_t cols = image.shape[1]
long ro, co
char mode_c = ord(mode[0].upper())
image = np.ascontiguousarray(image.astype(np.float64))
output_shape = np.asarray(image.shape) + 2*pad
image_out = np.zeros(output_shape, dtype=image.dtype)
for r in range(-pad, rows+pad):
for c in range(-pad, cols+pad):
ro = r + pad
co = c + pad
image_out[ro, co] = get_pixel2d(<double*> cnp.PyArray_DATA(image),
rows, cols, <long> r, <long> c,
mode_c, <double> cval)
return image_out
+2 -1
View File
@@ -1,6 +1,7 @@
from skimage._shared._interpolation_test import coord_map
from numpy.testing import assert_array_equal
def test_coord_map():
reflect = [coord_map(4, n, 'R') for n in range(-6, 6)]
@@ -16,4 +17,4 @@ def test_coord_map():
assert_array_equal(nearest, expected_neareset)
other = [coord_map(4, n, 'undefined') for n in range(-6, 6)]
assert_array_equal(other, list(range(-6, 6)))
assert_array_equal(other, list(range(-6, 6)))