From 89d703ca4678611f21456b2a3a5bf912cb80a1c5 Mon Sep 17 00:00:00 2001 From: Stefan van der Walt Date: Mon, 14 Oct 2013 12:58:27 +0200 Subject: [PATCH] Pre-allocate memory for convolution and re-use for output, if no user-override specified. --- skimage/morphology/binary.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/skimage/morphology/binary.py b/skimage/morphology/binary.py index efd98ea1..fe91f148 100644 --- a/skimage/morphology/binary.py +++ b/skimage/morphology/binary.py @@ -37,10 +37,11 @@ def binary_erosion(image, selem, out=None): else: binary = (image > 0).astype(np.intp) - conv = ndimage.convolve(binary, selem, mode='constant', cval=1) + conv = np.empty_like(image, dtype=np.intp) + ndimage.convolve(binary, selem, mode='constant', cval=1, output=conv) if out is None: - out = np.zeros_like(binary, dtype=bool) + out = conv return np.equal(conv, selem_sum, out=out) @@ -77,10 +78,11 @@ def binary_dilation(image, selem, out=None): else: binary = (image > 0).astype(np.intp) - conv = ndimage.convolve(binary, selem, mode='constant', cval=0) + conv = np.empty_like(image, dtype=np.intp) + ndimage.convolve(binary, selem, mode='constant', cval=0, output=conv) if out is None: - out = np.zeros_like(binary, dtype=bool) + out = conv return np.not_equal(conv, 0, out=out)