Qualche prova di riscalatura “retargeted” con GIMP

Nel post precedente “Riscalatura di immagini senza perdita, o quasi” ho presentato questa piccola chicca della riscalatura di immagini secondo “linee di forza”. Ecco cosa si può ottenere già adesso con GIMP:

01-retargeted.jpg

Ho usato un plugin scritto da un italiano che implementa grosso modo le idee di cui si è discusso. Le prime esperienze indicano che la cosa potrebbe farsi molto interessante, ma ovviamente per capirlo bisogna confrontare con l’originale…


Ecco come appariva la foto prima della riscalatura, si tratta un’immagine già evidentemente manomessa con Photoshop (altrimenti cosa cacchio ci faceva un delfino in mezzo al mare?):

01-original.jpg

Ed ecco come sarebbe apparsa l’immagine se l’avessi soltanto scalata per raggiungere le dimensioni desiderate (550×400):

01-scaled.jpg

Abbastanza bruttina, direi: le proporzioni sono completamente sballate. Ecco un altro esempio più pratico per l’uso che ne faccio (o farei) io, prima di tutto l’originale:

02-original.png

Sorry, lo so che è troppo grande per la pagina, ma lo faccio per la scienza :D Ecco la riscalatura normale:

02-scaled.jpg

e la riscalatura “retargeted” secondo le linee di forza:

02-retargeted.jpg

In questo caso il guadagno è meno evidente, ma si nota lo stesso, insieme a qualche evidente storpiatura delle proporzioni.

Ho fatto molte prove di riscalatura ed è difficile capire dove finiscano i vantaggi, anche se di sicuro per certi tipi di foto (paesaggi, nella mia esperienza di questo pomeriggio) sia veramente ottimo. Una cosa in cui non mi sono avventurato troppo è la rimozione/preservazione di aree specifiche delle immagini: ho fatto un paio di prove con una decina di foto ma: o non ho capito bene io come fare oppure serve qualche sostanziale miglioria al plugin.

Ad ogni modo, nella pagina del progetto, sviluppato dall’italiano Carlo Baldassi, trovate i sorgenti e perfino i pacchetti per Debian e Ubuntu (funzionano anche per la versione di GIMP 2.3.* impacchettata nel pollyrepo). Si accede al plugin dal menu “Livello” della finestra immagine di GIMP, e le opzioni sono abbastanza chiare. Magari se ho il tempo provo a sperimentare meglio sulle opzioni più avanzate.

Nel frattempo vi invito caldamente a provare anche voi, è sospettosamente divertente, magari mostrate anche i risultati eventualmente raggiunti! Se vi piace il plugin (ne sono sicuro) vi vorrei girare l’appello che ha fatto Carlo: servono traduttori! Contattatelo se volete contribuire :)

51 pensieri su “Qualche prova di riscalatura “retargeted” con GIMP

  1. Il plugin è sicuramente interessante, anche se l’immagine riscalata ha una perdita troppo evidente nelle immagini, come dici tu, non “paesaggistiche”. Certo che, ad esempio, per sistemarsi uno sfondo desktop o una foto (magari per adattarla ad uno schermo 16:9) il passaggio non si nota.
    Ottimo lavoro!

  2. Io non ho ben capito ancora cosa ti aspetti dall’applicazione di questo effetto.

    Lo spirito dell’algoritmo, per quanto ne capisco, è, invece di comprimere ciecamente i pixel in modo da “farceli stare tutti” in meno spazio, si selezionano linee di pixel (quelle in cui si minimizza una certa funzione, la “energy function”) da eliminare in modo da rendere minima la perdita di informazione.

    Nel caso della vacca e dell’alieno (so long and thank you for the fish) è evidente che i due esseri viventi non sono stati toccati. Sono state tolte dall’algoritmo porzioni di cielo e porzioni di mare, che erano quelle a minore contenuto informativo (avevano minore “energia”). In questo caso l’occhio umano e l’algoritmo vanno daccordo, e il risultato è ottimo (avresti ottenuto lo stesso risultato tagliando la parte superiore della foto).

    Nel caso dello screenshot invece l’algoritmo ha un compito più arduo, poichè tutte le striscie verticali hanno energie simili, cioè è difficile trovare una “linea di forza”, come la chiami, da preferire alle altre o da buttare via. L’algoritmo, essendo tale, e non essendo addestrato a riconoscere le feature che l’occhio umano distingue, taglia qui e lì, rovinando, per esempio, il testo più piccolo, che diventa poco leggibile.

    Dicendo che l’algoritmo “non è addestrato” mi è venuto in mente un possibile uso di reti neurali o altri algoritmi di apprendimento da associare alle energy function. Chissà che qualcuno non ci lavori su e mi rubi l’idea (che ho appena rilasciato in GPL ;-)

  3. Pardon, non ho riletto la prima parte prima di inviare il commento, cerco di scriverla in modo più comprensibile :-)

    Lo spirito dell’algoritmo, per quanto ne capisco, è di selezionare linee di pixel che minimizzano una “energy function”, eliminando le quali si minimizza la perdita di informazione; al contrario di quanto fanno i normali algoritmi di rescaling, che “comprimono” tutti i pixel indistintamente.

    Il resto mi sembra sia abbastanza intellegibile :D

  4. Ho provveduto subito a installarlo sulla mia gentoo ed è veramente impressionante!
    Veramente complimenti a Carlo Baldassi er l’implementazione.

  5. Ehm, effettivamente riscalare in modo “liquido” uno screenshot di una finestra non è molto semplice: c’è il rischio che si “liquefaccia” :) . Il motivo tecnico è sostanzialmente quello descritto da H_Seldon. Comunque credo che con un po’ di perizia si possa fare abbastanza rapidamente, se non proprio del tutto automaticamente.
    Per quanto riguarda la protezione delle parti della foto: felipe, quando parli di “sostanziali migliorie” ti riferisci all’interfaccia poco chiara o al risultato che non è quello sperato? Consigli/suggerimenti/critiche?

    @Ryo: grazie!

    P.S. questa cosa di essere chiamato per NomeECognome mi ricorda molto Charlie Brown :D

  6. Sicuramente è un buon inizio, ma il risultato non è ottimale.

    Anche nel secondo tentativo, la scritta in basso risulta poi inleggibile.

    BTW è comunque un ottimo inizio, soprattutto se misuriamo i tempi di risposta dello sviluppatore all’idea originale. Complimenti!

  7. ouch! mai avrei pensato di buttar via il mio tempo a riscalare immagini -.-” grazie della segnalazione: troppo divertente…

  8. Confermo, quando modifico la grandezza delle immagini, le scritte presenti perdono molto di qualità. Nel caso della prova con il nuovo plugin si ha perdita di qualità delle parole, ma decisamente minore rispetto al ridimensionamento normale.

  9. L’esempio più impressionante è il primo. Tecnologia veramente molto interessante! Penso anche che i difetti che avete riscontrato potrebbero essere risolti…

  10. @ GNAM
    minchia se lo è!

    Applicando un concetto “semplice” è venuto fuori un algoritmo che sembra estrarre “il significato” dalle immagini.

    Se mi avessero detto che fosse possibile senza il video, non ci avrei creduto.

  11. Dunque, il problema è capire cosa si intende per scalare un’immagine.

    Si è partiti dall’immagine A: 428×610 circa 260mila pixel
    Abbiamo l’immagine B: 550×400, circa 220mila pixel, che il pollycoke dice “abbastanza bruttina”
    Abbiamo l’immagine C: 550×400, quella generata dall’algoritmo, che alcuni preferiscono.

    Ora, io so che la trasformazione associata all’immagine B è INVERTIBILE: dall’immagine B si ottiene facilmente l’immagine A, e la perdità di qualità sarà semplicemente dovuta al minor numero di pixel dell’immagine B rispetto all’immagine A. Ma le PROPORZIONI saranno perfettamente mantenute.

    La cosa da provare sarebbe vedere cosa succede convertendo l’immagine C alla risoluzione di partenza, 428×610. Ho il sospetto che la mucca vada a finire su marte,
    spero di sbagliarmi naturalmente.

  12. Il significato delle immagini, fatevi un giro (con windows) qui
    http://labs.live.com/photosynth/
    ma penso ci sia qualcosa di simile anche di adobe.

    I metodi per estrarre il significato delle immagini vengono generalmente utilizzati per creare un ambiente 3d utilizzando piu’ foto bidimensionali, e gli obiettivi non sono certo la perdita di proporzioni.

    Correggetemi, non sono molto di grafica.

  13. @Mercurio

    Il significato? in che senso?

    E’ un algoritmo bello e innovativo, ha i suoi vantaggi e i suoi svantaggi, ma dubito che estragga alcun significato…

    Anche la compressione jpeg elimina parte dell’informazione lasciando comunque comprensibile l’immagine… non è una magia, nè semantica, ma l’applicazione di precise (e ormai consolidate) teorie statistiche che minimizzano la perdita di informazione.

    Ho fatto diverse prove con il plugin di carlo. Credo che i casi esaminati nel video originale postato da felipe (così come l’immagine della vacca e del delfino) siano i casi migliori, in cui i risultati sono ottimi (a parte l’orecchio della vacca).

    Usando immagini semanticamente più complesse il risultato diventa meno entusiasmante.

    E’ interessante, piuttosto che comprimere un’immagine, estenderla. Se l’immagine lo consente (come la vacca e il delfino) l’estensione dell’immagine lascia totalmente inalterati i soggetti principali e il “trucco” è pressocchè impercettibile.

    La parte più interessante riguarda la possibilità di preservare/eliminare porzioni dell’immagine e di riscalarvi il resto “attorno”.
    In questo caso, come è lecito aspettarsi, il risultato finale è notevole.

    Sto raccogliendo alcune immagini. Appena sono soddisfatto del tempo che ho perso le invio a felipe che potrà farne quello che preferisce.

    A tal proposito l’immagine di partenza usata da lele85 mi sembra molto istruttiva.

    Comunque questa storia del retargeting sta assumendo le dimensioni della psicosi collettiva :D

  14. @GNAM #19: infatti il plugin perde informazioni (ma anche uno scaling normale, riducendo della metà la larghezza ogni nuovo pixel contiene le informazioni di due pixel originali, e non è possibile recuperare la differenza), infatti i due ricercatori hanno proposto anche un nuovo formato immagine che oltre all’immagine salvi anche le informazioni sui percorsi a energia minima, in modo che possano venire tolti e riaggiunti on-the-fly.

  15. @H_Seldon

    Purtroppo le immagini che si adattano meglio a questo genere di trasformazioni sono ben poche! Ma devo dire che l’algoritmo si comporta abbastanza bene, sopratutto se lo sfondo è poco vario (nel video usano una spiaggia).

    P.S.
    Come va con la psicostoria? :P

  16. la butto là: ma invece di lavorare sugli algoritmi della scalatura, perchè non migliorare gli algoritmi della conversione nei vari formati (un jpg decente per esempio?)… non mi si fraintenda, contentissimo, però dal mio punto di vista ci sono pecche di gimp molto più gravi, e la speranza che qualche santo ci si dedichi non muore mai.

  17. @H_Seldon: secondo me la stai facendo più tragica di quello che è. Mi spiego meglio: hai ragione tu su quanto riguarda la perdita di informazioni, su quello non si discute.
    E’ anche vero però che le informazioni si perdono anche scalando l’immagine e cambiando le sue proporzioni. In poche parole se un’immagine è stata creata in un certo modo, se poi la si vuole modificare per qualche scopo, è abbastanza ovvio che il prezzo da pagare sia perdita di immagini.
    La potenza di questo algoritmo è che ti permette di perdere informazioni che non sono poi così utili (prendi l’esempio della mucca e del delfino, come hai detto tu, si perde informazioni sul cielo e sul mare, non sui due soggetti).
    Nel caso poi da te citato, ossia se è l’immagine da modificare è molto più complessa dell’esempio fatto da Felipe, hai la possibiltà di dire all’algoritmo quali parti sono per te necessarie e quali parti è possibile eleminare.
    Quindi secondo me il tuo discorso sulla perdita di informazioni non ha molto senso anche se è logico e giusto perché qualsiasi tipo di modifica fa perdere informazioni all’immagine.

  18. @DierRe

    scusami, non ho capito quale mio discorso “non ha senso anche se è logico e giusto”… e cosa stia facendo “più tragica di quello che è”.
    Non ho espresso alcuna opinione, quindi non so nemmeno dove possa essere nato l’equivoco.
    Se invece ho detto qualche minchiata (non sono un esperto in materia) sarò felice di essere corretto :-)

  19. Il discorso è: è vero che si perde informazione (quindi hai detto una cosa giusta), però non è lo scopo di una modifica ad un’immagine quello di mantenere per intero l’informazione. Lo scopo di questo algoritmo è quello di mantenere ben salde le informazioni più importanti a discapito di altre. Però è quello che tentano di fare tutti i metodi di modifica delle immagini.
    Quindi è per questo che il tuo modo di vederla è un pò tragico, ovviamente parlando in maniera ironica.

  20. Si, che poi secondo me un plugin in gimp e’ anche relativamente interessante… Certo, torna sempre utile, credo che vada bene, ma chi gia’ smanetta con gimp forse sta producendo immagini che sa gia’ come vorranno essere e dove verranno guardate. Ma imho questa tecnologia da il massimo sulle tecnologie scalabili… Intendo dire che (senza nulla togliere a quanto fatto fin ora), la maggioranza degli utenti ne giovera’ qualcosa quando sara’ immediato usare questo algoritmo tramite framework e strumenti per il web (i.e. quando con php io avro’ le dimensioni della pagina e creero’ un thumbnail mediante questo mezzo), ma soprattutto quando sara’ una cosa diffusa *nei browser*. Non mi dispiacerebbe affatto vedere questa funzionalita’ in Gran Paradiso… voi che dite? :)

  21. @H_Seldon
    “Il significato? in che senso?
    E’ un algoritmo bello e innovativo, ha i suoi vantaggi e i suoi svantaggi, ma dubito che estragga alcun significato…”

    “Usando immagini semanticamente più complesse il risultato diventa meno entusiasmante.”

    O_o ma scusa ti sei risposto da solo!

    L’algoritmo sembra riconoscere “le priorità”, dal punto di vista umano, delle figure all’interno di una immagine: difatti, come dici, usando immagini semanticamente complesse il risultato diventa meno entusiasmante.

  22. buh, credo di essermi perso…

    @Mercurio
    A me sembra di aver detto giusto il contrario. Se l’immagine è semanticamente più articolata (cioè se ci sono più figure all’interno di un’immagine) l’algoritmo fa più fatica a riconoscerle. Non so cosa vuoi dire tu, ma spero che quello che voglio dire io sia chiaro. Anche se fosse una minchiata :-)

    @DierRe
    “Lo scopo di questo algoritmo è quello di mantenere ben salde le informazioni più importanti a discapito di altre. Però è quello che tentano di fare tutti i metodi di modifica delle immagini.”
    A me sembra che stiamo dicendo la stessa cosa, continuo a non capire qual è il discorso col quale non sei d’accordo, ma dubito che la cosa abbia qualche rilevanza… parlando di informazione… questa discussione non aggiunge e non toglie informazione a nessuno :-)

  23. non diciamo la stessa cosa perché tu dici, a meno che io non abbia capito male, che perdere informazioni è un problema, mentre io dico che perdere informazioni fa parte delle regole del gioco in quanto una modifica, per definizione, cambia il contenuto.

  24. E mi riallaccio a quello che dice Mercurio: quando tu metti immagini “semanticamente” più complicate è difficile capire cosa togliere e cosa mantenere e la FIGATA (perché di quello si tratta :D) di questo algortimo è che in questi casi è possibile scegliere cosa mantenere. E’ davvero una genialata, rosico per non averci pensato io :D

  25. Confermo che diciamo la stessa cosa, infatti (scusa felipe -.-) nel commento #4 ho scritto:
    Lo spirito dell’algoritmo, per quanto ne capisco, è di selezionare linee di pixel che minimizzano una “energy function”, eliminando le quali si minimizza la perdita di informazione; al contrario di quanto fanno i normali algoritmi di rescaling, che “comprimono” tutti i pixel indistintamente.

    Nel #21, in risposta a qualcuno:
    Anche la compressione jpeg elimina parte dell’informazione lasciando comunque comprensibile l’immagine… non è una magia, nè semantica, ma l’applicazione di precise (e ormai consolidate) teorie statistiche che minimizzano la perdita di informazione.

    e poi:
    La parte più interessante riguarda la possibilità di preservare/eliminare porzioni dell’immagine e di riscalarvi il resto “attorno”.
    In questo caso, come è lecito aspettarsi, il risultato finale è notevole.

    Non lo so, dopo questo non mi rimane che dirti che hai ragione :-)

  26. Ah, comunque felipe nella foga di ieri mi ero dimenticato di farti i complimenti per il blog, di cui sono assiduo lettore!

  27. meno male che ci sei tu, io sta cosa non la sapevo per niente eppure mi servirebbe tantissimo visto che faccio grafica! Grazie mille e continua così, nel senso, come dici tu stesso, non è necessario dare SOLO le latest news, certe volte è meglio segnalare cose utili punto e basta :)

  28. @H_Seldon
    “A me sembra di aver detto giusto il contrario. Se l’immagine è semanticamente più articolata (cioè se ci sono più figure all’interno di un’immagine) l’algoritmo fa più fatica a riconoscerle.”

    Quando mai hai visto le parole “semantica” e “filtro grafico” su una stessa pagina web? Il fatto che tu stesso le abbia messe in relazione, vuol dire che il filtro fa venire in mente qualcosa di nuovo ^^.

    Questo algoritmo *sembra* riscalare riconoscendo le parti importanti dal punto di vista umano, usando concetti matematici semplici.
    E’ ovvio che usando immagini “semanticamente più complesse” l’algoritmo fallisca: ma è una enorme novità il fatto di misurare l’efficacia di un filtro grafico con la semantica delle immagini!!! Almeno, io non ho mai visto niente di simile: sempre solo pixel e analisi di fourier.

    I neuroscienziati (e il Seldon originale :P) si esalterebbero a verificare la possibiità che il cervello umano possa distinguere le parti importanti di una immagine con un meccanismo simile a quello delle “linee di energia”. Anche noi abbiamo difficoltà a riconoscere le immagini semanticamente più complesse. Cmq tutto ciò è ot.

    Significativo è il fatto che l’algoritmo non dia al testo in una immagine la priorità che esso meriterebbe.

  29. @DierRe
    Figurati, l’importante è chiarirsi. La discussione è fervida ;-)

    @Mercurio
    “Quando mai hai visto le parole “semantica” e “filtro grafico” su una stessa pagina web?”

    Quando tu hai parlato di significato. Da quel momento ho usato la parola semantica per dire qualcosa che anche altri, in altri commenti, hanno detto, e che tu confermi nei tuoi commenti:

    caso a) “poca semantica” + “zone a bassa energia molto definite” -> l’algoritmo isola le zone ad alta energia e non le scala.
    L’algoritmo e il mio cervello vanno a braccetto. Esempi: i paesaggi, la spiaggia, la vacca con il cielo sullo sfondo.

    caso b) “molta semantica” + “zone a bassa energia poco definite” -> l’algoritmo ha difficoltà a trovare percorsi ad alta energia in corrispondenza dei “soggetti semantici”.
    L’algoritmo e il mio cervello vanno in conflitto. Esempi: immagini con molta “dinamica”, in cui i soggetti sono difficilmente isolabili rispetto allo sfondo.

    *A me sembra* che la conclusione sia proprio che la semantica non c’entra nulla, come cercavo di dire quando ho risposto al tuo commento #16.

    Questo non vuol dire che io disprezzi l’algoritmo (nè che io abbia ragione). Vuol dire che *mi sembra* che la forza dell’algoritmo non stia nel ridimensionamento arbitrario e automatico delle immagini. Tanto vero che le applicazioni migliori si hanno quando l’utente fornisce informazioni (secondo la *propria* semantica) all’algoritmo. Da queste applicazioni emergono risultati affascinanti (la sparizione di una persona, ad esempio, o la sparizione di un testo, come visto nel video originale)

    Questo non mi sembra affatto OT. OT è semmai il fatto che un commento si trasformi in una catena infinita di commenti solo per spiegare il proprio punto di vista (giusto o sbagliato che sia) e di questo mi assumo le mie responsabilità :-).

    [OT mode = on]
    “Almeno, io non ho mai visto niente di simile: sempre solo pixel e analisi di fourier.”

    Esistono vari metodi per estrarre informazioni morfologiche da immagini (pattern recognition).
    Alcuni sono supervisionati (fornisci gli esempi alla macchina e la macchina impara a riconoscerli) oppure non-supervisionati. Sono molto usati per il riconoscimento vocale e di immagini. Si possono basare, ad esempio, su metodi neurali o sull’applicazione di trasformate wavelet (su cui è basato anche il formato JPEG200).
    Alcune applicazioni sono: separazione automatica o semi-automatica di stelle e galassie in grossi cataloghi di immagini astrofisiche; screening di massa (automatico o semiautomatico) di immagini biomediche alla ricerca di cellule cancerose.
    Molti algoritmi per la segmentazione non supervisionata dei segnali è già usata per realizzare molti filtri audio/video.
    E (lo ribadisco) ciò non vuol dire che l’algoritmo sia da buttare (anzi).
    [OT mode = off]

  30. In effetti come plugin non è male anch ese poi all’atto pratico mi sembra che dovrebbero migliorarlo un pochetto, non è ancora così entusiasmante dal mio punto di vista anche se potrebbe decisamente far comodo.
    E’ comunque una cosa molto adatta nel web e lo si vede bene nel filmato.

  31. io no riesco a installarlo come si fa?
    Qualcuno che mi aiuti non capisco l’inglese lo so è una mia limitazione. Ho scaricato il file tar, lo ho scompattato, sono entrato nella cartelal tramite terminale ho fatto ./configure poi make, make check, e make install fatto questultimo comando mi ha dato errore allora ho messo avanti sudo make install ed è aadto tutto a buon fine, pensavo. Ho aperto Gimp ma non lo trovo cosa devo fare? Qualcuno mi aiuta? Grazie

  32. @Seldon
    “Esempi: immagini con molta “dinamica”, in cui i soggetti sono difficilmente isolabili rispetto allo sfondo.”

    Sarebbe interessante vedere se anche il cervello umano ha più difficoltà ad elaborare questo tipo di immagini :P

    Comunque ormai siamo al cincischio più totale ^^”.

    Se non altro credo si possa dire che lo scopo di questo algoritmo sia di ridimensionare preservando (in maniera meglio se automatica) le parti più “umanamente” importanti.

    Molti degli altri esempi che hai fatto già li conoscevo, forse mi stupiscono di meno perché capisco meglio qual’è la relazione matematica che si vuole estrarre dall’immagine. Mentre qui, a partire dall’ “le linee di energia” alla mucca che non si deforma mi sembra un pò più un mistero.

  33. per H_Seldon e Mercurio
    otototototototo
    cito il film dei trasformers riguardo all’analisi dei segnali:
    secondo me bisogna finirla con le trasformate di fourier e passare alla meccanica quantistica
    ehehehehehehe.

  34. @Egosonio
    la tipa voleva fare la figa, tanto lo sapeva che anche in meccanica quantistica si usa la transormata di fourier :D

  35. Howdy I am so thrilled I found your website, I really
    found you by accident, while I was looking on Aol for something else, Anyways I am here now and would just like to say thank you for a tremendous post and a all round thrilling blog (I
    also love the theme/design), I don’t have time to go through it all at the minute but
    I have book-marked it and also included your RSS
    feeds, so when I have time I will be back to read much more, Please do keep up the awesome job.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...