Add function to scale images

This commit is contained in:
Johannes Schönberger
2012-10-05 06:18:58 +02:00
parent 3126399eeb
commit c2d308c21a
3 changed files with 54 additions and 2 deletions
+1 -1
View File
@@ -6,6 +6,6 @@ from ._geometric import (warp, warp_coords, estimate_transform,
SimilarityTransform, AffineTransform,
ProjectiveTransform, PolynomialTransform,
PiecewiseAffineTransform)
from ._warps import swirl, homography, resize, rotate
from ._warps import swirl, homography, resize, rotate, scale
from .pyramids import (pyramid_reduce, pyramid_expand,
pyramid_gaussian, pyramid_laplacian)
+43
View File
@@ -52,6 +52,49 @@ def resize(image, output_shape, order=1, mode='constant', cval=0.):
mode=mode, cval=cval)
def scale(image, scale, order=1, mode='constant', cval=0.):
"""Scale image.
Parameters
----------
image : ndarray
Input image.
scale : {float, tuple of floats}
Scale factors. Separate scale factors can be defined as
`(row_scale, col_scale)`.
Returns
-------
scaled : ndarray
Scaled version of the input.
Other parameters
----------------
order : int
Order of splines used in interpolation. See
`scipy.ndimage.map_coordinates` for detail.
mode : string
How to handle values outside the image borders. See
`scipy.ndimage.map_coordinates` for detail.
cval : string
Used in conjunction with mode 'constant', the value outside
the image boundaries.
"""
try:
rscale, cscale = scale
except TypeError:
rscale = cscale = scale
orig_rows, orig_cols = image.shape[0], image.shape[1]
rows = np.round(rscale * orig_rows)
cols = np.round(cscale * orig_cols)
output_shape = (rows, cols)
return resize(image, output_shape, order=order, mode=mode, cval=cval)
def rotate(image, angle, resize=False, order=1, mode='constant', cval=0.):
"""Rotate image by a certain angle around its center.
+10 -1
View File
@@ -2,7 +2,7 @@ from numpy.testing import assert_array_almost_equal, run_module_suite
import numpy as np
from scipy.ndimage import map_coordinates
from skimage.transform import (warp, warp_coords, rotate, resize,
from skimage.transform import (warp, warp_coords, rotate, resize, scale,
AffineTransform,
ProjectiveTransform,
SimilarityTransform, homography)
@@ -94,6 +94,15 @@ def test_resize():
assert_array_almost_equal(resized, ref)
def test_scale():
x = np.zeros((5, 5), dtype=np.double)
x[1, 1] = 1
scaled = scale(x, 2, order=0)
ref = np.zeros((10, 10))
ref[2:4, 2:4] = 1
assert_array_almost_equal(scaled, ref)
def test_swirl():
image = img_as_float(data.checkerboard())