Por exemplo, para uma conversa recente sobre compactação JPEG, eu queria comparar pixel por pixel o que mudou entre dois JPEGs (um com nível de compressão 100 e outro com nível de compactação 95).
Como faço para gerar bons mapas visuais do que mudou sem a programação tediosa de software personalizado?
Respostas:
Camadas do Photoshop + FTW. (Sim, você também pode usar o Gimp ou qualquer outro software de edição com as mesmas funções.)
Comece com a sua imagem base, no caso acima, usei a imagem 100 da qualidade jpeg.
Na imagem resultante, qualquer pixel diferente das duas imagens será branco. Você pode ajustá-lo para permitir que as coisas sejam "um pouco diferentes" alterando o valor limite.
Exemplo mostrando muita diferença entre os jpeg 92 e 100 do Lightroom.
Exemplo que mostra nenhuma diferença entre 95 e 100.
Não é apenas mostrar um binário "alterado ou não", e se você quisesse mais detalhes sobre o quanto ele mudou, digamos, por canal de cores?
Quanto mais brilhantes os pixels resultantes, mais eles são diferentes nessa cor. A desvantagem, porém, é que você acaba com muita lama cinza ... então, às vezes, é mais fácil limitá-lo para ver onde estão as diferenças. É por isso que eu construo ambos e alterno qual deles é visível.
fonte
Se você usa o Photoshop, veja como eu faria isso:
Coloque os dois jpegs no mesmo arquivo psd, em duas camadas separadas. Eles devem se sobrepor exatamente, pois suas dimensões são as mesmas. (qual deles vai por cima não importa).
Defina o modo de mesclagem da camada como "Diferença". Você veria um resultado principalmente preto. Depende da diferença de qualidade entre as duas camadas originais, você pode ver mais ou menos o ruído.
fonte
Todos os pacotes de processamento de imagens devem facilitar isso. Vou mostrar como fazer isso no Mathematica, se você tiver acesso a esse sistema. O Mathematica é uma linguagem de programação, mas é realmente fácil fazer esse tipo de manipulação; portanto, se você tiver acesso a ela (por exemplo, através de uma licença de universidade), recomendo que experimente!
Primeiro, importe a imagem:
Recomprima usando compressão JPEG
Agora pegue a diferença dos valores de pixel, convertendo-os primeiro em números de ponto flutuante para garantir que os valores negativos sejam preservados.
Não há muito visível na imagem da diferença (a diferença é pequena) e os valores negativos são cortados em preto. Então, vamos redimensionar todos os valores para preencher todo o intervalo dinâmico (o mínimo será escalado para 0, o máximo para 1):
ImageDifference
dá a diferença absoluta das duas imagens e não produz números negativos. Essa é a operação que você provavelmente encontrará nos pacotes de processamento de imagens, especialmente os da GUI (Photoshop, GIMP).Também podemos pegar um único canal RGB, por exemplo, o vermelho, e visualizar as diferenças positivas e negativas usando cores 'opostas':
Aqui está a mesma coisa, com as diferenças amplificadas 5 vezes. Os artefatos JPEG são mais reconhecíveis agora.
A vantagem de usar uma linguagem de programação é que podemos automatizar isso facilmente e ver como a diferença muda para "níveis de compactação" entre 0,1 e 1,0:
fonte
Você pode usar as ferramentas de linha de comando do Imagemagick.
fornecerá o valor absoluto das diferenças para cada canal RGB.
fonte
O GitHub possui algumas ferramentas interessantes de comparação de imagens embutidas na Web, conforme descrito aqui e demonstrado nesta demonstração .
fonte
Na imagem resultante, as partes pretas mostram onde as imagens originais são idênticas e qualquer coisa mais clara mostra diferenças.
fonte