Какая сторона вверх? - алгоритм автоматического поворота изображения - PullRequest
24 голосов
/ 03 февраля 2012

Программное обеспечение, такое как Google Picasa, очень хорошо демонстрирует, что программное обеспечение может выяснить, каким образом была сделана фотография без Exif-Data, так как оно доступно не на каждой камере.

Есть ли документированный алгоритм, который выводит лиизображение должно быть повернуто или нет?Я хочу узнать ротацию без использования EXIF ​​Data.Если это вообще возможно, я хотел бы сделать это с ImageMagick.

Ответы [ 6 ]

28 голосов
/ 08 февраля 2012

Это сложная проблема, и, соответственно, она является предметом текущих исследований. Ответ Янна в основном указывает на обычные подходы уже (+1) и намек mfrellum на предмет Распознавание образов также применимо (+1) -для более глубокого анализа вы, возможно, захотите прочитать пару следующих статей (субъективный выбор из моих прошлых исследований):

[Обратите внимание: большинство ссылок PDF ниже были выведены из Google Scholar - Google, естественно, хорошо находит подходящий PDF-документ в другом месте для общедоступных рефератов статей, где фактический контент чаще всего скрыт за платными сетями.Законность этого предмета, конечно же, является предметом бурных дискуссий, и поэтому она защищает регулярно финансируемые государством научные исследования, например, в первую очередь - делайте свое собственное суждение!]

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

Веселитесь:)

15 голосов
/ 03 февраля 2012

Возможно, он читает exif-информацию , хранящуюся в заголовке jpg, когда она доступна.Это дает ориентацию камеры, когда была сделана фотография.Это гораздо более простой подход, чем попытка проанализировать фотографию, чтобы увидеть, какой путь вверх.

Есть восемь возможных ориентаций .Флаги сообщают, какой путь вверх:

EXIF Orientation Value  Row #0 is:  Column #0 is:
1                       Top         Left side
2*                      Top         Right side
3                       Bottom      Right side
4*                      Bottom      Left side
5*                      Left side   Top
6                       Right side  Top
7*                      Right side  Bottom
8                       Left side   Bottom

NOTE: Values with "*" are uncommon since they represent "flipped" orientations.

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

7 голосов
/ 03 февраля 2012

Я не знаю конкретной реализации, но вот некоторые мысли:

  1. Небо голубое. Ищите синий по краю. Больше синего цвета = больше шансов подняться.
  2. Верхние области изображения имеют тенденцию иметь меньше деталей (небо, облака), чем нижние области.
  3. Сделайте обнаружение края и ищите длинные горизонтальные линии. Если они не горизонтальны, возможно, изображение на боку. Объедините с № 1 и № 2, чтобы увидеть, если вы на 180 градусов или нет.

Обратите внимание, что в данных EXIF ​​имеется поле вращения, полученное от датчика ориентации камеры. Всегда сначала используйте эти данные, так как остальное - предположение при обработке изображения.

5 голосов
/ 05 февраля 2012

Я не знаю готового решения этой проблемы, но это проблема классификации, и есть много классических алгоритмов, которые можно использовать. Распознавание образов и нейронные сети от BD Ripley - хорошее чтение по этому вопросу.

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

Решение, вероятно, будет включать в себя эвристику, подобную 1-3, в ответе Янна Рамина, но определенную в виде чисел от 0 до 1 и помещенную в вектор.Вы можете использовать изображения с exif-данными об ориентации, чтобы создать обучающий набор для классификатора.

4 голосов
/ 09 февраля 2012

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

РЕДАКТИРОВАТЬ : Отличный вопрос. Я только что провел 5 минут в Google Scholar и не смог даже найти правильный проблемный домен.

РЕДАКТИРОВАТЬ : Понял. Это называется «обнаружение ориентации изображения» - не слишком скрывает заголовок.

РЕДАКТИРОВАТЬ : краткий обзор показывает, что существует два основных подхода:

  1. Комбинированные классификаторы - тренируйте множество различных классификаторов и объединяйте результаты, классический подход «брось все, что у тебя есть», с помощью дробовика. Здесь, по-видимому, большая часть новаторского вклада состоит в том, как разработать новые способы объединения различных классификаторов.
  2. Специфические особенности - выберите определенный (или небольшой набор конкретных) объект и используйте его для классификации, определения ориентации. Вот некоторые примеры: распознавание лиц + обнаружение краев, наложение локального двоичного шаблона (относительное: работает только между двумя изображениями одного и того же объекта).

В любом случае, это, безусловно, интересная область, и, похоже, патентов больше, чем бумаг, что делает ее еще более интересной. Однако я не нашел ничего, что объясняет метод Picasa. Однако я нашел это:

S. Baluja (из Google) опубликовал следующие статьи:

Из этого можно сделать вывод, что методы, приведенные в нем, указывают на то, что использует Google.

0 голосов
/ 08 февраля 2012

Picasa распознает лица, что может помочь, даже если на самом деле не помечает известных людей.

...