Skip to content

line_descriptor_BinaryDescriptorMatcher

line_descriptorclassOpenCV 5.0.0
import { line_descriptor_BinaryDescriptorMatcher } from '@banou/opencv-wasm'

Use after await initOpenCV(). See the initialization and named imports guide.

ARGUMENTSConstructor or factory
CLASSline_descriptor_BinaryDescriptorMatcher
RETURN TYPEOwned native handle
Call structure. A void return can still write to destination arguments. The parameter descriptions define inputs, outputs and ownership.

Native object: release it with using or delete(). Factories can return null; check before calling methods. Inherits Algorithm.

furnishes all functionalities for querying a dataset provided by user or internal to class (that user must, anyway, populate) on the model of features_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 \mathbf{h}^{(1)}, ..., \mathbf{h}^{(m)}, each with length \lfloor b/m \rfloor or \lceil b/m \rceil 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 \lfloor r/m \rfloor bits. In particular, when ||\mathbf{h}-\mathbf{g}||_H \le r (where ||.||_H is the Hamming norm), there must exist a substring k (with 1 \le k \le m) such that

||\mathbf{h}^{(k)} - \mathbf{g}^{(k)}||_H \le \left\lfloor \frac{r}{m} \right\rfloor .

That means that if Hamming distance between each of the m substring is strictly greater than \lfloor r/m \rfloor, then ||\mathbf{h}-\mathbf{g}||_H 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 \{\mathbf{q}^{(i)}\}^m_{i=1}, i-th hash table is searched for entries distant at the most \lfloor r/m \rfloor from \mathbf{q}^{(i)} and a set of candidates \mathcal{N}_i(\mathbf{q}) is obtained. The union of sets \mathcal{N}(\mathbf{q}) = \bigcup_i \mathcal{N}_i(\mathbf{q}) 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 \mathcal{N}(\mathbf{q}), deleting the codes that are distant more that r from q.

Constructors and members

static new

Constructor.

The BinaryDescriptorMatcher constructed is able to store and manage 256-bits long entries.

new(): line_descriptor_BinaryDescriptorMatcher;
Returns

The line_descriptor_BinaryDescriptorMatcher result.

clone

Create another handle to the same native object. This retains the object without copying its pixels or algorithm state; dispose both handles separately.

clone(): this;
Returns

The this result.

match

For every input query descriptor, retrieve the best matching one from a dataset provided from user or from the one internal to class

match(queryDescriptors: Mat, trainDescriptors: Mat, matches: DMatchVector, mask: Mat): void;
2 available overloads
match(queryDescriptors: Mat, trainDescriptors: Mat, matches: DMatchVector): void;
match(queryDescriptors: Mat, trainDescriptors: Mat, matches: DMatchVector, mask: Mat): void;
queryDescriptors

query descriptors

trainDescriptors

dataset of descriptors furnished by user

matches

Output destination, filled by the native operation. vector to host retrieved matches

mask

mask to select which input descriptors must be matched to one in dataset

matchQuery

For every input query descriptor, retrieve the best matching one from a dataset provided from user or from the one internal to class

matchQuery(queryDescriptors: Mat, matches: DMatchVector, masks: MatVector): void;
2 available overloads
matchQuery(queryDescriptors: Mat, matches: DMatchVector): void;
matchQuery(queryDescriptors: Mat, matches: DMatchVector, masks: MatVector): void;
queryDescriptors

query descriptors

matches

Output destination, filled by the native operation. vector to host retrieved matches

masks

vector of masks to select which input descriptors must be matched to one in dataset (the i-th mask in vector indicates whether each input query can be matched with descriptors in dataset relative to i-th image)

knnMatch

For every input query descriptor, retrieve the best k matching ones from a dataset provided from user or from the one internal to class

knnMatch(queryDescriptors: Mat, trainDescriptors: Mat, matches: DMatchVectorVector, k: number, mask: Mat, compactResult: boolean): void;
3 available overloads
knnMatch(queryDescriptors: Mat, trainDescriptors: Mat, matches: DMatchVectorVector, k: number): void;
knnMatch(queryDescriptors: Mat, trainDescriptors: Mat, matches: DMatchVectorVector, k: number, mask: Mat): void;
knnMatch(queryDescriptors: Mat, trainDescriptors: Mat, matches: DMatchVectorVector, k: number, mask: Mat, compactResult: boolean): void;
queryDescriptors

query descriptors

trainDescriptors

dataset of descriptors furnished by user

matches

Output destination, filled by the native operation. vector to host retrieved matches

k

number of the closest descriptors to be returned for every input query

mask

mask to select which input descriptors must be matched to ones in dataset

compactResult

flag to obtain a compact result (if true, a vector that doesn't contain any matches for a given query is not inserted in final result)

knnMatchQuery

For every input query descriptor, retrieve the best k matching ones from a dataset provided from user or from the one internal to class

knnMatchQuery(queryDescriptors: Mat, matches: DMatchVectorVector, k: number, masks: MatVector, compactResult: boolean): void;
3 available overloads
knnMatchQuery(queryDescriptors: Mat, matches: DMatchVectorVector, k: number): void;
knnMatchQuery(queryDescriptors: Mat, matches: DMatchVectorVector, k: number, masks: MatVector): void;
knnMatchQuery(queryDescriptors: Mat, matches: DMatchVectorVector, k: number, masks: MatVector, compactResult: boolean): void;
queryDescriptors

query descriptors

matches

vector to host retrieved matches

k

number of the closest descriptors to be returned for every input query

masks

vector of masks to select which input descriptors must be matched to ones in dataset (the i-th mask in vector indicates whether each input query can be matched with descriptors in dataset relative to i-th image)

compactResult

flag to obtain a compact result (if true, a vector that doesn't contain any matches for a given query is not inserted in final result)

These signatures describe this package. Upstream documentation can mention optional backends that are absent from this build. Check runtime compatibility before choosing a backend or file format.