internal List<Tuple<int, int>> FindSingularPoints(List<Tuple<int, int>> singularPointsPI)
        {
            List<Tuple<int, int>> result = new List<Tuple<int, int>>();
            HoughTransform houghTransform = new HoughTransform(singularPointsPI, orientationField);
            List<double[,]> blocks = new List<double[,]>();
            double backgroundOrientation;

            foreach (Tuple<int, int> point in singularPointsPI)
            {
                if (!IsValidPointPosition(point))
                {
                    continue;
                }

               blocks = GetBlocks(point);

                foreach (double[,] block in blocks)
                {
                    backgroundOrientation = GetBackgroundOrientation(block);
                    houghTransform.Transform(point, backgroundOrientation);
                }
            }

            return houghTransform.FilterThreshold();
        }
        internal List <Tuple <int, int> > FindSingularPoints(List <Tuple <int, int> > singularPointsPI)
        {
            List <Tuple <int, int> > result         = new List <Tuple <int, int> >();
            HoughTransform           houghTransform = new HoughTransform(singularPointsPI, orientationField);
            List <double[, ]>        blocks         = new List <double[, ]>();
            double backgroundOrientation;

            foreach (Tuple <int, int> point in singularPointsPI)
            {
                if (!IsValidPointPosition(point))
                {
                    continue;
                }

                blocks = GetBlocks(point);

                foreach (double[,] block in blocks)
                {
                    backgroundOrientation = GetBackgroundOrientation(block);
                    houghTransform.Transform(point, backgroundOrientation);
                }
            }

            return(houghTransform.FilterThreshold());
        }