/// <summary> /// Detects corners using the FAST algorithm /// </summary> /// <param name="image">grayscale image where keypoints (corners) are detected.</param> /// <param name="threshold">threshold on difference between intensity of the central pixel /// and pixels of a circle around this pixel.</param> /// <param name="nonmaxSupression">if true, non-maximum suppression is applied to /// detected corners (keypoints).</param> /// <param name="type">one of the three neighborhoods as defined in the paper</param> /// <returns>keypoints detected on the image.</returns> public static KeyPoint[] FAST(InputArray image, int threshold, bool nonmaxSupression, FASTType type) { if (image == null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); using (var kp = new VectorOfKeyPoint()) { NativeMethods.features2d_FAST2(image.CvPtr, kp.CvPtr, threshold, nonmaxSupression ? 1 : 0, (int)type); GC.KeepAlive(image); return kp.ToArray(); } }
/// <summary> /// Detects corners using the FAST algorithm /// </summary> /// <param name="image">grayscale image where keypoints (corners) are detected.</param> /// <param name="threshold">threshold on difference between intensity of the central pixel /// and pixels of a circle around this pixel.</param> /// <param name="nonmaxSupression">if true, non-maximum suppression is applied to /// detected corners (keypoints).</param> /// <param name="type">one of the three neighborhoods as defined in the paper</param> /// <returns>keypoints detected on the image.</returns> public static KeyPoint[] FAST(InputArray image, int threshold, bool nonmaxSupression, FASTType type) { if (image == null) { throw new ArgumentNullException(nameof(image)); } image.ThrowIfDisposed(); using var kp = new VectorOfKeyPoint(); NativeMethods.HandleException( NativeMethods.features2d_FAST2(image.CvPtr, kp.CvPtr, threshold, nonmaxSupression ? 1 : 0, (int)type)); GC.KeepAlive(image); return(kp.ToArray()); }