AffineFeature.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. using OpenCVForUnity.CoreModule;
  2. using OpenCVForUnity.UtilsModule;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Runtime.InteropServices;
  6. namespace OpenCVForUnity.Features2dModule
  7. {
  8. // C++: class AffineFeature
  9. /**
  10. * Class for implementing the wrapper which makes detectors and extractors to be affine invariant,
  11. * described as ASIFT in CITE: YM11 .
  12. */
  13. public class AffineFeature : Feature2D
  14. {
  15. protected override void Dispose(bool disposing)
  16. {
  17. try
  18. {
  19. if (disposing)
  20. {
  21. }
  22. if (IsEnabledDispose)
  23. {
  24. if (nativeObj != IntPtr.Zero)
  25. features2d_AffineFeature_delete(nativeObj);
  26. nativeObj = IntPtr.Zero;
  27. }
  28. }
  29. finally
  30. {
  31. base.Dispose(disposing);
  32. }
  33. }
  34. protected internal AffineFeature(IntPtr addr) : base(addr) { }
  35. // internal usage only
  36. public static new AffineFeature __fromPtr__(IntPtr addr) { return new AffineFeature(addr); }
  37. //
  38. // C++: static Ptr_AffineFeature cv::AffineFeature::create(Ptr_Feature2D backend, int maxTilt = 5, int minTilt = 0, float tiltStep = 1.4142135623730951f, float rotateStepBase = 72)
  39. //
  40. /**
  41. * param backend The detector/extractor you want to use as backend.
  42. * param maxTilt The highest power index of tilt factor. 5 is used in the paper as tilt sampling range n.
  43. * param minTilt The lowest power index of tilt factor. 0 is used in the paper.
  44. * param tiltStep Tilt sampling step \(\delta_t\) in Algorithm 1 in the paper.
  45. * param rotateStepBase Rotation sampling step factor b in Algorithm 1 in the paper.
  46. * return automatically generated
  47. */
  48. public static AffineFeature create(Feature2D backend, int maxTilt, int minTilt, float tiltStep, float rotateStepBase)
  49. {
  50. if (backend != null) backend.ThrowIfDisposed();
  51. return AffineFeature.__fromPtr__(DisposableObject.ThrowIfNullIntPtr(features2d_AffineFeature_create_10(backend.getNativeObjAddr(), maxTilt, minTilt, tiltStep, rotateStepBase)));
  52. }
  53. /**
  54. * param backend The detector/extractor you want to use as backend.
  55. * param maxTilt The highest power index of tilt factor. 5 is used in the paper as tilt sampling range n.
  56. * param minTilt The lowest power index of tilt factor. 0 is used in the paper.
  57. * param tiltStep Tilt sampling step \(\delta_t\) in Algorithm 1 in the paper.
  58. * return automatically generated
  59. */
  60. public static AffineFeature create(Feature2D backend, int maxTilt, int minTilt, float tiltStep)
  61. {
  62. if (backend != null) backend.ThrowIfDisposed();
  63. return AffineFeature.__fromPtr__(DisposableObject.ThrowIfNullIntPtr(features2d_AffineFeature_create_11(backend.getNativeObjAddr(), maxTilt, minTilt, tiltStep)));
  64. }
  65. /**
  66. * param backend The detector/extractor you want to use as backend.
  67. * param maxTilt The highest power index of tilt factor. 5 is used in the paper as tilt sampling range n.
  68. * param minTilt The lowest power index of tilt factor. 0 is used in the paper.
  69. * return automatically generated
  70. */
  71. public static AffineFeature create(Feature2D backend, int maxTilt, int minTilt)
  72. {
  73. if (backend != null) backend.ThrowIfDisposed();
  74. return AffineFeature.__fromPtr__(DisposableObject.ThrowIfNullIntPtr(features2d_AffineFeature_create_12(backend.getNativeObjAddr(), maxTilt, minTilt)));
  75. }
  76. /**
  77. * param backend The detector/extractor you want to use as backend.
  78. * param maxTilt The highest power index of tilt factor. 5 is used in the paper as tilt sampling range n.
  79. * return automatically generated
  80. */
  81. public static AffineFeature create(Feature2D backend, int maxTilt)
  82. {
  83. if (backend != null) backend.ThrowIfDisposed();
  84. return AffineFeature.__fromPtr__(DisposableObject.ThrowIfNullIntPtr(features2d_AffineFeature_create_13(backend.getNativeObjAddr(), maxTilt)));
  85. }
  86. /**
  87. * param backend The detector/extractor you want to use as backend.
  88. * return automatically generated
  89. */
  90. public static AffineFeature create(Feature2D backend)
  91. {
  92. if (backend != null) backend.ThrowIfDisposed();
  93. return AffineFeature.__fromPtr__(DisposableObject.ThrowIfNullIntPtr(features2d_AffineFeature_create_14(backend.getNativeObjAddr())));
  94. }
  95. //
  96. // C++: void cv::AffineFeature::setViewParams(vector_float tilts, vector_float rolls)
  97. //
  98. public void setViewParams(MatOfFloat tilts, MatOfFloat rolls)
  99. {
  100. ThrowIfDisposed();
  101. if (tilts != null) tilts.ThrowIfDisposed();
  102. if (rolls != null) rolls.ThrowIfDisposed();
  103. Mat tilts_mat = tilts;
  104. Mat rolls_mat = rolls;
  105. features2d_AffineFeature_setViewParams_10(nativeObj, tilts_mat.nativeObj, rolls_mat.nativeObj);
  106. }
  107. //
  108. // C++: void cv::AffineFeature::getViewParams(vector_float tilts, vector_float rolls)
  109. //
  110. public void getViewParams(MatOfFloat tilts, MatOfFloat rolls)
  111. {
  112. ThrowIfDisposed();
  113. if (tilts != null) tilts.ThrowIfDisposed();
  114. if (rolls != null) rolls.ThrowIfDisposed();
  115. Mat tilts_mat = tilts;
  116. Mat rolls_mat = rolls;
  117. features2d_AffineFeature_getViewParams_10(nativeObj, tilts_mat.nativeObj, rolls_mat.nativeObj);
  118. }
  119. //
  120. // C++: String cv::AffineFeature::getDefaultName()
  121. //
  122. public override string getDefaultName()
  123. {
  124. ThrowIfDisposed();
  125. string retVal = Marshal.PtrToStringAnsi(DisposableObject.ThrowIfNullIntPtr(features2d_AffineFeature_getDefaultName_10(nativeObj)));
  126. return retVal;
  127. }
  128. #if (UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR
  129. const string LIBNAME = "__Internal";
  130. #else
  131. const string LIBNAME = "opencvforunity";
  132. #endif
  133. // C++: static Ptr_AffineFeature cv::AffineFeature::create(Ptr_Feature2D backend, int maxTilt = 5, int minTilt = 0, float tiltStep = 1.4142135623730951f, float rotateStepBase = 72)
  134. [DllImport(LIBNAME)]
  135. private static extern IntPtr features2d_AffineFeature_create_10(IntPtr backend_nativeObj, int maxTilt, int minTilt, float tiltStep, float rotateStepBase);
  136. [DllImport(LIBNAME)]
  137. private static extern IntPtr features2d_AffineFeature_create_11(IntPtr backend_nativeObj, int maxTilt, int minTilt, float tiltStep);
  138. [DllImport(LIBNAME)]
  139. private static extern IntPtr features2d_AffineFeature_create_12(IntPtr backend_nativeObj, int maxTilt, int minTilt);
  140. [DllImport(LIBNAME)]
  141. private static extern IntPtr features2d_AffineFeature_create_13(IntPtr backend_nativeObj, int maxTilt);
  142. [DllImport(LIBNAME)]
  143. private static extern IntPtr features2d_AffineFeature_create_14(IntPtr backend_nativeObj);
  144. // C++: void cv::AffineFeature::setViewParams(vector_float tilts, vector_float rolls)
  145. [DllImport(LIBNAME)]
  146. private static extern void features2d_AffineFeature_setViewParams_10(IntPtr nativeObj, IntPtr tilts_mat_nativeObj, IntPtr rolls_mat_nativeObj);
  147. // C++: void cv::AffineFeature::getViewParams(vector_float tilts, vector_float rolls)
  148. [DllImport(LIBNAME)]
  149. private static extern void features2d_AffineFeature_getViewParams_10(IntPtr nativeObj, IntPtr tilts_mat_nativeObj, IntPtr rolls_mat_nativeObj);
  150. // C++: String cv::AffineFeature::getDefaultName()
  151. [DllImport(LIBNAME)]
  152. private static extern IntPtr features2d_AffineFeature_getDefaultName_10(IntPtr nativeObj);
  153. // native support for java finalize()
  154. [DllImport(LIBNAME)]
  155. private static extern void features2d_AffineFeature_delete(IntPtr nativeObj);
  156. }
  157. }