Obter diferença entre duas imagens como imagem transparente no GIMP


21

Eu tenho duas imagens Ae Bque são semelhantes em muitas regiões.

Eu quero criar uma imagem Cpara que

B = C on top of A

onde Cdeve ser o mais transparente possível. on top ofé a superposição da camada normal.

Então, Chá algum tipo de diferença entre Ae B. Se Ae Bsão idênticos, então Cé totalmente transparente. Se Ae Bsão muito diferentes, então os seus Cseriam quase idênticos B.


Há uma ótima resposta para esta pergunta no Stack Overflow que usa o ImageMagick: stackoverflow.com/questions/5132749/…
AB

Respostas:


23

Você pode usar o modo de camada "diferença" para criar uma máscara de camada e aplicá-la a B assim:

  1. Abra as duas imagens como camadas, A na parte inferior, B na parte superior
  2. Na caixa de diálogo da camada, marque o modo de camada de B como "diferença". Agora você deve ver a imagem principalmente preta, pois as imagens são parecidas, com as áreas coloridas marcando as áreas diferentes. Essas cores, no entanto, não correspondem às cores de B como você deseja
  3. Editar-> Copiar visível, para obter uma cópia do efeito calculado em B
  4. Duplique a camada B, mude seu modo de volta para "Normal" (vamos chamar essa camada C)
  5. No menu Camadas, adicione uma máscara de camada a C (Camada-> Máscara-> Adicionar máscara de camada).
  6. Com a máscara selecionada, cole o conteúdo copiado na etapa 3 (editar-> colar).
  7. Ancore o conteúdo colado na máscara da camada (camada-> camada âncora)

Aí está você - torne as camadas A e B invisíveis e você deve estar muito perto do que deseja. Outras operações na máscara de camada (eu recomendo usar Cores-> curva) podem ajustar a opacidade / transparência das áreas na camada C.

atualização Respondi recentemente uma pergunta semelhante a esta no Stackoverflow, onde o OP queria executar a tarefa programaticamente (Usando a biblioteca de imagens Python + Python) - Publiquei o programa completo sobre essa pergunta e pode ser útil para qualquer pessoa interessado nesta resposta.


On the layer's dialog, mark B's layer mode as "difference". Desculpe o que? Estou olhando para a janela da ferramenta Camadas e, se clicar com o botão direito na camada B, não vejo nada parecido com a layer mode. O mais próximo que encontrei é Add Layer Mask, mas acho que não é a isso que você está se referindo. Usando a v2.8.22.
Adrian

com a camada selecionada, o modo de camada pode ser escolhido em um menu suspenso na parte superior da caixa de diálogo de camadas, não no menu do botão direito.
jsbueno

Estou tendo um pouco de confusão ou problema com a etapa 6 - parece estar colando o conteúdo em uma nova camada, mesmo com a "máscara C" selecionada, criando uma quarta camada chamada "Seleção flutuante (camada colada)", que é deslocada da posição original - é assim que deve ser?
Code Jockey

É uma "seleção flutuante" até você "ancorá-la" ao seu destino (Ctrl-H). Certifique-se de que a máscara esteja ativa ao colar (Ctrl-V), caso contrário, a ancoragem poderá ir para outro lugar.
Xenoid

5

Existe um método simples para fazer isso:

Abra as imagens como duas camadas, execute Filtros - Animação - Otimizar (Diferença), você deve obter a mesma imagem resultante que agora é feita da camada inferior e uma camada diferencial em cima dela.

As coisas ficam complicadas apenas se você tiver transparência parcial, porque o filtro a remove.
Aqui está uma solução alternativa que encontrei para este caso:

  • Remover canal alfa nas duas camadas (a ação está no menu de contexto)

As imagens receberão fundo branco, mas não se preocupe, vamos desfazê-lo mais tarde.

  • Filtros - Animação - Otimizar (Diferença)

Agora, temos a camada de diferença com fundo branco em locais de transparência parcial, mas precisamos que esses pixels sejam transparentes; portanto, assumiremos a forma do diff e copiaremos a imagem dessa forma da camada superior original. Verifique se a camada diferencial recém-gerada está selecionada e continue:

  • Camada - Camada para tamanho da imagem
  • Editar - Copiar (Ctrl + C)
  • Retornar à imagem original
  • Desfazer, Desfazer para retornar a transparência às nossas camadas
  • Editar - Colar como - Nova camada
  • Alfa para Seleção (no menu de contexto) na camada de diferenças colada
  • Excluir a camada diff colada
  • Verifique se a camada superior está selecionada e copie (Ctrl + C) dela
  • Agora você tem o diff, basta colar (Ctrl + V) e criar uma nova camada a partir dele.

Obviamente, nenhuma mágica acontece, e a camada superior parcialmente transparente não altera as cores nem reduz a transparência da camada inferior; portanto, é apenas para casos de extensão, onde os pixels alterados da camada superior cobrem a camada inferior.


O método do PS jsbueno não funcionou para mim.


1

O GIMP possui um modo de pincel chamado "Apagamento de cores". A aplicação desse pincel, colorido com a cor X, ao pixel definido P1 cria um pixel P2 com canal alfa reduzido, da mesma forma que a mistura de P2 com pixel com a cor X no modo normal resulta no pixel P1. O mesmo efeito, aplicado à região selecionada ou à imagem inteira, pode ser alcançado usando a ação "Cor para alfa" .

O modo Pincel também pode ser aplicado à "ferramenta Clone". Nesse caso, é possível obter cores dos pixels da imagem de fundo A e aplicá-las aos pixels correspondentes da imagem de resultado B. A imagem que resta é a imagem C. desejada.

Em detalhes, a criação da imagem C é a seguinte:

  1. Coloque as imagens A e B como camadas (A abaixo de B).
  2. Duplique a imagem B e chame-a de C. Coloque-a entre A e B. Ocultar a imagem B.
  3. Escolha "Clone Tool". No painel "Opções da ferramenta", defina as seguintes opções: Modo: "Apagar cor"; Pincel: use pincel redondo afiado ("Dureza 100") Tamanho: faça o pincel maior para pintar facilmente toda a imagem de uma só vez.
  4. Selecione Uma camada e CTRL + no pixel superior esquerdo para selecionar um local do qual clonar e lembrar sua posição (para 100% de zoom será (1,1), para 50% será (2,2) etc).
  5. Agora selecione a camada C e comece a pintar a partir do canto superior esquerdo e cubra toda a imagem sem levantar o pincel. Pode parecer que a imagem não muda. Mas se você ocultar a camada A, verá que a camada C agora contém a imagem desejada.
  6. Verifique o resultado: mostre as camadas A e C. Alterne a visibilidade da camada B para garantir que as imagens tenham a mesma aparência. (Você também pode escolher o Modo "Diferença" para a camada B, nesse caso, você deve obter uma imagem absolutamente preta.)

Nota: Este método funciona como descrito se a imagem de fundo for opaca. Em partes transparentes da imagem de plano de fundo, a mistura de C na parte superior de A parece diferente da imagem B.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.