Как определить ориентацию изображения (текст) - PullRequest
7 голосов
/ 01 апреля 2010

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

Любые советы очень ценятся!

РЕДАКТИРОВАТЬ: Уточнение:
Когда Faxmachine получает многостраничный документ, он сохраняет каждую страницу в виде отдельного файла TIFF.
Мое приложение имеет встроенный просмотрщик, отображающий эти файлы. Все файлы масштабируются до формата А4 и сохраняются в формате TIFF (поэтому нет изменений для определения ориентации по параметрам высоты / ширины)
Моя программа просмотра отображает изображения в портретном режиме по умолчанию

Что я хотел бы сделать, так это автоматически определить ситуацию, когда документ org был напечатан в альбомном режиме (например, широкие таблицы Excel), а затем я хотел бы показать повернутый предварительный просмотр для конечного пользователя, чтобы ускорить процесс предварительного просмотра

Очевидно, что есть 4 возможных ориентации факса: портрет / пейзаж x 2 вида поворотов.

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

РЕДАКТИРОВАТЬ2: Идея
Я думаю, что это может быть какая-то идея:
Если бы я мог нарисовать горизонтальные и вертикальные линии и проверить, не пересекает ли линия какую-либо (черную) точку. Затем мы можем сравнить, какой тип линий больше (горизонтальный или вертикальный) и его решения относительно ориентации страницы.
Что ты думаешь?

Ответы [ 4 ]

3 голосов
/ 06 апреля 2010

Вы можете выполнить быстрое преобразование Фурье (БПФ), чтобы преобразовать ваше пространственное изображение в представление частоты / угла. Затем найдите угол с наиболее заметной частотой. Это звучит сложно, но это не так сложно, это довольно эффективно, и фактически оно проверяет все возможные углы сразу, вместо того, чтобы быть жестко закодированным хаком, который работает только для определенных углов. Найдите пример реализации с помощью поисковых терминов, таких как Числовые рецепты и БПФ.

2 голосов
/ 04 мая 2011

Вот статья под названием " Комбинированный сценарий и оценка ориентации страницы с использованием двигатель Tesseract OCR"[pdf]

Я не смог найти реализацию их работы, но подход мне подходит:

Основная идея предложенного подхода проста.

Классификатор форм обучается персонажам (классам) из всех сценариев, представляющих интерес. Во время выполнения классификатор запускается независимо для каждого подключенного компонента (CC) в изображении, и процесс повторяется после поворота каждой CC в трех других возможных ориентациях (90 °, 180 ° и 270 ° от входной ориентации).

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

2 голосов
/ 06 апреля 2010

Интересно, есть ли какие-нибудь свойства текста, которые вы могли бы использовать, чтобы помочь вам сделать это?

Например, на основании быстрого взгляда, в тексте гораздо больше вертикальных линий (l, j, k, m, n и т. Д.), Чем горизонтальных, поэтому, возможно, вы могли бы начать с этого.

Но даже обнаружить их не так просто, вам нужно использовать какой-то фильтр, например Sobel или Prewitt. Они оба имеют горизонтальную и вертикальную версии, см. Здесь для получения дополнительной информации.

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

Альтернатива: Можете ли вы просто предоставить пользователю простой способ поворота изображений, например стрелки в средстве просмотра изображений Windows, или просто показать 4 эскиза, по которым они могут щелкнуть. Вам может понадобиться кэшировать 4 версии (если вы вращаетесь), чтобы это было быстро, но только если скорость оказывается проблемой?

2 голосов
/ 05 апреля 2010

Для этого вам понадобится OCR. Свернуть ваш собственный OCR было бы немного сложно, но там может быть библиотека или что-то еще, что стоит посмотреть? Кроме того, даже при хорошем распознавании это не 100% надежное решение.

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