3

だから私は、画像から人間が知覚する支配的な色を抽出する方法に取り組んでいます。

例として、ここに写真があります: https://500px.com/photo/63897015/ looking-out-for-her-kittens-by-daniel-paulsson

ほとんどの人間は、「支配的な」色は、その突き刺すような紺碧の瞳であると考えるでしょう. ただし、標準の量子化を使用すると、16 色程度を下回ると、その青は完全に消えます。目はキャンバスの 0.2% しか占めていないので、平均を求めることはまったく機能しません。

プロジェクトの詳細: アップロードされた写真または特定の色を受け入れ、同様の支配的な色を持つ他の写真の束を返す Rails アプリを構築しています。このツールは、デザイナーが既存の配色に一致するストック写真を見つけるために使用されます。技術的な部分を整理できれば、他にもクールなアイデアがあります。

現在の研究: 私は過去 24 時間を費やして、この内容についてすべて読んでいました。私が試したすべてのサービスの中で、適切に機能するのは TinEye だけですが、これらはクローズド ソースです。複数のリンクを提供することはできませんが、「TinEye Color」をグーグルで検索して見つけることができます.

使用ツール: ImageMagick を使用して、画像変換とヒストグラム生成を行っています。

望ましい結果: その写真が与えられたら、5 ~ 6 色のパレットを作成したいと思います。飽和した紺碧はその 1 つです。

現在の方法: 私が現在行っている方法は、32 色または 64 色に減らし、彩度/色相の外れ値を探すことです。標準偏差が低く、外れ値がかなり離れている場合は、それをパレットに追加します。次に、写真をさらに 4 色に縮小し、それらを組み合わせて 5 ~ 6 色のパレットを作成します。

私の質問: 私の問題は、ImageMagick の量子化アルゴリズムにあります。私は色の平均を取りたくありません。色のようなものでグループ化し、中央値を取り、飽和色を優先します。猫の絵を 32 色に減らすと、目が彩度の低い灰色になります。

ですから、画像から目立つ色をぼかすことなく見つけることができるアルゴリズムまたは色の原則を知っているかどうかを皆さんに尋ねています. 4〜5色を組み合わせたぼやけた平均ではなく、実際に画像にある色が必要です。

より一般的な意味で、TinEye は完璧な仕事をしており、彼らがどのようにそれを成し遂げたのかを知りたい.

4

2 に答える 2

2

あなたは、「優勢な」色は「あの突き刺すような紺碧の瞳」だったと言います。

また、結果として、抽出されたパレットの 5 ~ 6 色の 'その飽和した紺碧が 1 つ' になりたいとも言います。

最終的には、「4 ~ 5 色を組み合わせたぼやけた平均ではなく、実際に画像に含まれる色」が必要になります。.

このタスクに取り組むために、私は最初に「その突き刺すような紺碧の目」の正確な色の定義に到達しようとしました。

しかし、ここで私はすでに立ち往生しています: その突き刺すような紺碧は、すでに少なくとも 20 の異なる色合いの青の混合物です! 1000% ズーム レベルでトリミングされたキャットアイの写真をご覧ください。

それで、あなたは正確にどれが欲しいですか? では、最終的に想像する青のベスト マッチが、元の画像には一度も表示されない複数の色を組み合わせた「ぼやけた平均」で ある場合はどうなるでしょうか?!


アップデート

これが私の最初のショットです...

1. を使用-posterize 8して色数を減らします

convert 2048.jpg -posterize 8 posterized-8.png

ポスタライズして 1000% にズームしたときのキャッツアイを次に示します。

1000% ズームでポスタライズされた青い目

2.ポスタリゼーション後に最も頻繁に使用される12色を説明するテキストの「ヒストグラム」を作成します

convert              \
   posterized-8.png  \
  -format %c         \
  -colorspace lab    \
  -colors 12         \
   histogram:info:-  | sort -n -r

  850708: (172,171,171) #ACABAB srgb(172,171,171)
  370610: (219,219,226) #DBDBE2 srgb(219,219,226)
  262870: (218,201,183) #DAC9B7 srgb(218,201,183)
  162588: (182,182,219) #B6B6DB srgb(182,182,219)
  161739: (182,219,219) #B6DBDB srgb(182,219,219)
  115671: ( 92, 87, 87) #5C5757 srgb(92,87,87)
  102337: (146,109,109) #926D6D srgb(146,109,109)
   86318: ( 67, 46, 46) #432E2E srgb(67,46,46)
   82882: ( 22, 20, 21) #161415 srgb(22,20,21)
   66221: (109,139,154) #6D8B9A srgb(109,139,154)
   58403: (146,146,109) #92926D srgb(146,146,109)
   38949: ( 97,109,146) #616D92 srgb(97,109,146)

3. 最も頻繁に使用される 12 色を使用して、パレットを示すパッチ ストリップを作成します。

convert      \
   -size 100x100 \
    xc:"srgb(172,171,171)" \
    xc:"srgb(219,219,226)" \
    xc:"srgb(134,119,120)" \
    xc:"srgb(182,182,219)" \
    xc:"srgb(182,219,219)" \
    xc:"srgb(92,87,87)" \
    xc:"srgb(146,109,109)" \
    xc:"srgb(67,46,46)" \
    xc:"srgb(22,20,21)" \
    xc:"srgb(109,139,154)" \
    xc:"srgb(146,146,109)" \
    xc:"srgb(97,109,146)" \
   +append \
    palette.png

これは、パレットがどのように見えるかです (目の非常に明るいスポットからの色が欠けています):

ポスタリゼーション画像から最も頻繁に使用される 12 色のパレット

于 2014-12-17T14:27:47.640 に答える
2

これが最初の考えです... 私または他の誰かがそれをさらに発展させるかもしれません. 飽和色を優先したいというあなたの発言がきっかけでした。

最初に、写真からすべての黒と白を取り除きます。それらは飽和していないからです。次に、HSL 色空間に変換し、彩度チャンネルを抽出します。コントラストは彩度をフルレンジに引き伸ばし、ImageMagick のカラー量子化アルゴリズムを適用する際にこれをマスクとして使用します。

convert cat.png -fuzz 20% -fill black \
    -opaque white                     \
    -opaque black                     \
    -colorspace HSL -channel S -separate -contrast-stretch 0.1% out.png

ここに画像の説明を入力

于 2014-12-17T14:36:50.823 に答える