2011-01-15 11 views
3

Für Bild-Scan-Zwecke möchte ich ein Pixel (das ich von einem UIImage bekommen kann), um (für einen bestimmten Prozentsatz) zu einer voreingestellten Farbe zu passen.Pixel-Farbabstimmung Schätzung

Sag Rosa. Wenn ich das Bild nach pinkfarbenen Pixeln scanne, möchte ich, dass eine Funktion einen Prozentsatz zurückgibt, wie viel der RGB-Wert im Pixel wie mein voreingestellter RGB-Wert aussieht. Auf diese Weise möchte ich, dass alle (gut, die meisten) rosa Pixel für mich "sichtbar" werden, nicht nur exakte Übereinstimmungen.

Kennt jemand einen solchen Ansatz? Wie würdest du so etwas tun?

Vielen Dank im Voraus.

UPDATE: danke Ihnen allen für Ihre Antworten bisher. Ich akzeptierte die Antwort von Damien Pollet, weil es mir weiter half und ich kam zu dem Schluss, dass die Berechnung der Vektordifferenz zwischen zwei RGB-Farben (für diesen Moment) perfekt für mich ist. Es könnte einige Optimierungen im Laufe der Zeit benötigen, aber jetzt benutze ich die folgende (in Ziel c):

float difference = pow(pow((red1 - red2), 2) + pow((green1 - green2), 2) + pow((blue1 - blue2), 2), 0.5); 

Wenn diese Differenz unter 85 ist, habe ich die Farbe als meine Zielfarbe an. Da mein Algorithmus keine Präzision braucht, ich mit dieser Lösung bin ok :)

UPDATE 2: auf meiner Suche nach mehr fand ich die folgende URL, die ganz sein könnte (Untertreibung) nützlich für Sie, wenn Sie suchen, sowas ähnliches.

http://www.sunsetlakesoftware.com/2010/10/22/gpu-accelerated-video-processing-mac-and-ios

+0

Es hängt davon ab, was Sie für 'pink' bedeuten. Ist dunkelrosa noch pink? – 6502

Antwort

2

würde ich sagen, nur den Vektor Unterschied zu Ihrem Zielfarbe berechnen und prüfen, ob es die Norm ist kleiner als eine bestimmte Schwelle. Ich vermute, einige color spaces sind besser als andere in diesem, vielleicht HSL oder L * ab, da sie die Helligkeit von der Farbe selbst trennen, und so eine kleine Wahrnehmungsdifferenz durch einen kleineren Farbvektor darstellen könnte ...

Auch siehe this related question

2

Wissenschaftliche Antwort: Sie sollten beide Farben in den LAB-Farbraum konvertieren und dort den euklidischen Abstand berechnen. Dieser Wert wird auch deltaE genannt.

Der LAB-Raum wurde genau aus diesem Grund (unter Verwendung von Testpersonen) entwickelt: so dass verschiedene Farbpaare mit gleichen Abständen in diesem Raum gleich wahrgenommenen Farbunterschieden entsprechen.

Es klingt jedoch so, als ob Sie nicht nach einer bestimmten Farbe suchen, sondern nach einem Farbbereich (sagen wir mal alle Hauttöne). Das könnte mehr Benutzereingabe erfordern als eine Referenzfarbe + ein deltaE tollerance:

  • eine Referenzfarbe mit 3 Die Toleranzen für den Farbton, die Sättigung und die Helligkeit

  • eine Wolke von refence Farbproben

  • ...