Health/Assets/OpenCVForUnity/org/opencv/features2d/BFMatcher.cs

198 lines
7.3 KiB
C#

using OpenCVForUnity.CoreModule;
using OpenCVForUnity.UtilsModule;
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace OpenCVForUnity.Features2dModule
{
// C++: class BFMatcher
/**
* Brute-force descriptor matcher.
*
* For each descriptor in the first set, this matcher finds the closest descriptor in the second set
* by trying each one. This descriptor matcher supports masking permissible matches of descriptor
* sets.
*/
public class BFMatcher : DescriptorMatcher
{
protected override void Dispose(bool disposing)
{
try
{
if (disposing)
{
}
if (IsEnabledDispose)
{
if (nativeObj != IntPtr.Zero)
features2d_BFMatcher_delete(nativeObj);
nativeObj = IntPtr.Zero;
}
}
finally
{
base.Dispose(disposing);
}
}
protected internal BFMatcher(IntPtr addr) : base(addr) { }
// internal usage only
public static new BFMatcher __fromPtr__(IntPtr addr) { return new BFMatcher(addr); }
//
// C++: cv::BFMatcher::BFMatcher(int normType = NORM_L2, bool crossCheck = false)
//
/**
* Brute-force matcher constructor (obsolete). Please use BFMatcher.create()
*
*
* param normType automatically generated
* param crossCheck automatically generated
*/
public BFMatcher(int normType, bool crossCheck) :
base(DisposableObject.ThrowIfNullIntPtr(features2d_BFMatcher_BFMatcher_10(normType, crossCheck)))
{
}
/**
* Brute-force matcher constructor (obsolete). Please use BFMatcher.create()
*
*
* param normType automatically generated
*/
public BFMatcher(int normType) :
base(DisposableObject.ThrowIfNullIntPtr(features2d_BFMatcher_BFMatcher_11(normType)))
{
}
/**
* Brute-force matcher constructor (obsolete). Please use BFMatcher.create()
*
*
*/
public BFMatcher() :
base(DisposableObject.ThrowIfNullIntPtr(features2d_BFMatcher_BFMatcher_12()))
{
}
//
// C++: static Ptr_BFMatcher cv::BFMatcher::create(int normType = NORM_L2, bool crossCheck = false)
//
/**
* Brute-force matcher create method.
* param normType One of NORM_L1, NORM_L2, NORM_HAMMING, NORM_HAMMING2. L1 and L2 norms are
* preferable choices for SIFT and SURF descriptors, NORM_HAMMING should be used with ORB, BRISK and
* BRIEF, NORM_HAMMING2 should be used with ORB when WTA_K==3 or 4 (see ORB::ORB constructor
* description).
* param crossCheck If it is false, this is will be default BFMatcher behaviour when it finds the k
* nearest neighbors for each query descriptor. If crossCheck==true, then the knnMatch() method with
* k=1 will only return pairs (i,j) such that for i-th query descriptor the j-th descriptor in the
* matcher's collection is the nearest and vice versa, i.e. the BFMatcher will only return consistent
* pairs. Such technique usually produces best results with minimal number of outliers when there are
* enough matches. This is alternative to the ratio test, used by D. Lowe in SIFT paper.
* return automatically generated
*/
public static BFMatcher create(int normType, bool crossCheck)
{
return BFMatcher.__fromPtr__(DisposableObject.ThrowIfNullIntPtr(features2d_BFMatcher_create_10(normType, crossCheck)));
}
/**
* Brute-force matcher create method.
* param normType One of NORM_L1, NORM_L2, NORM_HAMMING, NORM_HAMMING2. L1 and L2 norms are
* preferable choices for SIFT and SURF descriptors, NORM_HAMMING should be used with ORB, BRISK and
* BRIEF, NORM_HAMMING2 should be used with ORB when WTA_K==3 or 4 (see ORB::ORB constructor
* description).
* nearest neighbors for each query descriptor. If crossCheck==true, then the knnMatch() method with
* k=1 will only return pairs (i,j) such that for i-th query descriptor the j-th descriptor in the
* matcher's collection is the nearest and vice versa, i.e. the BFMatcher will only return consistent
* pairs. Such technique usually produces best results with minimal number of outliers when there are
* enough matches. This is alternative to the ratio test, used by D. Lowe in SIFT paper.
* return automatically generated
*/
public static new BFMatcher create(int normType)
{
return BFMatcher.__fromPtr__(DisposableObject.ThrowIfNullIntPtr(features2d_BFMatcher_create_11(normType)));
}
/**
* Brute-force matcher create method.
* preferable choices for SIFT and SURF descriptors, NORM_HAMMING should be used with ORB, BRISK and
* BRIEF, NORM_HAMMING2 should be used with ORB when WTA_K==3 or 4 (see ORB::ORB constructor
* description).
* nearest neighbors for each query descriptor. If crossCheck==true, then the knnMatch() method with
* k=1 will only return pairs (i,j) such that for i-th query descriptor the j-th descriptor in the
* matcher's collection is the nearest and vice versa, i.e. the BFMatcher will only return consistent
* pairs. Such technique usually produces best results with minimal number of outliers when there are
* enough matches. This is alternative to the ratio test, used by D. Lowe in SIFT paper.
* return automatically generated
*/
public static BFMatcher create()
{
return BFMatcher.__fromPtr__(DisposableObject.ThrowIfNullIntPtr(features2d_BFMatcher_create_12()));
}
#if (UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR
const string LIBNAME = "__Internal";
#else
const string LIBNAME = "opencvforunity";
#endif
// C++: cv::BFMatcher::BFMatcher(int normType = NORM_L2, bool crossCheck = false)
[DllImport(LIBNAME)]
private static extern IntPtr features2d_BFMatcher_BFMatcher_10(int normType, [MarshalAs(UnmanagedType.U1)] bool crossCheck);
[DllImport(LIBNAME)]
private static extern IntPtr features2d_BFMatcher_BFMatcher_11(int normType);
[DllImport(LIBNAME)]
private static extern IntPtr features2d_BFMatcher_BFMatcher_12();
// C++: static Ptr_BFMatcher cv::BFMatcher::create(int normType = NORM_L2, bool crossCheck = false)
[DllImport(LIBNAME)]
private static extern IntPtr features2d_BFMatcher_create_10(int normType, [MarshalAs(UnmanagedType.U1)] bool crossCheck);
[DllImport(LIBNAME)]
private static extern IntPtr features2d_BFMatcher_create_11(int normType);
[DllImport(LIBNAME)]
private static extern IntPtr features2d_BFMatcher_create_12();
// native support for java finalize()
[DllImport(LIBNAME)]
private static extern void features2d_BFMatcher_delete(IntPtr nativeObj);
}
}