Seguito di CompressImmagini2
16 Gen '99
Altro esempio, confrontato col Jpeg. Ho usato il miglior formato di
Jpeg disponibile: ho usato la compressione adattiva del Jpeg Optimizer,
poi ho tolto commenti inutili dal file e poi l'ho compresso entropicamente
in maniera migliore con l'Acb. Il file Wif l'ho confrontato con l'immagine
Jpeg ricostruita con Minerva.
![]() |
![]() |
|
278'704 byte Bmf (35.43%) 35'849 byte questa Jpeg (4.558%) |
=> 2900 byte. Con PicPress tolti commenti e altri dati inutili => 2856 byte. (Compressa poi con Acb => 2177 byte). |
Nonostante il Jpeg sia al meglio delle sue possibilità (o quasi,
sarebbe servita la compressione aritmetica) si deve ammettere che a questi
data rate il Wif è leggermente migliore. Questa differenza è
leggera, ma è consistente per tutte le immagini che ho provato,
ed è quindi un ottimo risultato. E' la prima volta che posso utilizzare
un formato grafico più efficiente del Jpeg.
Nell'immagine della volpe, in confronto alla jpeg, la Wif ha più
dettagli, sia cromatici che spaziali, e inoltre non ha le blocchettature
che Minerva mette nelle zone che non contengono solo la componenete continua
(DC) della traformata coseno (DCT 8x8); decisamente occorrono metodi migliori
di quello del Minerva per ricostruire le Jpeg.
Comprimere-decomprimere una immagine col Wif a basso tasso (~ 25-45)
è un buon modo per farne un filetraggio antirumore.
In fatto di velocità il Wif è paragonabile al jpeg,
quindi molto rapido.
Wif è migliore del jpeg soprattutto ai tassi di compressione
più alti.
Per questo formato non esistono programmi per compressione variabile
a zone e per scelta interattiva di fattore di compressione, però
la dimensione dell'immagine finale è molto più modulabile
del jpeg.
Il Wif è un formato grafico proprietario. La standardizzazione
è quasi indispensabile per formati lossy di dati, perchè
coi lossless si può sempre almeno ricostruirli usando la procedura
originale; se sono in formati lossy i dati sono comunque perduti e la conversione
in altri formati lossless standard, se possibile, non fa che peggiorare
i dati.
Conclusioni sul Wif: comprime leggermente di più
del jpeg, ma non conviene usarlo per motivi di standardizzazione.
Quello che segue è tratto da un articolo in postscipt: Embedded Wavelet Image Compression Based on a Joint Probability Model, Eero P. Simoncelli, Robert W. Buccigrossi.
EWIC-1 outperforms EZW for most compression ratios by about 0.3dB, and EPWIC-2 outperforms EZW by 0.5dB at 1Kbyte, and nearly 1.5dB at 16Kbytes and above. Also shown in figure is the encoding size (relative to that of EWIC-1) as a function of target PSNR. This gives a sense of how long one would wait during a progressive transmission for an image of a given quality. For example, EZW would have a transmission time roughly 30% higher than EPWIC-2 for an image quality of 25dB.Figure. Relative rate-distortion tradeoff for four image coders (JPEG, EZW, EPWIC-1, and EPWIC-2). Left: PSNR values (in dB), relative to EPWIC-1 (dotted horizontal line), as a function of the number of encoded bytes. Right: Number of bytes necessary to achieve a given PSNR, relative to EPWIC-1 (dotted horizontal line). All curves are averages over the set of 13 images (of size 512x512) in our collection.
![]() |
![]() |
|
71'124 byte Png (PSP5), 66'108 byte Bmf |
11'744 byte Jpeg Wgo, Progressivo |
Ho compresso questa immagine a circa 1 b/pixel anche in wif: Case116_0107_19990121.wif
(zippato per poterlo caricare su questo sito).
(Param=116, 11'792 byte). Sia la Jpeg che la Wif non sono riuscito
a comprimerle entropicamente ulteriolmente.
Di seguito ecco qualche dettaglio ingrandito per confronto. Nonostante
le tassellature vedo che soggettivamente Jpeg ha fatto un lavoro migliore.
![]() |
![]() |
![]() |
|
|
|
|
![]() |
![]() |
![]() |
|
|
|
|
Per finire ho fatto delle prove più oggettive, ho calcolato con PpmDiff il RMSE (Root Mean Square Error, vedi più avanti definizione) fra le immagini originali e le compresse. Questo metodo non misura l'effettiva qualità visiva soggettiva di una immagine, ma ne da un valore oggettivo, semplice e veloce da calcolare.
Il primo caso mette a confronto l'immagine della volpe a primavera vista
precedntemente, il secondo l'immagine delle case di montagna.
Ho provato anche il programma SPIHT, già compilato per
Pc, C++ version 8.01 del 8/16/96, di Amir Said: amir@densis.fee.unicamp.br
e William A. Pearlman - pearlman@ecse.rpi.edu, vedi http://ipl.rpi.edu/research/SPIHT/spiht0.html,
questo metodo basato su Wavelet pare essere il migliore compressore
lossy di immagini.
Immagine Volpe
File JpegOptimizer:
2856 byte
File precedente compresso con Acb: 2177
File Wif246:
2174
SPIHT:
2176
Ecco i confronti:
volpe.ppm volpe246wif.ppm RMSE: 11.248368
volpe.ppm volpeaJPO1.ppm RMSE:
15.459730
volpe.ppm volpeaJpo1nr.ppm RMSE: 17.262547
(non ricostruita col minerva)
volpe.ppm volpeSPIHT.ppm RMSE:
10.637528
Immagine Case
Jpeg WebGraphicsOtimizer: 11744 (non comprimibile
entropicamente)
Wif116:
11792
SPIHT:
11812
Confronti:
case.ppm caseWgo.ppm
RMSE: 12.957367
case.ppm case116Wif.ppm RMSE:
10.893498
case.ppm caseSPIHT.ppm
RMSE: 9.878976
casei.ppm case116Wifi.ppm RMSE: 22.174690
(1)
casei.ppm casewgoi.ppm
RMSE: 27.969070 (1)
(1) = prima sono state tutte e tre intensificate con
unsharp masking del PaintShopPro v.5 (r=1 forza=163%, clipping=1).
Primo dettaglio immagine case (vedi nota precedente):
caseo.ppm casejpg.ppm
RMSE: 10.578094
caseo.ppm casewif.ppm
RMSE: 10.244960
|
Si vede che in tutti i casi la compressione Wavelet ha battuto il Jpeg.
Questo non prova che ho mal interpretato le immagini risultanti, ma
che al contrario l'RMSE non è una buona misura di qualità
soggettiva di immagini. In ogni caso il Wif non è un formato da
sottovalutare, specialmente per i livelli di compressione più alti.
Si vede anche che SPIHT è sempre il migliore, e Wif
è sempre migliore del Jpeg ottimizzato.
Il programma SPIHT è abbastanza lento rispetto al jpeg,
ma pur sempre ben utilizzabile. Se devo usare un formato lossless non standard
preferisco usare il migliore, cioè SPIHT. In ogni caso la
differenza rispetto al Jpeg non è molto grande, soggettivamente
circa 1.5 volte migliore, quasi sempre migliore.
N.B. Spiht è ottimo anche perchè perfettamente progressivo. Citazione da una delle pagine del sito di Spiht:
Optimized Embedded Coding
A strict definition of the
embedded coding scheme is: if two files produced by the encoder have size
M
and N bits, with M > N, then the file with size N
is identical to the first N bits of the file with size M.
Let's see how this abstract
definition is used in practice. Suppose you need to compress an image for
three remote users. Each one have different needs of image reproduction
quality, and you find that those qualities can be obtained with the image
compressed to at least 8 Kb, 30 Kb, and 80 Kb, respectively. If you use
a non-embedded encoder (like JPEG), to save in transmission costs (or time)
you must prepare one file for each user. On the other hand, if you use
an embedded encoder (like SPIHT) then you can compress the image to a single
80 Kb file, and then send the first 8 Kb of the file to the first user,
the first 30 Kb to the second user, and the whole file to the third user.
But what is the price to
pay for this "amenity"? Surprisingly, with SPIHT all three users
would get (for the same file size) an image quality comparable or superior
to the most sophisticated non-embedded encoders available today. SPIHT
achieves this feat by optimizing the embedded coding process and always
coding the most important information first.
An even more important application
is for progressive image transmission, where the user can decide
at which point the image quality satisfies his needs, or abort the transmission
after a quick inspection, etc.
Non si butterebbero via dati per vedere thumbnail di immagini su Internet,
tutti i dati della immagine piccola sarebbero sfruttati per l'immagine
ad alta risoluzione.
Nella codifica ai massimi tassi, per ottenere thumbnail nota che è
molto più efficiente comprimere molto una grande immagine, che meno
una piccola. Al limite la grande si può sempre ridurre di dimensioni.
Per immagini molto piccole (dell'ordine di 100x100) Spiht forse risulta
peggiore o molto vicino al Jpeg.
|
|
Nome file compressa
con n. byte file
Bike.cmp SPIHT
16384
BikeJPO.jpg file Jpeg Optimizer
16554
Bike59.wif Compression Engine
16413
File1,file2
RMSE
bike bikejpoMin 7.492867 (Decompresso
con minerva)
bike bikejpo 7.290542
bike bike59Wif 5.845390
bike bikeSPIHT 5.430063
Questi risultati sono interessanti, dato che l'immagine Jpeg decompresa con Minerva appare visivamente leggermente migliore della decompressa normalmente.