Ich habe eine ziemlich große Anzahl von Fotos und eine RGB-Farbkarte (etwa 100 Farben). Wie kann ich die Bilder nach Farbe gruppieren und so etwas wie das Folgende erhalten: Ссылка ?
Meine derzeitige Idee ist folgende: Verwenden Sie ImageMagick für jedes Foto:
Kennen Sie einen besseren und effizienteren Weg? Meine bevorzugte Sprache ist PHP, da die gesamte Verarbeitung von ImageMagick ausgeführt wird und die Datenbank PostgreSQL ist. Vielen Dank im Voraus!
Ich habe bemerkt, dass Sie bereits herausgefunden haben, wie Sie die relevantesten Farben aus dem Bild erhalten. Ändern Sie die Größe der Bilder nicht so sehr, weil das Histogramm anders aussieht.
Die Datenbank sieht möglicherweise so aus:
Bildtabelle:
%Vor%Farbtabelle:
%Vor%Bildfarbentabelle:
%Vor% Die Spaltecolor_percent wird zum Gruppieren von / where-Klauseln
verwendetBilder holen:
%Vor%Farben sind im Wesentlichen dreidimensionale Vektoren (unabhängig davon, ob sie als HSV, RGB, CMY [K] dargestellt werden). Leider sind relationale Datenbanken meistens nicht sehr gut in mehr als einer Dimension zu arbeiten.
Wenn Sie das Bild auf eine einzelne "durchschnittliche" Farbe reduzieren, wird die Lösung etwas einfacher: Eine triviale Analyse würde bedeuten, dass Sie ein neues Bild mit jedem vorhandenen Bild vergleichen müssen, um den Grad der Ähnlichkeit zu bestimmen. Ein besserer Ansatz wäre jedoch, den Vektor zu digitalisieren, um ähnliche Werte in der Datenbank zu finden.
z.B. für 24-Bit-Farbe 124, 39, 201 als 1 Bit Farbe: 0,0,1 als 2 Bit Farbe: 1,0,2 ....
Wenn Sie mehr Farben im Bild betrachten möchten, würde ich empfehlen, auf die nächsten Werte einer festen Farbkarte ohne Fehlerfortpflanzung zu reduzieren und die am häufigsten verwendeten oberen 'N' Farben zu identifizieren. Was Sie danach machen, würde einige Versuche und Anstrengungen erfordern - die Methode, die oben für die Häufigkeit im Zwischenbild gewichtet wurde, könnte notwendig sein oder Sie könnten einfach mit dem Betrachten der Bilder fortfahren, wo die oberen NM Farben mit NX Ihrer berechneten Werte übereinstimmen (mit einigen Feinabstimmung der M- und X-Werte).
C.
Ich habe bemerkt, was Sie tun müssen. Der beste Weg, um dieses Problem zu umgehen, ist die Konvertierung Ihres Bildes von RGB zu CIE-LAB Farbprofil.
Dann können Sie den Abstand zwischen den beiden Farben im 3D-Raum berechnen.
M. M.
Tags und Links php postgresql colors imagemagick photos