Commit 4f0f8a5c authored by André Anjos's avatar André Anjos 💬

Use scipy directly where possible

parent b9af7a82
#!/usr/bin/env python
# vim: set fileencoding=utf-8 :
import numpy
import scipy.signal
import bob.sp
import bob.core
def imfilter(a, b):
"""Applies a 2D filtering between images
This implementation was created to work similarly like the Matlab one when
``boundary = replicate``. It filters the image ``a`` with the filter ``b`` by
applying it over an extended version of ``a``, expanded of ``b.shape`` on the
right and bottom, by repeating the values on ``a``'s borders.
The filter is then applied to the image considering only the ``valid`` range
with :py:func:`scipy.signal.convolve2d`.
a (numpy.ndarray): A 2-dimensional :py:class:`numpy.ndarray` which
represents the image to be filtered. The dtype of the array is supposed
to be 64-bit floats. You can also pass an 8-bit unsigned integer array,
loaded from a file (for example). In this case it will be scaled as with
:py:func:`bob.core.convert` and the range reset to ``[0.0, 1.0]``.
b (numpy.ndarray): A 64-bit float 2-dimensional :py:class:`numpy.ndarray`
which represents the filter to be applied to the image. The input filter
has to be rotated by 180 degrees as we use
:py:func:`scipy.signal.convolve2d` to apply it.
if a.dtype == numpy.uint8:
a = bob.core.convert(a, numpy.float64, (0,1))
shape = (a.shape[0] + b.shape[0] - 1, a.shape[1] + b.shape[1] - 1)
a_ext = numpy.ndarray(shape=shape, dtype=numpy.float64)
bob.sp.extrapolate_nearest(a, a_ext)
return scipy.signal.convolve2d(a_ext, b, 'valid')
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment