Como transformar geometricamente uma imagem usando uma matriz

1

Como posso transformar uma imagem usando uma matriz matemática 2x2 personalizada? Para ser claro, a matemática não é o problema; Eu já tenho a matriz que quero. Eu só quero saber como posso usar o software para aplicar a transformação a uma imagem.

Eu pesquisei no Google por plugins GIMP (como eu sei que ele usa uma matriz 3x3 para a perspectiva, embora não permita a entrada de uma matriz 3x3). Houve um chamado "Mathmap", no entanto, não vai funcionar para mim, porque ele suporta uma versão mais antiga do GIMP. Eu também procurei por programas capazes de fazer isso, mas nenhum deles surgiu.

A transformação é uma transformação geométrica e não uma transformação de filtro.

Se alguém puder me ajudar, eu agradeço muito.

    
por Mark Said Camilleri 13.12.2014 / 12:09

3 respostas

1

Existe uma chamada de procedimento do GIMP, destinada a ser usada em scripts e plug-ins, que podem ser chamados diretamente dos prompts interativos.

Aqui está um exemplo de sessão do Python que recupera uma referência à última imagem aberta no GIMP, e aplica [2, 0, 0, 0, 2, 0, 0, 0, 1] para transformá-lo.

Você pode acessar o console Python no GIMP em 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))

Eu pude encontrar o procedimento 'gimp_drawable_transform_matrix_default clicando no botão "browse" na parte inferior da caixa de diálogo com a sessão do Python, procurando por "matrix", e quando encontrei uma chamada adequada, clique em "apply": cole a chamada de função na sessão do Python com parâmetros simulados, eu quis substituir.

Eu então aproveitei o "syntax sugar" do Python para passar elementos de sequência como parâmetros individuais para uma chamada de função - é para isso que o "*" serve. Para que isso funcione, eu tive que acrescentar os dois parâmetros extras (interpolação e modo clip) aos coeficientes da matriz.

Esta é, na verdade, a mesma chamada que

pdb.gimp_drawable_transform_matrix_default(img.layers[0], matrix[0], matrix[1], matrix[2], ...., matrix[9], True, TRANSFORM_SIZE_ADJUST) seria.

    
por 16.12.2014 / 14:10
0

Para o que vale a pena, estou executando um G2L habilitado v2.9 do GIMP instalado e atualizado através do específico do Ubuntu

sudo add-apt-repository ppa:otto-kesselgulasch/gimp-edge
sudo apt-get update
sudo apt-get install gimp gimp-resynthesizer

Gostaria de saber se não:
Menu: Filters > Generic > Convolution Matrix
... pode ser o que você procura depois?

    
por 13.12.2014 / 13:12
0

Se você não se importa comercial, há um aplicativo legal que eu uso para todos os tipos de tarefas de processamento de imagem: Batch Image Resizer (embora seja muito mais que um redimensionador)

Ele tem uma ação dedicada exatamente para a tarefa que você descreveu:

Vocêpodeexecutá-loapartirdalinhadecomando,comoumaGUI,naprogramaçãooucontinuamenteemsegundoplano,porissoébastanteflexível.

Elesnãoparecemoferecerdownloademsuapáginaprincipalporalgummotivo,maseuconseguisalvarumlinkparaaversãogratuitadeoutrosite,esperoquefuncione:BIR Download

    
por 16.03.2016 / 17:56