Como posso obter a diferença entre duas imagens? Eu tenho a imagem original. Alguém escreveu uma cópia exata da imagem original. Agora, preciso comparar o original com o escrito na imagem e extrair apenas a escrita no formato de imagem.
Exemplo: Eu tenho uma foto de uma casa. Alguém pegou uma cópia e escreveu "Olá!" na cópia. Quero, de alguma forma, comparar as duas figuras, remover a casa e ficar com uma imagem das palavras "Olá!".
Isso é possível com o ImageMagick? Eu sei que existem maneiras de obter a diferença estatística entre as imagens, mas não é isso que estou procurando.
image
image-processing
imagemagick
diff
difference
Justin Noel
fonte
fonte
Respostas:
Meus favoritos são esses dois:
A única diferença entre os 2 comandos acima: o primeiro mostra a diferença visual entre as duas imagens como um arquivo PNG, a segunda como um PDF.
O arquivo diff resultante exibe todos os pixels diferentes na cor vermelha. Os que não mudam parecem brancos.
Curto e grosso.
Observe que suas imagens não precisam ser do mesmo tipo. Você pode até misturar JPEG, TIFF, PNG - sob uma condição: as imagens devem ter o mesmo tamanho (dimensão da imagem em pixels). O formato de saída é determinado pela extensão do nome do arquivo de saída.
Por algum motivo, se você precisar de uma resolução maior que a padrão (72 dpi) - adicione apenas uma
-density
parâmetro :Exemplos ilustrados
Aqui estão algumas ilustrações dos resultados para variações do comando acima. Nota: os dois arquivos comparados eram arquivos PDF , por isso também funciona com eles (desde que sejam pagers 1)!
Esquerda: Imagem com texto Centro: Imagem original Direita: Diferenças (= texto) em pixels vermelhos.
Este é o mesmo comando que sugeri anteriormente.
Esquerda: Imagem com texto Centro: Imagem original Direita: Diferenças em pixels 'verdes'.
Este comando adiciona um parâmetro para fazer com que os pixels da diferença sejam 'seagreen', em vez do vermelho padrão.
Esquerda: Imagem com texto Centro: Imagem original Direita: Diferenças azuis (mas com algum contexto de contexto) l
Este comando remove a
-compose src
peça - o resultado é o comportamento padrãocompare
que mantém como plano de fundo iluminado a primeira das 2 imagens diferentes. (Desta vez, com o parâmetro adicionado para fazer com que os pixels do diff apareçam em azul.)fonte
'compare'
. Para a v7.x do ImageMagick, você deve executar'magick compare'
.Embora
compare
faça um bom trabalho para muitas aplicações, descobri que às vezes prefiro uma abordagem diferente, principalmente quando comparamos imagens que são principalmente em escala de cinza:A idéia é a seguinte: converta ambos
file1.png
efile2.png
em escala de cinza. Em seguida, trate o primeiro como o canal vermelho da imagem resultante, o segundo como o canal verde. O canal azul é formado a partir desses dois usando odarken
operador de composição, o que significa essencialmente levar o mínimo.Portanto, as coisas brancas nas duas imagens permanecem brancas. Coisas pretas nas duas imagens permanecem pretas. Coisas brancas na primeira imagem, mas pretas na segunda ficam vermelhas, e coisas brancas na segunda, mas pretas na primeira ficam verdes.
O resultado fornece uma imagem bem codificada por cores, na qual você pode associar facilmente verde à primeira entrada e vermelho à segunda. Aqui está um exemplo em que estou usando isso para comparar a saída do LaTeX com a do KaTeX (antes de eu corrigir algum bug para melhorar isso):
Você pode combinar as abordagens, usando
compare
para ver onde algo mudou e, em seguida, usando o acima para ver em mais detalhes como ele mudou.fonte
-colorspace gray
vez de-grayscale Rec709Luminance
corrigir isso, mas isso atrapalha a composição. Adicione-respect-parentheses
como a primeira opção paraconvert
cuidar disso.pdfdiff
diretório e imprime adicionalmente os números das páginas que diferem entre os dois PDFs.-grayscale
não é suportado, eu tive que usar-colorspace gray
como @BrechtMachiels sugeriu