2012-02-21 2 views
10

Я хотел бы применить OCR к некоторым изображениям 7 сегментных дисплеев на стене. Моя стратегия заключается в следующем:Найти лучший регион интереса после обнаружения края в OpenCV

  1. Скрытого Img в оттенках серого
  2. Размытие IMG уменьшить ложные кромки
  3. Пороговой IMG в двоичный IMG
  4. Применить обнаружение Кання Грань
  5. Set Область интересов (ROI) на рисунке, заданном силуэтом номера
  6. Масштаб ROI и Шаблон соответствует области

Как установить ROI, чтобы моя программа не искала шаблон по всему изображению? Я хотел бы установить базу ROI на количество найденных краев или что-то более полезное, если кто-то может мне помочь.

Я изучал Классификацию Каскада и Хаара, но я не знаю, как применить его к моей проблеме.

Вот изображение после того, как предварительно обработаны и края обнаружены: an image after being pre-processed and edge detected

оригинал изображения

enter image description here

+2

Вы можете добавить исходное изображение тоже? –

ответ

3

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

Редактировать: Ok несколько менее наивных подходов. Если у вас есть какие-то априорные знания, например, вы знаете, что фотография хорошо выровнена (и не сильно повернута или перекошена), вы можете сделать несколько проходов с решеткой с низким высоким уровнем низких частот, настроенной для захвата краев с обеих сторон сегмент, используя разные шкалы как в размерах x, так и y. Хороший удар в обоих направлениях даст подсказки не только о ROI, но и о том, какой масштаб шаблона начать (слишком большие и слишком маленькие решетки сразу не ударяют оба края).

Вы можете сделать обнаружение blob, а затем применить свои шаблоны к блокам в свою очередь (возврат к слиянию капель, если оценка соответствия шаблону ниже порогового значения, если ваш сегмент номера случайно разбит на разделы). Размер blob может снова дать вам некоторый намек на шкалу шаблона для применения.

+0

Это был один из моих первоначальных планов. Я хотел бы посмотреть, есть ли что-то менее наивное, что могло мне помочь. – locorecto

0

Прежде всего, учитывая, что исходное изображение имеет светодиодный дисплей, и поэтому освещенная область имеет более высокую интенсивность, чем трест, я бы произнесла преобразование цвета Юва на исходное изображение, а затем работаю с интенсивностью плоскость (Y).

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

sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=5) 
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=5) 

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

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

Наконец, я бы породил плоскость Y и исследовал каждый из ROI с помощью своего шаблона.

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