Деформация перспективы только в одном измерении

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

«Деформация перспективы» в Photoshop и аналогичные инструменты в After Effects, такие как «угловая булавка», всегда перемещают объекты как по вертикали, так и по горизонтали.

Вот пример того, чего я хочу достичь:

введите описание изображения здесь

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

Есть ли способ добиться этого в таких инструментах, как Photoshop, Illustrator, After Effects или Gimp?

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

На самом деле это не перспектива.
@Tetsujin Может быть, мне не хватает словарного запаса. Будет ли справедливо сказать «перспектива в одном измерении и изометрия в другом»?
Не совсем «изометрический», а скорее «перспективная проекция в одном измерении и параллельная проекция в другом».
@ Скотт, ты должен восстановить свой ответ. Дело в том, что часто нужно немного изменить модель. Таким образом, если программное обеспечение X делает то, что вы хотите, это шанс. Но если, используя половину того, что он предлагает, вы сделаете это, то вы на пути к мастерству. Почему? Что ж, каждый раз, когда вы что-то делаете, лучше иметь ментальную модель, которая приведет вас домой, чем делать ставку на то, что кто-то имеет ваш конкретный вариант использования в качестве основной цели. Со временем случится так, что ваша цель не будет самой обычной целью.
@joojaa м'кей...:)

Ответы (4)

Я предполагаю, что вы хотите, чтобы он работал с любым изображением, а не только с прямоугольными прямоугольниками. Искажение, которое вы хотите, не является перспективным, вам нужно масштабирование Y, которое линейно зависит от X. Некоторые программы позволяют это без каких-либо плагинов или написания скрипта. Тот, который я знаю, это Affinity Photo. Там вы можете использовать искажение с уравнениями - вы пишете формулу для координат, откуда в исходном изображении берется пиксель (x, y) в искаженное изображение.

Это мой оригинал:

введите описание изображения здесь

Это 1100 пикселей в ширину и 400 пикселей в высоту. Я поместил его так, чтобы он начинался с x=0, y=0 (это верхний левый угол), чтобы иметь простые формулы без смещений.

Один пример искажения:

введите описание изображения здесь

пиксель (x, y) берется из исходных координат изображения

(х, у/(1-х/2200))

Пример 2:

введите описание изображения здесь

пиксель (x, y) берется из исходных координат изображения

(х, у/(1+х/1100))

Показанные формулы довольно просты, но Photoshop и GIMP не имеют возможности использовать их без плагинов или скриптов. К сожалению, я не программист, но кто-то наверняка знает, как их запрограммировать в виде скрипта.

Использование дополнения "Пакет фильтров G'MIC"

G'MIC доступен для GIMP, Photoshop, Krita и Paint.NET. Он имеет отображение изображения с математическими формулами, по крайней мере, в фильтрах категории деформации. Есть «Декартово преобразование» и «Конформное отображение». Первый использует формулы x и y. Последний опирается на комплексные числа, поэтому искомая функция, по крайней мере, нуждается в некоторой не столь очевидной математике. По крайней мере, название «Конформный» намекает, что оно не предназначено для получения желаемых результатов - конформный означает сохранение углов, по крайней мере, локально. Отметьте это, если вы знакомы с математическими функциями https://gmic.eu/reference/mathematical_expressions.html#top

Пользователи версии G'MIC для командной строки со знаниями в области математики и программирования могут легко понять, как их эффективно использовать. Я пропускаю дальнейшие догадки.

Пара тестов показала, что декартово преобразование может делать то же самое, что и искажение Affinity Photo с уравнениями. Пример:

введите описание изображения здесь

Точка (x,y) на искаженном изображении берется из (x, y(1-x/(2w)). Параметры w и h представляют ширину и высоту изображения в пикселях.

Можно использовать Envelope Distortion в Illustrator с сеткой 1x1. Идею в общем виде уже высказал пользователь Джулиан Штейнман. Но я хочу добавить, что Envelope Distortion также работает с векторными и растровыми изображениями.

Как уже говорилось, может быть утомительно делать это правильно, даже с сеткой 1x1. Но вы можете устранить искажение оболочки и использовать ту же сетку для других изображений, применив «Искажение оболочки» > «Создать с верхним объектом». Сетку можно растянуть до нового размера для нового изображения, и она все еще работает.

Да, вы правы в том, что я хочу, чтобы это работало для любого изображения, я должен это уточнить. Боюсь, как вы сказали, в PS/GIMP без плагинов это невозможно. Я думаю, что смогу написать для него плагин, так как я хотел это преобразование ранее, но это просто займет время... Спасибо за прояснение семантики моего вопроса. Я оставлю это немного дольше, чтобы посмотреть, сможет ли кто-нибудь найти способ в Adobe / GIMP, в противном случае я проверю Affinity!

Разделите вертикали.

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

С помощью иллюстратора ..

  • Разделите внутренние вертикали, чтобы они не были частью сетки.
  • Деформировать горизонтали
  • Используйте Pathfinder > Divideдля создания отдельных ящиков

введите описание изображения здесь

Я бы никогда не сделал это с Photoshop. Photoshop просто не предназначен для таких операций с контурами. Я могу это сделать, но в Photoshop нет Pathfinder, поэтому потребуется много ручных изменений контура. Вы всегда можете сделать это с помощью Illustrator, а затем скопировать/вставить в Photoshop как смарт-объект или слой Shape.

Я должен уточнить, что мой пример не является конкретно тем, чего я хочу добиться, а просто демонстрационным изображением. Я хочу иметь возможность делать это с любым изображением, не получая «смещения», которое приносит обычная перспективная деформация.
Ты так же быстр, как свет. Впечатляющий.
RE: Голосующий против - поймите, что только после того, как я опубликовал этот ответ, спрашивающий дал понять, что вопрос был только репрезентативным .

Для Gimp есть ofn-trapeze-transformскрипт/плагин. Проверка после установки. Filters > DistortsПлагин работает довольно медленно, так как обрабатывает строку пикселей изображения за строкой пикселей.

Обратите внимание, что то, что вы хотите, искажает прямые линии:

введите описание изображения здесь

На самом деле этот плагин был написан, чтобы продемонстрировать все плохие побочные эффекты такого преобразования :)

Вы можете сделать это с помощью преобразования «деформация».

Очень неудобно это делать, но я уверен, что другого пути нет....

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

введите описание изображения здесь

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