Domanda

Io sono completamente nuovo per l'elaborazione dell'immagine.Io non so nulla su ciò che è JPEG internamente e come funziona.

Mi chiedo, se riesco a trovare qualche pezzo di codice ruby eseguire seguendo questa semplice operazione:

  1. Aprire il file jpeg.
  2. Scorrere ogni pixel e impostare il colore di fx verde.
  3. Scrivere il risultato in un altro file.

Io sono particolarmente interessato a come questo può essere realizzato utilizzando ruby-vip biblioteca
https://github.com/ender672/ruby-vips

Il mio obiettivo è imparare come eseguire le operazioni di base operazioni di elaborazione delle immagini utilizzando ruby-vip (correzione gamma, luminosità, tinta, ...)

Eventuali link a esempi più complessi di 'hello world'-come uno su ruby-vip la pagina di github sarebbe molto apprezzato!

Se ci sono alternative al ruby-vip, vorrei essere grati per loro.


AGGIORNAMENTO

Molto è accaduto da quando ho fatto questa domanda:

È stato utile?

Soluzione

aggiornamento ruby-vip ha cambiato un po ' visto che questa risposta è stato scritto.Ho rivisto per la corrente (2018) versione.

Io sono uno dei responsabili di libvips, il libreria di elaborazione immagine che ruby-vip avvolge.

Tim ruby-vip repository non è stato toccato per un po'.Ho una forcella qui che funziona con corrente libvips:

https://github.com/jcupitt/ruby-vips

Ci sono alcuni esempi qui:

https://github.com/jcupitt/ruby-vips/tree/master/example

Per impostare i canali rosso e blu a zero e basta lasciare un verde immagine si potrebbe moltiplicare R e B zero e G per 1.ruby-vip utilizza matrici per rappresentare i pixel costanti, in modo che si può semplicemente scrivere:

out = in * [0, 1, 0]

Un completo praticabile esempio potrebbe essere:

#!/usr/bin/ruby

require 'vips'

im = Vips::Image.new_from_file '/home/john/pics/theo.jpg'
im *= [0, 1, 0]
im.write_to_file 'x.jpg'

C'è un trucco è possibile utilizzare per new_from_file:se sai che sarà solo essere facendo il semplice top-to-bottom operazioni sull'immagine, come l'aritmetica o il filtro o si ridimensiona, si può dire rubino-vips che hai solo bisogno di accesso sequenziale ai pixel:

im = Vips::Image.new_from_file '/home/john/pics/theo.jpg', access: :sequential

Ora ruby-vip trasmetterà in streaming la tua immagine.Esso verrà eseguito il carico, il moltiplicarsi e il salvataggio di tutti in parallelo e non tenere mai più di un paio di linee di scansione di pixel in memoria in qualsiasi momento.Questo può dare davvero un bel miglioramento per la velocità e l'utilizzo della memoria.

Per cambiare l'immagine di gamma si può provare qualcosa di simile:

im = im ** 0.5 * 255 / 255 ** 0.5

Però che possa essere un po ' lento (sarà chiamata pow() tre volte per ogni pixel), sarebbe molto più veloce a fare una tabella di ricerca, eseguire il pow() che, quindi associare l'immagine attraverso la tabella:

lut = Vips::Image.identity
lut = lut ** 0.5 * 255 /255 ** 0.5
im = im.maplut lut

Qualsiasi domanda, non esitate ad aprire loro la rubyvips issue tracker:

https://github.com/jcupitt/ruby-vips/issues

Altri suggerimenti

Mi dispiace, non conosco i VIP di rubino, ma ImageMagick è un classico quando si tratta di elaborazione delle immagini. Ci sono attacchi rubini sotto forma di rmagick ( repo corrente ), e puoi ricavare molte funzionalità dai documenti ImageMagick, ma ci sono anche tre tutorial qui , così come un sacco di esempi sul web.

Se vuoi davvero andare in profondità nella teoria dell'elaborazione delle immagini, che nelle sue radici è una forma di elaborazione del segnale (questo è totalmente eccitante e gratificante in quanto spesso consente di applicare algoritmi molto simili su immagini e Segnali audio / video, ma alla fine diventerà molto pesante sulle trasformazioni di matematica - Fourier), quindi, se la matematica non ti spaventa, posso solo consigliare di leggere il libro di Gonzalez e Woods, direi che è il riferimento definito in questo campo. È costoso, ma c'è tutto ciò di cui hai bisogno lì per iniziare e ben oltre. Ecco anche una pagina con link agli ebook gratuiti se desideri iniziare senza spesa un sacco di soldi prima.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top