Какая сторона? - Автоматический алгоритм вращения изображения
Программное обеспечение, такое как Google Picasa, очень хорошо демонстрирует, что программное обеспечение может определить, каким образом была сделана фотография без Exif-Data, поскольку она недоступна в каждой камере.
Есть ли документированный алгоритм, который выводит, нужно ли поворачивать изображение или нет?
Я хочу узнать вращение без использования EXIF Data. Если это вообще возможно, я хотел бы сделать это с помощью ImageMagick.
Ответы
Ответ 1
Это сложная проблема и, соответственно, текущие исследования. Ответ Янна в основном указывает на обычные подходы уже (+1) и подсказки mfrellum в отношении объекта Pattern Признание также применяется также (+1) - для более глубокого анализа вы можете прочитать несколько следующих работ (субъективный отбор из моих прошлых исследований):
[Обратите внимание: большинство ссылок в формате PDF, приведенных ниже, были выведены из Google Scholar - Google, естественно, умеет находить соответствующий PDF в другом месте для общедоступных тезисов докладов, где фактическое содержание чаще всего скрывается за paywalls. Законность этого, конечно, подвержена острым дискуссиям, и поэтому регулярно защищает публично финансируемые научные исследования, так что сделайте свое собственное мнение!]
- Одна из старейших и наиболее часто цитируемых статей, вероятно, Автоматическое определение ориентации изображения (Хунцзян Чжан, Адитья Вайлая и Анил Джейн - 1999).
- Более подробное, но менее официальное обновление с 2002 года в настоящее время доступно в виде IEEE Proof PDF.
-
Один из Хунцзян Чжан много последующих работ Определение ориентации изображения на основе контента с помощью векторных машин поддержки (Yongmei Wang and Hongjiang Жан - 2001)
-
Другим (хотя и менее иллюстративным) является Повышение ориентации ориентации изображения с использованием внутренней или внешней классификации (Lei Zhang, Mingjing Li, Хунцзян Чжан - 2002)
- См. соавтор Lei Zhang Публикации Microsoft Research, чтобы получить представление о многих алгоритмических проблемах, связанных с изображением, которые в конечном итоге задействованы здесь так или иначе;)
-
Соответственно, резюме вышеупомянутых подходов Обнаружение ориентации изображения основано
на визуальном контенте низкого уровня (Yongmei Michelle Wang and Hongjiang Zhang - 2003)
-
Совершенно сложный Вероятностный подход к обнаружению ориентации изображения через доверительную интеграцию низкоуровневых и семантических подсказок (Jiebo Luo и Matthew Boutel - 2004)
-
Наилучшее совпадение с названием вашего вопроса на самом деле Определение ориентации изображения с помощью встроенных сигналов восприятия человека (или какой путь вверх) (Лэй Ван, Сюй Лю, Лиронг Ся, Гуанъю Сюй, Альфред Брукштейн - 2003);)
-
Наконец, вы можете взглянуть на соответствующий патент в отношении системы для автоматического обнаружения цифровой фотосъемки (2008) - основной алгоритм подробно описан в Рисунок 8;)
К сожалению, я не знаю каких-либо легкодоступных реализаций/библиотек, хотя я был бы удивлен, если бы не было нескольких битов, доступных по крайней мере.
Удачи:)
Ответ 2
Вероятно, он читает информацию 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.
Это уменьшит количество фотографий, в которых должно использоваться распознавание изображений.
Ответ 3
Я не знаю конкретной реализации, но вот несколько мыслей:
- Небо синее. Ищите синий по краю. Более синий = скорее всего, будет вверх.
- Верхние области изображения имеют меньше деталей (небо, облака), чем нижние.
- Сделайте обнаружение края и найдите длинные горизонтальные линии. Если они не горизонтальны, возможно, изображение на его стороне. Объедините С# 1 и # 2, чтобы узнать, есть ли у вас 180 градусов или нет.
Обратите внимание, что в данных EXIF есть поле вращения, которое находится от датчика ориентации камеры. Всегда используйте эти данные в первую очередь, так как остальное - это предположение о обработке изображений.
Ответ 4
Я не знаю готового решения этой проблемы, но это проблема классификации, и есть много классических алгоритмов, которые можно использовать.
Распознавание образов и нейронные сети Б.Д. Рипли хорошо читает эту тему.
openCV имеет модуль машинного обучения, который можно использовать для этого.
Решение, вероятно, будет включать в себя эвристику типа 1-3 в ответе Янна Рамина, но количественно оценивается как число от 0 до 1 и помещается в вектор. Вы можете использовать imags с данными exif о ориентации, чтобы сделать набор тренировок для классификатора.
Ответ 5
Доминирующие источники света обычно поднимаются, независимо от того, ночь или день или нет, и есть ли люди на сцене. Объединяя обнаружение выделения с обнаружением края, вы можете определить вероятные местоположения источников света сцены и судить, какой путь вверх.
РЕДАКТИРОВАТЬ: Большой вопрос - я потратил 5 минут на Google Scholar и не смог найти правильный проблемный домен.
EDIT: Получил это. Он назывался "обнаружение ориентации изображения" - не слишком затененный заголовок.
EDIT: быстрый обзор показывает, что существуют два основных подхода:
- Комбинированные классификаторы - обучают множество разных классификаторов и объединяют результаты, классический подход "бросить все, что у вас есть". Здесь большая часть инновационного вклада в работу, как представляется, заключается в том, как создавать новые способы объединения разных классификаторов.
- Конкретные функции - выберите конкретный (или небольшой набор конкретных) функций и используйте их для классификации, определения ориентации. Некоторые примеры: распознавание лица + обнаружение края, локальное двойное совпадение шаблона (относительно: работает только между двумя изображениями одного и того же объекта).
В любом случае это, безусловно, интересная область, и, похоже, больше патентов, чем бумаг, что делает ее еще более интересной. Однако я не нашел ничего, что объясняет метод Picasa. Однако я нашел это:
S. Балуджа (из Google) опубликовал следующие документы:
Из этого можно сделать вывод, что методы в нем указывают на то, что использует Google.
Ответ 6
Picasa имеет распознавание лица, что может помочь даже в том случае, если оно не помечает известных людей.