Qual è il minimo pattern comprimibile JPG? (il pezzo di stoffa per la ripresa della videocamera, la scala / l'angolazione / l'illuminazione possono variare)


46

Sto provando a progettare un tessuto che, dal punto di vista di una fotocamera, è molto difficile da comprimere con JPG, dando luogo a file di grandi dimensioni (o portando a una bassa qualità dell'immagine se la dimensione del file è fissa).

Deve funzionare anche se il panno è lontano dalla fotocamera o ruotato (diciamo che la scala può variare da 1x a 10x).

Il rumore è abbastanza buono (difficile da comprimere), ma diventa grigio quando si guarda da lontano, diventando facile da comprimere. Un buon modello sarebbe una specie di frattale , simile a tutte le scale.
Il fogliame è migliore (foglie, rami piccoli, rami piccoli, rami grandi), ma usa troppi colori.

Ecco un primo tentativo: Più incomprimibile

Sono sicuro che ci sono schemi più ottimali.
Forse le tessellazioni esagonali o triangolari avrebbero prestazioni migliori.

JPG utilizza lo spazio colore Y ′ Cb Cr , penso che Cb Cr possa essere generato in modo simile, ma immagino sia meglio non usare uniformemente l'intero ambito di Y '(luminosità) poiché la fotocamera saturerà le aree chiare o scure ( l'illuminazione non è mai perfetta).

DOMANDA: Qual è il modello di tessuto ottimale per questo problema?


1
Dovrò tenere d'occhio questa domanda .... se si ottiene una risposta interessante, posso prevedere un ordine di tessuto su www.spoonflower.com (o un servizio simile) e una maglietta davvero difficile da aggiungere alla mia collezione ;-)
RBerteig,

Un progetto di competizione di pattern interessante potrebbe essere: 1) Scattare un'immagine ad alta definizione di tale pattern 2) Ruotarlo, prenderne una porzione casuale (su scala casuale), sfocare un po ', aggiungere un po' di rumore e un piccolo colore casuale deviazione 3) Comprimilo con JPG 4) Vedi le dimensioni del file, calcola le metriche sulla perdita di qualità e calcola il "punteggio" usando queste metriche. 5) Ripeti più volte per convergere al punteggio medio di questo schema 6) Ripeti con altri schemi e confronta i punteggi
Nicolas Raoul

1
Poiché gli algoritmi con perdita di dati possono sempre comprimere di più eliminando più dati, sembra che avresti più fortuna con l'utilizzo di schemi che dipendono dai dettagli ad alta frequenza. Ad esempio, linee sottili. In altre parole, può comprimersi bene, ma si degrada molto rapidamente in termini di qualità. Dipende da cosa vuoi realizzare suppongo. Pensa alle impronte digitali: è un caso classico in cui sono necessarie le wavelet per una buona compressione su JPEG a causa della necessità di preservare i dettagli.
datageist

@datageist: Un'immagine (output della fotocamera grezzo) di un panno con linee potrebbe essere difficile da comprimere, ma fai un passo indietro, scatta un'altra foto: conterrà solo pixel grigi, molto facili da comprimere senza quasi nessuna perdita. Lo schema che sto cercando deve risultare in immagini (output della fotocamera grezzo) difficili da comprimere su una vasta gamma di scale.
Nicolas Raoul,

@NicolasRaoul Bene, capisco, sto solo dicendo che tutto è comprimibile se butti via abbastanza informazioni. Vuoi solo uno schema che abbia la particolarità di essere "difficile da comprimere" (ovvero per divertimento) o stai cercando di scoraggiare attivamente le persone dal tentativo di comprimere le immagini che contengono lo schema?
datageist

Risposte:


15

Il rumore è abbastanza buono (difficile da comprimere), ma diventa grigio quando si guarda da lontano, diventando facile da comprimere. Un buon modello sarebbe una specie di frattale, simile a tutte le scale.

Bene, c'è un rumore frattale . Penso che il rumore browniano sia frattale, con lo stesso aspetto che si ingrandisce. Wikipedia parla dell'aggiunta del rumore Perlin a se stesso a diverse scale per produrre rumore frattale, che è forse identico, non sono sicuro:

Rumore frattale del Perlin

Non penso che sarebbe difficile comprimerlo, però. Il rumore è difficile per la compressione senza perdita di dati, ma JPEG è con perdita di dati, quindi eliminerà i dettagli invece di lottare con esso. Non sono sicuro che sia possibile rendere qualcosa di "difficile da comprimere in JPEG" poiché ignorerà qualsiasi cosa sia troppo difficile da comprimere a quel livello di qualità.

Qualcosa con bordi duri su qualsiasi scala sarebbe probabilmente migliore, come l'infinito piano a scacchiera:

piano a scacchiera infinito

Anche qualcosa con molti colori. Forse guarda i frattali reali invece del rumore frattale. Forse un frattale Mondrian ? :)

Frattale di Mondrian


1
Molte grazie! Il rumore frattale è sicuramente il tipo di cose che stavo cercando, ma nei miei test è compresso bene, immagino che potrebbe usare una transizione più brusca, invece di una fluidità simile a una mappa di calore. Il problema della scacchiera è che le prestazioni dipenderanno davvero da quale parte del tessuto viene scattata nella foto. Il frattale di Mondrian è eccezionale e finora il più performante nei miei test. Forse potrebbe usare più colori e parametri leggermente diversi.
Nicolas Raoul,

@NicolasRaoul: Hmm .. Forse il tappeto Sierpinski con i colori ? Questo è già un modello di trapunta comune .
endolith

Una tassellatura di triangoli o quadrati di Sierpinski potrebbe davvero grandiosa!
Nicolas Raoul,

14

Se stessimo parlando di immagini generate al computer, il rumore sarebbe l'approccio giusto. Ma qui, c'è il passaggio di acquisizione della fotocamera.

La punta frattale è molto importante a causa del problema di invarianza della scala. Non deve essere veramente un frattale, tuttavia, se si considera che esiste una distanza limitata in cui la persona verrà fotografata. Voglio dire, se la persona che indossa il panno è sullo sfondo di un'immagine, non avrà comunque molto impatto ...

Penso che il modo migliore per ingannare l'encoder JPEG sarebbe quello di avere blocchi con coefficienti ad alta frequenza molto elevati che sopravviveranno alla quantizzazione = molti dettagli e spigoli vivi; quindi l'intera sequenza di coefficienti deve essere scritta esplicitamente (invece di un EOB al 15o coefficiente o giù di lì). Il motivo a scacchiera è un buon modo per raggiungere questo obiettivo. L'unico aspetto negativo che vedo è che la bassa risoluzione dell'obiettivo + i filtri antialiasing della fotocamera hanno buone probabilità di offuscarlo! Tutto dovrebbe accadere entro 8x8 blocchi (o 16x16 blocchi cromaticamente) perché JPEG non fa molto sulla scala macro. Devi rendere i tuoi blocchi 8x8 il più disordinati possibile, non importa quanto sia sfocata la lente che li renderà.

Ecco un suggerimento:

modello invariante alla scala, difficile da comprimere in JPEG

Potresti chiederti cosa stanno facendo qui i blocchi meno contrastati, ma aiutano a mantenere la zona contrastata quando la cosa viene ingrandita. La sfida qui è quella di avere qualcosa con uno schema contrastato, indipendentemente dalla scala di visualizzazione.

Non ho valutato formalmente questo. Il modo migliore sarebbe quello di avere uno script che catturi l'immagine, applichi una dozzina di ritaglia / ridimensiona / sfoca con vari parametri e sputi la dimensione totale dei JPEG.


Molte grazie! Sembra abbastanza simile al mio concetto di immagine nella domanda, in realtà, ma molto più bello. Qualche motivo specifico per cui la "frattalità" è dovuta al fattore 4? È meglio del fattore 2?
Nicolas Raoul,

nessun motivo, ho appena provato a renderlo più bello con più sfumature di colore, quindi ho iniziato con un quadrato 4x4.
Pichenettes,

Qualche motivo per scegliere i quadrati anziché i triangoli? Sto provando in questo momento, i triangoli fanno molti spigoli vivi, che penso sia una buona idea. Una bassa "frattalità" potrebbe essere raggiunta con un approccio ibrido triangolo → rombo → esagono → triangolo. Penso che un fattore basso sia positivo poiché aumenta la probabilità che la fotocamera rilevi forme nitide fino al limite di risoluzione.
Nicolas Raoul,

Squares era la cosa più semplice da codificare. Non sono sicuro che le altre forme abbiano una "densità del bordo" migliore rispetto ai quadrati.
Pichenettes,

11

C'è una differenza tra JPEG sfruttabile e Transform Compressible.

Prendi ad esempio il rumore granuloso bianco del televisore.

Un rumore bianco generale viene diffuso al massimo nella frequenza e quindi non esiste un esempio migliore del rumore bianco che nessuna tecnica di codifica del dominio di trasformazione non può comprimere. Se prendi questo rumore e prendi DCT (o DFT, se necessario), scopriremo che anche il dominio della frequenza è molto diffuso e tutti i coefficienti avranno importanza.

Tuttavia, ancora nessuno ti impedisce di essere aggressivo dalla quantizzazione. In questo modo, puoi ancora scartare quantità pesanti dalle regioni ad alta frequenza. Il risultato avrà un errore Mean-Square pesante. Tuttavia, percettivamente sarebbe comunque rumore. Potrebbe essere molto sfocato però.

D'altra parte, ora scatta immagini in presenza di spigoli vivi.

Gli spigoli vivi si diffonderanno anche con la frequenza più alta (ma potrebbe essere solo un po 'meno del primo caso). Tuttavia, nel tentativo di comprimerlo e far cadere l'alta frequenza, ora ci saranno gravi impedimenti visivi. Introdurrà la sfocatura dei bordi, l'effetto di squillo ecc. Mentre la larghezza di banda per tali immagini non è la massima possibile, per JPEG o qualsiasi compressione equivalente, mantenere tali immagini percettivamente uguale sarà dura.

Per qualsiasi compressione con perdita di dati, la resistenza e la semplicità dipendono dalla quantità e dal tipo di distorsione tollerata.


Diciamo che il mio tessuto è una tabella 10 ^ 8x10 ^ 8 di pixel bianchi / neri casuali. La fotocamera scatta una foto di 10x10 pixel del tessuto. Statisticamente, questa immagine 10x10 non avrà tutti i pixel di un grigio molto simile, quindi facile da comprimere con meno distorsione (di qualsiasi tipo) rispetto a un'immagine meno uniforme?
Nicolas Raoul,

10

La composizione seguente mostra una struttura di tipo frattale del motivo. L'immagine successiva è il risultato della media su ciascun blocco di 2x2 pixel del precedente. Il carattere totale del motivo rimane lo stesso ma il contrasto dell'immagine sta gradualmente diminuendo. Come è stato detto prima, l'immagine diventa grigia quando si riduce lo zoom.

Comportamento in scala

Ma usando la proprietà frattale, potremmo sovrapporre diversi modelli di diversa risoluzione per mantenere stabile il contrasto dell'immagine nell'intervallo desiderato. Di seguito è riportato l'esempio del modello a 4 strati (512x512 GIF). Questo risultato è più vicino al rumore browniano e difficilmente comprimibile in JPEG.

Combinazione a 4 strati


5

La mia ipotesi è che il peggior pattern comprimibile sarebbe il rumore bianco (con distribuzione uniforme). Deve apparire rumoroso con risoluzioni diverse, quindi puoi creare le immagini rumorose nello spazio di scala e metterle insieme:

I=inNiGi

INiiGiiσ

Forse un modo migliore per costruire tale immagine sarebbe di lavorare direttamente nel dominio della frequenza, quindi:

  1. Crea un'immagine piena di rumore bianco.
  2. Eseguire l'IDCT a blocchi 8x8 (trasformazione inversa del coseno discreto) sull'immagine.

Il risultato sarebbe il peggior modello comprimibile per JPEG, poiché ha la più alta entropia nel dominio DCT. Ma non sono sicuro di come si comporterà con risoluzioni diverse.


5

IIRC, viene specificato l'algoritmo di decompressione JPEG, tuttavia non lo è l'esatto algoritmo di compressione. Diversi algoritmi possono produrre un file JPEG legale. Quindi dovrai provarlo sui compressori di immagine scelti.

Tutto può essere compresso della stessa quantità da un compressore con perdita, come JPEG. È solo che, a qualsiasi livello di compressione fisso, la qualità della compressione potrebbe variare (il rumore o l'errore nel risultato decompresso aumenterà) a seconda dell'immagine. Quindi vuoi qualcosa che aggiunge una quantità massima di rumore al risultato decompresso. Per questo, si desidera l'errore massimo per la rimozione dei coefficienti di macroblocco ad alta frequenza e per la quantificazione di eventuali coefficienti.

Ciò significa probabilmente picchetti variabili e ad alta frequenza, nonché scale di grigio e di colore variabili che si verificano tra possibili livelli di quantizzazione del compressore dato in una determinata impostazione.

Dal momento che vuoi che funzioni a qualsiasi distanza in qualsiasi illuminazione, dovrai variare la frequenza dei picchetti (forse frattale, o forse solo dilagare con modulazione di frequenza casuale) e i livelli di colore e grigio (in modo non coerente, ad es. colori e livelli in modo indipendente). La varianza delle tonalità dipenderà meno dalla distanza, quindi è necessario sceglierle solo in caso peggiore per i quantizzatori selezionati. La dimensione media dei motivi di colore può essere doppia rispetto ai motivi di luminanza per corrispondere alla composizione di macroblocchi YUV 4: 1: 1 (area).

Vorrei iniziare con un mucchio di modelli Moire altamente colorati a scale selvaggiamente sovrapposte sovrapposte e / o rattoppate insieme frattalmente.


2

Vorrei condividere il modello che ha uno spettro molto piatto (come il rumore bianco). Quindi questo modello è molto difficile da comprimere con JPG. L'immagine di esempio di seguito viene ingrandita 4 volte.

Il modello stesso è regolare, ma non periodico, e potrebbe essere facilmente generato dall'algoritmo deterministico. Ha anche una proprietà frattale.

Pattern non periodico con spettro di rumore quasi bianco

Visto da lontano: originale lontano


2

Il rumore casuale si comprime molto male. Puoi produrlo a colori generando valori R, G, B indipendenti.

Guardare da lontano cancellerà davvero il rumore (con il filtro passa-basso), e puoi evitarlo generando immagini di rumore a risoluzioni diverse, cioè usando pixel sempre più grandi e sovrapponendoli.

Quando aggiungi le immagini, affronti il ​​problema dell'intervallo di valori, che aumenta con il numero di immagini, lascia che N. Se li fai solo una media, l'ampiezza del rumore diminuirà di 1 / N.

Se si sceglie un rumore uniforme non correlato, la sovrapposizione si tradurrà in una distribuzione quasi gaussiana con √ N deviazione standard, quindi invece di dividere per N, è possibile dividere per √ N (con ricentraggio adeguato) per limitare la riduzione dell'ampiezza.

Infine, immagino che sia meglio lasciare i valori avvolgenti piuttosto che saturi, poiché i valori saturi formeranno grandi aree uniformi.


2

Ecco un altro approccio per ottenere il rumore browniano RGB (4096x4096 GIF). Rumore browniano RGB


0

Domanda incredibile! In teoria, il rumore bianco è un segnale che non cambia quando viene ridimensionato nel tempo. Allo stesso modo un frattale non cambia quando viene ridimensionato. Un processo di compressione con perdita richiede solo il più importante dello spettro (tempo o dimensione), non tutti, quindi il frattale e il rumore hanno l'odore dei biscotti. Pertanto, dovresti giocare con i colori e i motivi del tessuto. Devono essere frattali e il comportamento frattale deve essere generato casualmente in bianco. Dovresti ottenere un tessuto che nella foto sembra nero (nello spazio colore CMY) ma nel mondo reale, ha un motivo colorato.

In bocca al lupo! e se ricevi la risposta, per favore, pubblicala !!!.


"Dovresti ottenere un tessuto che in foto appaia nero" <- In tal caso, non sarebbe facilmente comprimibile?
Nicolas Raoul,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.