Node.JS
Image processing
Comments 32
+10
А точку фокуса ручками проставляете? Я к тому что была статья про генерацию картинок с «поиском лица».
0
Тоже было бы интересно узнать про точку фокуса.
Есть ли какие-нибудь алгоритмы нахождения такой точки автоматически?
Ещё надо учитывать, что на картинке может и не быть лица :)
0
да, пока руками. открываю в ФШ, определяю координаты, забиваю в исходный файл.

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

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

Инструмент обрезки в Photoshop можно настроить на нужные пропорции и разрешение итоговой картинки. По сути это и сведется к тому чтобы пару раз ткнуть в изображение… А если записать макрос в котором добавить фильтр резкости и сохранение с нужными параметрами, и запустить на папку — то вообще быстро получится (часть операций photoshop позволяет сделать «ручными», остальное автоматическими).

В общем, сам подход интересен, но без функции автоопределения точки фокуса — мало полезен.
0
вы наверное плохо прочитали вводные. мне нужно было резать картинку сразу под несколько размеров, а если быть точным то под 35. Если бы речь шла об 1, тогда и огород не стоило бы городить.
0
Прошу прощения, действительно невнимательно прочитал.

Хотя в вашем случае тоже можно обойтись штатными средствами)

Если в Photoshop выделить узкую горизонтальную полоску, а потом в настройках инструмента обрезки задать ширину, и только после этого высоту — то получим прямоугольник обрезки отцентрованный по этой горизонтальной полоске. Причем прямоугольник не будет выходить за границы рисунка, смещаясь по необходимости к центру. После обрезки (и сохранения картинки) можно отменить действия и вернуться обратно к выделенной полоске (для надежности выделение можно сохранить).

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

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

При запуске для каждой картинки придется только дважды указать обрезку, вначале выделить горизонталь содержащую точку фокуса, потом вертикаль. Остальное photoshop сделает сам.
0
P.S. чисто теоретически, информация о точках фокусах есть в равах из камеры, но к сожалению в jpeg она не попадает. возможно, когда такой способ обрезки станет достаточно популярным, можно будет использовать инфу из EXIF, как сейчас используется датчик ориентации камеры, например.
+2
Если глубина резкости мала, то можно определить область, которая в фокусе (вычисляя локальный контраст).
+1
Это если человек не фоткал так: Прижал спуск, сфокусировался, перекадрировал и дожал спуск. Я так часто делаю, когда лень гонять точку фокусировки или нужно сфокусироваться на объекте, который выходит за пределы всех точек фокусировки.
-1
кстати да. а если работал автофокус, то точек может быть вообще несколько
+8
Фейсбук зачастую кадрирует фотографии гораздо лучше начинающих фотографов. Но у них алгоритм завязан на распознавании лиц.
0
Google Plus также распознает лица. Могу ошибаться, но вроде бы даже подставляет контактное лицо к человеку на фотографии и просит подтвердить. Наверное, он нас всех помнит? Такие дела…
+1
я совсем недавно был на странице одной библиотеки которая дропала картинки находя точку с максимумом информации, к сожалению не могу больше вспомнить название. Смысл был в том что они пробегались окошком по картинке(например 3 х 3) и сжимали это окошко. Результат сжатия записывется в матрицу. После прохода получается матрица сжатий. Те области где много инфы будут выделятся, т.к. их сжать проблематично( это как например сжимать jpeg). Дропают так, что бы эти области оставались.

Если кто вспомнит эту библиотечку, дайте ссылку плиз, буду премного благодарен
0
Технология крутая и вы молодец, что взялись ее делать! Но реализация «в лоб» не самая удачная. Есть над чем поработать.
Определить границы фокусировки не так сложно как кажется. Фокусировка по лицам не сработает когда лиц нет: пейзажи, машины, предметка.
+1
дело в том, что «точка фокуса» в алгоритме и фокус на фотографии это не одно и то же. и в общем случае они могут не совпадать. определение границы фокусировки может сработать для ряда сюжетов, но точно не для всех.

я думаю тут нельзя сделать единый алгоритм. скорее веер алгоритмов: определение лица и установка ТФ на глаза хорошо подойдет для портретов, определение границы размытой области для предметной съемки и т.д.

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

Ниже уже отписались про HighPass. Алгоритм его работы есть в ответах toster.ru/q/24169.
0
А определять точку фокуса по месту с максимальной контрастностью не пробовали? HighPass, и там, где, назовем это «плотность линий» будет самой высокой, и будет точка фокуса.
-1
Не-а. Я изначально решил, что точки проставляю вручную, чтобы не завязнуть в реализации и быстро получить готовый инструмент.

В принципе, можно допилить формат исходных данных и дать возможность вместо координат передавать имя функции (или модуля), который эти координаты определит и вернет. А там уже экспериментировать сколько угодно.
0
Реализовать браузерный HighPass можно за один день, больше времени займут подгонка и оптимизация.
0
можно подумать. только бразуерным алгоритмом незачем ограничиваться, все же на сервере делается.

а я думал что большинству будет интереснее интеграция с Grunt :)
+1
Я наоборот расширил до браузера :)

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

И почему grunt, а не gulp? Второй, как утвреждают авторы, для таких вещей лучше подходит.
0
grunt для примера.
про gulp ничего не могу сказать, я с ним не работал
+9
Боже, это стоило поста? Добавление действия деления в самую обыкновенную формулу обрезки стоило поста?
Вы примерно в 1% от настоящей умной обрезки картинок с использованием точки фокуса. Продолжайте…
+3
я в курсе что это не rocket science, но однако такой утилиты для масс-обрезки я не нашел.
+2
Я пробовал автоматизировать ресайз + обрезку при по помощи saliency map. Для генерации thumbnail-ов подходит, но в целом работает не на всех кошках:). Если кому интересно код тут.
Only those users with full accounts are able to leave comments. , please.