Обнаружение линии OCR

Я пытаюсь определить ограничивающую рамку предложений в изображении. Я использую Emgu OpenCV в C#, используя метод HougLinesP для извлечения строк, но я, очевидно, делаю что-то не так. Я просмотрел много примеров и оценил уровень перекоса с помощью houghLines - это почти то, что я пытаюсь сделать.

Используя этот пример изображения, я делаю некоторую предварительную обработку (Thresholding, canny, ect) и в итоге получаю http://snag.gy/sWCuO.jpg, но потом, когда я делаю HoughLines и рисую линии на исходном изображении, я получаю http://snag.gy/ESKmR.jpg.

Вот выдержка из моего кода:

using (MemStorage stor = new MemStorage())
{
    Image<Hsv, byte> imgHSV = new Image<Hsv, byte>(bitmap);
    Image<Gray, Byte> gray = imgHSV.Convert<Gray, Byte>().PyrDown().PyrUp();

CvInvoke.cvCanny(gray, EdgeMap, 100, 400, 3);
    IntPtr lines = CvInvoke.cvHoughLines2(EdgeMap, stor,
        Emgu.CV.CvEnum.HOUGH_TYPE.CV_HOUGH_PROBABILISTIC, 1, Math.PI / 360, 10, 
        gray.Width / 4, 20);

   Seq<LineSegment2D> segments = new Seq<LineSegment2D>(lines, stor);
   ar = segments.ToArray();

}

Graphics g = Graphics.FromImage(OriginalImage);
foreach (LineSegment2D line in ar)
{
    g.DrawLine(new Pen(Color.Blue), 
        new Point(line.P1.X, line.P1.Y), 
        new Point(line.P2.X, line.P2.Y));
}
g.Save();

Любая помощь будет оценена.

1 ответ

Вы можете попробовать два подхода:

1- Используйте частотную область. Пример здесь

2- После предварительной обработки извлеките контуры, соберите все точки (или хотя бы соберите все точки, которые не являются черными); найти минимальный ограничивающий прямоугольник с его углом. Пример здесь

Другие вопросы по тегам