[−][src]Struct opencv::line_descriptor::BinaryDescriptorMatcher
furnishes all functionalities for querying a dataset provided by user or internal to class (that user must, anyway, populate) on the model of @ref features2d_match
Once descriptors have been extracted from an image (both they represent lines and points), it becomes interesting to be able to match a descriptor with another one extracted from a different image and representing the same line or point, seen from a differente perspective or on a different scale. In reaching such goal, the main headache is designing an efficient search algorithm to associate a query descriptor to one extracted from a dataset. In the following, a matching modality based on Multi-Index Hashing (MiHashing) will be described.
Multi-Index Hashing
The theory described in this section is based on MIH . Given a dataset populated with binary codes, each code is indexed m times into m different hash tables, according to m substrings it has been divided into. Thus, given a query code, all the entries close to it at least in one substring are returned by search as neighbor candidates. Returned entries are then checked for validity by verifying that their full codes are not distant (in Hamming space) more than r bits from query code. In details, each binary code h composed of b bits is divided into m disjoint substrings , each with length or bits. Formally, when two codes h and g differ by at the most r bits, in at the least one of their m substrings they differ by at the most bits. In particular, when (where is the Hamming norm), there must exist a substring k (with ) such that
That means that if Hamming distance between each of the m substring is strictly greater than , then must be larger that r and that is a contradiction. If the codes in dataset are divided into m substrings, then m tables will be built. Given a query q with substrings , i-th hash table is searched for entries distant at the most from and a set of candidates is obtained. The union of sets is a superset of the r-neighbors of q. Then, last step of algorithm is computing the Hamming distance between q and each element in , deleting the codes that are distant more that r from q.
Implementations
impl BinaryDescriptorMatcher
[src]
pub fn as_raw_BinaryDescriptorMatcher(&self) -> *const c_void
[src]
pub fn as_raw_mut_BinaryDescriptorMatcher(&mut self) -> *mut c_void
[src]
impl BinaryDescriptorMatcher
[src]
pub fn create_binary_descriptor_matcher(
) -> Result<Ptr<BinaryDescriptorMatcher>>
[src]
) -> Result<Ptr<BinaryDescriptorMatcher>>
Create a BinaryDescriptorMatcher object and return a smart pointer to it.
pub fn default() -> Result<BinaryDescriptorMatcher>
[src]
Constructor.
The BinaryDescriptorMatcher constructed is able to store and manage 256-bits long entries.
Trait Implementations
impl AlgorithmTrait for BinaryDescriptorMatcher
[src]
pub fn as_raw_Algorithm(&self) -> *const c_void
[src]
pub fn as_raw_mut_Algorithm(&mut self) -> *mut c_void
[src]
pub fn clear(&mut self) -> Result<()>
[src]
pub fn write(&self, fs: &mut FileStorage) -> Result<()>
[src]
pub fn write_with_name(&self, fs: &Ptr<FileStorage>, name: &str) -> Result<()>
[src]
pub fn read(&mut self, fn_: &FileNode) -> Result<()>
[src]
pub fn empty(&self) -> Result<bool>
[src]
pub fn save(&self, filename: &str) -> Result<()>
[src]
pub fn get_default_name(&self) -> Result<String>
[src]
impl BinaryDescriptorMatcherTrait for BinaryDescriptorMatcher
[src]
pub fn as_raw_BinaryDescriptorMatcher(&self) -> *const c_void
[src]
pub fn as_raw_mut_BinaryDescriptorMatcher(&mut self) -> *mut c_void
[src]
pub fn match_(
&self,
query_descriptors: &Mat,
train_descriptors: &Mat,
matches: &mut Vector<DMatch>,
mask: &Mat
) -> Result<()>
[src]
&self,
query_descriptors: &Mat,
train_descriptors: &Mat,
matches: &mut Vector<DMatch>,
mask: &Mat
) -> Result<()>
pub fn match_query(
&mut self,
query_descriptors: &Mat,
matches: &mut Vector<DMatch>,
masks: &Vector<Mat>
) -> Result<()>
[src]
&mut self,
query_descriptors: &Mat,
matches: &mut Vector<DMatch>,
masks: &Vector<Mat>
) -> Result<()>
pub fn knn_match(
&self,
query_descriptors: &Mat,
train_descriptors: &Mat,
matches: &mut Vector<Vector<DMatch>>,
k: i32,
mask: &Mat,
compact_result: bool
) -> Result<()>
[src]
&self,
query_descriptors: &Mat,
train_descriptors: &Mat,
matches: &mut Vector<Vector<DMatch>>,
k: i32,
mask: &Mat,
compact_result: bool
) -> Result<()>
pub fn knn_match_query(
&mut self,
query_descriptors: &Mat,
matches: &mut Vector<Vector<DMatch>>,
k: i32,
masks: &Vector<Mat>,
compact_result: bool
) -> Result<()>
[src]
&mut self,
query_descriptors: &Mat,
matches: &mut Vector<Vector<DMatch>>,
k: i32,
masks: &Vector<Mat>,
compact_result: bool
) -> Result<()>
pub fn radius_match(
&self,
query_descriptors: &Mat,
train_descriptors: &Mat,
matches: &mut Vector<Vector<DMatch>>,
max_distance: f32,
mask: &Mat,
compact_result: bool
) -> Result<()>
[src]
&self,
query_descriptors: &Mat,
train_descriptors: &Mat,
matches: &mut Vector<Vector<DMatch>>,
max_distance: f32,
mask: &Mat,
compact_result: bool
) -> Result<()>
pub fn radius_match_1(
&mut self,
query_descriptors: &Mat,
matches: &mut Vector<Vector<DMatch>>,
max_distance: f32,
masks: &Vector<Mat>,
compact_result: bool
) -> Result<()>
[src]
&mut self,
query_descriptors: &Mat,
matches: &mut Vector<Vector<DMatch>>,
max_distance: f32,
masks: &Vector<Mat>,
compact_result: bool
) -> Result<()>
pub fn add(&mut self, descriptors: &Vector<Mat>) -> Result<()>
[src]
pub fn train(&mut self) -> Result<()>
[src]
pub fn clear(&mut self) -> Result<()>
[src]
impl Boxed for BinaryDescriptorMatcher
[src]
pub unsafe fn from_raw(ptr: *mut c_void) -> Self
[src]
pub fn into_raw(self) -> *mut c_void
[src]
pub fn as_raw(&self) -> *const c_void
[src]
pub fn as_raw_mut(&mut self) -> *mut c_void
[src]
impl Drop for BinaryDescriptorMatcher
[src]
impl Send for BinaryDescriptorMatcher
[src]
Auto Trait Implementations
impl RefUnwindSafe for BinaryDescriptorMatcher
[src]
impl !Sync for BinaryDescriptorMatcher
[src]
impl Unpin for BinaryDescriptorMatcher
[src]
impl UnwindSafe for BinaryDescriptorMatcher
[src]
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,