Umwandlug RGB HSV HSV RGB gibt farbige Ränder Warum?

Gast #2394560
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.
Gast #2394610
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
Gast #2395979
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.
Gast #2396017
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
Gast #2396051
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];

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren