すべての画像が JPEG で圧縮されており、ノイズが多い 2 つの異なる画像で同一の領域を検索するのに最適なライブラリを探しています。なかなか見つからなくて困っています。問題は、jpeg をズームすると、モネのように見えることです。つまり、ノイズには、元の画像とは直接関係のないカラー パレットが含まれています。したがって、画像内で同一の配列を検索する代わりに、「最も類似した配列」を見つける必要があります。
これらの画像は、Google マップの同様の Web サイトのランダムなスクリーンショットから取得されており、画像は jpeg 以外の形式にすることはできません。
私は多くの手動の方法を試しました。
私の方法の1つは次のとおりです。
このアルゴリズムは機能しますが、すべてを 1 次元配列で行っているため、非常に低速です。
このアルゴリズムを直接実行する既存のライブラリはありますか?
私のアルゴリズムは次のとおりです。
// Where SRC is the bigger image in which I search
// Offset is where in my small image I start to search
// Len is how long is my searched array
// Size is the size of the bigger image in which I'm searching.
// private Point simpleSearch(byte[] src, int offset, int len, byte[] search, Size size)
{
byte[] ddd = new byte[len];
Array.Copy(search, offset, ddd, 0, len);
int lowest = 100000000;
int locmatch = 0;
for (int i = 0; i < src.Length - len; i++)
{
int thed = 0;
for (int a = 0; a < len; a++)
{
int diff = Math.Abs(src[i + a] - ddd[a]);
thed += diff;
}
thed = thed / len;
if (thed < lowest)
{
lowest = thed;
locmatch = i-len;
}
}
int yy = (locmatch / size.Width);
int xx = locmatch - (yy * size.Width);
Point p = new Point(xx, yy);
return p;
}