Skript Verzerrungen

Dabei seit
29.07.05
Beiträge
577
Standort
Altenburg
#81
AW: Verzerrungen

@Walter:
Hier mal zur Demo der Interpolation:

ACHTUNG:
Bilder sind ausgetauscht!!!
Cash des Explorers kann noch die alten anzeigen.

Text mit FF getextet, mit Script verbogen

mittlerer Text mit FF getextet
oberer Text mit Antialiasing gezeichnet
mit pixelweiser Interpolation verbogen
unterer Text gebogen getextet (mit Antialiasuing)


Der Unterschied ist an den Kanten zu erkennen. Bei feinen Konturen ist der Effekt entsprechend deutlicher! Auch an den Würfelkanten ist ein kleiner Unterschied , das kann bei Photo aber meist tolleriert werden.

Für pixelweisen Zugriff kannst Du ja mal folgendes Script laufen lassen:

//FFSubmenu=HE-Tools
//FFName=Spiegel

//*************************************************************************
//**************************** Spiegelung *******************************
//*************************************************************************
//************ März 2013 ******************
//*************************************************************************

var orgW=FF_GetImageWidth();
var orgH=FF_GetImageHeight();
var L,C;
var Col;
var R,G,B;

if ((0==orgW) || (0==orgH))
{ FF_MessageBox("Kein Bild geladen",0)
}
else
{
for (L=(orgH - 1);L>=0;L--)
{
for (C=(orgW - 1) / 2 + 0.5;C>=0;C--)
{
Col=FF_GetPixel(orgW - 1 - C,L);
R=Col & 0xff;
G=(Col>>8) & 0xff;
B=(Col>>16) & 0xff;
Col=FF_GetPixel(C,L);
R=(R + (Col & 0xff)) / 2;
G=(G + ((Col>>8) & 0xff)) / 2;
B=(B + ((Col>>16) & 0xff)) / 2;
Col=R + (G<<8) + (B<<16);
FF_SetPixel(C,L,Col);
}
}
FF_ReLoad();
}

**********************************************************

Das macht nix sinnvolles (spiegelt nur die rechte in die linke Hälfte. Das gibts schon besser!

ABER: Das zeigt die Verzögerung beim Zugriff auf die Pixel!!!

Es werden immer 2 Pixel- Werte gemischt.

Im echten Fall der Bildbearbeitung müssten aber:
a) je 4 Pixel gemittelt werden (oder auch mehr)
b) Das Bild in der ganzen Breite verarbeitet.

Dann wird die Laufzeit noch deutlicher steigen.

UND: das Script macht noch nichtmal irgendwelche Geometrie- Berechnungen.

ALSO: Der Weg über die Pixel ist nur für rel. kleine Bilder gangbar. Du kannst ja mal mit verschiedenen Bildgrössen testen

Gruss
Frank
 
Zuletzt bearbeitet:

ralfeberle

FF-Team
Mitarbeiter
Dabei seit
10.07.02
Beiträge
11.289
Trophäen
10*15!4{*}1{!}
#82
AW: Verzerrungen

Hallo Frank!

Deine Bildunterschriften bzw. Legenden zu den Bildern sind reichlich schwer eindeutig einem Text zuordenbar. Wäre gut, das etwas präziser zu machen.

Gruß,

Ralf
 

Walter-46

Mitglied
Dabei seit
08.10.06
Beiträge
1.744
Standort
Meppen
Trophäen
*****!!! {**!!!}
#84
AW: Verzerrungen

@Walter:
Hier mal zur Demo der Interpolation:
....

//FFSubmenu=HE-Tools
//FFName=Spiegel

//*************************************************************************
//**************************** Spiegelung *******************************
//*************************************************************************
//************ März 2013 ******************
//*************************************************************************

var orgW=FF_GetImageWidth();
var orgH=FF_GetImageHeight();
var L,C;
var Col;
var R,G,B;

if ((0==orgW) || (0==orgH))
{ FF_MessageBox("Kein Bild geladen",0)
}
else
{
for (L=(orgH - 1);L>=0;L--)
{
for (C=(orgW - 1) / 2 + 0.5;C>=0;C--)
{
Col=FF_GetPixel(orgW - 1 - C,L);
R=Col & 0xff;
G=(Col>>8) & 0xff;
B=(Col>>16) & 0xff;
Col=FF_GetPixel(C,L);
R=(R + (Col & 0xff)) / 2;
G=(G + ((Col>>8) & 0xff)) / 2;
B=(B + ((Col>>16) & 0xff)) / 2;
Col=R + (G<<8) + (B<<16);
FF_SetPixel(C,L,Col);
}
}
FF_ReLoad();
}

ALSO: Der Weg über die Pixel ist nur für rel. kleine Bilder gangbar. Du kannst ja mal mit verschiedenen Bildgrössen testen

Gruss
Frank

Hallo Frank,

vielen Dank für die Darstellung. Aber ich habe niemals bezweifelt, dass Operationen mit einzelnen Pixeln im Script quälend langsam werden. Dieser Weg ist auch gar nicht nötig, wie der nachfolgende Lösungsweg zeigen wird.

Eigentlich wollte ich auf diese Sache nicht mehr eingehen, da Heinrich und Du ja absolut auf diese Meinung festgelegt seid, und ich hier nur als Besserwisser darstehe. Aber da Du mich nun direkt ansprichst, will ich dazu nun Stellung nehmen.

Hallo,
es ist genauso, wie Frank die Verhältnisse darstellt.
Eine annähernd "kickfreie" Lösung" ist nur auf Pixelebene möglich und die kann man von der benötigten Rechenzeit her im Rahmen eines zu

interpretierenden Skriptes schlichtweg vergessen.
Ja, genauso ist es und das mit einem über das gesamte Bild sich kontinuierlich änderndem Verhältnis.

Selbst wenn man auf Streifen in 1-Pixel-Breite heruntergehen würde, müsste z.B. beim Stauchen der 1.Streifen (nur als Beispiel) auf 1 Pixel Breite

reduziert werden, der zweite dann auf etwas weniger und die nächsten stets kontinuierlich weiter verringert werden (entsprechend dem Stauchungsmaß).

Dies geht in der Tat nur in der Verrechnung mit den Nachbarstreifen gemäß den vielen Skalierungsalgorithmen bis hin zum FF_HQScale-Algorithmus.

Unabhängig davon, erhält man bei dieser Methode letztendlich auch Knicke, genau so viele, wie das Ausgangsbild in Streifen aufgeteilt wird. Lediglich

horizontale Gerade werden bei vertikal unverzerrtem Bild wieder knickfrei als Horizontale dargestellt. Schräg verlaufende gerade Linien werden aber

geknickt (im Extremfall in einem Bild von 3000x2000 Pixel eben 3000 mal). Letzteres würde natürlich als kontinuierlich gekrümmtes Bogenstück

erscheinen.
Dieses schräg verlaufende Bogenstück ist aber ja das Ziel, das wir anstreben. Wenn die Gerade eine Gerade bleiben würde, könnten wir uns das hier sparen und den Fixfoto-Perspektive-Dialog verwenden.

Bogenstück = richtig !!

Knicke = falsch !!


Die Mathematik ist (prinzipiell) schon Ok. Nur muss diese genaugenommen kontinuierlich (mit kleinsten Schritten)

pixelweise arbeiten. Und das ist mit den Script- Befehlen nicht machbar.

Opi hats ja auch auf den Punkt gebracht.
Wenige Streifen => einige starke Knicke
mehr Streifen => mehr schwächere Knicke
unendlich viele Streifen => keine Knicke, aber Biegungen!

Letzteres ist nur auf Pixelebene mit guten Interpolatoren realisierbar. Da hilft auch keine ander Mathematik.

Dass Letzteres eben nicht der Pixelebene bedarf, und durchaus per Script machbar ist, möchte ich hier kurz darstellen.


Aus der letzten Version von 'Verzerrungen':
Code:
FF_Crop(Crop_pos,0,Stripe,hoehe);
FF_HQScale(ins_Stripe,hoehe,false);
FF_MixImage(x_pos,0,ins_Stripe,hoehe,255)
Crop_pos=Crop_pos+Stripe;
Dies ist ein Weg in eine Sackgasse. Das Script berechnet die Breite (Stripe) des Crop, der dann skaliert und an der x_pos wieder eingefügt wird. Das ist die Ursache für die Knicke. Diese Vorgehensweise ist m. A. n. logisch falsch, denn hier wird das Pferd 'von hinten aufgezäumt'.

Der richtige Weg wäre: Beim Mix-Vorgang darf nur jeweils um 1 Pixel versetzt eingefügt werden. Bei croppen des dafür nötigen Streifens muß entsprechend die x-Position errechnet werden. Der einzufügende Crop muß so breit sein, dass beim Dehnen keine Stellen frei bleiben. Der Befehl FF_HQScale hat hierin nichts zu suchen und kann ganz raus.

Damit sind keine Knicke mehr im Bild und es ist keine Berechnung auf Pixelebene erforderlich. Weil der Skalierungsbefehlt rausfällt und immer eine ganze Spalte behandelt wird, bleibt der Zeitaufwand erträglich und eine Realisation per Script ist möglich.

Soweit meine Stellungnahme. ;)

Viele Grüße
Walter
 
Zuletzt bearbeitet:
Dabei seit
29.07.05
Beiträge
577
Standort
Altenburg
#85
AW: Verzerrungen

Hallo Walter,
ich wollte auch nicht "daraufrumreíten", wollte nur den Zusammenhang klar darstellen...

Es geht auch keineswegs darum, Deine Idee "runterzumachen", im Gegenteil. Deine Idee ist gut, Du läufst nur im Moment in eine Sackgasse.

Es geht darum, ein Bild NICHTLINEAR zu stauchen (Dehenen ist ähnlich). Richtig?
Das Bild soll am Ende eine geringere Breite haben. Richtig?
ODER: Dis Gesamtbreitre bleibt, dann soll die Mitte gedehnt, der Rand gestaucht werden. Richtig?

Wenn Du eine der 3 Fragen mit ja beantworten kannst, geht ohne Interpolation nicht viel - eine brauchbare Pixelqualität im Ergebnis vorausgesetzt.

In allen 3 Fallen müssen einige Pixel- Spalten auf mehrere im Ergebnis abgebildet oder mehrere Pixelspalten müssen auf eine abgebildet werden. Wieviele Spalten zu "mischen" sind ist an jeder Breitenposition auch noch anders.

Heinrich hat versucht das grob anzunähern - daher die Knicke.
Würde er mehr "Spalten" verarbeiten, wären die Knicke enger aber schwächer.

Vermeiden kann mann die Knicke aber nur wenn pixelweise gearbeitet UND an jeder Stelle mit VERSCHIEDENER Interpolationsbreite der Farbwert für das Ergebnis "gemittelt" wird.

Heinrich und ich sind nicht "absolut auf diese Meinung festgelegt ", wir wollen Dir nur deutlich machen, warum es halt so ist mit der Mathematik bei solchen Geometrie- Verzerrungrn.

Also nix für ungut. Niemand will Dich abhalten die nichtlineare Breitenkorrektur zu versuchen. Es wäre nur schade, wenn Du dabei in die Sackgasse kommst. (Da gehts nicht sinnvoll wieder raus)

"... Realisation per Script ist möglich..."
Sicherlich ist das möglich. ABER:
Du kannst nur Pixelspalten verdoppeln/ Pixelspalten weglassen. Damit gehen Dir aber die Pixel verloren/ kaputt!

Gruss
Frank

PS: Die Bilder sollten auch nur zeigen, was ohne passende Interpolation mit den Pixeln passieren kann! Und Interpolation ist nun mal eine pixelorientierte Sache bei der Bildbearbeitung, damit muss auch Adobe und Co leben..
 
Zuletzt bearbeitet:

Walter-46

Mitglied
Dabei seit
08.10.06
Beiträge
1.744
Standort
Meppen
Trophäen
*****!!! {**!!!}
#86
AW: Verzerrungen

Ich bleibe bei meiner Darstellung, denn Deine Ausführungen im letzten Posting gehen von ganz anderen Voraussetzungen aus und berücksichtigen meinen Lösungsweg in keiner Weise. Wenn Streifen mit der Breite von 1 Pixel eingefügt werden, dann bedarf es keiner Skalierung, keiner Mittelung von Farben, usw. Es wird das Originalbild wieder eingefügt und nichts anderes! Nur die Einfügeposition muß berechnet werden. Du schreibst ständig von ganz anderen Dingen, die hier keine Rolle spielen.

Ich empfinde auch keineswegs ein 'herruntermachen', denn die Idee wurde ja von Heinrich aufgenommen und perfekt umgesetzt und funktioniert bis auf die Probleme beim stauchen/dehnen einwandfrei.

PS: Die Bilder sollten auch nur zeigen, was ohne passende Interpolation mit den Pixeln passieren kann! Und Interpolation ist nun mal eine pixelorientierte Sache bei der Bildbearbeitung, damit muss auch Adobe und Co leben..
Nein, die Bilder zeigen, dass angeblich eine weiße Schrift mit dem Script Verzerren zu treppenstufenartiger Darstellung führt, was bei Deinen Kaufprogrammen nicht der Fall ist. Auch diese Darstellung ist irreführend, weil sie einen Mangel suggeriert, den wir schon in den allerersten veröffentlichten Versionen berücksichtigt und behoben haben. Das Ausgabebild des Scriptes erfolgt in entsprechend größerem Maßstab, den der Nutzer mit eigenen Schaltflächen anwählen kann. Dann wird vom Anwender mit einem der 11 zur Verfügung stehenden Skalierungsmethoden heruntergerechnet und das Endprodunkt zeigt keine Treppchen - so wie bei Adobe & Co.

Außerdem ist in Deinem Bild der mittlere von FF stammende Text in einer wärmeren Farbe dargestellt, die sich nicht so klar vom Hintergrundbild abhebt, wie die beiden strahlend weißen Texte aus Deinem Kaufprogramm. Duch diese Maßnahme erscheinen die beiden Schriften aus Deinen Programmen klarer und kontrastreicher. Das ist leicht zu prüfen, der Leser wird das zu beurteilen wissen.

VG
Walter
 
Dabei seit
29.07.05
Beiträge
577
Standort
Altenburg
#87
AW: Verzerrungen

Ich bleibe bei meiner Darstellung...,
Das machst Du sicher richtig.

Ich empfinde auch keineswegs ein 'herruntermachen', denn die Idee wurde ja von Heinrich aufgenommen und perfekt umgesetzt und funktioniert ... einwandfrei.
Da sind wir uns ja einig.

...bei Deinen Kaufprogrammen nicht der Fall...
Wer sagt, dass ich die Demos damit gemacht habe? Adobe, Gimp... können das auch. Es geht doch nur um Zusammenhänge/ Mathematik.

Außerdem ist in Deinem Bild der mittlere von FF stammende Text in einer wärmeren Farbe dargestellt, die sich nicht so klar vom Hintergrundbild abhebt...
Sorry, das war nicht beabsichtigt.

Duch diese Maßnahme erscheinen die beiden Schriften aus Deinen Programmen klarer und kontrastreicher.
Dann habe ich ja den Nachteil!
Pixeligkeiten an den Konturen - und darum geht es ja hier - würden dann bei den "wärmeren" Farben weniger stark zu sehen sein!

Gruss und Ende
Frank
 

Sasssoft

Mitglied
Dabei seit
02.07.04
Beiträge
5.492
Standort
Albersdorf (Schleswig-Holstein)
Trophäen
{******} ********* !!!!!!!!!!!!
#88
AW: Verzerrungen

Heinrich, nachdem die Diskussion zu den Verzerrungen anscheinend zunächst abgeschlossen ist, könnte das Skript doch auch in den Zubehörbereich zu den Skripten in die Abteilung "Effekte" wandern.

Dann hat auch ein Neuling, der den Zubehörbereich durchforstet, eine Chance ;).

Gruß
Alfred
 

Sasssoft

Mitglied
Dabei seit
02.07.04
Beiträge
5.492
Standort
Albersdorf (Schleswig-Holstein)
Trophäen
{******} ********* !!!!!!!!!!!!
#91
AW: Verzerrungen

Hallo Heinrich,

ich will heute Abend beim Arbeitskreis mit "Verzerrungen" arbeiten. Dazu muss ich das Notebook auf die Beamerauflösung von 1024x768 herunterschalten.

In dieser Auflösung passt die Skript-Dialogbox aber nicht mehr vollständig auf den Bildschirm :eek:. Unten sind die Fortschrittsbox und der Button Abbrechen nicht mehr sicht- und erreichbar. Die Checkbox Symmetrisch bezüglich... ist zwar noch gerade sichtbar, kann aber nicht mehr gewählt werden.

Kann es sein, dass die Größe der Dialogbox sich dynamisch mit der Bildschirmauflösung ändert und dass dieser Algorithmus noch nicht optimal funktioniert?

Gruß
Alfred
 

opi-hs

Mitglied
Dabei seit
09.02.05
Beiträge
558
Standort
Köln
#92
AW: Verzerrungen

Hallo Alfred,
Kann es sein, dass die Größe der Dialogbox sich dynamisch mit der Bildschirmauflösung ändert und dass dieser Algorithmus noch nicht optimal funktioniert?
Im Skript gibt es keinen Algorithmus, der die Größe der Dialogbox an die Bildschirmauflösung anpasst!. Insofern kann auch nichts fehlfunktionieren. Eine solche automatische Anpassung wäre auch nur mit sehr großem Aufwand realisierbar, da die Dimensionierungen einer Dialogbox bei diversen Feldern eh eine bestimmte Größe nicht unterschreiten können/dürfen, was aber für eine dynamische Anpassung in der Regel unabdingbar wäre. Helfen könnte nur das Vorhalten einer zusätzlichen Dialogdefinition im Skript, die dann auf eine geringere Bildschirmauflösung abgestimmt wäre. Aber da ist die Frage, ob ein solcher zusätzlicher Aufwand gerechtfertigt wäre.

Unabhängig davon ist es jedoch beim vorliegenden Skript so, dass die Höhe der Dialogbox 700 Pixel beträgt. Wieso diese dann bei Dir nicht mehr auf die Bildschirmauflösung von 1024x768 passt, vermag ich nicht zu erklären. Ein Versuch auf meinem XP-Rechner mit einer Einstellung von 1024x768 zeigt problemlos die komplette "Verzerrungen"-Dialogbox.

Gruß
Heinrich
 

Sasssoft

Mitglied
Dabei seit
02.07.04
Beiträge
5.492
Standort
Albersdorf (Schleswig-Holstein)
Trophäen
{******} ********* !!!!!!!!!!!!
#93
AW: Verzerrungen

Ich will ja auch gar keine dynamische Anpassung ;), ich hatte nur beim Umschalten auf verschiedene Auflösungen beim Notebook den Eindruck!

Mal sehen, wie's heute Abend direkt am Beamer sein wird, bisher hatte ich ja auch nur das Notebook umgeschaltet (ohne den Beamer angeschlossen zu haben), da waren dann definitiv die unteren Regionen nicht erreichbar!

Gruß
Alfred
 

Sasssoft

Mitglied
Dabei seit
02.07.04
Beiträge
5.492
Standort
Albersdorf (Schleswig-Holstein)
Trophäen
{******} ********* !!!!!!!!!!!!
#94
Hallo Heinrich, wenn Du hier noch mitliest: Wenn man das Skript auf hochauflösenden Monitoren verwendet und dabei die Windows-Skalierung der Anzeige auf 150% stellen muss, werden im Skript diverse Bezeichnungen abgeschnitten. Vielleicht kann man diesen Texten etwas mehr Platz geben (oder mit Leerzeichen arbeiten?).

Gruß
Alfred
Anhang anzeigen 7433
 
Oben