Ejemplo n.º 1
0
        public static List <Line> GetLinesFromHS(HoughSpace hs, int width, int height, byte[] buffer, int threshold)
        {
            List <Line> result = new List <Line>();

            foreach (var key in hs.HS.Keys)
            {
                if (hs.HS[key].Count > threshold)
                {
                    result.Add(new Line(hs.HS[key][0].Key, hs.HS[key][0].Value, hs.HS[key][3].Key, hs.HS[key][3].Value));
                }
            }

            return(result);
        }
Ejemplo n.º 2
0
        public static HoughSpace HoughTransform2(int width, int height, byte[] buffer)
        {
            HoughSpace result = new HoughSpace();

            int distMax = (int)Math.Round(Math.Sqrt(height * height + width * width));
            var theta   = new double[179];
            var rho     = new int[distMax * 2 + 1];
            //var H = new int[rho.Length, theta.Length];
            int idx = 0;

            for (int i = 0; i < 90; i++)
            {
                theta[idx] = (Math.PI) / 180 * i; idx++;
            }
            for (int i = 91; i < 180; i++)
            {
                theta[idx] = (Math.PI) / 180 * i; idx++;
            }
            //{ theta[idx] = i;idx++; }

            idx = 0;
            for (int i = -distMax; i <= distMax; i++)
            {
                rho[idx] = i;
                idx++;
            }

            Console.WriteLine("Heihgt and width: {0}, {1}", height, width);
            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    if (CheckIfPxIsInEdge(width, height, buffer, i, j))
                    {
                        for (var iTheta = 0; iTheta < theta.Length; iTheta++)
                        {
                            //var angleInRadians = theta[iTheta] * Math.PI / 180;
                            //var distanceFromOrigin = j * Math.Cos(angleInRadians) + i * Math.Sin(angleInRadians);
                            var r = i * Math.Cos(theta[iTheta]) + j * Math.Sin(theta[iTheta]);
                            //FindClosestRhoToDistance(rho, r, out var minDist, out var indexInArray);
                            var rhoIndex = FindDamnIndexInDamnArray(rho, (int)r);
                            //H[(int)r + distMax, iTheta]++;
                            var kv = new KeyValuePair <double, int>(theta[iTheta], rhoIndex);
                            if (result.HS.ContainsKey(kv))
                            {
                                result.HS[kv].Add(new KeyValuePair <int, int>(i, j));
                            }
                            else
                            {
                                var l = new List <KeyValuePair <int, int> >();
                                l.Add(new KeyValuePair <int, int>(i, j));
                                result.HS.Add(kv, l);
                            }


                            //if (minDist < 1)
                            //{
                            //    H[indexInArray, iTheta]++;
                            //}
                        }
                    }
                }

                Console.WriteLine("i is {0}", i);
            }

            return(result);
        }