Sto osservando il problema di ridurre lo spazio di archiviazione durante l'archiviazione di più immagini JPEG insieme come un'unica immagine più grande. L'intuizione di base è che le immagini tendono ad avere alcune somiglianze (come quelle prese nello stesso luogo o intorno allo stesso punto del tempo) e possiamo sfruttare questa somiglianza per risparmiare spazio?Compressione immagine JPEG
Il flusso complessivo è: ingresso JPG
Immagini -> Ogni immagine convertiti in RGB
Tiles Immagine -> Riorganizza simili RGB
piastrelle insieme -> Ancora una volta a trasformare in formato JPG
. Naturalmente, durante il recupero delle immagini, sarà necessario il invertire il processo.
Utilizzando il coefficiente DC del componente Y come misura di somiglianza per la riorganizzazione delle piastrelle, ho ottenuto un risparmio di spazio dell'8% per 10 immagini. Quando lo faccio per 100 immagini, i risparmi si riducono a ~ 3%.
Come posso ottenere risparmi dopo tegola riorganizzazione - vale a dire quale parte del processo di codifica JPEG sfrutta questa immagine Mattonelle di riorganizzazione?
Invece di coefficiente DC del componente Y, ci sono alcune altre metriche si potrebbe pensare che sarà meglio sfruttato dai codifica JPEG
revisione:
c'è qualche altro formato immagine oltre a JPG che può sfruttare questo tipo di somiglianza meglio quando si aggregano più immagini? Ad esempio PNG?
Grazie, ha molto senso! Io uso libjpeg per fare la codifica e la decodifica. Come JPEG fa DCT all'interno di macroblocchi 8x8, la somiglianza tra le tessere (più grande dei macroblocchi) probabilmente non aiuta molto. Ma, penso che i coefficienti DCT dei macroblocchi vicini siano codificati relativamente, e questo potrebbe essere migliorato da questa riorganizzazione delle tessere in una certa misura. Ho rivisto la mia domanda - per favore dai un'occhiata. – user655617
Contento di poter aiutare a chiarire le cose. Sì, libjpeg è l'implementazione JFIF di riferimento dello standard JPEG di IJG. Non ricordo i coefficienti DCT che usano la codifica delta (tra macroblocchi vicini). AFAIR, ogni macroblocco diventa una singola matrice 8x8 di coefficienti, che viene quindi decimata (divisa per ridurre il numero di bit necessari per memorizzarli - ed è qui che la "perdita" nella compressione con perdite viene da), e letta in zig -Zag moda. Questo ordine produce long run di 0, che vengono compressi in modo efficiente tramite la codifica run-length (invece di memorizzare 17 zeri, noi memorizziamo 17, 0). –