Bilderkennung
-
1. Eine "Farbe" ist dann ein Grauwert, wenn der R-, G- und B-Wert gleich sind. Deshalb macht er in dem Code am Schluss:
SL[i].rgbtRed = gray; SL[i].rgbtGreen = gray; SL[i].rgbtBlue = gray;
Das mußt du nicht machen, denn eigentlich möchtest du kein Grauwertbild haben, sondern ein Bild mit nur einem "Farbkanal".
if (CheckBox3->Checked) gray = (SL[i].rgbtRed * 0.299) + (SL[i].rgbtGreen * 0.587) + (SL[i].rgbtBlue * 0.114); else gray = (SL[i].rgbtRed + SL[i].rgbtGreen + SL[i].rgbtBlue) / 3;
Offensichtlich hat der Schreiber des Codes in der GUI eine CheckBox, die einen Text, wie "menschliche Wahrnehmung berücksichtigen" hat. Das menschliche Auge nimmt die unterschiedlichen Farben unterschiedlich stark wahr. Das wird hier simuliert, indem (wenn die Checkbox aktiviert ist) der Rot-Wert zu 29,9% zum Grauwert beiträgt, der Grün-Wert zu 58,7% und der Blau-Wert zu 11,4%. Wenn die menschliche Wahrnehmung nicht berücksichtigt werden soll, dann wichtet er hier alle Farben gleich. Das entspricht der "Intensität".
Da du nicht wirklich ein Grauwertbild brauchst, sondern im Prinzip nur ein Bild, bei dem jeder Pixel (Picture Element) durch nur einen Wert gekennzeichnet ist, lohnt es sich, sich zu überlegen, ob man diesen einen Wert nicht besser auf eine ganz andere Art und Weise bestimmt. Möglicherweise gibt es eine Variante, bei der die benötigten Merkmale des Bildes nachher besser zu erkennen sind. Angenommen du hast immer einen weißen Hintergrund und einen roten Würfel mit blauen Punkten: In diesem Fall wäre es klug, keine umständliche Grauwert-Berechnung durchzuführen, sondern einfach immer den Blau-Wert anzugucken. Der ist nämlich beim Hintergrund und bei den Punkten hoch, beim Rot des Würfels ist er aber klein.
-
Hast du eigentlich auch schon mal die Hilfe befragt?
Ich meine, schließlich wird das ja deine Arbeit und nicht die vom Forum hier.if (CheckBox3->Checked) gray = (SL[i].rgbtRed * 0.299) + (SL[i].rgbtGreen * 0.587) + (SL[i].rgbtBlue * 0.114); else gray = (SL[i].rgbtRed + SL[i].rgbtGreen + SL[i].rgbtBlue) / 3;
Mit Hilfe des folgenden Codes lässt sich die Graustufe einer
beliebigen RGB Farbe herausfinden. Das System arbeitet nach dem
vom amerikanischem NTSC (National Televisision Standards Committee)
vorgelschlagenem System.
Es kann unteranderem dazu verwendet werden ein Bild in Graustufen
darzustellen. (siehe dazu Tipp http://www.swissdelphicenter.ch/de/showcode.php?id=437)Ist also nunmal Standard und bevor ich irgendwelche Sonderarten basteln würde, würde ich erstmal nach dem Standard vorgehen.
Im übrigen möchte ich dir mal empfehlen auch mal Google zu den begriffen zu befragen, da gibts ne ganze Menge.Im übrigen ist der Code doch gut dokumentiert. Headerfiles brauchst jetzt glaube keine (zumind. im BCB), das probier ich nachher gleich ma und editier das hier rein.
So habs getestet. Get so wies dasteht, wobei ci die Checkbox entfernt habe.