Überschreiben des Pixelwertes mit eigener Farbtabe

Hallo da draußen,

In einer Programmieraufgabe möchte ich ein farbiges Bild aus einem avi Film in schwarz/weiß umwandeln. Hierfür soll der RGB Wert eines jeden Pixels durch einen Wert aus einer Farbtabelle ersetzt werden (in der Form 192, 192, 192).

Momentan interessieren mich erst mal die Grundlagen.

Also wie wird aus einer Farbe ein Zahlenwert generiert? Wie funktioniert es dass aus der Farbe eines Pixels die Zahleninformation z.B. 255.255.255 für schwarz wird?

Mir ist schon klar das die Zahlen für den Anteil rot, grün und blau stehen, aber wie läuft das intern ab?
Wenn zum Beispiel ein Bild vom PC an den Drucker geschickt wird müssen ja auch die Farbtabellen des Druckers mit der von Windows verglichen werden bzw angepasst werden.

Ich würde gerne meine vorliegende 8 bit Farbtabelle mit der 8 bit Farbtabelle von Windows überprüfen. Wenn die identisch sind würde das einigen Programmieraufwand reduzieren.
Weiß jemand wie man an die ran kommt? Sie sollte folgende Form haben:
0, 0, 155
0, 77, 255
0, 137, 55
0, 188, 0
255, 255, 0
255, 157, 0
255, 93, 0
255, 0, 0
230, 0, 122
255, 126, 122
Usw.
Dies könnte z.B. in einer txt Tabelle sein. Bei meinen bisherigen Suchergebnissen bekomme ich immer nur die Rechnung für die maximalen möglichen Farben also 2^n = Farbanzahl. n=bit. Ich brauche aber die genaue Auflistung.

Wenn jemand Ideen oder Vorschläge hat dann würde ich mich über diese freuen.

Hallo,

die Anpassung der verschiedenen Farbprofile findet normalerweise über Farbprofile statt, meist über sogenannte ICC-Profile.

Hier findest Du weitere Informationen:

http://de.wikipedia.org/wiki/ICC-Profil

Eine Tabelle aller möglichen RGB-Werte und der zu ersetzenden Alternative wäre sehr umfangreich.

Diese würde ja einfach so aussehen:

r(alt) g(alt) b(alt) r(neu) g(neu) b(neu)

0, 0, 0 0, 0, 0 0, 0, 0 ?, ?, ? ?, ?, ? ?, ?, ?

und weiter bis zum bitteren Ende

255, 255, 255 255, 255, 225 255, 255, 255 ?, ?, ? ?, ?, ? ?, ?, ?

Nun müßtest Du für jeden Pixel den RGB Wert aus der Tabelle aus bummeligen 17 Millionen Zeilen heraussuchen und ersetzen. Keine schöne Lösung. diese Problematik wird in der Regel durch hohe Mathematik gelöst. Dafür bin ich allerdings zu doof.

Zum Grundsätzlichen:

Jeder Farbwert wird durch einen hexadezimalen Wert repräsentiert. So steht z.B. HEX #FF0000 für RGB 255 0 0, HEX #90DBC7 für RGB 144 214 195 usw.

Du kannst also z.B. ein Bild laden, alle Pixel einlesen, jeden Pixel modifizieren und die geänderten Werte Farbwerte zurück schreiben.

In welcher Art und Weise Du die Pixel modifizierst, ist dir überlassen. Für bestimmte Operationen gibt es z.b. in der Programmiersprache Processing

http://macherzin.net/Processing

die verschiedensten Optionen.

„filter(gray)“ z.B. konvertiert Farbe in entsprechende Grauwerte, wobei der Schwellenwert frei wählbar ist:

http://processing.org/reference/filter_.html

mfg

tf

Ok danke. Das mit dem ICC und dem Farbmanagementsystem war schon recht interessant.
Das mit dem Processing klingt zwar auch interessant aber ich hab leider die Vorgabe es mit Labview zu programmieren.

Der Schwellwert dürfte sich als schwierig erweisen. Wenn mein ermittelter RGB Wert des analysierten Pixels nicht exakt auf den Wert der Zieltabelle passt sondern mehreren zugeordnet werden könnte wird das sicher schwierig.

Hier wäre natürlich schön wenn man den Algorithmus des Farbmanagementsystems von Windows nutzen könnte oder irgendwie selber sowas gebastelt bekommt.