Пример #1
0
        private static Parameters CalculateParameter(LabelGroup group, int[,] labels)
        {
            var result = new Parameters
                {
                    Square = group.Pixels.Count
                };

            int x = 0, y = 0, perimeter = 0;
            foreach (var item in group.Pixels)
            {
                if (IsBorderPixel(item.X, item.Y, ref labels))
                {
                    perimeter++;
                }
                x += item.X;
                y += item.Y;
            }
            result.SchtynhMasses = new Coords(x/result.Square, y/result.Square);
            result.Perimeter = perimeter;
            result.Density = (double)result.Perimeter*result.Perimeter / result.Square;

            var m20 = DiscretMoment(result.SchtynhMasses.X, result.SchtynhMasses.Y, group.Pixels, 2, 0);
            var m02 = DiscretMoment(result.SchtynhMasses.X, result.SchtynhMasses.Y, group.Pixels, 0, 2);
            var m11 = DiscretMoment(result.SchtynhMasses.X, result.SchtynhMasses.Y, group.Pixels, 1, 1);

            var sqrt = Math.Sqrt(Math.Pow(m20 - m02, 2) + 4*m11*m11);
            result.Elongation = (m20 + m02 + sqrt)/(m20 + m02 - sqrt);
            result.Theta = Math.Atan(2*m11/(m20 - m02)) / 2;
            result.Pixels = group.Pixels;

            return result;
        }
Пример #2
0
        private static Dictionary<int, LabelGroup> FindLabelGroups(int[,] labels, int width, int height)
        {
            var dictionary = new Dictionary<int, LabelGroup>();
            for (var i = 0; i < width; i++)
            {
                for (var j = 0; j < height; j++)
                {
                    if (labels[i, j] == 0)
                    {
                        continue;
                    }

                    LabelGroup labelGroup;
                    var item = labels[i, j];

                    if (!dictionary.TryGetValue(item, out labelGroup))
                    {
                        labelGroup = new LabelGroup { Label = item, Pixels = new List<Coords>() };
                        dictionary.Add(item, labelGroup);
                    }

                    if (labelGroup != null)
                    {
                        labelGroup.Pixels.Add(new Coords(i, j));
                    }
                }
            }

            if (Configuration.IsDiscard)
            {
                var result = dictionary.Where(item => item.Value.Pixels.Count > Configuration.DiscardPixelsCount)
                                       .ToDictionary(item => item.Key, item => item.Value);
                return result;
            }
            return dictionary;
        }