Example #1
0
        private void FillBitmapPad(int x, int y, EditMonomap monomap, BitmapPad pad)
        {
            var recursionStack = new Stack <LightPoint>();

            recursionStack.Push(new LightPoint(x, y));

            do
            {
                var currentPoint = recursionStack.Pop();
                x = currentPoint.X;
                y = currentPoint.Y;

                for (int i = 0; i < _nearbyCells.Length; i++)
                {
                    var nearbyCell = _nearbyCells[i];
                    int nextX      = x + nearbyCell.X;
                    int nextY      = y + nearbyCell.Y;

                    if (IsBlackCheckNearbyCell(nextX, nextY, monomap, pad))
                    {
                        recursionStack.Push(new LightPoint(nextX, nextY));
                    }
                }
            } while (recursionStack.Any());
        }
        public void SimpleCreationTest()
        {
            EditMonomap monomap = new EditMonomap(_sourceImage);

            Assert.AreEqual(monomap.Width, _sourceImage.GetLength(0));
            Assert.AreEqual(monomap.Height, _sourceImage.GetLength(1));
        }
Example #3
0
        /// <summary>
        /// Распарсить изображение на более меньшие.
        /// </summary>
        /// <param name="sourceImage">Исходное распознаваемое изображение.</param>
        /// <returns>Список найденных фрагментов.</returns>
        public IList <QSymbol> GetFragments(IMonomap sourceImage)
        {
            var result      = new List <QSymbol>();
            var editMonomap = new EditMonomap(sourceImage);

            for (int y = 0; y < editMonomap.Height; y++)
            {
                for (int x = 0; x < editMonomap.Width; x++)
                {
                    if (editMonomap[x, y])
                    {
                        // Заполняем первую точку, что бы внутри метода проверку не делать для заполнения.
                        BitmapPad pad = new BitmapPad();
                        pad.SetPoint(x, y);

                        // Начинаем рекурсивное создание фигуры
                        FillBitmapPad(x, y, editMonomap, pad);

                        var symbol = new QSymbol(pad, pad.TopLeftPoint, EulerCharacteristicComputer.Compute2D(pad));
                        result.Add(symbol);
                    }
                }
            }

            return(result);
        }
        public void AreEqualTest()
        {
            EditMonomap monomap = new EditMonomap(_sourceImage);

            Assert.AreEqual(monomap[0, 0], true);
            Assert.AreEqual(monomap[0, 1], true);

            Assert.AreEqual(monomap[1, 0], true);
            Assert.AreEqual(monomap[1, 1], true);
        }
        public void OutOfBoundsTest()
        {
            EditMonomap monomap = new EditMonomap(_sourceImage);

            Assert.AreEqual(monomap[-1, -1], false);
            Assert.AreEqual(monomap[-1, 0], false);
            Assert.AreEqual(monomap[0, -1], false);

            Assert.AreEqual(monomap[2, 2], false);
            Assert.AreEqual(monomap[1, 2], false);
            Assert.AreEqual(monomap[2, 1], false);
        }