Советы по классификации символов /изображений

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

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

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

4 голоса | спросил AndrewS 3 J000000Saturday10 2010, 20:01:46

3 ответа


0

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

ответил carlosdc 5 J000000Monday10 2010, 08:53:02
0

Если вы используете 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);
        }

Этот максимум [0] дает оценку лучшего соответствия.

ответил Mikos 5 J000000Monday10 2010, 13:13:57
0

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

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

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

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

ответил Aditya Mukherji 5 J000000Monday10 2010, 08:20:41

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132