57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
import numpy as np
|
|
from scipy.signal import get_window
|
|
from skimage.filters import window
|
|
from skimage._shared.testing import parametrize, raises
|
|
|
|
|
|
@parametrize("size", [5, 6])
|
|
@parametrize("ndim", [2, 3, 4])
|
|
def test_window_shape_isotropic(size, ndim):
|
|
w = window('hann', (size,)*ndim)
|
|
assert w.ndim == ndim
|
|
assert w.shape[1:] == w.shape[:-1]
|
|
for i in range(1, ndim-1):
|
|
assert np.allclose(w.sum(axis=0), w.sum(axis=i))
|
|
|
|
|
|
@parametrize("shape", [(8, 16), (16, 8), (2, 3, 4)])
|
|
def test_window_shape_anisotropic(shape):
|
|
w = window('hann', shape)
|
|
assert w.shape == shape
|
|
|
|
|
|
@parametrize("shape", [[17, 33], [17, 97]])
|
|
def test_window_anisotropic_amplitude(shape):
|
|
w = window(('tukey', 0.8), shape)
|
|
|
|
# The shape is stretched to give approximately the same range on each axis,
|
|
# so the center profile should have a similar mean value.
|
|
profile_w = w[w.shape[0]//2, :]
|
|
profile_h = w[:, w.shape[1]//2]
|
|
assert abs(profile_w.mean() - profile_h.mean()) < .01
|
|
|
|
|
|
@parametrize("wintype",
|
|
[16,
|
|
'triang',
|
|
('tukey', 0.8)])
|
|
def test_window_type(wintype):
|
|
w = window(wintype, (9, 9))
|
|
assert w.ndim == 2
|
|
assert w.shape[1:] == w.shape[:-1]
|
|
assert np.allclose(w.sum(axis=0), w.sum(axis=1))
|
|
|
|
|
|
@parametrize("size", [10, 11])
|
|
def test_window_1d(size):
|
|
w = window('hann', size)
|
|
w1 = get_window('hann', size, fftbins=False)
|
|
assert np.allclose(w, w1)
|
|
|
|
|
|
def test_window_invalid_shape():
|
|
with raises(ValueError):
|
|
window(10, shape=(-5, 10))
|
|
with raises(ValueError):
|
|
window(10, shape=(1.3, 2.0))
|