Gimp Nicht quadratische Größenänderung

Ich habe mir die Haare ausgerissen und versucht herauszufinden, wie ich Gimp dazu bringen kann, eine Tonleiter so zu machen, wie ich es will. Ich denke, was ich suche, ist entweder eine nichtlineare Skala oder eine Trapezverzerrung. Ich bin mir nicht sicher, ob ich die richtigen Begriffe verwende (was es schwierig macht, mögliche Lösungen zu googeln), also habe ich ein paar Bilder hochgeladen, um das zu demonstrieren. Wenn dies mein Quellbild ist:

Original Bild

Dann möchte ich Folgendes (ich habe dies manuell erstellt, um es zu demonstrieren):

Gewünschtes Bild

Ich habe die Größenänderungswerkzeuge ausprobiert, aber das ermöglicht nur eine quadratische Größenänderung und keine verzerrte Skalierung, wie ich es möchte. Das Scherwerkzeug führt keine Skalierung durch. Die Käfigtransformation verbiegt das Bild, sodass das auch nicht funktioniert. Perspektivische Verzerrung ist nah, wirkt sich aber auf die x-Position der vertikalen Linien aus, die ich nicht möchte:

Nah, aber keine Zigarre

Ich habe auch einige der Filter ausprobiert, konnte aber keinen von ihnen dazu bringen, den gewünschten Effekt zu erzielen (der Kurvenbiegungsfilter scheint zu funktionieren, aber ich kann ihn nicht dazu bringen, das richtige Ergebnis zu erzielen). .

Ich bin ein fairer Programmierer. Wenn also ein benutzerdefiniertes Filterschreiben erforderlich ist, kann ich es wahrscheinlich verwalten, wenn jemand einige Tipps geben könnte, was ich tun muss (vielleicht eine Art Matrixtransformation?).

Versuchen Sie, ein Raster zu erzeugen, oder möchten Sie ein zufälliges Bild transformieren? Für Ersteres habe ich, glaube ich, die Drehbücher. Für letzteres könnte eine sorgfältig erstellte Verdrängungskarte ausreichen.
Nein, ich versuche, ein Bild zu transformieren, habe nur ein Raster verwendet, um zu demonstrieren, wie ich es strecken muss
Ich glaube nicht, dass Sie es einfach mit einer Matrix erreichen können, da dies erfordern würde, dass Ihre Transformation eine affine Transformation ist, was nicht der Fall ist. Eine affine Transformation hält alle geraden Linien gerade, Ihre nicht (Diagonalen werden zu Kurven oder Instanzen).

Antworten (3)

Mögliche Lösung mit einer Verschiebungskarte:

  • Erstellen Sie eine Gruppe mit zwei Ebenen:
    • Unten eine Ebene, die die gewünschte maximale Verschiebung ausdrückt: ein Schwarz-Weiß-Verlauf (Grau 50% ist "keine Änderung", Weiß und Schwarz bewegen die Dinge in entgegengesetzte Richtungen)
    • Oben eine "Dämpfungs"-Ebene, die den Schwarz-Weiß-Verlauf langsam auf ein einfaches 50% Grau abstuft (wir wollen keine Änderungen auf der rechten Seite)
    • Diese Ebene hat eine Ebenenmaske mit einem Schwarz-Weiß-Verlauf (links ist also die Displacement-Maske vollständig zu sehen, während sie rechts in ein Spielgrau von 50 % übergeht). In der Praxis ist dies nicht streng linear, aber dies kann kompensiert werden, indem Kurven verwendet werden, um den Gradienten der Ebenenmaske zu ändern.

Ebenen- und Kurveneinstellungen

Rufen Sie dann Filters>Map>Displace map auf und geben Sie die Gruppe als Displacemap für die Y-Koordinate an.

Das Ergebnis:

Quelle und Ergebnis

Ich habe es gerade ausprobiert und es funktioniert genau so, wie Sie es beschreiben, und genau das, wonach ich gefragt habe :) Schöne Technik - muss mir das für ähnliche "seltsame" Verzerrungen merken, wenn ich sie brauche. Beifall

Das Perspektivwerkzeug kann die erforderliche Aufgabe tatsächlich problemlos ausführen. Wenn Sie eine Bewegung über die x-Achse vermeiden möchten, platzieren Sie einfach eine vertikale Hilfslinie und aktivieren Sie Ansicht -> An Hilfslinien ausrichten. Platzieren Sie die Ecken der Ebene, die Sie transformieren, auf der Hilfslinie, und sie bleiben an Ort und Stelle.

Natürlich können Sie auf diese Weise nur Bewegungen senkrecht zu den Leinwandrändern einschränken.

Obwohl es in diesem Fall nicht Ihren Anforderungen entspricht, wird das "Perspektiven-Transformationswerkzeug" verwendet, um solche Ergebnisse zu erzielen - um eine 3D-Raumneigung einer 2D-Zeichnung zu simulieren.

Wie Sie bisher angemerkt haben, gibt es keine einfache Transformation, die das erreichen kann, was Sie wollen. Ich hoffe, der in der anderen Antwort bereitgestellte Displace-Hack kann es Ihnen, aber ansonsten versuchen Sie lieber, die gewünschte Transformation zu skripten.

Ich möchte nur ein Raster, ein Skript, um die Linien direkt zu zeichnen. Andernfalls sollten Sie ein Skript verwenden, um eine 1 Pixel breite Skalierungstransformation für jede Spalte in Ihrem Bild durchzuführen.

Das OP erwähnte, dass es für ihn / sie nicht funktioniert, da sich entlang der X-Achse keine Änderung ergeben sollte.
Es gibt keine solche Transformation. Ich verstehe, dass es speziell für diese Frage nicht funktioniert, aber es ist das Richtige für alle anderen, die das gewünschte Ergebnis betrachten.