/// <summary>
/// Clusters train descriptors.
/// </summary>
/// <param name="descriptors">Descriptors to cluster. Each row of the descriptors matrix is a descriptor. Descriptors are not added to the inner train descriptor set.
/// The vocabulary consists of cluster centers. So, this method returns the vocabulary. In the first variant of the method, train descriptors stored in the object
/// are clustered.In the second variant, input descriptors are clustered.</param>
/// <returns></returns>
public override Mat Cluster(Mat descriptors)
{
ThrowIfDisposed();
descriptors.ThrowIfDisposed();
IntPtr p = NativeMethods.features2d_BOWKMeansTrainer_cluster2(ptr, descriptors.CvPtr);
GC.KeepAlive(descriptors);
return(new Mat(p));
}