Più copie della stessa persona in una foto — Tutorial per Gimp e Hugin

Questo post è nato da un topic aperto su Gimp Italia da Francesco, uno degli utenti con un particolare interesse verso la fotografia, come potete vedere dal suo Flickr. Il topic aveva come oggetto un tutorial di MeetTheGimp per creare una foto della stessa scena in cui una persona compare in più copie.

Il tutorial nella sua forma originaria richiede che le foto vengano scattate con il cavalletto e che la fotocamera sia perfettamente immobile, per evitare disallineamenti. Il risultato di Francesco aveva alcuni problemi sotto questo punto di vista:

Ginny everywhere
Risultato ottenuto senza correzione dell’allineamento

Come lui stesso ha poi spiegato:

L’errore è stato quello di sopravvalutare la stabilità del cavalletto, in effetti la pressione del pulsante ha determinato dei disallineamenti.

Ho quindi proposto l’utilizzo di Hugin, un software normalmente usato per creare panorami, per effettuare l’allineamento preciso delle fotografie (anche dal punto di vista dell’esposizione) e poi Gimp per effettuarne l’unione vera e propria. La correzione dell’allineamento consente di lavorare persino con foto scattate “a mano libera”, a patto che il fotografo non si sposti troppo tra i vari scatti. Con ciò intendo che dovrebbe stare sempre in piedi nello stesso punto, per evitare problemi di prospettiva.

Francesco è stato così gentile da fornirmi le foto e quindi riporto qui la mia versione del tutorial. Il risultato ottenuto è mostrato qui di seguito. I colori sono diversi perché ho elaborato la foto finale in modo diverso.

Risultato finale del tutorial, con allineamento preciso delle foto
Risultato finale del tutorial, con allineamento preciso delle foto

Le istruzioni sono divise in due parti e richiedono che abbiate installato Hugin e Gimp.

Allineamento delle foto

Salvate in una cartella le foto che volete utilizzare, meglio se con un numero progressivo per evitare confusione. Nel seguito assumerò che la foto iniziale (numero 0) includa l’inquadratura corretta, mentre le altre foto saranno allineate in funzione della prima.

Aprite Hugin e controllate di avere l’interfaccia impostata nella modalità corretta. Per fare ciò, andate su Interfaccia » Avanzato. Fatto ciò, trascinate le fotografie nell’area bianca centrale della scheda Foto. Proseguite quindi aprendo la scheda Punti di controllo.

Vedrete visualizzate a sinistra e a destra la stessa immagine (numero 0). Sulla destra, dal menu a tendina, scegliete la foto numero 1.

La foto di riferimento (a sinistra) e la prima foto da allineare (a destra)
La foto di riferimento (a sinistra) e la prima foto da allineare (a destra)

A questo punto dovete cominciare a definire dei punti di controllo sull’immagine, vale a dire cliccare lo stesso punto in entrambe le foto. Facendo clic sulla foto a sinistra, aumenterà lo zoom. La visuale mostrerà un quadrato contenente un forte ingrandimento del punto che avete scelto, e vi permetterà di muoverlo cliccando di nuovo o trascinando il cursore.

Per il primo punto che cliccherete, dovrete fare clic anche a destra, in modo “approssimativo”. Ci penserà Hugin a trovare il punto giusto cercandolo vicino a dove avete cliccato!

Definizione del primo punto di controllo
Definizione del primo punto di controllo

Quando siete soddisfatti del risultato, cliccate col destro per tornare alla visuale delle due foto intere. Dovete quindi ripetere l’operazione, definendo altri punti di controllo: cliccate sulla foto numero 0 e rilasciate il clic quando vi siete posizionati nel punto desiderato. Nell’immagine a destra il punto verrà messo automaticamente.

Per ottenere dei buoni risultati seguite queste indicazioni:

  • scegliete solo spigoli o piccole macchie con caratteristiche chiare, non zone uniformi
  • non utilizzate punti dove in una o nell’altra foto c’è la persona che si sposta
  • predisponete come minimo 10-12 coppie di punti di controllo, mai meno di 8
  • molti punti migliorano il risultato, io ne ho usati 15-18 per ciascuna foto da unire
  • se un oggetto è stato leggermente spostato (es. il cuscino), non piazzateci sopra dei punti
  • se avete creato una coppia di punti errata, trovate il pulsante Cancella in basso

Una volta finito di lavorare sulla foto numero 1, vi troverete davanti a qualcosa di simile a questo:

Le coppie di punti di controllo usate per allineare l'immagine numero 1
Le coppie di punti di controllo usate per allineare l’immagine numero 1

A questo punto, dovete ripetere il processo aprendo l’immagine numero 2 a destra, e così via. Lasciate sempre la foto numero 0 a sinistra. Una volta finito, tornate alla scheda Foto e in basso troverete due pulsanti per ottimizzare il risultato:

Le funzioni di ottimizzazione
Le funzioni di ottimizzazione

Fate clic sul primo pulsante Calcola, confermando il risultato, e poi sul secondo, sempre applicando le modifiche proposte.

Ora è il momento di esportare le foto: aprite la scheda Assemblatore, impostate la proiezione Rettilineare e poi cliccate il pulsante Calcola dimensione ottimale. C’è da poi da selezionare la spunta soltanto per le immagini singole, come mostrato di seguito:

Opzioni per la finestra dell'assemblatore
Opzioni per la finestra dell’assemblatore

Infine premete il pulsante Assembla e il programma vi chiederà in quale cartella salvare il progetto e di conseguenza anche le immagini elaborate. Non resta altro che spostarsi su Gimp! 🙂

Fusione degli scatti

Hugin salva le immagini corrette in formato TIFF con trasparenza. Aprite quella di riferimento (la numero 0) con Gimp e poi fate File » Apri come livelli e scegliete l’immagine successiva. Ora invertite i colori del livello appena importato (cioè quello in alto) tramite il menu Colori » Inverti e sul pannello dei livelli impostate l’opacità al 50%. Otterrete una foto grigia in cui si vedono i bordi degli oggetti:

Evidenziazione delle differenze tra i due livelli
Evidenziazione delle differenze tra i due livelli

Questo trucco funziona in modo molto semplice: se io duplico una foto, e quindi la sovrappongo al 50% con l’inverso, ottengo un grigio completamente uniforme, in quanto i colori “si annullano” col proprio opposto.

Se però uso due foto abbastanza simili ma leggermente non allineate, ottengo un risultato grigio più o meno dappertutto, che però evidenzia i bordi e le differenze. Questa spiegazione è un po’ approssimativa però spero che renda l’idea. 😛

Una volta visualizzata la situazione, bisogna utilizzare lo strumento di spostamento per muovere il livello superiore fino a che i bordi sono più allineati possibile, con particolare attenzione alle aree vicine alla persona (altrove non è necessaria troppa precisione):

Allineamento dei bordi, con particolare attenzione alle aree vicine alla persona fotografata
Allineamento dei bordi, con particolare attenzione alle aree vicine alla persona fotografata

A questo punto è necessario usare una selezione abbastanza approssimativa intorno alla persona nella sua nuova posizione e anche agli oggetti che si sono mossi, come ad esempio il cuscino del divano che si è abbassato leggermente. Create questa selezione con lo strumento di selezione lazo, poi fate Ctrl+I per invertire la selezione e premete il tasto Canc:

Primo ritaglio approssimativo
Primo ritaglio approssimativo

Ora deselezionate (premendo Shift+Ctrl+A) e usate lo strumento gomma per “ammorbidire” il bordo. Dovrete scegliere un pennello sfumato e cancellare piano piano quanto basta per ottenere una fusione omogenea. Una volta rifinito il bordo con la gomma, otterrete qualcosa del genere:

Ritaglio rifinito e sfumato
Ritaglio rifinito e sfumato

Nel caso in cui ci siano delle sovrapposizioni tra le persone (in questo caso le ginocchia), selezionate la parte che deve rimanere visibile, aiutandovi con lo zoom:

Selezione delle zone di sovrapposizione
Selezione delle zone di sovrapposizione

Una volta selezionata la zona, ed eventualmente sfocata leggermente tramite Selezione » Sfumata (dipende da caso a caso), premete Canc e poi ripristinate l’opacità del livello superiore al 100%. Infine, invertite nuovamente i colori e otterrete il risultato della prima fusione:

Risultato della prima fusione
Risultato della prima fusione

Ora dovete ripetere il processo per le altre immagini, una alla volta. Alla fine, unite tutti i livelli selezionando Immagine » Appiattisci immagine e usate lo strumento taglierino per ritagliare le parti trasparenti di troppo sui bordi.

A questo punto avete finito! Poi volendo potete applicare tutti gli effetti che desiderate. Se siete curiosi, nel mio caso ho utilizzato G’MIC per accentuare un po’ i colori. Prima di tutto ho usato l’affilatura con Sharpen (inverse diffusion) e ho duplicato il livello. Sulla copia ho usato Local normalization, giocando un po’ coi parametri e infine ho ridotto l’opacità di quest’ultimo livello al 30%. Poi ne ho aumentato parecchio la saturazione e ho fuso il tutto.

Il risultato è quello che ho inserito all’inizio dell’articolo. Spero che questo tutorial mi abbia consentito di raccontarvi un utilizzo “poco convenzionale” di Hugin, fatemi sapere se avete applicato questo effetto e se vi è stato utile. Buon Gimp! 😉

Intervento su Gimp all’Open Source Day 2013 (30 Novembre)

Banner dell'evento

Il 30 Novembre a Udine si terrà l’Open Source Day 2013, una importante «manifestazione organizzata annualmente da AsCI ed IGLU Gruppo Linux Udine con lo scopo di divulgare, tramite talk, workshop e molto altro, i programmi e la filosofia Open Source». Quest’anno sono stato invitato a partecipare come relatore e terrò una conferenza su Gimp, la quale è stata inclusa all’interno del percorso Multimedia:

Percorso Multimedia (Aula 1)

Gli altri percorsi della manifestazione sono Embedded, Professional, Security e Forensics. È superfluo dire che approfitterò dell’occasione per seguire quanti più interventi possibile relativi all’informatica forense. 😉 Per maggiori informazioni vi rimando al programma ufficiale linkato qui sotto.

Ci vediamo a Udine!

Via Conferenze Open Source Day 2013.

OCR dei PDF con Linux [Wine]

L’Optical Character Recognition è il famoso processo per cui un software analizza una immagine di un testo (solitamente stampato) e tenta di effettuarne la conversione in un documento modificabile. Questo può essere sia un semplice file di testo che una pagina formattata, dipende dal software. Sotto piattaforma Linux esistono diversi strumenti molto validi per questo “lavoro”, a cui si aggiungono alcuni siti web che svolgono questo compito. Tuttavia, io desideravo in particolare effettuare una operazione che sta diventando sempre più popolare, ovvero il cosiddetto PDF sandwich. Ci possono essere due situazioni in cui potete trovarvi ad avere questa necessità:

  1. Possedete un PDF di pagine scansionate, magari a partire da immagini belle pulite e ottimizzate con ScanTailor.
  2. Avete un PDF di un articolo scientifico compilato con \LaTeX, quindi sembra che ci sia il “testo vero” ma in realtà se provate a fare copia incolla (o una ricerca) tutto quello che viene fuori sono caratteri apparentemente privi di senso. Un esempio è questo paper, tra quelli che devo leggere per la mia tesi.

In entrambi i casi, il vostro scopo è ottenere un documento il cui aspetto esteriore sia lo stesso (quindi mantenendo le immagini) ma che sia ricercabile. Ciò viene realizzato da software appositi che creano un livello trasparente con del “vero testo” usando le tecniche OCR. Il risultato non sempre è perfetto, ma sicuramente è molto meglio di avere documenti totalmente non ricercabili. Ci sono alcune guide e script in merito, nonché un live CD nato per fare solo questo.

Tuttavia sono tutte tecniche basate sullo stesso principio: usano Tesseract oppure Cuneiform per creare un file hocr e poi hocr2pdf per creare il risultato finale. Io ho provato personalmente numerosi tutorial e programmi ma il problema è sempre lo stesso: il testo sovraimposto è spesso di dimensioni sbagliate, un po’ a casaccio, e a volte è completamente spostato rispetto alle parole visualizzate. Insomma, il risultato è indegno.

La soluzione funzionante

Alla fine mi sono arreso e ho optato per un software per Windows tramite Wine, in particolare PDF-Xchange Viewer. È un programma che nella versione a pagamento fa un sacco di cose che a me non servono, ma la versione gratuita ha un motore OCR niente male che allinea il testo precisamente e riconosce le colonne abbastanza bene.

Finestra OCR del programma
Finestra OCR del programma

La finestra di riconoscimento è molto semplice da usare e consente di scegliere la lingua e il tipo di PDF. Se il vostro PDF contiene già immagini scegliete la prima voce, ovvero Preserva contenuto originale & aggiungi livello testo. Se invece è un PDF con “falso testo” l’altra opzione vi consente di convertirlo in immagini e poi effettuare il riconoscimento. Se lo fate, vi consiglio una risoluzione di 200, che va bene anche per la stampa. A mio avviso 300 è esagerato, e crea file molto grandi. Alla fine vi basta salvare il documento PDF.

Note di installazione

Il programma si installa molto facilmente con Wine e nelle preferenze è possibile impostarlo in italiano e disattivare le voci PRO dal menu. Per effettuare l’OCR in italiano vi servirà il pacchetto di lingua addizionale, che trovate in questa pagina. L’unico problema è che a volte, con alcune versioni di Wine e (pare) di più nei sistemi a 64bit, il programma crasha quando si salva (seppure di solito il file viene salvato lo stesso). Per questo io vi consiglio di provare a installarlo con PlayOnLinux, nel quale potete testare diverse versioni di Wine e trovare un setup che per voi sia perfetto, anche se comunque non è obbligatorio farlo.

Se il vostro sistema operativo è a 64bit, potete anche risparmiare tempo e scaricare questo file .polApp [62 MB] che ho creato esportandolo da PlayOnLinux. Potete importarlo dal menu del programma, alla voce Plugins » PlayOnLinux Vault » Avanti » Restore an application. Contiene il programma impostato in italiano, i dizionari europei per l’OCR e il tema wooden per un aspetto migliore. A me funziona senza crashare, avendo impostato una versione vecchia di Wine (1.5.28).

Se invece usate Linux a 32bit e sperimentate i crash, provate anche la versione portable, alcuni asseriscono che funzioni meglio. Fatemi sapere se vi funziona e che ne pensate del programma!

Stampante Brother DCP-J140W su Ubuntu Linux

Di recente la mia multifunzione HP si è rotta, ed ho dovuto procurarmi un’altra stampante con scanner integrato. Ho sempre apprezzato HP per il fatto che sviluppa driver ufficiali open source per Linux, rendendo l’utilizzo dei suoi prodotti veramente semplice (tralasciando la stampa su CD e cose del genere). Tuttavia, sappiamo bene che le cartucce di inchiostro HP hanno prezzi da usura e gli ultimi modelli implementano misure sempre più stringenti per contrastare le cartucce non ufficiali o ricaricate. No comment poi sul fatto che per cambiare un colore bisogna gettare tutta la cartuccia tricromatica.

Per questo motivo, ho ritenuto molto intelligente l’osservazione del negoziante che mi ha proposto di acquistare una multifunzione Brother: le cartucce costano poco e l’hardware funziona bene. Prima ho voluto informarmi, e dopo aver verificato che la stampante e lo scanner funzionano con Linux senza problemi anche in modalità wireless, ho optato per la Brother DCP-J140W.

La stampante in questione, qui mostrata con l'alloggiamento delle quattro cartucce aperto
La stampante in questione, qui mostrata con l’alloggiamento delle quattro cartucce aperto

Le caratteristiche che io ritengo più interessanti sono alcune tra quelle riassunte nel sito Brother statunitense:

  • Built-in Wireless Network Capabilities. Convenient wireless (802.11 b/g/n) network interface.
  • Professional Printing Resolutions. Vivid, borderless photo printing up to 6000 x 1200.
  • 4-Cartridge Ink System. Only replace the cartridge that needs to be replaced.
  • N-in-1 Printing and Copying. Helps save money by allowing you to print or copy multiple pages on one page.
  • Flatbed Copying and Scanning. Flatbed copier makes it convenient to copy bound, thick or odd sized documents.

A dire la verità, l’unico difetto è che i driver sono proprietari, perciò Ubuntu non li include e richiedono di essere installati manualmente. Di seguito vi spiegherò come fare per installare la stampante con una configurazione wireless, cioè connessa ad un router e accessibile da qualsiasi computer nella vostra rete domestica. È la configurazione più semplice da realizzare e anche più comoda da usare.

Collegamento wifi della stampante

Per prima cosa procuratevi dal Solutions Center della Brother la manualistica in italiano. In particolare usate la Guida di installazione rapida che vi spiegherà come collegare alla corrente il dispositivo, installare le cartucce e fare un test di stampa. Seguite i passi da 1 a 7, nelle prime sei pagine. La prima accensione della stampante è un processo leggermente lungo, in quanto effettua una pulizia approfondita, e richiede un paio di fogli di carta almeno.

A questo punto, potete iniziare la configurazione del wifi, tralasciando il “finto menefreghismo” di Brother che al passo 8 vi minaccia con affermazioni del tipo:

Queste istruzioni di installazione sono valide per Windows® XP Home/XP Professional x64 Edition, Windows Vista®, Windows® 7 e Mac OS X (versioni 10.5.8, 10.6.x e 10.7.x).

In realtà per attivare il collegamento wireless non dovrete neppure usare il vostro computer, e Brother stessa fornisce i driver anche per Linux. Per questo motivo, dirigetevi senza timore al passo 9 che si trova a pagina 13. Al passo 10, seguite l’opzione BConfigurazione manuale dal pannello di controllo — e assicuratevi di avere annotato il nome della vostra rete wireless e la relativa password. Saltate a pagina 19 e seguite quello che dice.

Quando siete arrivati alla dicitura «L’impostazione senza fili è completa» avete quasi terminato, l’ultima cosa da fare è segnarvi l’indirizzo IP assegnato alla stampante, perché vi servirà per lo scanner. Per farlo, premete Menu sulla stampante, poi scegliete 3. Rete » 1. TCP/IP » 2. Indirizzo IP. Verrà visualizzato qualcosa di simile a 192.168.001.181. Scrivetevelo elidendo gli zeri iniziali dei quattro numeri, per esempio il mio indirizzo diventa 192.168.1.181.

Installazione dei driver per la stampa e la scansione

Ora la stampante è attiva e pronta ad essere adoperata da qualsiasi computer collegato alla LAN. Bisogna però installare i driver sul computer per attivare la stampa e la scansione. Questa parte (per Linux) non è inclusa nel manuale di cui sopra, tuttavia il sito Brother ha una sezione apposita per i driver del pinguino, con pacchetti DEB e RPM.

Procuratevi i due pacchetti DEB presenti nella tabella dedicata alla DCP-J140W e salvateli e se usate Ubuntu a 64bit leggete i prerequisiti indicati qui. A questo punto dovreste essere in grado di installarli semplicemente facendoci doppio clic sopra, oppure da terminale con:

sudo dpkg -i dcp*.deb

Ora aprite l’interfaccia web di CUPS all’indirizzo http://localhost:631/printers e cliccate sulla stampante DCPJ140W. Poi cliccate sul menu a tendina Administration » Modify Printer. Se vi viene richiesto fate il login con i vostri username e password di Ubuntu. Dovreste impostare la stampante Brother che si trova alla voce Discovered Network Printers (potrebbe risultare duplicata) e poi premere su Continue.

Vi verrà presentata un’altra schermata dove potete cambiare alcuni parametri, se volete, e infine potete confermare. Quando vi chiede che driver utilizzare, lasciate la scelta impostata. Alla fine l’importante è che la stampante risulti come stampante di rete, con una posizione “simile” a dnssd://Brother%20DCP-J140W._pdl-datastream._tcp.local/.

Per quanto riguarda lo scanner, vi basta installare il pacchetto DEB di brscan4, stando attenti a scegliere quello giusto per il vostro sistema (32bit o 64bit). L’altro programma serve per scansionare automaticamente premendo il pulsante e salvare l’immagine su uno dei PC, ma non l’ho installato perché non mi serve e non fa parte del driver in sé.

Una volta che avrete installato il pacchetto di brscan4, usate il terminale per aggiungere il vostro scanner, avendo cura di usare l’indirizzo IP che avete precedentemente annotato, per esempio così:

brsaneconfig4 -a name=DCP-J140W model=DCP-J140W ip=192.168.1.181

A questo punto aprite un qualsiasi programma per scansionare e fate una prova.

Note finali

La procedura per i driver la potete ovviamente ripetere per i vari computer che avete. Sicuramente ci si mette meno tempo a farla che non a spiegarla e in pochi minuti tutto è funzionante. Anche se la stampa borderless a me non viene esattamente senza bordi (solitamente rimane un bordo di 1mm su qualche lato) devo dire che questa stampante è molto soddisfacente.

Considerando poi che online si trovano anche 10 cartucce a poco più di 10 euro, direi che il gioco vale la candela. Inoltre, esiste un trucco per allungare la vita delle cartucce!

Buona stampa!

Installare Autopano per ridare funzionalità a Hugin su Ubuntu 13.04

Se utilizzate Hugin — il famoso software per la creazione di immagini panoramiche — su Ubuntu probabilmente ve ne sarete già accorti. Dalla versione 13.04 è stato deciso di rimuovere autopano-sift dai repository, vale a dire il tool usato da Hugin per calcolare i descrittori SIFT e quindi trovare automaticamente dei punti di corrispondenza tra le immagini da unire.

Punti di controllo trovati automaticamente visualizzati in Hugin
Punti di controllo trovati automaticamente visualizzati in Hugin

Questo deriva dall’apertura del bug #1082572, dove si chiede di rimuovere il pacchetto in quanto il progetto risulta abbandonato e usa Mono. Non solo, la richiesta di includere autopano-sift-c (lo stesso programma scritto in C) è stata rifiutata in un altro bug (#323836) con motivazioni abbastanza simili. Per questo motivo ora nei repository manca un componente, seppure questo fosse perfettamente funzionante.

Da ciò ne deriva che sì, Hugin è utilizzabile, con il piccolo dettaglio però che le immagini le dovrete unire totalmente a mano, perché il programma non creerà per voi dei punti di controllo. È vero che i punti di controllo manuali di solito sono migliori, tuttavia nella maggior parte dei casi iniziare con SIFT permette di avere già un’ottima base che poi si può affinare e correggere in poco tempo.

Inoltre è totalmente falso che Hugin è in grado di trovare dei punti di controllo accettabili di suo. Semplicemente la funzionalità interna restituisce pochissimi punti anche in casi facili, di fatto come non averne. Fortunatamente si può recuperare una versione funzionante di autopano-sift-c da questo vecchio PPA e installarla, perché le sue dipendenze sono pressoché nulle.

Potete farlo salvando il pacchetto DEB per la vostra architettura (32 o 64 bit) che trovate in fondo a questa pagina e facendoci doppio click. Vi comparirà la consueta finestra di installazione del pacchetto e vi basterà dare conferma. Infine aprite Hugin e andate nel menu alla voce File » Preferenze » Ricerca dei punti di controllo, impostando Autopano-SIFT-C come predefinito. A questo punto il gioco è fatto e Hugin ritorna ad essere utile come lo era prima!