Я хотел бы выполнить вычисление суммы абсолютных разностей переменного размера блока с двумерным массивом 16-битных целых чисел в программе на C ++ так же эффективно, как возможный. Меня интересует код сопоставления блоков в реальном времени. Мне было интересно, есть ли для этого какие-нибудь программные библиотеки? Код работает в Windows XP, и я застрял в Visual Studio 2010 для компиляции. Центральный процессор - 2-ядерный AMD Athlon 64 x2 4850e.
Под вычислением суммы абсолютной разницы (SAD) переменного размера блока я имею в виду следующее.
У меня есть один двумерный массив меньшего размера, который я назову template_grid
, а еще один двумерный массив большего размера я назову изображением
. Я хочу найти область изображения, которая минимизирует сумму абсолютной разницы между пикселями в шаблоне и пикселями в области изображения.
Самым простым способом вычисления SAD в C ++ является следующий:
for(int shiftY = 0; shiftY < rangeY; shiftY++) {
for(int shiftX = 0; shiftX < rangeX; shiftX++) {
for(int x = 0; x < lenTemplateX; x++) {
for(int y = 0; y < lenTemplateY; y++) {
SAD[shiftY][shiftX]=abs(template_grid[x][y] - image[y + shiftY][x + shiftX]);
}
}
}
}
Расчет SAD для определенных размеров массива был оптимизирован в библиотеке примитивов производительности Intel. Однако массивы, с которыми я работаю, не подходят по размерам в этих библиотеках.
Есть два диапазона поиска, с которыми я работаю,
большой диапазон: rangeY = 45, rangeX = 10
небольшой диапазон: rangeY = 4, rangeX = 2
Есть только один размер шаблона и это: lenTemplateY = 61, lenTemplateX = 7