Convertire immagine in raw e rimuovere artefatti jpeg

Installazione, configurazione e utilizzo di applicativi multimediali, masterizzazione, acquisizione e codec audio/video, streaming e altro.
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2872
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Convertire immagine in raw e rimuovere artefatti jpeg

Messaggio da DoctorStrange »

Buonasera a tutti.

Ho scaricato da internet un'immagine che veniva dichiarata in formato raw. Una volta scaricata in locale, la lettura delle specifiche dell'immagine mi restituisce:

Codice: Seleziona tutto

leonardo@leonardo-PC:~/Immagini$ file Immagine-RAW.ARW 
Immagine-RAW.ARW: TIFF image data, little-endian, direntries=24, compression=JPEG (old), description=                               , manufacturer=SONY, model=DSC-RX10M4, orientation=upper-left, xresolution=352, yresolution=360, resolutionunit=2, software=DSC-RX10M4 v2.00, datetime=2021:06:02 10:30:46
Sarei quindi tentato di dire che continua ad esistere una compressione jpeg anche in questa immagine, nonostante sia in formato TIFF e pesa piu di 20 MB.

Dunque la domanda: esiste un modo, preferibilmente da riga di comando, per rimuovere ogni forma di compressione dall'immagine, ed anche ogni tipo di artefatto jpeg, png o simili?

Mi serve perchè dovrò fare una serie di analisi a livello di dati su questa immagine, in particolare la voglio convertire con hexdump nei valori dei suoi singoli pixel, e poi fare analisi dei dati sul dump generato. Se rimanesse dunque qualche artefatto come compressioni jpeg di mezzo, rischierei di avere dei falsi positivi e poi di non poter ricomporre l'immagine una volta applicate le conversioni.

Grazie.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4446
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Convertire immagine in raw e rimuovere artefatti jpeg

Messaggio da UbuNuovo »

Per non avere artefatti, la compressione jpeg deve essere zero (Quality: 100); se c'è compressione, non si può tornare indietro ai dati originali dei pixel.
Se c'è compressione, pixel contigui con colori simili, possono esser trasformati nei famigerati quadretti di colore medio; le informazioni originali vengono perse.
Puoi provare a vedere il livello di compressione con identify di imagemagick.

Codice: Seleziona tutto

identify -format '%Q' nome_file
oppure con -verbose puoi vedere tutte le informazioni sull'immagine, la compressione è in 'Quality'.

Codice: Seleziona tutto

identify -verbose nome_file
Salva l'Ucraina! 🇺🇦
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2872
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: Convertire immagine in raw e rimuovere artefatti jpeg

Messaggio da DoctorStrange »

Ti ringrazio UbuNuovo per l'interessamento. Ho provato entrambi i comandi che mi hai proposto, ma non compare alcuna informazione riguardo la qualità. Forse potrebbe dipendere dal fatto che l'immagine che ho provato è di tipo TIFF? Domani farò altre prove anche con immagini di formato diverso, e posteró i risultati.

Per il momento grazie.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4446
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Convertire immagine in raw e rimuovere artefatti jpeg

Messaggio da UbuNuovo »

Infatti avevo scritto: prova.
Però è strano che tiff usi la compressione jpeg, visto che ha la sua compressione senza perdita (tipo zip); potrebbe essere un errore del comando file?
Chi lo sa?

Edit: Ho guardato, in effetti esiste la compressione jpeg per Tiff. Purtroppo!

Ho creato una tiff compressa in jpg.
Con exiftool con verbose da 1 a 5 (-v1, -v2...-v5) si vede il livello di compressione;
credo che la scala sia da 1 a 10.

Per individuare il tipo di compressione basta identify -verbose, semmai usi grep 'Compression'

Codice: Seleziona tutto

8-) identify -verbose comp_jpg.tiff 
...
Compression: JPEG
...
oppure exiftool senza verbose

Codice: Seleziona tutto

8-) exiftool comp_jpg.tiff 
...
Compression                     : JPEG
...
Con verbosità a 1 si vede il livello di compressione

Codice: Seleziona tutto

8-) exiftool -v1 comp_jpg.tiff
...
  | 3)  Compression = 7
  | 4)  PhotometricInterpretation = 2
...
Semmai prova con verbosità più alta, ma stampa anche troppo, io non ci capisco nulla.
Salva l'Ucraina! 🇺🇦
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2872
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: Convertire immagine in raw e rimuovere artefatti jpeg

Messaggio da DoctorStrange »

Ciao a tutti.

In particolare ad UbuNovo. Mi dispiace se non mi sono fatto vivo prima, ma a causa del lavoro, non ho potuto fare molte prove. Ora comunque ecco il risultato dei miei test.
Prima di tutto, il comando

Codice: Seleziona tutto

identify -verbose NomeImmagine
ora funziona regolarmente, e mi restituisce come "quality" il valore 85. Non saprei dire se sia sintomo o meno della presenza di qualche artefatto ancora da rimuovere, ma ne dubito, per le indagini che seguono.

Dunque prima di tutto, l'immagine che ho usato come jpeg di prova, l'ho scaricata da internet, ed è questa prima che allego.
Immagine-saturno.jpg
Immagine-saturno.jpg (6.63 KiB) Visualizzato 581 volte
Su internet ho poi trovato su stackoverflow, questa discussione: https://stackoverflow.com/questions/437 ... se-command dove, al secondo messaggio suggerisce di aggiungere, prima del comando di rever del dump esadecimale questo script in sed che modifica il dump entrante:

Codice: Seleziona tutto

sed -E 's/ /: /;s/ (..)(..)/ \2\1/g;$d'
Ammetto che, in effetti, in questo modo, posso riconvertire il dump, che un semplice file di testo in una nuova immagine, che è simile a quella di partenza, ma sbagliata. In pratica il risultato della conversione, dopo aver applicato il sed è questo:
Immagine-reverted.jpg
Immagine-reverted.jpg (7.12 KiB) Visualizzato 581 volte
.

Come potete vedere la conversione è sbagliata, ma almeno mi sto avvicinando al risultato perche ora la procedura di conversione in entrambe le direzioni funziona.

La domanda rimane dunque: potresti cortesemente spiegarmi che tipo di sostituzione fa quel "sed", e come io possa adattarlo o parametrizzarlo in modo che l'immagine ricomposta sia corretta?

Lo scopo ultimo è di limitarmi con scala e Spark a modificare semplicemente i valori numerici dell'immagine, e poi riconvertire i valori numerici, con

Codice: Seleziona tutto

xxd -r
in una nuova immagine che dovrebbe essere stata modificata in scala.

Grazie mille.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4446
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Convertire immagine in raw e rimuovere artefatti jpeg

Messaggio da UbuNuovo »

Codice: Seleziona tutto

sed -E 's/ /: /;s/ (..)(..)/ \2\1/g;$d'
la prima espressione sed -E 's/ /: /' sostituisce solo il primo spazio che trova, con i due-punti seguito da uno spazio ': '
la seconda espressione s/ (..)(..)/ \2\1/g scambia di posto tutte le coppie di caratteri precedute da uno spazio cioè abcd diventa cdab
la terza espressione $d elimina (d=delete) l'ultima ($) riga.

Aspetta provo:

Codice: Seleziona tutto

txt='0000000 abcd abcd abcd abcd abcd abcd abcd abcd
0000010 abcd abcd abcd abcd abcd abcd abcd abcd
ultima riga'

Codice: Seleziona tutto

 8-) sed -E 's/ /: /;s/ (..)(..)/ \2\1/g;$d' <<< "$txt"
0000000: cdab cdab cdab cdab cdab cdab cdab cdab
0000010: cdab cdab cdab cdab cdab cdab cdab cdab
Salva l'Ucraina! 🇺🇦
Scrivi risposta

Ritorna a “Multimediale”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 19 ospiti