Clearing docs and making feature.util

This commit is contained in:
Ankit Agrawal
2013-07-03 23:19:43 +08:00
parent c032408080
commit 3dcd24e6f3
3 changed files with 72 additions and 59 deletions
+3 -2
View File
@@ -7,7 +7,7 @@ from .corner import (corner_kitchen_rosenfeld, corner_harris, corner_shi_tomasi,
from .corner_cy import corner_moravec
from .template import match_template
from ._brief import brief
from .util import hamming_distance
__all__ = ['daisy',
'hog',
@@ -23,4 +23,5 @@ __all__ = ['daisy',
'corner_peaks',
'corner_moravec',
'match_template',
'brief']
'brief',
'hamming_distance']
+19 -57
View File
@@ -1,33 +1,20 @@
import numpy as np
from scipy.ndimage.filters import gaussian_filter
from scipy.spatial.distance import hamming
from ..color import rgb2gray
from ..util import img_as_float
from .util import _remove_border_keypoints
from ._brief_cy import _brief_loop
def _remove_border_keypoints(image, keypoints, dist):
width = image.shape[0]
height = image.shape[1]
keypoints = keypoints[(dist < keypoints[:, 0])
& (keypoints[:, 0] < width - dist)
& (dist < keypoints[:, 1])
& (keypoints[:, 1] < height - dist)]
return keypoints
def brief(image, keypoints, descriptor_size=256, mode='normal', patch_size=49,
sample_seed=1):
sample_seed=1, variance=2, return_keypoints=False):
"""Extract BRIEF Descriptor about given keypoints for a given image.
Parameters
----------
image : ndarray
image : 2D ndarray
Input image.
keypoints : (P, 2) ndarray
Array of keypoint locations.
@@ -42,13 +29,20 @@ def brief(image, keypoints, descriptor_size=256, mode='normal', patch_size=49,
the keypoints. Default is 49.
sample_seed : int
Seed for sampling the decision pixel-pairs. Default is 1.
return_keypoints : bool
If True, return the Q keypoints (after filtering out the border
keypoints) about which the descriptors are extracted. Default is False.
Returns
-------
descriptor : ndarray with dtype bool
2D ndarray of dimensions (no_of_keypoints, descriptor_size) with value
at an index (i, j) either being True or False representing the outcome
descriptors : (Q, descriptor_size) ndarray of dtype bool
2D ndarray of binary descriptors of size descriptor_size about Q
keypoints after filtering out border keypoints with value at an index
(i, j) either being True or False representing the outcome
of Intensity comparison about ith keypoint on jth decision pixel-pair.
keypoints : (Q, 2) ndarray
Keypoints after removing out those that are near border.
Returned only if return_keypoints is True.
References
----------
@@ -66,9 +60,9 @@ def brief(image, keypoints, descriptor_size=256, mode='normal', patch_size=49,
image = img_as_float(image)
# Gaussian Low pass filtering with variance 2 to alleviate noise
# Gaussian Low pass filtering to alleviate noise
# sensitivity
image = gaussian_filter(image, 2)
image = gaussian_filter(image, variance)
image = np.ascontiguousarray(image)
@@ -105,39 +99,7 @@ def brief(image, keypoints, descriptor_size=256, mode='normal', patch_size=49,
_brief_loop(image, descriptors.view(np.uint8), keypoints, pos1, pos2)
return descriptors
def hamming_distance(descriptor_1, descriptor_2):
"""A dissimilarity measure used for matching keypoints in different images
using binary feature descriptors like BRIEF etc.
Parameters
----------
descriptor_1 : ndarray with dtype bool
Binary feature descriptor for keypoints in the first image.
2D ndarray of dimensions (no_of_keypoints_in_image_1, descriptor_size)
with value at an index (i, j) either being True or False representing
the outcome of Intensity comparison about ith keypoint on jth decision
pixel-pair.
descriptor_2 : ndarray with dtype bool
Binary feature descriptor for keypoints in the second image.
2D ndarray of dimensions (no_of_keypoints_in_image_2, descriptor_size)
with value at an index (i, j) either being True or False representing
the outcome of Intensity comparison about ith keypoint on jth decision
pixel-pair.
Returns
-------
distance : ndarray
2D ndarray of dimensions (no_of_rows_in_descripto_1, no_of_rows_in_descripto_2)
with value at an index (i, j) between the range [0, 1] representing the
extent of dissimilarity between ith keypoint of in first image and jth
keypoint in second image.
"""
distance = np.zeros((len(descriptor_1), len(descriptor_2)), dtype=float)
for i in range(len(descriptor_1)):
for j in range(len(descriptor_2)):
distance[i, j] = hamming(descriptor_1[i][:], descriptor_2[j][:])
return distance
if return_keypoints:
return descriptors, keypoints
else:
return descriptors
+50
View File
@@ -0,0 +1,50 @@
import numpy as np
from scipy.spatial.distance import hamming
def _remove_border_keypoints(image, keypoints, dist):
"""Removes keypoints that are within dist pixels from the image border.
"""
width = image.shape[0]
height = image.shape[1]
keypoints = keypoints[(dist < keypoints[:, 0])
& (keypoints[:, 0] < width - dist)
& (dist < keypoints[:, 1])
& (keypoints[:, 1] < height - dist)]
return keypoints
def hamming_distance(descriptors1, descriptors2):
"""A dissimilarity measure used for matching keypoints in different images
using binary feature descriptors like BRIEF etc.
Parameters
----------
descriptors1 : (P1, D) array of dtype bool
Binary feature descriptors for keypoints in the first image.
2D ndarray with a binary descriptors of size D about P1 keypoints
with value at an index (i, j) either being True or False representing
the outcome of Intensity comparison about ith keypoint on jth decision
pixel-pair.
descriptors2 : (P2, D) array of dtype bool
Binary feature descriptors for keypoints in the second image.
2D ndarray with a binary descriptors of size D about P2 keypoints
with value at an index (i, j) either being True or False representing
the outcome of Intensity comparison about ith keypoint on jth decision
pixel-pair.
Returns
-------
distance : (P1, P2) array of dtype float
2D ndarray with value at an index (i, j) in the range [0, 1]
representing the extent of dissimilarity between ith keypoint of in
first image and jth keypoint in second image.
"""
distance = np.zeros((descriptors1.shape[0], descriptors2.shape[0]), dtype=float)
for i in range(descriptors1.shape[0]):
for j in range(descriptors2.shape[0]):
distance[i, j] = hamming(descriptors1[i, :], descriptors2[j, :])
return distance