1

画像からデータ測定値を取得しました。つまり、プロファイルスキャンデータです。(ある線に沿って取得された画像強度値)そして、私が欲しいのは、別の画像の線からデータを取得し、それらを比較することです。似ているか似ていないか知りたいです。たとえば、私は得ました:

int data1[N];
int data2[N];

そしてそれらを比較したい。類似していない場合は、そのデータの最も長い部分、つまり互いに類似している部分を知りたいです。たとえば、data1 と data2 を 0 から N - 1 までのインデックスで見ると似ていないことがあるかもしれませんが、インデックス 100 ... N - 56 ではほとんど同じです。類似性とは、data1 と data2 を波の形で表す場合、類似性とは、それらがほとんど同じように動作することを意味しますが、少し異なる場合があります。波の形がほとんど似ているということです。

4

1 に答える 1

1

明らかに、正確な実装は以下で説明するものよりも複雑になりますが、おそらく出発点にはなるでしょう。

画像の強度について話しているので、最初に生の強度データの 2 つのセットを正規化することが適切な場合があります。(そうすれば、data1 が一貫して data2 値の 3 分の 2 である何かを認識できるはずです。) 私はおそらく、(たとえば) 100 の値をソース画像の最も強い部分に割り当て、0 を最も強度が低い - そのスケールに合うように他のすべての値を調整します。

データを正規化したら、次のステップは単純な比較 (例: ) を使用して正規化された配列を反復処理するのと同じくらい簡単Abs(data1[n] - data2[n]) < SomeThresholdです。比較がパスするたびに、「一致の長さ」がインクリメントされます。一致の長さがゼロの場合は、「開始インデックス」変数を​​設定することもできます。比較が失敗した場合は、「最適一致」情報を更新してから、「長さ」カウンターをゼロにリセットします。

比較機能を簡単に交換できるようにすることをお勧めします。確かなことはわかりませんが、何らかのタイプの画像マッチングを行おうとしている場合、より複雑な比較メカニズムを使用する必要がある場合でも驚かないでしょう (たとえば、「ドリフト」するためにしきい値が必要になる場合があります)。たとえば、基本画像は同じであるが、そのうちの 1 つが後処理されて片面がオリジナルよりも明るくなった場合など)。

于 2010-07-01T03:01:20.037 に答える