2014-11-12 11 views
7

Potrzebuję wygenerować paletę kolorów 5 dominujących kolorów obrazu. Chciałbym powtórzyć wyniki Embedly's extract tool lub Color Thief.Generowanie palety kolorów z obrazu za pomocą ImageMagick

Poniższa komenda daje mi nieco inne wyniki:

convert testimage.jpg -format %c -colorspace LAB -colors 5 histogram:info:- | sort -n -r 
    157154: (19, 28, 35) #131C23 srgb(19,28,35) 
    16164: (27, 51, 77) #1B334D srgb(27,51,77) 
    15725: (79, 88, 84) #4F5854 srgb(79,88,84) 
     8608: (44, 77,103) #2C4D67 srgb(44,77,103) 
     5149: (84,126,150) #547E96 srgb(84,126,150) 

jestem trochę niepewny czy mam kwantyzacji do 5 kolorów, jak odkryłem, że ten sposób nie działa tak dobrze z prostą grafiką (na przykład logo Google). Czy lepiej jest użyć większej palety kolorów, a następnie wybrać najlepsze kolory?

To prowadzi mnie do następnego pytania dotyczącego zastosowanego algorytmu kwantyzacji. Patrząc na wyniki Embedly Extract, kolory wyjściowe niekoniecznie są najczęściej częste, ale wydają się być klastry, które są najbardziej odmienne od siebie różnych.

Załóżmy na przykład, że mam bardzo ciemny obraz (czarny/brązowy) z małym detalem w jasnoczerwonym kolorze. Jak mogę się upewnić, że ImageMagick zawiera czerwony? (Przepraszam, jeśli to brzmi głupio, teoria kolorów jest dla mnie zupełnie nowa!).

Poniżej znajduje się obraz używam do testowania:

enter image description here

Odpowiedz

16

można zdefiniować "5 TOP Dominujące kolory", proszę? Myślę, że to nie jest tak proste, jak to brzmi ...

to jasno wynika z różnych wyników, które można zobaczyć podczas wizyty linki ty przewidzianych Embed.ly „s oraz Colour Złodziej interpretację twojego testowego obrazu.

Embed.ly

Oto co HTML.ly wymienia jako jego 5 wydobyte kolory (I spojrzał na kodzie źródłowym HTML strony, aby dowiedzieć się):

rgb(13, 28, 37) 
rgb(44, 74, 94) 
rgb(71, 112, 131) 
rgb(105, 147, 163 
rgb(198, 209, 216) 

Korzystając ImageMagick aby utworzyć paletę kolorów z tych 5 kolorach:

convert      \  
    -size 60x60    \  
     label:"  Embed.ly" \ 
     xc:"rgb(13, 28, 37)"  \  
     xc:"rgb(105, 147, 163" \  
     xc:"rgb(71, 112, 131)" \  
     xc:"rgb(44, 74, 94)"  \  
     xc:"rgb(198, 209, 216)" \ 
    +append     \  
     embedly-palette-from-testimage.jpg 

Look w wyniku:

Embed.ly's pick of 5 colors...

Colour Złodziej

Kolor nazwy Thief jednobarwne jako "dominującej" kolor:

rgb(21, 30, 38) 

Kolor Złodziej wymienia także paletę 9 więcej kolorów (ponownie, wartości pobranych z kodu źródłowego HTML):

rgb(18, 27, 35) 
rgb(100, 142, 164) 
rgb(51, 84, 110) 
rgb(32, 53, 74) 
rgb(47, 46, 43) 
rgb(83, 85, 76) 
rgb(145, 143, 128) 
rgb(106, 141, 140) 
rgb(62, 84, 81) 

Zastosowanie ImageMagick aby utworzyć paletę kolorów z palety kolorów 9 Colour złodzieja:

convert      \  
    -size 60x60    \  
     label:"  Color Thief" \ 
     xc:"rgb(18, 27, 35)"  \  
     xc:"rgb(100, 142, 164)" \ 
     xc:"rgb(51, 84, 110)"  \  
     xc:"rgb(32, 53, 74)"  \  
     xc:"rgb(47, 46, 43)"  \  
     xc:"rgb(83, 85, 76)"  \  
     xc:"rgb(145, 143, 128)" \ 
     xc:"rgb(106, 141, 140)" \ 
     xc:"rgb(62, 84, 81)"  \  
    +append     \  
     ct-palette-from-testimage.jpg 

spojrzeć na wynik:

Color Thief's palette of 9 extracted colors...

Kolor Złodziej jest oparta na quantize.js. Używa on średniego algorytmu wycinania dostarczonego przez quantize.js w celu grupowania podobnych kolorów, a następnie zwraca podstawowy kolor z największego klastra jako "dominujący" kolor.

W jaki sposób określa, które kolory zwracać jako "kolory palety" można określić na podstawie kodu źródłowego, który jest hosted on Github.

ImageMagick za 5 kwantowane kolory

Twoje pytanie wymienia wyjście histogram ImageMagick po kwantyzacji obraz tylko 5 kolorach.

Te 5 kolorów, aby utworzyć kolejną paletę kolorów:

convert      \ 
    -size 60x60    \ 
     label:" ImageMagick" \ 
     xc:"srgb(19,28,35)"  \ 
     xc:"srgb(79,88,84)"  \ 
     xc:"srgb(44,77,103)"  \ 
     xc:"srgb(27,51,77)"  \ 
     xc:"srgb(84,126,150)"  \ 
    +append     \ 
     im-palette-from-testimage.jpg 

spojrzeć na wynik:

ImageMagick's 5 quantized colors...

Porównaj 3 palety kolorów

Użyj tego polecenia, aby utworzyć wizualne porównanie 3 palet kolorów:

convert         \ 
     ct-palette-from-testimage.jpg   \ 
     embedly-palette-from-testimage.jpg \ 
     im-palette-from-testimage.jpg   \ 
    -append        \ 
     color-palettes.jpg 

Wynik:

Direct visual comparison of 3 created color palettes...

Jak widać wyraźnie, ani złodziej Kolor ani 5 kwantowane kolory z histogramem ImageMagick za zawierają raczej jasny 5th kolor zwrócony przez Embed.ly.

Porównaj ponownie do testu obrazu:

Test image...

„Czy lepiej korzystać z większej palety kolorów, a potem po prostu wybrać do góry N kolory?”

Dlaczego nie przetestujesz tego i nie dowiesz się?

+0

+1 Świetna odpowiedź, Kurt - dobrze zbadane i dobrze wyjaśnione. –

+0

Od tego czasu próbowałem tego przy użyciu zmodyfikowanej kwantyzacji średniej mediany (MMCQ) i uzyskuję wyniki znacznie bliżej wartości usługi embedly. Zgodnie z [białą księgą] (http://www.leptonica.com/papers/mediancut.pdf) daje to lepsze wyniki dla obrazów o bardzo widocznych, ale słabo zaludnionych kolorach. –

+0

Nie sądzę, że mówienie komuś, żeby coś przetestować i "znaleźć się" jest naprawdę odpowiednie dla strony z pytaniami i odpowiedziami. – Skrylar

Powiązane problemy