Я ищу лучшую библиотеку для поиска одинаковой области на двух разных изображениях, все изображения сжаты в JPEG с большим количеством шума. Я с трудом нахожу его. Проблема в том, что если вы увеличите jpeg, вы увидите, что он выглядит как Моне, я имею в виду, что шум содержит цветовую палитру, не имеющую прямой связи с исходным изображением. Поэтому вместо поиска идентичного массива на изображении мне нужно найти «наиболее похожий массив».
Эти изображения взяты из случайного снимка экрана с подобных веб-сайтов googlemap, и изображения не могут быть в другом формате, кроме jpeg.
Я пробовал много ручных способов.
Один из моих методов:
Этот алгоритм работает, но я делаю все в одномерном массиве, и это очень медленно.
Существуют ли библиотеки, которые выполняли бы этот алгоритм напрямую?
Мой алгоритм:
// 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;
}