Вычисление суммы переменного размера блока для вычисления абсолютной разности в C ++

Я хотел бы выполнить вычисление суммы абсолютных разностей переменного размера блока с двумерным массивом 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

8
задан Adrian Jałoszewski 25 August 2016 в 11:11
поделиться