Forum: PC-Programmierung Umwandlug RGB HSV HSV RGB gibt farbige Ränder Warum?


von keystone (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

keystone schrieb:
> Ausserdem sind die Kanten
> nicht mehr durchgängig gezeichnet sondern gestrichelt. Woran liegt das.

An dem fehlenden Semikolon in Zeile 42.

von Ballermann (Gast)


Lesenswert?

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

von keystone (Gast)


Lesenswert?

Es wird zwar weniger, ist aber nur an den Kanten zu sehen der Fehler

von balu (Gast)


Lesenswert?

vermutlich zieht dein algorithmus die pixel in der nachbarschaft von 
jedem pixel mit ein, um rauschen zu glätten? nur so ne idee

von keystone (Gast)


Lesenswert?

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.

von Frank (Gast)


Lesenswert?

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

von Ballermann (Gast)


Lesenswert?

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];

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

- 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
Noch kein Account? Hier anmelden.