2010-07-03 4 views
4

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

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

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

ответ

2

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

+0

Спасибо, я посмотрю и опубликую свои результаты. – AndrewS

+1

Я закончил использование класса EigenObjectRecognizer в EmguCV. Спасибо за подсказку с ключевым словом. – AndrewS

1

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

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

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

Google «viola jones» для более сложных методов этого типа.

+0

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

2

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

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

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

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] дает оценку наилучшего соответствия.

+0

Это то, что я пробовал в первую очередь (например, с использованием детектора функции SURF).Однако я не знал, как сравнивать результаты. Он найдет множество функций для правильного совпадения и связку для неправильного (но близкого) соответствия. Как узнать, какой набор совпадений лучше? На стороне примечание, SURF вращается-инвариантно (что очень круто), но, вероятно, вредно для моего случая. – AndrewS

+1

Вы знаете, что у вас есть оценка соответствия для каждого матча (SURF или Template matching), что дает вам близость к матчу. Вы также можете установить порог для класса ExhaustiveTemplateMatching, который позволяет отсеять менее релевантные. – Mikos

+0

Я думал, что, должно быть, это так, но я не мог найти его. Спасибо. – AndrewS

Смежные вопросы