Ermitteln Sie den Hautton von einem Bild

8

Ich versuche, eine Anwendung zu entwickeln, die die Farbe des Gesichts erkennt, sobald ein Bild bereitgestellt wird. Ich konnte den Gesichtserkennungsalgorithmus von OpenCV herausfinden und integrieren. Ich konnte jedoch kein Beispiel oder Interface finden, mit dem ich die Farbe des Gesichts erkennen kann.

Ich habe die Logik, die ich vorstelle. Bitte lassen Sie mich wissen, ob etwas dafür verfügbar ist oder muss ich die separate Funktion dafür schreiben?

Logik : Suchen Sie in dem gegebenen Bildbereich nach dem Farbdetail, das meistens im gegebenen Bild wiederholt wird. Ich bin durch das Histogramm gegangen und nicht sicher, wie es helfen wird.

Jede Hilfe wird sehr geschätzt.

    
Nareshkumar 13.09.2010, 12:34
quelle

3 Antworten

4

Das Histogramm stellt die Anzahl der Pixel einer bestimmten Farbe dar, die sich im Bild befinden.

Nehmen wir zum Beispiel an, Sie haben dieses 3x3-Bild:

3 4 3 1 1 1 2 2 1

Das Histogramm wäre: zählen: 4 2 2 1 Farbe: 1 2 3 4

davon hätte man, dass die Farbe, die am meisten gefunden wird, die Farbe 1 ist. Es wäre wahrscheinlich auch sinnvoll, eine sehr ähnliche Farbe zu summieren.

Zum Beispiel verwenden Sie count (2) = sum (hist (1), hist (2), hist (3)); (wobei hist die Anzahl der Pixel in dieser Farbe ist)

    
Daniel 13.09.2010, 12:43
quelle
5

Um den Hautton eines Gesichts (oder eines Bildes!) zu erkennen, empfehle ich Ihnen, den HSV-Farbraum (oder einen komplexeren Farbraum wie LAB) anstelle des Standard-RGB-Farbraums zu verwenden, da RGB-Werte variieren viel abhängig von starker oder dunkler Beleuchtung und Schatten, usw. Während HSV ist viel besser im Umgang mit Lichtunterschiede, und es gibt Ihnen einen einfach zu bedienenden Farbwert.

HSV bedeutet Farbton-Sättigungs-Wert, wobei der Farbton die Farbe ist. zB: ein Farbton von 0 ist rot und ein Farbton von 50 ist möglicherweise grün. Die Sättigung ist die Grauheit, so dass ein Sättigungswert nahe 0 bedeutet, dass sie matt oder grau aussieht, während ein Sättigungswert von 200 eine sehr starke Farbe sein kann (z. B. Rot, wenn Farbton 0 ist). Und Wert ist die Helligkeit des Pixels, also ist 0 schwarz und 255 ist weiß.

Ob Sie also ein Histogramm verwenden oder nicht, liegt bei Ihnen, aber Sie sollten Ihr Bild zuerst in HSV umwandeln, dann können Sie mit einem Histogramm oder einer einfachen Suche nach dem häufigsten Farbton suchen. Der Farbtonwert ist der Hautton oder die gewünschte Farbe. Und wenn Sie es ein bisschen fortgeschrittener machen möchten, könnten Sie die Werte von Sättigung und Helligkeitswert berücksichtigen, um zu entscheiden, ob es tatsächlich schwarz oder weiß oder grau ist und nicht eine Farbe überhaupt.

Ich habe noch mehr OpenCV RGB zu HSV Konvertierungsinformationen auf meiner HSV Tutorial Seite unter:

Ссылка

    
Shervin Emami 15.09.2010 07:26
quelle
3

Es gibt keine solche Funktion in OpenCV und aus gutem Grund. Gesichtserkennung ist ein sehr komplexes Problem und es gibt nur wenige Ansätze, die die Arbeit erledigen. Zum Beispiel implementiert OpenCV Viola & amp; Jones Gesichtserkennungsalgorithmus, der als einer der besten derartigen Algorithmen bekannt ist. Einige andere Implementierungen verwenden neurale Netzwerke usw.

Das Gesichtserkennungsproblem in einigen allgemeinen komplexen Szenen ist also nicht so einfach wie es scheint. Ich befürchte, dass die Verwendung von Gesichtsfarbinformationen nicht gut genug ist, um stabile Ergebnisse zu erzielen. Es gibt einige Arbeiten, die solche Techniken vorschlagen, aber die Bedingungen, unter denen der Algorithmus arbeitet, sind meistens begrenzt (z. B. nur ein Gesicht pro Bild oder ein sehr einfacher Hintergrund).

    
Adi 13.09.2010 17:50
quelle