Как геометрически преобразовать изображение с помощью матрицы

Как я могу преобразовать изображение, используя пользовательскую математическую матрицу 2x2? Чтобы было ясно, математика не является проблемой; У меня уже есть матрица, которую я хочу. Я просто хочу знать, как я могу использовать программное обеспечение, чтобы применить преобразование к изображению.

Я искал в Google плагины GIMP (поскольку я знаю, что он использует матрицу 3x3 для перспективы, хотя он не позволит мне ввести матрицу 3x3). Был один под названием "Mathmap", однако он не будет работать для меня, потому что он поддерживает более старую версию GIMP. Я также искал программы, способные сделать это, но ни одна не пришла.

Преобразование - это геометрическое преобразование, а не преобразование фильтра.

Если кто-нибудь может мне помочь, я очень ценю это.

3 ответа

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

Вот пример сеанса Python, который извлекает ссылку на последнее изображение, открытое в GIMP, и применяет к нему преобразование [2, 0, 0, 0, 2, 0, 0, 0, 1].

Вы можете получить доступ к консоли Python в GIMP в filters->python-fu->console

GIMP 2.8.14 Python Console
Python 2.7.5 (default, Jun 25 2014, 10:19:55) 
[GCC 4.8.2 20131212 (Red Hat 4.8.2-7)]
>>> img = gimp.image_list()[0]
>>> img
<gimp.Image '[Untitled]'>
>>> matrix = [2,0,0, 0,2,0, 0,0,1]
>>> more_parms = [True, TRANSFORM_RESIZE_ADJUST]
>>> drawable = pdb.gimp_drawable_transform_matrix_default(img.layers[0], *(matrix + more_parms))

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

Затем я воспользовался "синтаксическим сахаром" Python для передачи элементов последовательности в качестве отдельных параметров в вызов функции - для этого и используется "*". Чтобы это работало, мне пришлось добавить 2 дополнительных параметра (интерполяция и режим обрезки) к матричным коэффициентам.

Это фактически тот же вызов, что и

pdb.gimp_drawable_transform_matrix_default(img.layers[0], matrix[0], matrix[1], matrix[2], ...., matrix[9], True, TRANSFORM_SIZE_ADJUST) было бы.

Для чего это стоит, я использую GEGL v2.9 с поддержкой GIMP, установленной и обновленной через Ubuntu.

sudo add-apt-repository ppa: отто-кессельгулаш /gimp-edge
sudo apt-get update
sudo apt-get установить gimp gimp-resynthesizer

Интересно, если нет:
Menu: Filters > Generic > Convolution Matrix
... может быть, что вы после?

Если вы не возражаете против рекламы, есть хорошее приложение, которое я использую для всех видов задач обработки изображений: Batch Image Resizer (хотя это гораздо больше, чем resizer)

Он имеет специальное действие именно для задачи, которую вы описали:

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

Похоже, по какой-то причине они не предлагают скачивание на своей главной странице, но мне удалось спасти ссылку на бесплатную версию из другого места на их сайте, надеюсь, это будет работать: BIR Download

Другие вопросы по тегам