2017-10-26 5 views
1

内の画像を検索します。私が達成したいのは、「実際の」画像(サイズとピクセル単位の位置)を見つけることです。私にとって私はすべてが「本物」の画像の周囲に境界線のいくつかの種類を持っている異なるイメージを持っている画像(オブジェクト検出)

real image showing water with shark

課題は、境界は常に黒(ノイズの多い黒やグレーのあらゆる種類のことができます)と「リアル」の画像(この例では、サメと水)ではないということです色の任意の組み合わせを持って、彩度、...

は今、一般的に、私は...、キャニー、ブロブ検出などのアルゴリズム、ハフラインを認識してんだけど、私はちょうどそれらを使用して開始していることができます。これまでは特定の画像の境界線を見つけることができましたが、同じアルゴリズムとパラメータを次の画像に適用しようとするとすぐに機能しません。

  1. CvInvoke.Canny(_processedImage, imgEdges, 60, 100)
  2. とエッジを検出 CvInvoke.Threshold(_processedImage, blackWhiteImage, _parameters.BinarizeThreshold, 255, CvEnum.ThresholdType.Binary)
  3. CvInvoke.GaussianBlur(_processedImage, bluredImage, New Drawing.Size(5, 5), 0)
  4. 2値化とCvInvoke.PyrDown(srcImage, targetImage)CvInvoke.PyrUp(srcImage, targetImage)
  5. ボケ画像とCvInvoke.CvtColor(_processedImage, tempMat, CvEnum.ColorConversion.Rgb2Gray)
  6. ダウンサンプリングをグレーに変換する:私の現在のアプローチは、この(擬似コード)のように見えます
  7. は `CvInvoke.FindContours(_processedImage、輪郭、何も、CVEで輪郭を探します

であると仮定する

特に適切なパラメータを見つける方法上の任意のヒント(そのアプリすべての画像のために)、(適応性のある)スレッショルドやキャニーだけでなく、処理パイプラインを改善するためのアイデアなどのアルゴリズムは高く評価されるだろう。

答えて

1

これ行う方法、あなたはこの画像から黒画像を減算しようとすることができ、あなたは内部の画像を取得します:境界線が均一であったならば、これは簡単だろう、 Use image subtraction to compare images in C#

+0

アイデアとリンクをありがとう。私はこのことを正しく理解していますか?私は元の画像と同じサイズの完全に黒い画像から始め、黒から元の画像を引きますか?質問で述べたように、国境は常に黒ではなく、一種の灰色です。だから、私は国境に別の灰色で終わるだろう?次の問題は、内部の画像の座標とサイズが必要だということです。どうやってするか?申し訳ありませんが初心者の質問は、このstuftは本当に私には分かりません。 –

+1

完全に黒い画像を減算することは、もちろんノーオペレーションですが、他のものを減算することはおそらく有用かもしれません。 BTW OpenCVには、画像間の絶対差を計算し、最大値を見つけるための組み込み関数があります。 – NickJH

1

を。 cv::reduceを使用して、各行と列のMINとMAXを探します。 MIN、MAXが近くのコーナーのピクセル値と等しい(または非常に近い)上、左、下、右の行/列を数えます。正気のために、多分国境の色がすべての面で同じであることを確認してください。

あなたの例では、境界は、かすかな赤いものが含まれていますが、行/列のアプローチは、まだ問題を単純化する便利な方法かもしれません。たぶん、Nofarが示唆しているように、あなたが背景の色と思うものと絶対的な違いを取るかもしれません。それを正方形にして、灰色に変換し、次に行と列の合計に減らします。それでもエッジを見つける必要がありますが、データを2つの次元から1つに縮小しました。大規模な境界線とノイズがたくさんあります場合は

、多分反復:第二パスでは、あなたが列(およびその逆)の統計から、国境を構成すると考えるの行を除外します。

編集:上記は直立した長方形にのみ有効です!回転させることができれば、行/列投影法は機能しません。その場合、上記のような二乗和の差(情報を捨てる可能性があるため、灰色に変換しないでください)、ぼかしまたはいくつかの形態、エッジ検出、次にハフ変換を行ってストレートエッジ。

+0

良いアイデア!ありがとう。実際、長方形はわずかに回転しています。二乗和の差について調べました。しかし、これを単一の画像にどのように使用するかは私には分かりません。私は全体像の特定の部分が境界であると仮定することができます。これはあなたが意味することですか?または、より細かい粒を考えて、画像の特定の部分をお互いに比較していますか? –

+0

@ジャン私は完全な解決策を持っていませんでしたが、いくつかのアイデアを寄稿しようとしました。結局は、あなたの特定のイメージコンテンツに依存します。回転がわずかであれば、行と列を切り取って開始することがあります。常に背景である地域はありますか?または背景は常に暗いですか?そうでなければ、テクスチャなどの背景を識別する別の方法が必要な場合があります。 (それは映画のように見えますが、その場合は複数のフレームで何かをすることもできます...) – NickJH

+0

あなたの時間と労力のために本当にありがとう!私のマシンに戻ったら、来週あなたのアイデアをチェックします。 –

関連する問題