AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Farbexperten: Farbwerte für Segmentierung finden

Ein Thema von Jazzman_Marburg · begonnen am 7. Apr 2012 · letzter Beitrag vom 8. Apr 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#1

Farbexperten: Farbwerte für Segmentierung finden

  Alt 7. Apr 2012, 21:35
Österliche Grüße, Gemeinde!

Vielleicht sind ja nicht alle beim Ostereier Suchen.
Mich plagt folgendes Problem, bei dem ich Hilfe von euch bräuchte:
Nehmen wir an, ich möchte einen Strassenabschnitt (oder irgendein anderes Segement, z.B. Karte) in Abhängigkeit der 'Begehungsanzahl' einfärben. D.h. jedemals wenn zehn Autos über dieses Segement gefahren sind, wird die Farbe geändert.
Sowiet auch kein Problem: Wenn die Straße initial schwarz ist, dann wird bei jedem zehntem Auto der RGB Wert folgender maße erhöht:
Farbe := RGB ( altR+10, altG+10, altB+10). D.h. die zunächst schwarze Strasse wird imm heller (Grauwert wird erhöht) bis sie schließlich weiss ist.
Mein Problem:
Ich suche ein Algorithmus, der für jede beliebige Farbe so funktioniert. D.h. wenn die Strasse initial rot ist (ClRed), dann soll nach jedem zehntem Auto sich der Farbwert so ändern, dass man als Betrachter eine 'Steigerung' sieht. D.h. bei ClRed könnte man nicht einfach alle drei Kanäle 'hochdrehen' -- mehr als R=255 geht ja dann nicht. Schlimmer noch, wenn initial mit 255, 255, 255 (ClWhite) gestartet wird.

Habt ihr eine Idee, wie man da verfahren würde?

Ich hoffe das Problem ist halbwegs klar: Zu jeder Farbe sollen meintegwegen mind. 10 andere 'gesteigerte' Farben gefunden werden. (Mit 'gesteigert' meine ich halt Farben, die sich von der initialen unterscheiden, aber eben 'stufenweise', so dass der Betrachter es als 'Steigerung' empfindet/sieht).

Sorry, etwas langatmig...
Lieben Dank vorab
Gruß, Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Farbexperten: Farbwerte für Segmentierung finden

  Alt 7. Apr 2012, 21:43
Guck dir den Thread mal an: http://www.delphipraxis.net/88775-fa...eraendern.html
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Farbexperten: Farbwerte für Segmentierung finden

  Alt 7. Apr 2012, 21:44
Warum soll eine einfache Inkrementierung der Farbkanäle nicht funktionieren? Das einzige, worauf du achten müsstest, ist, dass du den Maximalwert 255 nicht überschreitest...

Edit: Klar, das Inkrementieren der Helligkeit geht in einem anderen System viel einfacher, da nur eine Komponente inkrementiert werden muss.. Aber ich glaube, dass sollte unter RGB auch funktionieren...

Edit2: Wobei blödsinn.. dürfte nicht gehen - (1, 0, 0) (rote Farbe) inkrementiert ergäbe eine ganz andere Farbe.. (und keinen helleren Rot-ton)

Folglich - wandle deine Farbe um, inkrementiere dort die Helligkeit und wandle letztendlich zurück um...
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton ( 7. Apr 2012 um 21:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#4

AW: Farbexperten: Farbwerte für Segmentierung finden

  Alt 7. Apr 2012, 21:48
tja, das Weiß ist dir nun schon aufgefallen, also geht stures Erhöhen sowieso nicht.

PS: auch ein clRed kannst du nicht noch röter machen, man könnte höchsten die anderen Werte erhöhen, in Richtung Weiß



Vorschlag:
- für jeden Farbanteil wird bestimmt, ob er hell oder dunkel ist
- um eine Größere farbänderung zu bekommen, würde ich ab 75% (etwa der Wert 200) dieses als Hell ansehn
- helle Werte werden dunkler und dunkle Werte werden heller
- dann berechnest du dir die Schrittgrößen (bei deinen 10 wären das etwa 25 Schritte)
- - Hell: x bis 0
- - Dunkel: x bis 255
- - den Abstand einfach durch 25 teilen
- und nun wird einfach immer wieder die errechnete Schrittweite dazuaddiert oder abgezogen

- entweder du merkst dir die Rechenwerte (z.B. als ShortInt) oder die Initialwerte
- bei Letzerem könnte/müßte man jedesmal die (Diverenz)Werte neu berechnen, aber dafür kann man sehr gut auch mit nicht ganzzahligen Schritten arbeiten

Und natürlich immer aufpassen, daß du nie über 255 oder unter 0 kommst.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Apr 2012 um 21:51 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: Farbexperten: Farbwerte für Segmentierung finden

  Alt 7. Apr 2012, 21:53
@Aphton

Nur bedingt. Kleiner Trick (ohne Gewähr), wenn man das so nennen darf, zwei Farben prozentual mischen, wobei einer der Farben Weiß ist.

//Edit:

Ich hab meine Aussage getestet und auf die Schnelle eine Funktion geprogt die zwei Farben prozentual mischt. Ist eine davon weiß, wird die Farbe heller. Nimmt man als zweite Farbe schwarz, wird es dunkler. Das Ganze scheint irgendwie zu funktionieren.

Delphi-Quellcode:
function ColorMix(Col1, Col2: TColor; PercCol1: Byte): TColor;
var
  R, G, B: Integer;
begin
  if PercCol1 > 100 then PercCol1 := 100;

  R := Round(GetRValue(Col1) + ((GetRValue(Col2) - GetRValue(Col1)) * PercCol1 / 100));
  G := Round(GetGValue(Col1) + ((GetGValue(Col2) - GetGValue(Col1)) * PercCol1 / 100));
  B := Round(GetBValue(Col1) + ((GetBValue(Col2) - GetBValue(Col1)) * PercCol1 / 100));

  Result := RGB(R, G, B);
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  Color := ColorMix($000080FF, clWhite, TrackBar1.Position);
end;

Geändert von Popov ( 7. Apr 2012 um 22:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#6

AW: Farbexperten: Farbwerte für Segmentierung finden

  Alt 7. Apr 2012, 22:07
Ja, das sieht ja schon sehr interessant aus -- leider bekomme ich stahlis Projekt nicht zum Laufen:
Mit dem Farbdialog wähle ich eine Farbe, Panel1 übernimmt die Farbe, aber ein Hin-und-Her an der TrackBar verändert nix.

Hat das jamand ans Laufen bekommen?
(Ich mache bestimmt was falsch -- ich zweifle nicht an stahlis Projekt.)

Vielen Dank erstmal -- dieser Hinweis ist vielversprechend!

Gruß
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Farbexperten: Farbwerte für Segmentierung finden

  Alt 7. Apr 2012, 22:13
Mein Vorschlag: Logik von Darstellung trennen (originell, ich weiß).

Statt den „Wert“ der Straße direkt als Farbe zu speichern, speicherst du ihn als Wert zwischen 0.0 und 1.0 (über Gleitkommazahlen oder über einen entsprechend skalierten Integer, wie auch immer). Am Ende multiplizierst du einfach die Maximalfarbe mit dem Wert. Dadurch reduzierst du außerdem Rundungsfehler.

Beispiel:
FarbeMaximal = RGB($FF, $00, $00) (100% rot)

Wert = 0.0
-> Farbe = RGB($FF*0.0, $00*0.0, $00*0.0) = RGB($00, $00, $00); (schwarz)

Wert = 0.5
-> Farbe = RGB($FF*0.5, $00*0.5, $00*0.5) = RGB($7F, $00, $00); (dunkelrot)

Wert = 1.0
-> Farbe = RGB($FF*1.0, $00*1.0, $00*1.0) = RGB($FF, $00, $00); (100% rot)

Je nachdem, wie das Mapping verlaufen soll, kannst du den Wert auch vorher potenzieren (Stichwort Gamma). Also z.B. Wert = Power(Wert, 2.2); für einen Gammawert von 2.2.

Natürlich kannst du auch, wie schon vorgeschlagen, ein anderes Farbmodell wie HSV statt RGB verwenden, aber imo ist das für diesen Zweck unnötig kompliziert.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#8

AW: Farbexperten: Farbwerte für Segmentierung finden

  Alt 7. Apr 2012, 22:15
Ja, ich hab es zum laufen gekriegt. Das Ganze ist leicht komplex. Da sind paar Beispiele vereint.

Aber teste mal zuerst mein Beispiel. Vielleicht reicht das schon.
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#9

AW: Farbexperten: Farbwerte für Segmentierung finden

  Alt 7. Apr 2012, 22:34
Aber teste mal zuerst mein Beispiel. Vielleicht reicht das schon.
Fast!
Das ist ein gutes Beispiel -- vielen Dank -- aber leider nur fast:
Also wenn ich als StartFarbe sowas wie ClYellow, oder ClGreen habe, und als ZielFarbe ClRed funktioniert es ganz wunderbar!
Aber, sobald ich als StartFrabe sowas wie clActiveCaption, oder clGradientInactiveCaption und der gleichen ZielFarbe (ClRed) habe, dann gehts es nimmer so gut: Es startet dann mit Schwarz und geht allmählich ins Rot -- aber ClActiveCaption ist ja nicht Schwarz.
Woher kommt die Farbe Schwarz als StartFarbe sobald es um diese Farben wie clGradientInactiveCaption geht?

Danke!
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#10

AW: Farbexperten: Farbwerte für Segmentierung finden

  Alt 7. Apr 2012, 22:46
Teste das:

Delphi-Quellcode:
function ColorMix(Col1, Col2: TColor; PercCol1: Byte): TColor;
var
  R, G, B: Integer;
begin
  if PercCol1 > 100 then PercCol1 := 100;

  Col1 := ColorToRGB(Col1);
  Col2 := ColorToRGB(Col2);

  R := Round(GetRValue(Col1) + ((GetRValue(Col2) - GetRValue(Col1)) * PercCol1 / 100));
  G := Round(GetGValue(Col1) + ((GetGValue(Col2) - GetGValue(Col1)) * PercCol1 / 100));
  B := Round(GetBValue(Col1) + ((GetBValue(Col2) - GetBValue(Col1)) * PercCol1 / 100));

  Result := RGB(R, G, B);
end;
Ich hab beide mit ColorToRGB konvertiert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz