2012-02-02 3 views
24

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

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

+1

Вы видели какие-либо примеры, для которых Picasa не дает правильного результата? Вы пытались загрузить синтетические изображения, чтобы увидеть, как их обрабатывает Picasa? Кроме того, вы могли бы разместить несколько образцов изображений? – Rethunk

+1

duplicate: http://stackoverflow.com/q/1141928 – ergosys

+1

Я нашел несколько документов (и вышеупомянутый дубликат) с помощью запроса Google «алгоритм обнаружения ориентации изображения». – ergosys

ответ

28

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

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

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

получайте удовольствие :)

15

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

Есть eight possible orientations. Флаги сообщают вам, какой путь:

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. 

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

+4

ПРИМЕЧАНИЕ. Я добавил этот ответ ** до ** вопрос был обновлен, чтобы указать, что информация EXIF ​​не всегда доступна. – ChrisF

7

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

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

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

5

Я не знаю готового решения этой проблемы, но это проблема классификации, и есть много классических алгоритмов, которые можно использовать. Pattern Recognition and Neural Networks B.D. Рипли хорошо читает эту тему.

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

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

+0

Очень хороший момент об использовании изображений с данными exif для обучения. –

0

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

4

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

EDIT: Большой вопрос - я потратил 5 минут на Google Scholar и не смог найти правильный проблемный домен.

EDIT: Получил его.Это называется «обнаружение ориентации изображения» - не слишком непонятное название.

EDIT: Краткий обзор показывает, что существует два основных подхода:

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

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

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

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

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