public static uint[] ProjectSubImageOnHorizontalLine(GrayImage image, SplitMultiLines.Line line)
        {
            int width   = image.Width;
            var density = new uint[width];
            int stop    = line.StartSpace * width;

            Parallel.For(0, width, (j) =>
            {
                int start        = width * line.StartText + j;
                uint lineProject = 0;
                for (int index = start; index < stop; index += width)
                {
                    if (image.Pixels[index] > 0)
                    {
                        lineProject++;
                    }
                }
                density[j] = lineProject;
            });
            return(density);
        }
        public static uint[] ProjectSubImageOnVerticalLine(GrayImage image, SplitMultiLines.Line line)
        {
            int width     = image.Width;
            var density   = new uint[image.Height];
            int lineWidth = line.StartSpace - line.StartText;

            Parallel.For(0, density.Length, (i) =>
            {
                int index        = i * width + line.StartText;
                uint lineProject = 0;
                for (int j = 0; j < lineWidth; j++)
                {
                    if (image.Pixels[index] > 0)
                    {
                        lineProject++;
                    }
                    index++;
                }
                density[i] = lineProject;
            });
            return(density);
        }
Пример #3
0
        public static List <TextBlock> FindAllTextBlock(GrayImage image, uint[] density, SplitMultiLines.Line line, int lineIndex)
        {
            if (lineIndex == 0)
            {
                AvgGapBlocks.Clear();
                AvgGapIntraChars.Clear();
            }

            startIndex = line.StartText;
            stopIndex  = line.StartSpace;

            var blocks = InitTextBlocks(image, density, lineIndex);

            if (blocks.Count < 2)
            {
                return(blocks);
            }

            GetAverageParams(blocks);

            PreProcessAllBlocksType(blocks, density, image);

            CalculateAverageGaps(blocks);
            MergeMarkBlocks(blocks);

            CalculateAverageGaps(blocks);
            MergeHalfCharBlocks(blocks);

            CalculateAverageGaps(blocks);

            GetTextBlockRatio(blocks);

            AvgGapBlocks.Add(avgGapBlock);
            AvgGapIntraChars.Add(avgGapIntraChar);

            return(blocks);
        }