Heightmap: korrekter Farbraum bei Konvertierung in Graustufen?

Willkommen in der Transport Fever Community

Wir begrüßen euch in der Fan-Community zu den Spielen Transport Fever und Train Fever, den Wirtschaftssimulatoren von Urban Games. Die Community steht euch kostenlos zur Verfügung damit ihr euch über das Spiel austauschen und informieren könnt. Wir pflegen hier einen freundlichen und sachlichen Umgang untereinander und unser Team steht euch in allen Fragen gerne beiseite.

 

Die Registrierung und Nutzung ist selbstverständlich kostenlos.

 

Wir wünschen euch viel Spaß und hoffen auf rege Beteiligung.

Das Team der Transport-Fever Community


  • Nicht einfach... ich fummel seit über 2 Stunden mit Gimp 2.9 ...


    Ich habe seit geraumer Zeit Heightmaps herumliegen, die ich direkt so in 16-bit TIFF und in Farbe belassen habe für die weitere Verwendung.
    Die Höhenlagen werden in der Reihenfolge von unten nach oben durch Farben dargestellt:
    blau -> grün -> gelb -> rot


    Ich benutze für die Berechnungen die Einstellungen "16-bit Gamma-Fließkommazahl" (für mehr Genauigkeit vorübergehend auch "32-bit Gamma-Fließkommazahl") als "Wahrgenommenes Gamma (sRGB)", ein Test mit "Lineares Licht" hat keine besseren Ergebnisse erzielt, war aber rechenintensiver.


    Rot ist das Problem, eine einfache Umwandlung in Graustufen funktioniert nicht, da "Rot" als dunkel erkannt wird und zu "Schwarz" wird.


    Die Vorgehensweise unter "Farben -> Entsättigen" war in keinem der Modi besser.


    Auch habe ich mit dem Farbbild zuerst es mit "Farbton - Sättigung" versucht:
    Überlagerung für alles: 100
    Helligkeitswerte:
    Rot 50 oder 75
    Gelb 25 oder 50 oder 0
    Grün -25 oder -50 oder 0
    Blau -50 oder -75 oder 0
    Magenta 100 oder 0
    Cyan -100 oder 0


    Zum Schluss dann "Farben -> Entsättigen" in verschiedenen Modi mit oder ohne den "Gamma Hack" ...


    Ach nicht gut.


    Rot ist halt das Problem...


    Aber das Zerlegen des Bildes in einzelne Ebenen für R, G, B und dann neu Mischens kann mit etwas Probiererei was werden:


    Ich habe mich an diesen Beitrag gehalten: http://www.planetside.co.uk/fo…4519bngl885ma41#msg202799


    Zuletzt wird das Ergebnis wieder in 16-bit Ganzzahl umgerechnet.



    Kann mir jemand sagen, ob es da effizientere Wege gibt?

  • Ich frage mich gerade, was du vor hast :P Was haben Farben mit ner grayscale Textur zu tun? Dir ist klar wie "herkömmlich" Color -> Gray umgewandelt wird? Ein simpler ansatz ist es R, G und B einfach zu averagen (also den Durchschnitt ermitteln: math.round((R+G+B)/3)). Meist wird aber ein etwas anderer Weg verfolgt wo jeder Kanal etwas unterschiedlich gewichtet wird: 0.21 R + 0.72 G + 0.07 B - wie man sieht hat Grün den höchsten Anteil da rot und blau eher zu dunkel sind. Schöne Seite hierzu übrigens: http://www.johndcook.com/blog/…-convert-color-grayscale/



    Wenn du da jetzt also verschiedene Farben für verschiedene Höhen hast, müsstest du also nen eigenen Algorythmus zum Konvertieren implementieren ^^ Oder ich versteh dich einfach falsch :P

  • Ich bin mir nicht sicher, aber ich glaube ich ahne, was das Problem von @Gordon Dry ist.
    Auch ich habe eine Topografische Karte liegen, die ich gerne in eine Hightmap umwandeln würde.


    Topografische Karten sind aber Farbig! Grün= Tiefster punkt über Hellbraun bis Dunkelbraun oder gar weiß (Höchster Punkt)
    Beispiel: http://i.imgur.com/cmKD6UJ.jpg
    Nachteil ist, das Gebirge nicht nur farblich in Ihrer höhe variieren, sondern auch "plastisch" dargestellt sind.


    Ich tüftel auch schon eine halbe Ewigkeit, daraus eine brauchbare Heightmap (Graustufenkarte) zu erstellen.
    Dabei reicht eine einfache Graustufen-Umwandlung, und/oder Farbebenen Trennung nicht aus, da Stellen im Gebirge wieder dunkler werden könnten als das Flachland etc.

    Ich bin nur dafür verantwortlich was ich schreibe, nicht was andere verstehen "wollen"!


    System: Windows 7 Ultimate 64bit ; AMD Phenom II X4 965 @ 3,4 GHz ; 8 GB DDR3 Ram ; GeForce GTX 660 @ 3 GB GDDR5 Ram (Treiber: 431.36)

  • Ich bin schon viel weiter gekommen.


    Mein Ziel war es, eine Voreinstellung für ein Werkzeug zu finden, die ich mit einem Klick verwenden kann.


    Jedes Mal bei einer neuen Heightmap von vorn anzufangen mit dem Gefummel kommt nicht in Frage.


    Also habe ich für Gimp 2.9 ein Preset erstellt, dass unter "Farben -> Farbton-Sättigung -> Einstellungen aus Datei importieren" importiert werden kann.
    Titel des Preset: "Farbton - Sättigung (Heightmap Farbe zu grau)"
    Die Dateiendung .set ist ausgedacht, da Gimp beim Export keine Endung vorschlägt... ?(


    Zudem ist es dann importiert, aber nicht in die Liste der Presets übernommen - Gimp ist halt immer noch nicht fertig... :S
    Also muss nach dem Import "Einstellung zu Favoriten hinzufügen" angeklickt und der Titel "Farbton - Sättigung (Heightmap Farbe zu grau)" angegeben werden.


    Die Anzahl der Farben("Farben -> Information -> Farbraumanalyse") wird dadurch leider reduziert. Dies bedeutet, der Höhenunterschied wird geringer ODER die Flanken werden steiler, abhängig vom Bildmaterial.


    Methode A: selber eine Datei anlegen:

    Methode B: angehängte Datei runterladen und entpacken:
    Farbton - Sättigung (Heightmap Farbe zu grau).zip

    • Am besten ist es, in Gimp 2.9 den Modus vor der Berechnung umzuschalten auf
      "Bild -> Genauigkeit - 32-Bit Fließkommazahl (Wahrgenommenes Gamma)"
    • Dann erfolgt die Umwandlung mittels des hier vorgestellten Presets.
    • Mehr Kontrast:
      "Farben -> Helligkeit/Kontrast" - die Helligkeit auf -0,020 und den Kontrast auf 0,100
    • Gaußscher Weichzeichner:
      "Filter -> Weichzeichnen -> Gaußscher Weichzeichner" mit den empfohlenen Einstellungen: Size X und Size Y auf jeweils 7,0
    • Umstellung auf 16-Bit:
      Bild -> Genauigkeit - 16-Bit Ganzzahl (Wahrgenommenes Gamma)
    • Umwandlung des Bildes in Graustufen:
      "Bild -> Modus -> Graustufen"
    • Export als .PNG

    8 Mal editiert, zuletzt von Gordon Dry ()

BlueBrixx