Советы по классификации символов / изображений - PullRequest
4 голосов
/ 03 июля 2010

Я работаю над проектом, который требует классификации символов и символов (в основном OCR, который должен обрабатывать отдельные символы и символы ASCII, такие как нотация музыки).Я работаю с векторной графикой (Paths and Glyphs в WPF), поэтому изображения могут иметь любое разрешение, а вращение будет незначительным.Необходимо будет классифицировать (и, вероятно, учиться) шрифты и пути, не входящие в обучающий набор.Производительность важна, хотя высокая точность имеет приоритет.

Я рассмотрел несколько примеров обнаружения изображений с помощью Emgu CV (оболочки .Net OpenCV).Однако примеры и учебные пособия, которые я нахожу, имеют дело именно с обнаружением изображений, а не с классификацией.Мне не нужно находить экземпляры изображения на большом изображении, просто определите тип символа на изображении.

Похоже, существует широкий выбор методов, из которых может работать , и я не уверен, с чего начать.Любые советы или полезные ссылки будут с благодарностью.

Ответы [ 3 ]

2 голосов
/ 05 июля 2010

Вам, вероятно, стоит взглянуть на статью: Градиентное обучение, применяемое к распознаванию документов, хотя это относится к рукописным буквам и цифрам. Вы также должны прочитать о Shape Context от Belongie и Malik. Ключевым словом, которое вы должны искать, является распознавание цифр / символов / фигур (не обнаружение, не классификация).

2 голосов
/ 05 июля 2010

Если вы используете EmguCV, неплохо было бы начать с примера функций SURF (детектор StopSign). Другой (возможно, дополнительный) подход заключается в использовании метода MatchTemplate (..).

Однако примеры и учебники я нахожу кажется, имеют дело конкретно с изображением обнаружение, а не классификация. я не нужно искать экземпляры изображение внутри большего изображения, просто определить вид символа в изображение.

Находя экземпляры символа на изображении, вы фактически классифицируете его. Не уверен, почему вы думаете, что это не то, что вам нужно.

    Image<Gray, float> imgMatch = imgSource.MatchTemplate(imgTemplate, Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCOEFF_NORMED);

        double[] min, max;
        Point[] pointMin, pointMax;
        imgMatch.MinMax(out min, out max, out pointMin, out pointMax);
//max[0] is the score
        if (max[0] >= (double) myThreshold)
        {
            Rectangle rect = new Rectangle(pointMax[0], new Size(imgTemplate.Width, imgTemplate.Height));
            imgSource.Draw(rect, new Bgr(Color.Aquamarine), 1);
        }

Это max [0] дает оценку лучшего матча.

1 голос
/ 05 июля 2010

Поместите все изображения в стандартное разрешение (соответствующим образом масштабированное и отцентрированное).
Разбейте холст на n квадратных или прямоугольных блоков.

Для каждого блока вы можете измерить количество черных пикселей или соотношение между черным и белым в этом блоке и рассматривать его как функцию.

Теперь, когда вы можете представить изображение как вектор объектов (каждый объект происходит из другого блока), вы можете использовать множество стандартных алгоритмов классификации, чтобы предсказать, к какому классу принадлежит изображение.

Google 'Виола Джонс' для более сложных методов этого типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...