Hallo ich habe eine Umwandlung von RGB nach HSV vorgenommen und dann zum H Wert einen Winkel dazugezählt und dann wieder eine Rückumwandlung von HSV nach RGB. Das Bild zwar dann entsprechned richtig von der Farbe allerdings sind die Ränder die vorher einen schwarz weiss Übergang dargestellt haben jetzt auf rot und blau. Ausserdem sind die Kanten nicht mehr durchgängig gezeichnet sondern gestrichelt. Woran liegt das.
keystone schrieb: > Ausserdem sind die Kanten > nicht mehr durchgängig gezeichnet sondern gestrichelt. Woran liegt das. An dem fehlenden Semikolon in Zeile 42.
Nimm mal ein komplett schwarzes und ein komplett weisses Bild und mach nochmal das gleiche...nur um festzustellen ob es wirklich nur am Rand ist, oder ob es Dir in den anderen Bereichen einfach nur nicht auffällt. Grüße
Es wird zwar weniger, ist aber nur an den Kanten zu sehen der Fehler
vermutlich zieht dein algorithmus die pixel in der nachbarschaft von jedem pixel mit ein, um rauschen zu glätten? nur so ne idee
ich lesen jedes Pixel einzeln als R G B ein dies kommt in ein Byte Array[RGBRGBRGB] und wird dann in HSB umgewandelt dann wird Hneu = H + Winkel gerechent und dann Hneu S B wieder in RGB zurückgewandelt. Ich weis nicht ob da Pixel in der Nachbarschaft mit verändert werden, aber so wie ich mir das da so überlegt haben, sollte das nicht der Fall sein.
Es gibt m.E: nur drei mögliche Ursachen: a) Rundungsfehler, Fehler im Zahlenformat b) die Pixelposition ist beim Lesen und Schreiben nicht die selbe c) Fehler in der Formel Test: füge hinter die Programmzeile, in der du die Addition zu H machst, temporär ein weitere hinzu, in der du genau den gleichen Zahlenwert wieder abziehst. Dann sollte sich das Bild (theoretisch) nicht verändern. Das wäre ein Ansatz, das Problem einzukreisen. Zu c) guckst du hier: http://www.easyrgb.com/index.php?X=MATH
keystone schrieb: > ich lesen jedes Pixel einzeln als R G B ein dies kommt in ein Byte > Array[RGBRGBRGB] Einzelnes Array? Vielleicht hast Du in den Randbereichen des Bilds einen Fehler (evtl. Sonderbehandlung) oder wirfst sonst ein paar Werte durcheinander? Du musst ja irgendwo einen Fehler in S oder V haben. Ansonsten könnte ja schwarz/weiss nicht zu rot/blau werden. keystone schrieb: > und wird dann in HSB umgewandelt Hatte noch nie was damit zu tun, aber hast Du das bei Wiki gelesen:
1 | * Wenn R = G = B, dann ist H undefiniert. |
2 | Das ist offensichtlich. Denn wenn S = 0 ist (ungesättigte Farbe), dann |
3 | liegt der Farbort auf der zentralen Grau-Linie, der Farbton ist so ohne |
4 | Bedeutung und kann nicht sinnvoll angegeben werden. |
5 | |
6 | * Wenn R = G = B = 0, dann ist S undefiniert. |
7 | Denn wenn alle drei RGB-Werte „Null“ sind, geht es um Schwarz und die |
8 | Sättigung der Farbe verliert ihre Bedeutung. Dasselbe gilt auch im Falle |
9 | MAX = MIN = 1, dies gilt für Weiß, hier liefert die Formel formal 0. |
10 | Undefinierte Werte werden aus rechentechnischen Gründen mit „Null“ besetzt. |
keystone schrieb: > Ich weis nicht ob da Pixel in der Nachbarschaft mit verändert werden, > aber so wie ich mir das da so überlegt haben, sollte das nicht der Fall > sein. Ansonten einfach mal Debuggen? Evtl. ist auch eine geeignetere Datenstruktur besser? z.B. so:
1 | struct rgb_farbe |
2 | {
|
3 | char r; |
4 | char g; |
5 | char b; |
6 | };
|
7 | |
8 | struct rgb_farbe bild[800][600]; |
- die Umrechnung ist unabhängig von Nachbapixeln, deshalb kann nur ein (bisher noch nicht entdecker) Fehler zu dem Effekt führen. - H, S und V können problemlos Nul sein. - mit welcher Software guckst du dir die Ergebnisse an? Sicher, dass die OK ist?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.