Alguém conhece alguma técnica de compressão de imagem com as seguintes características:
- sem perdas
- streaming - quero compactar em tempo real, pixel por pixel.
- sobrecarga de pouca memória - posso me permitir armazenar em buffer uma única linha, mas, idealmente, nem isso.
- sem dicionários dinâmicos
- apenas imagens do "mundo real", portanto, o desempenho em "casos desagradáveis" como tabuleiros de xadrez não é importante
- Compressão de 2-3x (5x-10x seria ainda melhor, mas isso é pedir muito, eu sei)
- pode operar em pixels de 10 a 16 bits (dependendo da minha câmera)
Minhas imagens terão ~ 1k pixels de largura, com taxas de pixels de ~ 20Mpix / s. A profundidade do pixel será algo entre 10 e 16 bits por pixel (dependendo da escolha da câmera). Suponha que larguras de pixel de sub-16 bits sejam representadas em uma palavra de 16 bits por enquanto, em vez de precisar ser extraído de um fluxo de bits contínuo.
Alguma forma de codificação delta + aritmética, talvez?
image-processing
image-compression
Martin Thompson
fonte
fonte
Respostas:
Você pode usar o Huffyuv: http://neuron2.net/www.math.berkeley.edu/benrg/huffyuv.html
Isso não é muito melhor do que um zip simples, mas ainda é um pouco otimizado para imagens.
Qualquer compressão relacionada à imagem vem de técnicas como quantização vetorial ou codificação Transform. Para fazer uso de transformações como DCT / Wavelet e torná-las sem perdas, você pode pensar em JPEG-LS ou JPEG2000 para compactação. A única coisa é que não está fluindo no seu sentido de definição.
fonte
Parece com o que você colocaria em uma câmera digital para obter um RAW sem perdas.
1 / Verifique o código fonte do dcraw para ver o que vários fabricantes de câmeras já estão fazendo. Por exemplo, o Pentax usa algum esquema int de comprimento variável (comprimento N codificado com um código de huffman, depois N bits) para codificar o delta de um pixel com o pixel anterior da mesma cor no mosaico da Bayer; e isso atinge rotineiramente proporções de 1: 1,5 a 1: 2.
Os arquivos 2 / DNG também podem ser compactados. Verifique como é feito a partir das especificações da Adobe ... Não tenho certeza se é baseado em uma previsão semelhante + codificação int de comprimento variável (que está sendo transmitida); ou se ele usa o JPEG-LS mais avançado baseado em LOCO (e que infelizmente exige várias passagens nos dados).
fonte
O zlib possui um modo de compactação ("HUFFMAN_ONLY") que é rápido e não requer muita memória. Para fotos típicas usando zlib com libpng, recebo taxas de compressão de 1: 2. Você pode experimentá-lo com ImageMagick, GraphicsMagick ou pngcrush.
Todos esses exemplos usam o filtro "sub" (1) PNG, que é eficaz para fotos. Para * Magick, "-quality 1" e para pngcrush, "-m 12" significa usar o filtro "sub" e a compressão "huffman_only".
fonte