2012-08-08 1 views
5

У меня есть квадратная фотография с низким разрешением, которая была обрезана (пользователем) из высококачественного, не квадратного, оригинального. Затем фотография с низким разрешением была изменена вниз в миниатюру. Я хотел бы автоматически (без вмешательства пользователя) переделать исходную фотографию таким же образом, чтобы получить копию квадратной версии с более высоким разрешением. I не имеют имеют доступ к исходным координатам обрезки. Все, что у меня есть, это эти две фотографии.Как использовать фотографию с низким разрешением, обрезанное в качестве руководства для повторного обрезания копии оригинала с более высоким разрешением?

Вот некоторые примеры изображений (из моего профиля Facebook), чтобы проиллюстрировать, что я имею в виду:

Original, high-resolution photo - Cropped, then shrunk, square photo

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

Единственные ограничения на решения являются:

  1. Общность: Я использую это для профильных фотографий, так что, если он работает только на лицах, что вполне приемлемо! Не нужно обобщать на все виды случайных изображений, изображения людей - отличное место для начала.
  2. Платформа: Я использую узел, но я был бы рад запустить этот процесс в Ruby, Python, Java или C++ (с привязками узлов). Это почти наверняка будет работать на Хереку или AWS.
  3. Скорость: это должно быть довольно быстро. Чтобы это было полезно, он должен был запускаться в режиме онлайн, так как я блокировал бы интерфейс пользователя, ожидающий этого действия.

У кого-нибудь есть идеи? Я не очень много разбираюсь в обработке изображений, поэтому я не знаю, с чего начать.

EDIT: для Facebook, в частности, есть решение, которое не так сложно. Исходные данные об урожайности доступны для изображений профиля: https://graph.facebook.com/bcherry/profile?fields=pic_crop

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

+0

Знаете ли вы размеры обрезанной фотографии с низким разрешением? – jasonlfunk

+0

Я не совсем уверен, что вы просите, но у меня нет никакой информации, кроме двух изображений. – bcherry

+0

Предполагаю, что вы не знаете, каков коэффициент изменения размера для миниатюры? Если нет, это становится довольно сложной проблемой. –

ответ

1

Хотя я не буду комментировать Javascript-ness моего решения - вы в основном пытаетесь выполнить Image Registration между оригинальным и обрезанным, измененным размером.

Есть many различные способы сделать что-то вроде этого - для вашей конкретной цели я бы начал с подхода Phase-Correlation.

EDIT: Я нашел хороший сценарий, используя ImageMagick, который делает именно то, что вам нужно. NormCrossCorr "вычисляет нормированную поверхность взаимной корреляции, чтобы найти, где небольшое изображение лучше всего соответствует более крупному изображению".

Надеюсь, это поможет!

+0

Да, это, безусловно, звучит правильно. Спасибо за ответ! – bcherry

+0

Это не сработает. Это будет работать, только если миниатюра не будет сокращена, то есть они должны быть в той же резолюции. – reptilicus

+0

Вы можете, однако, пошагово масштабировать миниатюру вверх, затем выполнять кросс-корреляцию и находить, где максимальная корреляция. – reptilicus

0

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

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

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

  • Нет связанных вопросов^_^