GIMP: Nichtlineare Bildskalierung

In GIMP möchte ich ein Bild nicht linear auf der horizontalen Achse skalieren können. Die Perspektiven- und Abbildungswerkzeuge funktionieren dafür nicht, weil sie das Bild für die Perspektive vertikal ändern. Das Bild unten zeigt, was ich suche. Ich würde mich über jede Anleitung freuen!Geben Sie hier die Bildbeschreibung ein

Willkommen auf GD.SE, David! Könnte diese Frage Ihnen helfen?

Antworten (2)

Es gibt im grundlegenden GIMP-Konfigurationsfilter Distort > Spherize. Im horizontalen Modus verformt es Ihr Bild, als ob es als Flaschenetikett verwendet würde. Es ist definitiv nichtlinear, aber Sie haben nur wenig Kontrolle. Eine benutzerdefinierte mathematische Transformation wäre besser. Es wird am Ende dieser Antwort besprochen.

Leider ist der dünnste Bereich in der Mitte, nicht am rechten Rand. Sie können jedoch vorübergehend eine leere rechte Hälfte in Ihre Leinwand einfügen.

Denken Sie daran, die Ebenengröße so einzustellen, dass sie die gesamte Leinwand abdeckt. In GIMP sind Ebenen nur so groß wie sie Inhalt haben, wenn man die Größe der Ebene nicht einstellt.

Beliebige nichtlineare Ausdrücke können z. B. angewendet werden. mit G'MIC Filterpaket. Es hat teilweise "Verformungen" Filter Kartesische Transformation.

Ein Beispiel; das Originalbild:

Geben Sie hier die Bildbeschreibung ein

Filterdialog:

Geben Sie hier die Bildbeschreibung ein

Sie schreiben Formeln für die Koordinaten des Punktes im Originalbild, von dem aus der Inhalt zum Ergebnispunkt (x,y) genommen wird. Formeln sind wahrscheinlich mathematische Ausdrücke in Python-Sprache (nicht sicher). Die Parameter w und h sind für die Pixelabmessungen Breite und Höhe des Bildes verfügbar. Sie benötigen sie, um die Kanten anzupassen.

Um etwas zu bekommen, das Ihrer eigenen Zeichnung ähnelt, können Sie für den x-Ausdruck w*f(x/w) schreiben, wobei f=jede Funktion, die zwischen 0 und 1 die folgenden Eigenschaften hat

  1. f(0)=0 und f(1)=1
  2. stetig, wächst monoton
  3. seine Ableitung nimmt monoton ab.

ein beispiel mit dieser idee:

Formel für x: w*(1-exp(-x/w))/(1-exp(-1))

Formel für y: y

das Original:

Geben Sie hier die Bildbeschreibung ein

das Ergebnis:

Geben Sie hier die Bildbeschreibung ein

Sie haben erwähnt, dass Sie ein perspektivisches Raster ausprobiert haben, das leider sowohl x als auch y skaliert hat. Die nächste x-Formel gibt alle möglichen von rechts nach links betrachteten eindimensionalen perspektivischen Skalierungen vom Rastertyp mit unterschiedlichen Werten des Parameters A an. Es muss eine positive Zahl größer als Null sein

Formel für X: w * (A+1) * X/(A * W + X)

Formel für Y: Y

ein zu kleines A, sagen wir A=0,1, macht das Ergebnis zu dicht für ein Bitmap-Bild auf der linken Seite und ein zu großes A, sagen wir A=3, macht den Effekt nutzlos mild. Das vorherige Labyrinthbild ist mit A=1 skaliert:

Geben Sie hier die Bildbeschreibung ein

Ich habe G'MIC in Krita installiert, aber es ist auch für GIMP und Paint.NET verfügbar.

Schwer zu sagen, um welche Sprache es sich handelt, da es in c, java, javascript, rust, c#, python und in den meisten funktionalen Taschenrechnern gleich aussieht. Mathematische Ausdrücke sind genau diese Mathematik.
Distort -> Spherize war genau das, wonach ich gesucht habe, in meinem Fall vertikal statt horizontal, aber das ist einfach eine wählbare Option. Danke schön!

Solche Transformationen sind mathematisch schwer zu definieren. Wenn Ihre Transformation ein Sinus/Cosinus-Gesetz ist, können Sie die Filter verwenden, die Ihre Ebene auf einen Zylinder projizieren (Filter > Karte > Objekt abbilden und auf Zylinder abbilden).

Für eine beliebige Transformation, möglicherweise unter Verwendung einer Verschiebungskarte , aber die eigentliche Karte kann schwierig zu finden sein:

Geben Sie hier die Bildbeschreibung ein

So erstellen Sie die Verschiebungskarte (#2):

  • Erstellen Sie einen Schwarz-Weiß-Verlauf über das Bild
  • Verwenden Sie Kurven, um es in einen Grau-zu-Weiß-zu-Grau-Verlauf zu ändern (der einfache bilaterale Verlauf funktioniert nicht gut)

Geben Sie hier die Bildbeschreibung ein

Wenn Sie andererseits nur ein Gitter erstellen möchten, können Sie, anstatt ein reguläres Gitter zu komprimieren, einen Pfad generieren. Das ofn-path-inbetweenerSkript generiert Zwischenpfade zwischen zwei Pfaden mit einem Quadrat- oder Kosinusgesetz. Ein Nebeneffekt ist, dass die Balken die gleiche Breite haben:

Geben Sie hier die Bildbeschreibung ein