Emgu.CV.Flann.Index.RadiusSearch C# (CSharp) Method

RadiusSearch() public method

Performs a radius nearest neighbor search for multiple query points
public RadiusSearch ( Matrix queries, Matrix indices, Matrix squareDistances, float radius, int checks ) : int
queries Matrix The query points, one per row
indices Matrix Indices of the nearest neighbors found
squareDistances Matrix The square of the Eculidean distance between the neighbours
radius float The search radius
checks int The number of times the tree(s) in the index should be recursively traversed. A /// higher value for this parameter would give better search precision, but also take more /// time. If automatic configuration was used when the index was created, the number of /// checks required to achieve the specified precision was also computed, in which case /// this parameter is ignored
return int
        public int RadiusSearch(Matrix<float> queries, Matrix<int> indices, Matrix<float> squareDistances, float radius, int checks)
        {
            return CvInvoke.CvFlannIndexRadiusSearch(_ptr, queries, indices, squareDistances, radius, checks);
        }

Usage Example

コード例 #1
0
        /// <summary>
        /// Perform a search within the given radius
        /// </summary>
        /// <param name="position">The center of the search area</param>
        /// <param name="radius">The radius of the search</param>
        /// <param name="maxResults">The maximum number of results to return</param>
        /// <returns>The neighbors found</returns>
        public Neighbor[] RadiusSearch(MCvPoint3D32f position, double radius, int maxResults)
        {
            _query.Data[0, 0] = position.X;
            _query.Data[0, 1] = position.Y;
            _query.Data[0, 2] = position.Z;
            using (Mat indicies = new Mat(new Size(maxResults, 1), DepthType.Cv32S, 1))
                using (Mat sqrDistances = new Mat(new Size(maxResults, 1), DepthType.Cv32F, 1))
                {
                    indicies.SetTo(new MCvScalar(-1));
                    sqrDistances.SetTo(new MCvScalar(-1));
                    _flannIndex.RadiusSearch(_query, indicies, sqrDistances, radius, maxResults);
                    int[] indiciesVal = new int[indicies.Rows * indicies.Cols];
                    indicies.CopyTo(indiciesVal);
                    float[] sqrDistancesVal = new float[sqrDistances.Rows * sqrDistances.Cols];
                    sqrDistances.CopyTo(sqrDistancesVal);

                    List <Neighbor> neighbors = new List <Neighbor>();
                    for (int j = 0; j < maxResults; j++)
                    {
                        if (indiciesVal[j] <= 0)
                        {
                            break;
                        }
                        Neighbor n = new Neighbor();
                        n.Index      = indiciesVal[j];
                        n.SquareDist = sqrDistancesVal[j];
                        neighbors.Add(n);
                    }

                    return(neighbors.ToArray());
                }
        }