Frage

Ich bin völlig neu in der Bildverarbeitung.Ich weiß nichts darüber, was JPEG intern ist und wie es funktioniert.

Ich frage mich, ob ich irgendwo einen Ruby-Code finden kann, der die folgende einfache Operation ausführt:

  1. Öffnen Sie die JPEG-Datei.
  2. Durchlaufen Sie jedes Pixel und stellen Sie seine Farbe auf fx green ein.
  3. Schreibe das Ergebnis in eine andere Datei.

Mich interessiert besonders, wie dies mit der ruby-vips-Bibliothek erreicht werden kann
https://github.com/ender672/ruby-vips

Mein Ziel - zu lernen, wie man grundlegende Bildverarbeitungsvorgänge mit Ruby-Vips durchführt (Gammakorrektur, Helligkeit, Tönung, ...)

Alle Links zu Arbeitsbeispielen, die komplexer sind als 'Hallo Welt' - wie einer auf der Github-Seite von Ruby-vips - wären sehr dankbar!

Wenn es Alternativen zu Ruby-Vips gibt, wäre ich auch dafür dankbar.


UPDATE

Es ist viel passiert, seit ich diese Frage gestellt habe:

War es hilfreich?

Lösung

Update ruby-vips hat sich ein wenig verändert, seit diese Antwort geschrieben wurde.Ich habe es für die aktuelle Version (2018) überarbeitet.

Ich bin einer der Betreuer von libvips, der Bildverarbeitungsbibliothek, die ruby-vips umschließt.

Tims Ruby-vips-Repository wurde eine Weile nicht berührt.Ich habe hier eine Gabel, die mit aktuellen libvips funktioniert:

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

Hier sind einige Beispiele:

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

Um die roten und blauen Kanäle auf Null zu setzen und einfach ein grünes Bild, mit dem Sie R und B multiplizieren könnten null und G durch 1.ruby-vips verwendet Arrays zur Darstellung von Pixelkonstanten, sodass Sie einfach schreiben können:

out = in * [0, 1, 0]

Ein vollständig lauffähiges Beispiel könnte sein:

#!/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'

Es gibt einen Trick, für den Sie verwenden können new_from_file:wenn Sie wissen, dass Sie nur einfache Operationen von oben nach unten am Bild ausführen, z. B. Rechnen, Filtern oder Ändern der Größe, können Sie ruby-vips mitteilen, dass Sie nur sequentiellen Zugriff auf Pixel benötigen:

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

Jetzt streamen ruby-vips Ihr Bild.Es wird das Laden, Multiplizieren und Speichern parallel ausführen und niemals mehr als ein paar Scanzeilen von Pixeln gleichzeitig im Speicher behalten.Dies kann eine wirklich schöne Verbesserung der Geschwindigkeit und der Speichernutzung bewirken.

Um das Bildgamma zu ändern, könnten Sie Folgendes versuchen:

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

Obwohl das etwas langsam sein wird (es wird pow () dreimal für jedes Pixel aufrufen), wäre es viel schneller, eine Nachschlagetabelle zu erstellen, pow () darauf auszuführen und dann das Bild zuzuordnen durch die Tabelle:

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

Bei Fragen können Sie diese gerne im rubyvips Issue Tracker öffnen:

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

Andere Tipps

Es tut mir leid, dass ich Ruby-Vips nicht kenne, aber imagemagick ist ein Klassiker, wenn es um die Bildverarbeitung geht. Es gibt Ruby-Bindungen in Form von rmagick ( aktueller Repo ), und Sie können viel Funktionalität aus den ImageMagick-Dokumenten ableiten, es gibt jedoch auch drei Tutorials hier sowie viele Beispiele im Web.

Wenn Sie wirklich tief in die Theorie der Bildverarbeitung gehen möchten, die in ihren Wurzeln eine Form der Signalverarbeitung ist (dies ist total aufregend und lohnend, da er häufig sehr ähnliche Algorithmen auf Bildern anwenden kann Audio- / Video-Signale, aber es wird letztendlich sehr schwer auf Math - Fourier Transforms), wenn die Mathematik Sie nicht erschrecken, kann ich nur empfehlen, die Buch von Gonzalez und Woods, ich würde sagen, dass es die bestimmte Referenz in diesem Bereich ist. Es ist teuer, aber es gibt alles, was Sie da brauchen, um Sie zu beginnen und weit darüber hinaus zu bringen. hier ist auch eine Seite mit Links zu kostenlosen eBooks, wenn Sie ohne Ausgaben beginnen möchten viel Geld zuerst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top