예제 #1
0
        public List <PageInfo> DoOCR(string filename)
        {
            IImageSplitter splitter = new ImageSplitter();
            Image          img;

            if (!splitter.TryLoad(filename, out img))
            {
                return(null);
            }

            return(this.ocr.GetTextContentFromPages(splitter.GetPagesFromImage(img)));
        }
예제 #2
0
        public List <PageInfo> DoOCR(byte[] scanContent)
        {
            IImageSplitter splitter = new ImageSplitter();
            Image          img;

            if (!splitter.TryLoad(scanContent, out img))
            {
                return(null);
            }

            return(this.ocr.GetTextContentFromPages(splitter.GetPagesFromBinaryContent(scanContent)));
        }
예제 #3
0
        public Math::Vector <double> ExtractFeatures(Image <Gray, Byte> frame)
        {
            Math::Vector <double> result = new DenseVector(Length);

            Image <Gray, Byte> grayFrame      = frame.Resize(frameWidth, frameHeight, INTER.CV_INTER_AREA);
            Image <Gray, Byte> foregroundMask =
                grayFrame.AbsDiff(background).ThresholdBinary(new Gray(40), new Gray(255)) -
                grayFrame.ThresholdBinary(new Gray(200), new Gray(255));


            CvInvoke.cvDilate(foregroundMask, foregroundMask, structuringElement, 1);
            CvInvoke.cvErode(foregroundMask, foregroundMask, structuringElement, 2);
            CvInvoke.cvDilate(foregroundMask, foregroundMask, structuringElement, 1);

            //Image<Gray, byte> outline = foregroundMask - foregroundMask.Erode(1);
            //Image<Gray, byte> edges = grayFrame.Canny(80, 150);
            //Image<Gray, byte> foregroundEdges = edges.Min(foregroundMask.Dilate(1));
            //outline.Save(@"D:\! Egyetem\! RWTH\Semester 2\Seminar CV\Datasets\UCSD\derived images\outlines\" + i + ".png");
            //foregroundEdges.Save(@"D:\! Egyetem\! RWTH\Semester 2\Seminar CV\Datasets\UCSD\derived images\edges\" + i + ".png");
            //foregroundMask.Save(@"D:\! Egyetem\! RWTH\Semester 2\Seminar CV\Datasets\UCSD\derived images\masks\" + i + ".png");
            //i++;

            IList <Image <Gray, Byte> > frameCells          = ImageSplitter.SplitImage(grayFrame, N, M);
            IList <Image <Gray, Byte> > foregroundMaskCells = ImageSplitter.SplitImage(foregroundMask, N, M);

            int cellHeight = frame.Height / N;
            int cellWidth  = frame.Width / M;

            for (int cellId = 0; cellId < frameCells.Count; ++cellId)
            {
                int offsetX = (cellId % M) * cellWidth;
                int offsetY = (cellId / M) * cellHeight;

                Math::Vector <double> featureVector =
                    cellFeatureExtractor.ExtractFeatures(
                        frameCells[cellId], foregroundMaskCells[cellId],
                        perspectiveCorrector.GetScaleFunction(offsetX, offsetY, frameHeight));

                result.SetSubVector(featureVector.Count * cellId, featureVector.Count, featureVector);
            }

            return(result);
        }