aus bild rote gegenstände rausfiltern
-
hey,
Ich bin gerade damit beschäfftigt, mithilfe eines programms aus bildern rote gegenstände herauszufiltern.
Ich hab also ein Bild, und zu jedem pixel die rgb-werte. Nun möchte ich jeden pixel schwarz machen, es sei denn er erscheint für den menschen rot. Wie kann ich mithilfe der rgb-werte herausfinden ob etwas rot ist?
wäre schön wenn jemand mir helfen könnte.
mfg
-
Dazu könntest du dir mal in "Paint" die RGB Werte der Farben ansehen...
-
es hängt aber auch davon ab, wie du rot definierst. wenn du natürlich von vornherein nur Werte wie 0xFF0000 (RGB
), 0x00FF00 o.ä hast, reicht es, nur 0xFF0000 zuzulassen. Wenn du Gegenstände rausfiltern willst, die für dich Rot erscheinen dann musst du rumprobieren. z.B gucken ob der rotanteil deutlich größer als andere Farbanteile ist usw.
-
Azrael, il Meraz schrieb:
es hängt aber auch davon ab, wie du rot definierst. wenn du natürlich von vornherein nur Werte wie 0xFF0000 (RGB
), 0x00FF00 o.ä hast, reicht es, nur 0xFF0000 zuzulassen. Wenn du Gegenstände rausfiltern willst, die für dich Rot erscheinen dann musst du rumprobieren. z.B gucken ob der rotanteil deutlich größer als andere Farbanteile ist usw.Natürlich sollte man das nicht auf einen RGB Wert genau angeben. Da sollte man ein passendes Intervall für jeden Pixel auswählen, der dann eben mit in die Entscheidung einbezogen wird. Es kommt darauf an was du machen willst.
Objekte auszuwählen die nur einen kleinen Rotanteil enthalten wird recht schwer werden. Nur die roten und anderen Bereiche zu differenzieren hingegen ist nicht schwer. Die rot markierten Objekte auf einem Foto zu isolieren - also samt dem Teil der nicht rot ist allerdings schon. Also wenn z.b. ein Farbverlauf vorhanden ist.
Nur die roten Flecken auf einen schwarzen Hintergrund zu klatschen ist dagegen recht simpel. Einfach alles was im Intervall liegt auswählen und dann entweder den Rest schwarz färben oder alles Ausgewählte auf eine schwarze Fläche zeichnen - das wird aber recht seltsam aussehen wenn nur ein kleiner Teil des Objekts rot ist - du müsstest die Größe des gesamten Objekts kennen(kann mir nicht vorstellen dass das so einfach machbar ist) und dann könntest du sagen "ab 51% RotAnteil wird das Objekt ebenfalls ausgewählt"Vlt denke ich da aber auch kehrvert.
-
Kuldren schrieb:
Dazu könntest du dir mal in "Paint" die RGB Werte der Farben ansehen...
Danke für den Tipp... Allerdings nutze ich gimp und wäre die Lösung so einfach hätte ich wohl kaum ein Forum benötigt

Azrael, il Meraz schrieb:
[...]die für dich Rot erscheinen dann musst du rumprobieren. z.B gucken ob der rotanteil deutlich größer als andere Farbanteile ist usw.
Genau das ist das Problem. Da müsste man dann für jeden Grünwert einen eigenen bereich definieren wie rot sein darf, wobei dann blau noch gar nicht berücksichtigt wäre. Ich habe mit solchem schon ziemlich lang rumprobiert und mir ist es einfach noch nicht gelungen alle roten gegenstände vollständig herauszufiltern. Gibt es da keine einfacheren Möglichkeiten oder ist sowas schon irgendwo gemacht worden?
Kuldren schrieb:
Einfach alles was im Intervall liegt auswählen
Kannst du mir mal kurz das einfache Intervall angeben?
edit: ich gehe davon aus dass die gegenstände vollständig rot sind
mfg
-
kaffee schrieb:
Kuldren schrieb:
Einfach alles was im Intervall liegt auswählen
Kannst du mir mal kurz das einfache Intervall angeben?
Ohne mich damit länger auseinandergesetzt zu haben:
Ein beliebiger R Wert >0 und G sowie B Werte <100 wobei gilt R>G und R>B
Wobei da sicher weiter differenziert werden muss was passiert wenn RGB bzw. wie groß der Mindestabstand zw. R und G,B sein muss
Ist aber nur ein Grundgedanke..und vermutlich ohnehin nicht zu gebrauchen

-
Benutz doch ein Farbmodell in dem die "Roetung" offensichtlicher ablesbar ist, zb HSV (H=330..30) oder YUV (V>0.25) oder...
-
Kuldren schrieb:
kaffee schrieb:
Kuldren schrieb:
Einfach alles was im Intervall liegt auswählen
Kannst du mir mal kurz das einfache Intervall angeben?
Ohne mich damit länger auseinandergesetzt zu haben:
Ein beliebiger R Wert >0 und G sowie B Werte <100 wobei gilt R>G und R>B
Wobei da sicher weiter differenziert werden muss was passiert wenn RGB bzw. wie groß der Mindestabstand zw. R und G,B sein muss
Genau, es muss weiter differenziert werden, und egal wie oft ich schon rumprobiert habe, ich habe es nie geschafft nur rote Farben zu bekommen, und zwar alle die für uns rot erscheinen...
hellihjb schrieb:
Benutz doch ein Farbmodell in dem die "Roetung" offensichtlicher ablesbar ist, zb HSV (H=330..30) oder YUV (V>0.25) oder...
Danke, werd ich mir mal anschauen.
-
ich habe eine andere idee:
Wenn ein Pixel nicht ganz rot ist, mach ihn nicht sofort schwarz (denn wie du schon gemerkt hast, ist es schwer, die korrekten werte zu finden (und für andere menschen würde ein von dir geschwärzter pixel vielleicht doch noch "rot" aussehen)). Stattdessen solltest du ihn, je nachdem, _wie wenig_ rot er noch ist, lediglich abdunkeln. D.h., Pixel, die noch etwas Rotanteil haben, werden nur abgedunkelt (je weniger rotanteil, desto stärker), Pixel die dann gar keinen mehr haben (oder nur ganz wenig), machst du schwarz.
Das ganze darfst du allerdings nicht nur vom Rotanteil abhängig machen, sondern, wie schon gesagt wurde, musst du zusätzlich noch beachten, dass R > G und R > B usw...
-
Um ein Gefühl für das richtige rot zu kriegen, könntest Du einfach mal ein fragliches Objekt ausschneiden mit einem Bildverarbeitungsprogramm und dann das Histogramm anschauen.
-
ich koennte mich irren, aber ich glaube hier gab es schon einige threads dazu
