Gimp Неквадратное изменение размера

Я рвал на себе волосы, пытаясь понять, как заставить GIMP делать шкалу так, как я хочу. Я думаю, что мне нужен либо нелинейный масштаб, либо трапециевидный дисторшн. Я не уверен, что использую правильные термины (что затрудняет поиск потенциальных решений в Google), поэтому, чтобы продемонстрировать, я наткнулся на пару изображений. Если это исходное изображение:

Исходное изображение

Тогда это то, что я хочу (я создал это вручную, чтобы продемонстрировать):

Желаемое изображение

Я пробовал инструменты изменения размера, но это позволяет изменять размер только в квадрате, а не в искаженном масштабе, как я хочу. Инструмент сдвига не выполняет масштабирование. Преобразование клетки изгибает изображение, так что это тоже не работает. Перспективное искажение близко, но влияет на положение x вертикальных линий, которое мне не нужно:

Близко, но не сигара

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

Я честный программист, поэтому, если ему нужно написать собственный фильтр, я, вероятно, смогу справиться с этим, если кто-нибудь может дать несколько советов относительно того, что мне нужно делать (возможно, какое-то матричное преобразование?)

Вы пытаетесь создать сетку или хотите преобразовать случайное изображение? Для первого, я думаю, у меня есть сценарии. В последнем случае может помочь тщательно проработанная карта смещения.
Нет, я пытаюсь преобразовать изображение, просто использовал сетку, чтобы продемонстрировать, как мне нужно ее растянуть.
Я не думаю, что вы можете получить это просто с помощью матрицы, потому что это потребует, чтобы ваше преобразование было аффинным преобразованием, а это не так. Аффинное преобразование сохраняет все прямые линии прямыми, а ваши — нет (диагонали становятся кривыми или экземплярами).

Ответы (3)

Возможное решение с картой смещения:

  • Создайте группу с двумя слоями:
    • Внизу слой, который выражает желаемое максимальное смещение: градиент от черного к белому (серый 50% — это «без изменений», белый и черный будут перемещать объекты в противоположных направлениях)
    • Выше слой «аттенюатора», который будет медленно выравнивать градиент от черного к белому до простого 50% серого (мы не хотим никаких изменений справа)
    • Этот слой имеет маску слоя с градиентом от черного к белому (таким образом, слева маска смещения видна полностью, а справа она становится серой на 50%). На практике это не строго линейно, но это можно компенсировать, используя Кривые для изменения градиента маски слоя.

настройки слоев и кривых

Затем вызовите Filters>Map>Displace map и укажите группу как карту смещения для координаты Y.

Результат:

источник и результат

Только что попробовал, работает точно так, как вы описываете, и это именно то, о чем я просил :) Хорошая техника - надо будет запомнить для подобных "странных" искажений, если они мне понадобятся. Ваше здоровье

Перспективный инструмент действительно может легко выполнить требуемую задачу. Если вы хотите избежать перемещения по оси x, просто поместите вертикальную направляющую и активируйте View -> Snap to Guides. Поместите углы слоя, который вы трансформируете, на направляющую, и они останутся на месте.

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

Хотя это не соответствует вашим потребностям в этом случае, «Инструмент преобразования перспективы» используется для достижения таких результатов — для имитации наклона 3D-пространства 2D-чертежа.

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

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

ОП упомянул, что это не работает для него / нее, потому что не должно быть никаких изменений по оси X.
Нет такого преобразования. Я понимаю, что это не работает, в частности, для этого вопроса, но это то, что нужно делать всем, кто смотрит на желаемый результат.