Обнаружение линии 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- После предварительной обработки извлеките контуры, соберите все точки (или хотя бы соберите все точки, которые не являются черными); найти минимальный ограничивающий прямоугольник с его углом. Пример здесь