オブジェクトの色を決定する最も正確な方法は何ですか?


33

コンピュータービジョンの標準的な手法(ガウスぼかし、しきい値処理、ハフ変換など)を使用して、静的画像(.jpeg、.pngなど)のコインを検出できるコンピュータープログラムを作成しました。特定の画像からピックアップされたコインの比率を使用して、どのコインがどれであるかを確実に確立できます。ただし、信頼レベルに追加し、(半径比から)タイプAであると推測するコインも正しい色であるかどうかを判断します。問題は、英国のコインなどについてです。(銅、銀、金)、それぞれの色(特に銅から金)は非常に似ています。

RedGreenBlue(RGB)の「色空間」に関して特定のコインの平均色を抽出するルーチンと、この色をHueSaturationBrightness(HSBまたはHSV)の「色空間」に変換するルーチンがあります。

RGBは、3つのコインの色を区別しようとするのにあまり適していません(例については、添付の[基本]画像を参照してください)。次の範囲と、さまざまなコインタイプの色の一般的な値があります。

注:ここでの典型的な値は、実際の画像の「ピクセル単位の」平均を使用して選択された値です。

**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) 

最初に、特定の平均コインカラー(RGBを使用)と、RGB値をベクトルとして扱う上記の各コインタイプの典型的な値との間の「ユークリッド距離」を使用しようとしました。銅の場合:

Dcopper=((RtypeRcopper)2+(GtypeGcopper)2+(BtypeBcopper)2)

ここで、差の最小値()は、特定のコインがどのタイプである可能性が最も高いかを示します。この方法は、非常に不正確であることが示されています。D

また、コインの色相を上記の典型的な値と比較することも試みました。理論的には、これにより、画像のさまざまな明るさと彩度レベルを処理するためのはるかに優れた「色空間」が提供されますが、これも十分に正確ではありませんでした。

質問:(静止画像から)色に基づいてコインの種類を判断する最良の方法は何ですか?

ご清聴ありがとうございました。

典型的なコインの色

編集1

注:以下で説明するすべてのアイデアを試しましたが、ほとんど何も達成していません。照明条件の変動(同じ画像内であっても)により、この問題は非常に困難になるため、考慮する必要があります。

編集2(結果の概要)

ご回答ありがとうございます。私自身のさらなる研究(あなたの答えとコメントを含む)は、任意の照明、任意のカメラ(モバイルデバイス)、コインの色の変動(同じ種/タイプであっても)の一般的な場合にこの問題がいかに難しいかを強調しましたはじめに肌の色の認識(非常に活発な研究分野)を出発点として見ており、白人だけの肌の色の認識にも多くの問題が残っています(現在のテクニックのレビューについてはこのペーパーを参照してください)。この問題には3つの異なる色のオブジェクトが含まれており、そのすべてが連続して変化する色度を持っているため、このコンピュータービジョンのトピックを分類し、それに応じて対処するのは非常に困難です(実際、優れた博士号を取得できます) !)。

以下のDWの非常に役立つ投稿からGamut Constraint Methodを調べました。これは、画像と個別のコインオブジェクトを照明条件に依存しない色に変換する前処理ステップとして非常に有望でした。ただし、この手法でも完全には機能せず(マッピング用の画像/ヒストグラムのライブラリを必要とします-これには入りたくありません)、はるかに複雑なニューラルネットワークアーキテクチャの方法論も機能しません。実際、このペーパーでは要約で次のように述べています。

"current machine colour constancy algorithms are not good enough for colour-based 
 object recognition.".

それは、このテーマに関する最新の論文がそれほど多くないということではありませんが、私はそれらを見つけることができず、現時点では非常に活発な研究領域ではないようです。

AVB の回答も参考になり、私はL A B *を簡単に調べました。

"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."

私が読んだことから、デバイスに依存する画像のこの色空間への変換は難しいでしょう-しかし、もう少し時間があれば、これを詳細に(何らかの実装の観点から)調べます。

私はこの問題への具体的な解決のために私の息を保持していないですし、Lと試みた後、A B * Iは、コインの色を無視されなければならないとわからアップ私の現在の幾何学的な検出アルゴリズム(正確な楕円ハフなどを変換)を探して。

どうもありがとう。そして、この質問に対する最後の注意として、色の認識を持たない新しい幾何学的検出アルゴリズムを使用した同じ画像があります。

ここに画像の説明を入力してください


1
画像の背景は常に同じ色ですか?または、他の「色標準」オブジェクトを画像に導入できますか?その場合、さまざまな照明に合わせて調整する方法があります。そうでない場合は、難しいかもしれません
.-ワンストップ

2
それは明らかに色のついた光だけではありません。日光、蛍光灯、白熱灯は、HSBカラーマッチングを台無しにするほど異なる色を持っていると確信しています。
ピーターショー

2
(+1)質問は興味深く、やりがいがあります。良い答えを得る良い機会を得るためには、いくらかの改良が必要だと感じています。現在述べられているように、それは悪態勢にあることに境界を接しています。実用的なソリューションを実現するには、この分類を実行できるようにする環境の範囲について、さらに詳細を提供する必要があります。どんな色の背景が可能ですか?常に同じ数のコイン?あなたはいつもカラー画像を持っていますか?良い周囲照明?これらの種類の特性を知ることは、ソリューションへのガイダンスを提供できます。
枢機

2
あなたが直面している問題は「色の恒常性」の問題だと思います。他の検索用語は「光源の割引」または「背景の割引」でしょう。それは視覚科学の未解決の問題です。
カラカル

1
素敵なフォローアップのためにもう一度+1できたらいいのに!非常に興味深いもの。
マットパーカー

回答:


6

まず、2つのこと。

1つは、間違いなくRGBでは機能しません。デフォルトはLab(別名CIE L * a * b *)カラースペースです。破棄しLます。画像からは、a座標が最も多くの情報を提供しているように見えますが、おそらく単純にするために、最初の(最も重要な)コンポーネントに対して主成分分析をa行いb、それに沿って作業する必要があります。これでうまくいかない場合は、2Dモデルに切り替えてみてください。

念のために、a黄色がかった3つのコインでは、STDが6未満であり、137(「金」)、154、および162の平均が区別できるはずです。

第二に、照明の問題。ここでは、問題を慎重に定義する必要があります。どんな照明下でも、どんな状況でも、近い色を区別したい場合は、とにかく、これが好きではありません。明るさの局所的なばらつきのみが心配な場合は、Labがほとんどの面倒を見てくれます。日光と白熱灯の両方で作業できるようにしたい場合は、サンプル画像のように均一な白い背景を確保できますか?一般的に、あなたの照明条件は何ですか?

また、あなたの画像は、見た目によってはかなり安価なカメラで撮影されました。おそらく、何らかの自動ホワイトバランス機能があり、かなり悪い色を台無しにしてしまいます。可能であればオフにしてください。また、画像は、ある時点でYCbCrでコード化されたように見えます(ビデオカメラの場合は多くの可能性があります)。色情報は著しくアンダーサンプリングされています。あなたの場合、それは実際には良いかもしれません-それはカメラがカラーチャンネルであなたのためにいくつかのノイズ除去を行ったことを意味します。一方、それはおそらく、ある時点で色情報も明るさよりも強く量子化されたことを意味します-それはあまり良くありません。ここでの主なことは、カメラが重要であり、何をするかは、使用するカメラによって異なります。

ここで何かが意味をなさない場合は、コメントを残してください。


ご回答有難うございます。上記のいずれも保証できません。これは、ボタンをクリックするだけでコイン(任意の量のコイン)をカウントするモバイルアプリケーション用です(非常に高速です!)。そのため、照明は大きく異なる可能性があり、一貫した背景もありません。このように色でコインの種類を分類することは(あなたが指摘しているように)不可能だと思います。しかし、私はあなたがL A B * を使うことの答えが好きで、それが最高の答えだと信じています。これに照らして、あなたには答えと報奨金があります。再度、感謝します。
MoonKnight

6

ブレーンストーミングの精神で、あなたが試すことができるいくつかのアイデアを共有します:

  1. Hueをもっとお試しください?少なくともここで示した単一の例では、銅と金の間ではなく、Hueが銀と銅/金の間のかなり良い弁別子を与えたように見えます。Hueをより詳細に調べて、銀と銅/金を区別するのに実行可能な機能であるかどうかを確認しましたか?

    手作業でラベルを付けた多数のサンプル画像を収集し、各画像の各コインの色相を計算することから始めます。次に、それらをヒストグラム化して、Hueがもっともらしい判別方法のように見えるかどうかを確認します。また、ここで紹介した例のような少数の例については、各コインの平均色相を見てみることもできます。彩度も役立つかもしれませんが、彩度も試してみてください。

    これが失敗した場合は、質問を編集して試行した内容を示し、これが難しい理由または失敗した場所を簡潔に説明するための例を示します。

  2. 他の色空間?同様に、rg色度に変換してから、銀と銅/金を区別するのに役立つかどうかを実験してみます。これは、照明の変動を調整するのに役立つ可能性があるため、試してみる価値があります。

  3. nnn

    npnnonp,oToT(p)oiT(pi)TT(x)=x+c(mod360)c

  4. 参照画像と比較しますか?コインの色を使用するのではなく、コインに印刷されているものと一致させることを検討できます。たとえば、画像でコインを検出し、1ポンドのコインであると仮定したとします。あなたは、参照画像取ることができるか1ポンドコインとテストのを一致するように思われる。CRRC

    ポーズの違いを考慮する必要があります。例の写真のように、コインの正面画像があると仮定して始めましょう。次に、考慮する必要がある主なものは回転です:どのくらいのが回転するかをアプリオリに知りません。簡単なアプローチは、可能な回転角度範囲をスイープし、をだけ回転させ、と一致するように見えるかどうかをチェックすることです。一致をテストするには、単純なピクセルベースの差分メトリックを使用できます。つまり、各座標、(ピクセル値の差CθRθRθC(x,y)D(x,y)=Rθ(x,y)C(x,y)Rθおよびのピクセル値); 次に、ノルム(2乗和)などを使用して、すべての差分値を、一致の程度を示す単一のメトリックに結合します(つまり、)。ピクセルdiffが機能する可能性が高い十分に小さなステップ増分を使用する必要があります。たとえば、サンプル画像では、1ポンドのコインの半径は約127ピクセルです。各ステップで度ずつ増加する値をスイープする場合は、約1460の異なる回転値と、真の最も近いコインの円周での誤差を試すだけで済みます。CL2(x,y)D(x,y)2θ0.25θ 最大でピクセルの約4分の1である必要があります。これは、ピクセルdiffがうまく機能するのに十分なほど小さいです。

    このアイデアについて複数のバリエーションを試してみてください。たとえば、グレースケールバージョンの画像を使用できます。完全なRGB、3つのR、G、Bの違いすべてに対してノルムを使用。完全なHSBであり、H、S、Bの3つの違いすべてに対してノルムを使用します。または、色相、彩度、または明るさのプレーンだけで作業します。また、別の可能性は、最初にと両方でエッジ検出器を実行し、次にエッジの結果の画像を一致させることです。L2L2RC

    堅牢性のために、各コイン(実際には各コインの各面)に複数の異なる参照画像を用意し、すべての参照画像を試して最適な一致を見つけることができます。

    コインの画像が直接正面から撮影されていない場合、最初のステップとして、画像内のコイン周囲を表す楕円を計算し、コインが表示されている角度を推測することができます。これにより、マッチングを実行する前に、がその角度でどのように見えるかを計算できます。CR

  5. 中心からの距離の関数として色がどのように変化するかを確認しますか?「コインの平均色」(単一の数字、つまり0次元)と「コインの画像全体」(2次元画像)の間の中間ステップがあります。各コインについて、1次元のベクトルまたは関数計算できます。ここで、は、コインの中心から約距離にあるピクセルの平均色を表します。次に、画像内のコインのベクトルを、そのコインの参照画像のベクトルに一致させようとします。f r r f C C f R Rff(r)rfCCfRR

    これにより、照明の違いを修正できる場合があります。たとえば、グレースケールまたは単一のビットプレーン(色相、彩度、明るさなど)で作業できる場合があります。または、最初に平均を減算して関数正規化できる場合があります:、ここではコインの平均色です-次にをに一致さます。G R = F R - μ μ G C G Rfg(r)=f(r)μμgCgR

    このアプローチの良い点は、コインがどれだけ回転したかを推測する必要がないことです:関数は回転不変です。f

    このアイデアを試してみたい場合は、さまざまなサンプル画像の関数を計算してグラフ化します。次に、照明に関係なく、関数が比較的一貫した形状を持っているように見えるかどうかを視覚的に検査できる必要があります。複数の異なる可能性(グレースケール、各HSBビットプレーンなど)でこれを試す必要があるかもしれません。fC

    コインが正面から撮影されたのではなく、場合によっては斜めから撮影された可能性がある場合は、まずの周囲の楕円をトレースして、撮影された角度を推定し、次にそれを修正する必要がありますの計算。C fCCf

  6. 色の恒常性のための視覚アルゴリズムを見てください。コンピュータービジョンコミュニティは、色の恒常性、未知の照明源を補正する問題を研究しています。たとえば、この概要を参照してください。この問題から派生したアルゴリズムのいくつかを検討することもできます。彼らは照明源を推測し、それを修正して、参照照明源で撮影した場合に得られる画像を導き出そうとします。

  7. 色定数のカラーインデックスを調べます。私が理解しているように、CCCIの基本的な考え方は、各ピクセルのR値をそのR値とその近隣のR値の1つとの比で置き換えることにより、まず未知の照明源をキャンセルすることです。GプレーンとBプレーンについても同様です。アイデアは、(願わくば)これらの比率が照明源からほとんど独立しているはずだということです。次に、これらの比率を取得したら、画像に存在する比率のヒストグラムを計算し、これを画像の署名として使用します。ここで、コイン画像を参照画像と比較する場合、それらの署名を比較して、一致するように見えるかどうかを確認できます。あなたの場合、コインの絵があれば角度も調整する必要があるかもしれませんR CCRCははありませんでしたが、これは照明源への依存を減らすのに役立つようです。

これらのいずれかが動作する可能性があるかどうかはわかりませんが、試してみてください。


3

興味深い問題と良い仕事。

平均ではなく中央値を使用してみてください。これは、明るさと彩度による外れ値に対してより堅牢になります。3つすべてではなく、RGBコンポーネントの1つだけを使用してみてください。色を最もよく区別できるコンポーネントを選択してください。ピクセル値(たとえば、RGBコンポーネントの1つ)のヒストグラムをプロットして、ピクセル分布の特性を知ることができます。これは、すぐには明らかではない解決策を示唆する場合があります。RGBコンポーネントを3D空間にプロットして、パターンに従うかどうかを確認します。たとえば、RGBコンポーネントの線形結合が個々のコンポーネントよりも優れた分類器であることを示す線の近くにある場合があります。


中央値との良好な叫び声、実際にはこれもコーディングしており、これも正しい色を確立するという点で貧弱です。ヒストグラムアプローチでは、計算コストを意識しています。2Dでピクセルをループ処理し始めるとすぐに料金が発生します!それでも、相関関係を確立するために、(このように)このようなものを(あなたが指摘しているように)入れる価値があるかもしれません。RGBコンポーネントについてあらゆる種類のプロットを作成しましたが、照明条件が異なるため(異なる場所で写真を撮った結果)、3つのコインタイプすべてでRGB値が大きく重複する可能性があります。
ムーンナイト

また、特定のコインタイプに属する色空間ポイントの事後確率を推定するためのモデルの適合も検討しました。ガウス混合モデリングについても見てきましたが、これについてはまだそれほど詳しくはありません。また、別の(多少arbitrary意的ではあるが、より単純な)アプローチについても知らされており、これは最近傍内挿のようなものを使用することです。御時間ありがとうございます。
ムーンナイト

1
まったく異なるトラックでは、コインのもう1つの違いは、前面/背面のデザインです(一方の側面に同じデザインがある場合もあります)一連のデザインパターンとコインピクセルの相互相関(または相互情報の使用)どのコインを見ているかを判断するのに役立ちます。比率、ピクセルカラー、およびこのデザインマッチングを組み合わせることで、おそらく誤検出率を減らすことができます。
マティーノ

私はこれを考えました-しかし、これは現在の認識ソフトウェアの多くを求めており、最初から書くのは大仕事です(OCR ??)。また、このようなコインのグラフィックスには大きなバリエーションがあり、そのような実装はメインテナンスの悪夢になります。後で遊びます-見つけたものを報告します。再度、感謝します。
MoonKnight

なぜ下票なのですか?私は1つのを見ることができない-答えに問題があるなら、それを指摘すると便利だろう
マル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.