2016-07-30 8 views
-2

私は硬貨認識に関する課題を持っています。私の国の硬貨は金と銀の2色から成っています。どのように金の色を特定するのですか?イメージの金色を識別する方法は?

私は少数のコインからなる画像から各コインを管理しています。私は金色の硬貨を識別する方法を知りたい。

私の講師が提案:

  • それは金の色相と 彩度の範囲で色相と彩度の値ならHSI
  • に変換するRGBがトリミングされたコイン画像
  • の色相と彩度値を取得します。それは金貨です。

私のアプローチは、以下である:

  1. ようにカラー可視画像を増強します。
  2. 各コインを特定して刈る
  3. 銀色と金色の2つのグループに分かれています。
  4. 基準として各色から1つのコインを作成し、他のコインと基準コイン(比に基づく)を比較してその価値を特定します。

私はステップ1と2を行ったが、私は第3ステップで立ち往生している。私はどのように金色と銀色の硬貨を区別するのか分かりません。どのアプローチをMATLABで区別するために使うべきですか?

photo of coins

+3

um estionは広すぎて答えられません。代わりに**あなたが問題を抱えていることを正確に*記述します**。私はそれが最初のステップだと考えます。 MATLABでRGBをHSI画像データに変換することについて、どのような研究を行っていますか?あなたのgoogle/stackoverflow研究の結果の何がわかりませんでしたか? –

+0

Ok Markus。私はコイン認識システムmatlabを使用しています。それらは私の国の硬貨の模範的な写真です。私は写真をチェックし、写真のコインの合計金額を計算する必要があります。私のアプローチは1.色が見えるように画像を強調します。 2.それぞれのコインを識別し、それらを刈る。3.次に、その色を識別し、それらを2つのグループカラーの銀と金に分割する。 4次に、各色の色から1つのコインを作成してその価値を確認します。 –

+2

私が上記で尋ねた質問に関してはまったく何も説明していません:**どこにいらっしゃいましたか?**これは本当に無料のコード作成サービスなので、あなたの問題を1つの正確な質問に凝縮させるか、それ以外の場合はあなたを助けることはできません。 –

答えて

4

ここでは動作するものがあります。この特定の画像にのみ調整されており、他の画像ではうまく機能しない可能性があります。

  1. gamma = 1.5でガンマ補正を実行します。その理由は、画像の右側に明るい金貨を強く持って、左の画像の金貨と一致させて、しきい値とセグメント化が容易にしたいからです。

  2. ゴールドコインをスレッシュホールドするために、色相チャネルと飽和チャネルを使用します。

  3. 使用形態と閾値処理結果が

  4. が12000画素未満の領域を有する任意の質量を削除有すること任意の穴を埋めます。


ステップ#1

あなたはimadjustでガンマ調整を行うことができるとgamma = 1.5で、あなたは単純に次のことを行います。私はStackOverflowのから直接やるイメージ内の最初のロードは、その後、ガンマ調整:

close all; 
im = imread('http://i.stack.imgur.com/g4FCV.jpg'); 
im_enhance = imadjust(im, [], [], 1.5); 

imは、元の画像であり、im_enhanceが強調された画像です。見て少し難しい

enter image description here

が、あなたは上の画像をクリックして画像を自分で拡大場合は、画像の右側にその金の色が表示されます:私たちは、以下の強調画像を得ます以前よりもわずかに暗いです。

ステップ#2

まずrgb2hsvを使用してHSVにあなたのイメージを変換:

hsv = rgb2hsv(im2double(im_enhance)); 

私はimshow(im_enhance)を行うことによって、上記の画像オープンでimpixelinfoを使用して見ることが金貨の上に私のマウスを推移し、後どのような色相と彩度があったのですか?検査では、金色のコインと銀貨を区別するために、色相の値がおおよそ0.25以下であり、飽和の値が0.25以上であることがわかりました。そのため、しきい値にこれらの範囲を使用し、金貨に属し、どのようなことはないかを表示しますバイナリマップを取得:

enter image description here

ない:

gold_coins = hsv(:,:,1) < 0.25 & hsv(:,:,2) > 0.25; 

は、我々は今、この画像を取得します完璧。白い塊が金貨に属し、穴が空いているものが銀色であることがわかります。我々は次のやる何

ステップ#3

は金のオブジェクトは、あなたが金のことになっているすべての領域を取得することを確認する必要がありますことを任意の穴を埋めています。代わりに'holes'オプションを使用してimfillを使用してください。

gold_coins_fill = imfill(gold_coins, 'holes'); 

現在入手:

enter image description here

グレートが、再び我々はに対処するための銀のコインを持っています。金貨は完璧です。銀のコインに属している任意の塊を削除するには

ステップ#4

、私は以下の12000個の画素を有するマスク内のすべての領域を削除します。これは試行錯誤によって行われました。あなたはこれを行うには、この画像の上に2番目のパラメータとして12000を機能bwareaopenを使用して指定することができます。

gold_coins_final = bwareaopen(gold_coins_fill, 12000); 

我々は今取得:

enter image description here


完全なコードは、あなただけしたい場合これをコピーして貼り付けて実行すると、次のようになります。

% Step #1 
close all; 
im = imread('http://i.stack.imgur.com/g4FCV.jpg'); 
im_enhance = imadjust(im, [], [], 1.5); 

% Step #2 
hsv = rgb2hsv(im2double(im_enhance)); 
gold_coins = hsv(:,:,1) < 0.25 & hsv(:,:,2) > 0.25; 

% Step #3 
gold_coins_fill = imfill(gold_coins, 'holes'); 

% Step #4 
gold_coins_final = bwareaopen(gold_coins_fill, 12000); 
imshow(gold_coins_final); 
+1

Rayreng!大変ありがとう!あなたのアプローチは機能します!私はいくつかの修正を加えてたくさんの写真で試してみる。そしてその作品!ありがとうたくさんのおい...! –

-1

ImageMagickのライブラリを使用する:

ファズオペレータは、特定の色に画像の色を比較してみましょうされます。彼らはまったく同じである必要はありませんが、似ている要素であなたは決めるでしょう。そうアルゴリズムは以下であり得る:

  1. 新しい画像における
  2. カウント黒画素(任意の色であってもよい)、ブラック色のすべての金ピクセルを置き換え画像(ファジー検出)
  3. に金色を検出します
  4. 画素の少なくとも80%がカウントされている場合、それは他の金貨、そのない金貨である:黒に金色の変換

すべての異なる色を取得
convert img -fuzz 80% -fill black -opaque gold newImage 

カウント:

convert newimage -define histogram:unique-colors=true \ 
     -format %c histogram:info:- 

を黒のカウントが80%以上であった場合は(+ - )、それは金貨です。

*元の画像には使用できない色を選択してください。

+1

これはMATLABの回答ではありません。 – Adriaan

+0

なぜですか? –

+1

これは、長いショットでMATLAB構文ではないためです。 – Adriaan

関連する問題