Software para análise de arquivos de imagem

0

Existe algum programa para analisar arquivos, especialmente arquivos de imagem, para Linux, com funcionalidade semelhante a editores hexadecimais, que mostrará o que os bytes mudaram depois que eu pinto alguma área da imagem e etc.

    
por user84072 13.09.2014 / 17:58

3 respostas

3

Se você está apenas procurando uma maneira de comparar uma imagem após a manipulação para poder ver quais pixels (e em quais canais) foram alterados, use a ferramenta compare do ImageMagick. Ele é abordado extensivamente aqui no site da ImageMagick: link .

Veja um exemplo dessa página, mas estou usando uma imagem rosa de este site em vez . Digamos que você tenha uma imagem rose.jpg e execute uma função de nitidez nela, salvando os resultados em reconstruct.jpg .

$ convert rose.jpg -sharpen 0x1 reconstruct.jpg

Em seguida, podemos usar a ferramenta compare para construir uma imagem difference1.png das duas imagens acima, da seguinte forma:

$ compare rose.jpg reconstruct.jpg difference1.png

Sequisermosremoverqualquersugestãodaimagemoriginaldodifference1.png,podemosusaraopção-composesrcpararemoveraindamaisaimagemoriginaldaimagemdadiferença.Osresultadospodemservistosemdifference2.png.

$compare-composesrcrose.jpgreconstruct.jpgdifference2.png

Isso apenas arranha a superfície do que o compare pode fazer. Também pode mostrar as diferenças por canal de cor, entre outras coisas.

O que faz o -compose src ?

Esta operação é discutida em detalhes aqui, se você estiver interessado.

excerto - link

-compose operator

Set the type of image composition. See Alpha Compositing for a detailed discussion of alpha compositing.

This setting effects image processing operators that merge two (or more) images together in some way. This includes the operators, -compare, -composite, -layers composite, -flatten, -mosaic, -layers merge, -border, -frame, and -extent.

It is also one of the primary options for the "composite" command.

    
por 14.09.2014 / 04:31
1

Caminho da Linha de Comando

Existem vários programas de linha de comando, como xxd ou hexdump , que resultarão no conteúdo hexadecimal de um arquivo para o seu terminal. Você pode usar vim para editar arquivos hexadecimais. Consulte este responder .

É realmente isso que você quer fazer? Você afirmou que queria analisar os arquivos de imagem especialmente. Para isso, é melhor usar uma linguagem de programação.

Usando uma linguagem de programação

Uma imagem é simplesmente uma matriz de números. Por exemplo, uma imagem RGB pode ser representada como 3 matrizes contendo valores de 0 a 255. Uma imagem em vermelho puro de 5x5 pixels ficaria assim:

Matriz 1 (plano vermelho):

255 255 255 255 255
255 255 255 255 255
255 255 255 255 255
255 255 255 255 255
255 255 255 255 255

Matriz 2 (plano verde):

0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

Matriz 3 (plano azul):

0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

Para analisar imagens dessa maneira, várias ferramentas foram criadas. Essas ferramentas são bem padronizadas no mundo do processamento de imagens:

    O
  1. MATLAB (Matrix Laboratory) foi originalmente criado para este propósito. O GNU Octave é compatível principalmente com o MATLAB e pode ser usado no lugar dele.
  2. O Python é uma ótima alternativa de código aberto para manipular imagens usando o pacote scikit-image .

Eles são interativos e muito fáceis de usar. O MATLAB fornece um prompt >> onde você digita comandos, por exemplo. Nenhuma compilação necessária.

Exemplo de MATLAB / Octave

Para ler uma imagem:

>> im = imread('Penguins.jpg');

Para extrair o plano vermelho de uma imagem:

>> red = im(:,:,1);

Isso usa o operador : para extrair todas as coordenadas x e todas as coordenadas y do primeiro plano z (o plano vermelho) da imagem.

Para dar uma olhada nos primeiros 5x5 pixels do plano vermelho:

>> red(1:5, 1:5)

ans =

  116  118  118  120  118
  116  116  117  118  116
  118  117  117  118  118
  117  117  118  118  118
  119  118  117  118  118

Não vou postar exemplos em Python, mas é igualmente fácil de fazer.

    
por 14.09.2014 / 02:25
0

Se os arquivos não estiverem em algum formato compactado ou codificado e as alterações forem limitadas, você poderá fazê-lo facilmente com cmp -l .

Quando obtivemos nossa primeira placa gráfica TargaVista que forneceria imagens para um único toca-fitas, ela vinha com um simples utilitário de upload de linha de comando (DOS) e pacote de pintura, mas sem qualquer documentação.¹

O que foi facilmente calculado é que a imagem descompactada tinha o tamanho de 18 * 3 * (largura * altura) pixels. Eu então criei uma imagem preta completa e obtive alguns arquivos em cada pixel, em uma cor primária, em um dos cantos. Comparando esses arquivos (após a transferência para o SunOS) com cmp - , foi fácil analisar a ordem de bytes das linhas e colunas, bem como a ordem das cores, e escrever um programa para descompactar nossas imagens .gif renderizadas para .tga

¹ Isso foi em 1990, antes que houvesse bibliotecas de código aberto que suportavam o .tga / .vst
² Demorou o revendedor, que nos vendeu o cartão, várias semanas para obter-nos uma cópia n-mail, mal-legível, com as informações de formato de arquivo dos EUA. Com base nisso, pude implementar a versão RunLengthEncoded dos arquivos e economizar um tempo de upload por segundo em alguns quadros.

    
por 14.09.2014 / 06:45