80 lines
2.8 KiB
Python
80 lines
2.8 KiB
Python
import pytest
|
|
import numpy as np
|
|
|
|
from skimage._shared.testing import assert_array_equal
|
|
from skimage import data
|
|
from skimage.feature import BRIEF, corner_peaks, corner_harris
|
|
from skimage._shared import testing
|
|
|
|
|
|
def test_color_image_unsupported_error():
|
|
"""Brief descriptors can be evaluated on gray-scale images only."""
|
|
img = np.zeros((20, 20, 3))
|
|
keypoints = np.asarray([[7, 5], [11, 13]])
|
|
with testing.raises(ValueError):
|
|
BRIEF().extract(img, keypoints)
|
|
|
|
|
|
@pytest.mark.parametrize('dtype', ['float32', 'float64', 'uint8', 'int'])
|
|
def test_normal_mode(dtype):
|
|
"""Verify the computed BRIEF descriptors with expected for normal mode."""
|
|
img = data.coins().astype(dtype)
|
|
|
|
keypoints = corner_peaks(corner_harris(img), min_distance=5,
|
|
threshold_abs=0, threshold_rel=0.1)
|
|
|
|
extractor = BRIEF(descriptor_size=8, sigma=2)
|
|
|
|
extractor.extract(img, keypoints[:8])
|
|
|
|
expected = np.array([[1, 0, 1, 0, 0, 1, 0, 1],
|
|
[1, 1, 1, 0, 1, 0, 1, 1],
|
|
[1, 0, 1, 0, 0, 1, 0, 1],
|
|
[0, 1, 0, 0, 1, 0, 1, 0],
|
|
[1, 1, 1, 0, 0, 0, 1, 1],
|
|
[1, 1, 1, 0, 1, 1, 1, 1],
|
|
[1, 0, 1, 0, 0, 1, 0, 1],
|
|
[0, 0, 0, 0, 0, 1, 0, 0]], dtype=bool)
|
|
|
|
assert_array_equal(extractor.descriptors, expected)
|
|
|
|
|
|
@pytest.mark.parametrize('dtype', ['float32', 'float64', 'uint8', 'int'])
|
|
def test_uniform_mode(dtype):
|
|
"""Verify the computed BRIEF descriptors with expected for uniform mode."""
|
|
img = data.coins().astype(dtype)
|
|
|
|
keypoints = corner_peaks(corner_harris(img), min_distance=5,
|
|
threshold_abs=0, threshold_rel=0.1)
|
|
|
|
extractor = BRIEF(descriptor_size=8, sigma=2, mode='uniform')
|
|
|
|
extractor.extract(img, keypoints[:8])
|
|
|
|
expected = np.array([[1, 1, 0, 0, 0, 0, 0, 0],
|
|
[1, 1, 1, 0, 0, 1, 0, 0],
|
|
[1, 1, 0, 0, 1, 0, 0, 0],
|
|
[0, 0, 0, 1, 1, 1, 1, 1],
|
|
[1, 1, 1, 0, 0, 1, 0, 0],
|
|
[1, 1, 1, 1, 0, 1, 0, 0],
|
|
[1, 1, 0, 0, 0, 1, 0, 0],
|
|
[0, 1, 1, 1, 0, 1, 1, 1]], dtype=bool)
|
|
|
|
assert_array_equal(extractor.descriptors, expected)
|
|
|
|
|
|
def test_unsupported_mode():
|
|
with testing.raises(ValueError):
|
|
BRIEF(mode='foobar')
|
|
|
|
|
|
@pytest.mark.parametrize('dtype', ['float32', 'float64', 'uint8', 'int'])
|
|
def test_border(dtype):
|
|
img = np.zeros((100, 100), dtype=dtype)
|
|
keypoints = np.array([[1, 1], [20, 20], [50, 50], [80, 80]])
|
|
|
|
extractor = BRIEF(patch_size=41)
|
|
extractor.extract(img, keypoints)
|
|
|
|
assert extractor.descriptors.shape[0] == 3
|
|
assert_array_equal(extractor.mask, (False, True, True, True))
|