Ich habe ein Computerprogramm geschrieben, mit dem Münzen in einem statischen Bild (.jpeg, .png usw.) mithilfe einiger Standardtechniken für die Bildverarbeitung (Gaußscher Weichzeichner, Schwellenwert, Hough-Transformation usw.) erkannt werden können. Anhand der Verhältnisse der von einem bestimmten Bild aufgenommenen Münzen kann ich mit großer Sicherheit feststellen, welche Münzen welche sind. Ich möchte jedoch mein Konfidenzniveau erhöhen und auch feststellen, ob eine Münze, die ich als Typ-A-Münze (anhand der Radiusverhältnisse) erachte, auch die richtige Farbe hat. Das Problem ist, dass für britische Münzen et al. (Kupfer, Silber, Gold), die jeweiligen Farben (va Kupfer bis Gold) sind sehr ähnlich.
Ich habe eine Routine, die die Durchschnittsfarbe einer bestimmten Münze im Hinblick auf den "Farbraum" von RedGreenBlue (RGB) extrahiert und Routinen, um diese Farbe in den "Farbraum" von HueSaturationBrightness (HSB oder HSV) umzuwandeln.
Es ist nicht sehr angenehm, mit RGB zu arbeiten, um zwischen den drei Münzfarben zu unterscheiden (ein Beispiel finden Sie im beigefügten [Grundbild]). Ich habe folgende Bereiche und typische Werte für die Farben der verschiedenen Münztypen:
Hinweis: Der typische Wert hier ist einer, der unter Verwendung eines "pixelweisen" Mittelwerts eines realen Bildes ausgewählt wird.
**Copper RGB/HSB:** typicalRGB = (153, 117, 89)/(26, 0.42, 0.60).
**Silver RGB/HSB:** typicalRGB = (174, 176, 180)/(220, 0.03, 0.71).
**Gold RGB/HSB:** typicalRGB = (220, 205, 160)/(45, 0.27, 0.86)
Ich habe zuerst versucht, den 'Euklidischen Abstand' zwischen einer bestimmten mittleren Münzfarbe (unter Verwendung von RGB) und den typischen Werten für jeden oben angegebenen Münztyp zu verwenden, wobei die RGB-Werte als Vektor behandelt wurden. für kupfer hätten wir:
wo der kleinste Wert der Differenz ( ) uns sagen würde, welcher Typ die gegebene Münze am wahrscheinlichsten ist. Diese Methode hat sich als sehr ungenau erwiesen.
Ich habe auch versucht, nur den Farbton der Münzen mit den typischen Werten der oben angegebenen Typen zu vergleichen. Obwohl dies theoretisch einen viel besseren "Farbraum" bietet, um mit unterschiedlichen Helligkeits - und Sättigungsgraden der Bilder umzugehen, war es auch nicht genau genug.
Frage: Was ist die beste Methode, um einen Münztyp anhand der Farbe (aus einem statischen Bild) zu bestimmen?
Vielen Dank für Ihre Zeit.
Bearbeiten 1
Hinweis: Ich habe alle unten diskutierten Ideen ausprobiert und fast nichts erreicht. Unterschiedliche Lichtverhältnisse (auch innerhalb des gleichen Bildes) machen dieses Problem sehr schwierig und sollten berücksichtigt werden.
Edit 2 (Zusammenfassung der Ergebnisse)
Danke für deine Antworten. Meine eigenen Untersuchungen (einschließlich Ihrer Antworten und Kommentare) haben gezeigt, wie schwierig es ist, dieses Problem im allgemeinen Fall von willkürlicher Beleuchtung, willkürlicher Kamera (mobiles Gerät) und Schwankung der Münzfarbe (auch für dieselbe Art / denselben Typ) zu lösen. usw. Ich habe zuerst die Hautfarbenerkennung (ein sehr aktives Forschungsgebiet) als Ausgangspunkt betrachtet und es gibt immer noch zahlreiche Probleme, auch wenn nur Kaukasier die Hautfarbe erkennen (siehe dieses Papier für einen Überblick über die aktuellen Techniken). und die Tatsache, dass dieses Problem drei verschiedene Farbobjekte enthält, die alle kontinuierliche und unterschiedliche Chromazitäten aufweisen können, macht es sehr schwierig, dieses Thema der Computersicht zu klassifizieren und entsprechend zu behandeln (in der Tat könnten Sie einen guten Doktortitel darüber schreiben) !).
Ich habe mir die Gamut-Beschränkungsmethode aus dem folgenden sehr hilfreichen Beitrag von DW angesehen. Dies war auf den ersten Blick als Vorverarbeitungsschritt sehr vielversprechend, um das Bild und die einzelnen Münzobjekte in Farben zu verwandeln, die unabhängig von den Lichtbedingungen sind. Aber auch diese Technik funktioniert nicht perfekt (und beinhaltet eine Bibliothek von Bildern / Histogrammen für Zuordnungen - auf die ich nicht näher eingehen möchte) und auch nicht die viel komplexeren Methoden der neuronalen Netzwerkarchitektur. Tatsächlich heißt es in diesem Artikel abstrakt:
"current machine colour constancy algorithms are not good enough for colour-based
object recognition.".
Das heißt nicht, dass es zu diesem Thema nicht viel aktuellere Veröffentlichungen gibt, aber ich kann sie nicht finden, und es scheint derzeit kein sehr aktives Forschungsgebiet zu sein.
Die Antwort von AVB war auch hilfreich und ich habe mich kurz mit L A B * befasst.
"The nonlinear relations for L*, a*, and b* are intended to mimic the nonlinear
response of the eye. Furthermore, uniform changes of components in the L*a*b* colour
space aim to correspond to uniform changes in perceived colour, so the relative
perceptual differences between any two colours in L*a*b* can be approximated by
treating each colour as a point in a three dimensional space."
Nach dem, was ich gelesen habe, wird die Umwandlung in diesen Farbraum für meine geräteabhängigen Bilder schwierig sein - aber ich werde dies ausführlich untersuchen (mit Blick auf eine Art Implementierung), wenn ich etwas mehr Zeit habe.
Ich halte nicht den Atem an, um eine konkrete Lösung für dieses Problem zu finden, und nach dem Versuch mit L A B * werde ich die Münzfarbe vernachlässigen und meine aktuellen geometrischen Erkennungsalgorithmen (genaue elliptische Hough-Transformation usw.) überprüfen.
Danke euch allen. Und als letzte Anmerkung zu dieser Frage hier das gleiche Bild mit einem neuen geometrischen Erkennungsalgorithmus, der keine Farberkennung hat:
quelle
Antworten:
Zwei Dinge für den Anfang.
Eins funktioniert definitiv nicht in RGB. Ihre Standardeinstellung sollte Lab-Farbraum (auch bekannt als CIE L * a * b *) sein. Verwerfen
L
. Von Ihrem Bild sieht es aus wie diea
Koordinate Ihnen die meisten Informationen gibt, aber Sie sollten wahrscheinlich eine Hauptkomponentenanalyse auf tuna
undb
und Arbeit entlang der ersten (am wichtigsten) Komponente, nur die Dinge einfach zu halten. Wenn dies nicht funktioniert, können Sie versuchen, zu einem 2D-Modell zu wechseln.Nur um ein Gefühl dafür zu bekommen, haben
a
die drei gelblichen Münzen Geschlechtskrankheiten unter 6, und Mittelwerte von 137 ("Gold"), 154 und 162 - sollten unterscheidbar sein.Zweitens das Lichtproblem. Hier müssen Sie Ihr Problem sorgfältig definieren. Wenn Sie enge Farben unter jeder Beleuchtung und in jedem Kontext unterscheiden möchten, können Sie das sowieso nicht. Wenn Sie nur lokale Helligkeitsschwankungen befürchten, kümmert sich Lab hauptsächlich darum. Wenn Sie sowohl bei Tageslicht als auch bei Glühlampen arbeiten möchten, können Sie dann einen einheitlichen weißen Hintergrund sicherstellen, wie in Ihrem Beispielbild? Wie sind Ihre Lichtverhältnisse im Allgemeinen?
Außerdem wurde Ihr Bild mit einer relativ billigen Kamera aufgenommen, so wie es aussieht. Es hat wahrscheinlich eine Art automatischen Weißabgleich, der die Farben ziemlich durcheinander bringt - schalten Sie ihn aus, wenn Sie können. Es sieht auch so aus, als ob das Bild irgendwann in YCbCr codiert wurde (was häufig vorkommt, wenn es sich um eine Videokamera handelt) oder in einer ähnlichen Variante von JPG. Die Farbinformationen sind stark unterabgetastet. In Ihrem Fall könnte es tatsächlich gut sein - es bedeutet, dass die Kamera in den Farbkanälen eine Rauschunterdrückung für Sie durchgeführt hat. Andererseits bedeutet es wahrscheinlich, dass die Farbinformationen irgendwann auch stärker quantisiert wurden als die Helligkeit - das ist nicht so gut. Die Hauptsache hier ist - Kameraangelegenheiten, und was Sie tun, sollte von der Kamera abhängen, die Sie benutzen werden.
Wenn irgendetwas hier keinen Sinn ergibt - hinterlasse einen Kommentar.
quelle
Im Geiste des Brainstormings teile ich einige Ideen, die Sie ausprobieren könnten:
Versuchen Sie mehr Hue? Es sieht so aus, als hätte Hue Ihnen eine ziemlich gute Unterscheidung zwischen Silber und Kupfer / Gold gegeben, aber nicht zwischen Kupfer und Gold, zumindest in dem einzigen Beispiel, das Sie hier gezeigt haben. Haben Sie den Farbton genauer untersucht, um festzustellen, ob die Unterscheidung von Silber und Kupfer / Gold sinnvoll ist?
Ich könnte damit beginnen, ein paar Beispielbilder zu sammeln, die Sie manuell beschriftet haben, und den Farbton jeder Münze in jedem Bild zu berechnen. Dann können Sie versuchen, sie zu histogrammieren, um festzustellen, ob Hue eine plausible Methode zur Unterscheidung darstellt. Ich könnte auch versuchen, den durchschnittlichen Farbton jeder Münze zu betrachten, um einige Beispiele zu finden, wie das, das Sie hier vorgestellt haben. Sie können auch Saturation ausprobieren, da dies auch hilfreich sein könnte.
Wenn dies fehlschlägt, möchten Sie möglicherweise Ihre Frage bearbeiten, um zu zeigen, was Sie versucht haben, und anhand einiger Beispiele zu veranschaulichen, warum dies schwierig ist oder wo es fehlschlägt.
Andere Farbräume? In ähnlicher Weise können Sie versuchen, die Farbintensität in rg umzuwandeln und dann zu experimentieren, um festzustellen, ob das Ergebnis bei der Unterscheidung von Silber und Kupfer / Gold hilfreich ist. Es ist möglich, dass dies bei der Anpassung an Beleuchtungsschwankungen hilfreich ist, sodass es sich lohnt, es zu versuchen.
Mit Referenzbildern vergleichen? Anstatt die Farbe der Münze zu verwenden, sollten Sie versuchen, den Aufdruck der Münze zuzuordnen. Nehmen wir zum Beispiel an, Sie haben eine Münze im Bild erkannt und nehmen an, dass es sich um eine Ein-Pfund-Münze handelt. Sie könnten ein Referenzbild einer 1-Pfund-Münze nehmen und testen, ob mit übereinstimmt .C R R C
Sie müssen Unterschiede in der Pose berücksichtigen. Lassen Sie mich zunächst davon ausgehen, dass Sie ein direktes Bild der Münze haben, wie in Ihrem Beispielbild. Dann ist die Hauptsache, die Sie berücksichtigen müssen, Rotation: Sie wissen a priori nicht, wie viel gedreht wird. Ein einfacher Ansatz könnte darin bestehen, einen Bereich von möglichen Drehwinkeln überstreichen, um drehen und zu prüfen, ob mit scheint . Zum Testen einer Übereinstimmung können Sie eine einfache pixelbasierte Diff-Metrik verwenden: Berechnen Sie für jede Koordinate (die Differenz zwischen dem Pixelwert inθC θ R θ Rθ C ( x , y) D ( x , y) = Rθ( x , y) - C( x , y) Rθ und der Pixelwert in ); Verwenden dann eine Norm (Summe der Quadrate) oder etwas Ähnliches, um alle Differenzwerte zu einer einzigen Metrik zu kombinieren, die angibt, wie genau Ihre Übereinstimmung ist (dh ). Sie müssen ein Schrittmaß verwenden, das klein genug ist, damit der Pixeldiff wahrscheinlich funktioniert. In Ihrem Beispielbild hat die Ein-Pfund-Münze beispielsweise einen Radius von etwa 127 Pixeln. Wenn Sie die Werte von und bei jedem Schritt um Grad erhöhen , müssen Sie nur ungefähr 1460 verschiedene Rotationswerte und den Fehler am Umfang der Münze in der dem wahren am nächsten liegenden Näherung ausprobierenC L2 ∑( x , y)D ( x , y)2 θ 0,25 θ sollte höchstens etwa ein Viertel eines Pixels betragen, was klein genug ist, dass der Pixeldiff möglicherweise in Ordnung ist.
Möglicherweise möchten Sie mit mehreren Variationen dieser Idee experimentieren. Sie können beispielsweise mit einer Graustufenversion des Bildes arbeiten. die volle RGB und verwenden Sie eine Norm für alle drei R-, G-, B-Differenzen; die volle HSB, und verwenden Sie eine Norm für alle drei H, S, B-Differenzen; oder arbeiten Sie nur mit der Farbton-, Sättigungs- oder Helligkeitsebene. Eine weitere Möglichkeit wäre, zuerst einen Kantendetektor sowohl für als auch für zu betreiben und dann das resultierende Kantenbild abzugleichen.L2 L2 R C
Aus Gründen der Robustheit haben Sie möglicherweise mehrere unterschiedliche Referenzbilder für jede Münze (tatsächlich jede Seite jeder Münze) und versuchen alle Referenzbilder, um die beste Übereinstimmung zu finden.
Wenn die Bilder der Münzen nicht direkt von vorne aufgenommen wurden, können Sie als ersten Schritt die Ellipse berechnen, die den Umfang der Münze im Bild darstellt, und auf den Blickwinkel der Münze schließen. Auf diese Weise können Sie berechnen, wie in diesem Winkel aussehen würde, bevor Sie den Abgleich durchführen.C R
Prüfen Sie, wie sich die Farbe in Abhängigkeit vom Abstand zum Zentrum ändert. Hier ist ein möglicher Zwischenschritt zwischen "der mittleren Farbe der Münze" (einer einzelnen Zahl, dh 0-dimensional) und "dem gesamten Bild der Münze" (einem 2-dimensionalen Bild). Für jede Münze können Sie einen eindimensionalen Vektor oder eine eindimensionale Funktion berechnen , wobei die mittlere Farbe der Pixel in einem Abstand von ungefähr von der Mitte der Münze darstellt. Sie könnten dann versuchen, den Vektor für eine Münze in Ihrem Bild mit dem Vektor für ein Referenzbild dieser Münze .f ( r ) r f C C f R Rf f( r ) r fC C fR R
Dadurch können Sie möglicherweise Beleuchtungsunterschiede ausgleichen. Möglicherweise können Sie in Graustufen oder nur in einer Bitebene (z. B. Farbton, Sättigung oder Helligkeit) arbeiten. Oder Sie können die Funktion zunächst normalisieren, indem Sie den Mittelwert subtrahieren: , wobei die mittlere Farbe der Münze ist - und dann versuchen, mit .g ( r ) = f ( r ) - & mgr; & mgr; g C g Rf g(r)=f(r)−μ μ gC gR
Das Schöne an diesem Ansatz ist, dass Sie nicht darauf schließen müssen, um wie viel die Münze gedreht wurde: Die Funktion ist rotationsinvariant.f
Wenn Sie mit dieser Idee experimentieren möchten, würde ich die Funktion für eine Vielzahl verschiedener Beispielbilder berechnen und grafisch darstellen. Dann sollten Sie in der Lage sein, sie visuell zu untersuchen, um festzustellen, ob die Funktion unabhängig von der Beleuchtung eine relativ konsistente Form zu haben scheint. Möglicherweise müssen Sie dies aus verschiedenen Gründen versuchen (Graustufen, jede der HSB-Bitebenen usw.).fC
Wenn die Münze nicht direkt frontal auf fotografiert hätte, aber möglicherweise aus einem Winkel, müssen Sie zuerst die Ellipse von verfolgen müssen ‚s Umfang der Winkel abzuleiten , aus dem sie fotografiert wurde und dann richtig für die in die Berechnung von .C fC C f
Sehen Sie sich die Bildverarbeitungsalgorithmen für die Farbkonstanz an. Die Computer-Vision-Community hat die Farbkonstanz untersucht , das Problem der Korrektur einer unbekannten Beleuchtungsquelle. siehe zB diese Übersicht . Sie können einige der für dieses Problem abgeleiteten Algorithmen untersuchen. Sie versuchen, auf die Beleuchtungsquelle zu schließen und diese dann zu korrigieren, um das Bild abzuleiten, das Sie erhalten hätten, wenn das Bild mit der Referenzbeleuchtungsquelle aufgenommen worden wäre.
Sehen Sie sich die Indizierung von Farbkonstanten an. Die Grundidee von CCCI ist , wie ich es verstehe, zuerst die unbekannte Beleuchtungsquelle aufzuheben, indem der R-Wert jedes Pixels durch das Verhältnis zwischen seinem R-Wert und einem der R-Werte seines Nachbarn ersetzt wird; und ähnlich für die G- und B-Flugzeuge. Die Idee ist, dass diese Verhältnisse (hoffentlich) jetzt größtenteils unabhängig von der Beleuchtungsquelle sein sollten. Sobald Sie diese Verhältnisse haben, berechnen Sie ein Histogramm der im Bild vorhandenen Verhältnisse und verwenden dieses als Signatur des Bildes. Wenn Sie nun das Bild der Münze mit einem Referenzbild vergleichen möchten , können Sie deren Signaturen vergleichen, um festzustellen, ob sie zu stimmen scheinen. In Ihrem Fall müssen Sie möglicherweise auch den Winkel einstellen, wenn das Bild der Münze angezeigt wirdR CC R C wurde nicht direkt aufgenommen - aber dies scheint zu helfen, die Abhängigkeit von der Beleuchtungsquelle zu verringern.
Ich weiß nicht, ob einer von diesen eine Chance hat zu arbeiten, aber es sind einige Ideen, die Sie versuchen könnten.
quelle
Interessantes Problem und gute Arbeit.
Versuchen Sie es mit mittleren Farbwerten anstelle von mittleren. Dies ist robuster gegenüber Ausreißerwerten aufgrund von Helligkeit und Sättigung. Versuchen Sie, nur eine der drei RGB-Komponenten zu verwenden. Wählen Sie die Komponente, die die Farben am besten unterscheidet. Sie können versuchen, Histogramme der Pixelwerte (z. B. einer der RGB-Komponenten) zu zeichnen, um eine Vorstellung von den Eigenschaften der Pixelverteilung zu erhalten. Dies könnte eine Lösung vorschlagen, die nicht sofort offensichtlich ist. Versuchen Sie, die RGB-Komponenten im 3D-Raum grafisch darzustellen, um festzustellen, ob sie einem Muster folgen. Beispielsweise können sie in der Nähe einer Linie liegen, was darauf hinweist, dass eine lineare Kombination der RGB-Komponenten ein besserer Klassifizierer als ein einzelner ist.
quelle