Gruppieren Sie Fotos nach Farbe

8

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:

  1. Ändern Sie die Größe auf eine kleinere Größe, damit sie schneller verarbeitet werden kann.
  2. Quantisieren Sie , ohne die gewählte Farbkarte zu verwenden.
  3. Holen Sie sich das Histogramm des Fotos, um zu ermitteln, wie oft jede Farbe angezeigt wird.
  4. Speichern Sie die Farben in einer Datenbank, aber ich habe nicht herausgefunden, wie Sie das am besten für schnelle Abrufe durchführen können.

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!

    
liviucmg 19.07.2010, 08:35
quelle

3 Antworten

1

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 Spalte

color_percent wird zum Gruppieren von / where-Klauseln

verwendet

Bilder holen:

%Vor%     
Narcis Radu 19.07.2010, 09:41
quelle
1

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.

    
symcbean 19.07.2010 12:31
quelle
0

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.

    
Matthew Mangion 25.03.2012 09:27
quelle