2016-07-28 3 views
0

Я был в состоянии распознавать символы, такие как 1, 2, 3, ..., n.OCR: обнаружение экспонент, супер/подстрочные (C++)

У меня возникли проблемы с мыслью о том, как определить, что определенное число является показателем другого.

Например, после запуска моей программы this picture должен возвращать (5/6)^2, но я не могу понять способ или идею сказать, что это число является показателем степени.

Любые предложения? Я использую openCV в C++.

ответ

0

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

Исходя из этого, вы можете попробовать следующее:

  1. для каждого обнаруженного ограничивающего параллелепипеда (D_bbox), определить диапазон поиска от центра ограничительной рамки ± 2 * S
  2. в этой категории (O_bbox), от других обнаруженных символов
    1. для каждого центра, найденного в области поиска, вычислите соотношение между D_bbox и O_bbox. Размер показателя символ должен быть меньше, чем число => D_bbox/O_bbox> 1.

Я бы сказал, что это должно быть около 1,5, но это зависит от шрифта и т.д. Поиграйте с ценностями и посмотреть, что Вы получаете.

некоторые другие эвристики, которые могут помочь:

  • D_bbox_centre_x < O_bbox_centre_x
  • D_bbox_centre_y < O_bbox_centre_y

Число всегда слева от экспоненты, и это центр всегда ниже на чем центр экспоненты.

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