4

「単純な」画像がたくさんあり、それらが似ているかどうかを比較したい。テンプレート マッチング ( ) を使用してそれらを相互に比較するcv::matchTemplateと、結果は非常に良好です。

今、プログラムを微調整したいのですが、問題に直面しています。たとえば、よく似た 2 つの画像があります。違うのは線が太いのと、商品の桁が違うだけです。両方の画像が小さい場合、テンプレート マッチングを実行すると、線の太さの 1 ピクセルの違いが結果に大きな違いをもたらします。線の太さが同じで前の桁だけ違う場合、マッチング成功のようなテンプレートマッチング結果が得られ0.98ます。CV_TM_CCORR_NORMED線の太さが違うとマッチング結果は0.95くらい。

他の同様の画像の線の太さが同じであるため、しきい値を 0.98 未満に下げることはできません。

画像の例を次に示します。

ここに画像の説明を入力 ここに画像の説明を入力

では、どのようなオプションがありますか?

私が試してみました:

  • オリジナルとテンプレートを膨張させる
  • 侵食も両方
  • 形態学Ex both
  • キーポイントの計算とそれらの比較
  • コーナーを見つける

しかし、まだ大きな成功はありません。それらの画像は単純すぎて、「良い特徴」を検出するのが難しいですか?

どんな助けでも大歓迎です。

ありがとうございました!

編集:

その他のサンプル画像はこちら。私のプログラムが類似していると見なすものは、同じzipフォルダーに入れられます。 ジップ

4

3 に答える 3

3

考えられる方法は、2 つの画像を細くして、すべての線が 1 ピクセル幅になるようにすることです。太さの違いが類似性の主な問題を引き起こしているからです。

手順は、最初に画像を 2 値化/しきい値設定し、次に両方の画像に間引き操作を適用して、両方の画像の厚さが同じ 1 px になるようにすることです。次に、以前に使用した通常のテンプレート マッチングを使用して、良好な結果を得ます。

バイナリ イメージの細線化/骨格化の詳細が必要な場合は、さまざまなディスカッション フォーラムや OpenCV グループに投稿されたいくつかの OpenCV 実装を以下に示します。

  1. 間引き用の OpenCV コード(Guo および Hall アルゴ、CvMat 入力で動作)
  2. OpenCV を使用した JR Parker の実装
  3. おそらくより効率的なコードはこちら(OpenCV の最適化されたアクセス メソッドを多く使用していますが、ほとんどのページは日本語です!)
  4. そして最後に、興味がある場合に備えて、間伐の概要を簡単に説明します。
于 2012-06-03T02:49:34.580 に答える
2

ここではもっと基本的なものが必要です。派手な方法を選ぶ理由はあまりありません。あなたのフィギュアはすでにバイナリのものであり、それらの形は全体的に非常に似ています。

最初のアイデアの1つは、特定の画像の上部と下部の点を考慮して、上部の船体と下部の船体を形成することです(凸包などではなく、単に船体です)。ある点は、列が与えられたときiに、画像の上部(下部)から始まる最初の点であり、の背景点ではない場合、上部の点(それぞれ下部の点)と呼ばれます。i。また、画像はほとんどが1つの連結成分であるため(垂直バーが分離されている場合もありますが、それで問題ありません)、小さな成分を簡単に破棄できます。このステップはあなたの状況にとって重要です。なぜなら、画像の他の部分とは無関係な何らかの形のノイズを伴う図がいくつかあるのを見たからです。100ポイント未満の連結成分が小さいことを考えると、これらは質問に含まれるそれぞれの画像に対して取得する船体です。

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

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

青い線は上部の船体を示し、緑色の線は下部の船体を示しています。明らかでない場合は、これらの船体の極大値と極小値を考慮すると、両方で同じ量が得られます。yさらに、軸の変位を除いて、すべて非常に接近しています。x極値の平均位置を考慮し、両方の画像の線を一緒にプロットすると、次の図が得られます。この場合、青と緑の線は2番目の画像用であり、赤とシアンの線は最初の画像用です。赤い点はいくつかの地域の最小値の平均x座標にあり、青い点は同じですが地域の最大値です(これらは私たちの関心のあるポイントです)。(次の画像は、見やすくするためにサイズが変更されています)

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

ご覧のとおり、何もしなくてもほぼ重複するポイントがたくさんあります。私たちがさらに少なくする場合、つまりこの重複を気にせず、簡単な方法で画像の分類に進む場合:画像aと別の画像bの上部船体に同じ量の領域最大値がある場合、同じ量の領域最小値が上部の船体、下部の船体の同じ量の地域の最大値、および下部の船体の同じ量の地域の最小値は、同じクラスab属します。すべての画像に対してこれを行うと、次の状況を除いて、すべての画像が正しくグループ化されます。

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

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

この場合、最初の画像では上部船体に3つの最大値と3つの最小値しかありませんが、2番目の画像には4つの最大値と4つの最小値があります。次に、得られた船体と関心のあるポイントのプロットを確認します。

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

お気づきのように、2番目の上部船体には2つの極値が非常に接近しています。この曲線を平滑化すると、両方の極値が除去され、簡単な方法で画像が一致します。また、画像の周りに長方形を描くと、この方法ではすべてが等しいことがわかります。その場合、複数の船体を比較し、現在の船体のポイントを破棄して他の船体を構築する必要があります。それでも、この方法では、すべての画像が非常にシンプルでほとんどノイズがないため、すべての画像を正しくグループ化できます。

于 2013-01-25T21:25:46.010 に答える
1

手に入る限り難しいのは、形は同じでも大きさが違うだけ。単純なハック アプローチは次のようになります。形状が同じで少し大きい場合、減算するとエッジのみが残り、エッジは薄くなり、ノイズとして侵食されて消えます。

もう少し正式には、輪郭を取り、次におおよそのポリゴンを取り、不変比較を行います ( Hu Momentsなど)。

于 2012-06-03T09:05:44.127 に答える