In dem Foto Pixel Suche nach bestimmte Farbe (RGBA)

Hallo zusammen,

Ich suche eine effektive Algorithmus für die Pixel suche. Ich habe bisher nur jede Zeile und Spalten durchsuche geschafft. Allerdings das ist nicht so effektiv wenn es in einem Foto (bsp) 20000x20000 Pixeln geht. Ich habe eine Idee dass man das Foto unterteilt und jede Unterteilung gleichzeitig durch geht oder so.
Vielen Dank im Voraus für eure Antworten.

Hallo,

was genau willst du denn lösen? Herausfinden, ob es in dem Foto ein Pixel mit Farbe x gibt? Oder alle Pixel dieser Farbe auslisten? Für letzteres Problem wirst du nicht drum herum kommen, alle Pixel zu durchlaufen. Den Prozess kannst du in .Net recht einfach mit Parallel.For parallelisieren. In anderen Programmiersprachen eben anders. Üblicherweise teilt man das Bild in seine Zeilen auf und lässt eine vorgegebene Anzahl Threads diese Zeilen bearbeiten. I.A. macht es keinen Sinn, mehr Threads als CPU-Kerne zu starten.
Falls es doch eher in Richtung des ersten Problems geht, was für Annahmen können wir denn über das Bild treffen? Ist es ein reales Foto?

Nico

Hallo,
Du solltest deine Bitmap zuerst in ein Byte-Array umwandeln (google weiß wie) und dann, wie siehe unten je nach gesuchter Farbe jedes 3.Byte kontrollieren. Das schöne an dem Bytearray ist dass du es leicht zerstückeln kannst (falls du Parallel for nicht magst).
Es kann übrigens noch hilfreich sein, wenn man weiß wie eine Bitmap aufgebaut ist um Offset und Eigenschaften von der Suche auszuschließen sowie Pixelreihenfolge (oben nach unten/unten nach oben), Farbreihenfolge (rot grün blau…) und Farbtiefe zu kennen (wikipedia weiß mehr)
Es gibt soweit ich weiß keine schnellere Möglichkeit als jedes Byte einzeln durchzuchecken, denn um es beschleunigen zu können müsstest du vorher eine Funktion auf das Bytearray anwenden (die es zB in Quadranten einteilt und nach Helligkeit sortiert oder so), aber jede Funktion die du auf das Bytearray anwendest braucht länger als ein Vergleich von 2 Bytes.

Bildbearbeitung ist allgemein ein Gebiet welches viele Ressourcen verschlingt, sich aber auch wahnsinnig gut parallelisieren lässt… und genau das solltest du nutzen.

mfg
armer Tor