C++中绝对差值计算的可变块大小和

ncR*_*ert 8 c++ algorithm computer-vision

我想尽可能高效地在C++程序中使用16位整数的二维数组执行绝对差值计算的可变块大小.我对实时块匹配代码感兴趣.我想知道是否有可用的软件库?代码在Windows XP上运行,我使用Visual Studio 2010进行编译.CPU是2核AMD Athlon 64 x2 4850e.

通过可变块大小的绝对差值和(SAD)计算,我的意思如下.

我有一个较小的二维数组,我会称之为template_grid,一个较大的二维数组,我将称之为image.我想找到图像中的区域,该区域最小化模板中像素与图像中区域中像素之间的绝对差值之和.

在C++中计算SAD的最简单方法是:

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]);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

特定阵列大小的SAD计算已在英特尔性能原语库中进行了优化.但是,我正在使用的数组不符合这些库中的大小.

我有两个搜索范围,

范围很大:范围Y = 45,范围X = 10

小范围:rangeY = 4,rangeX = 2

只有一个模板大小,它是:lenTemplateY = 61,lenTemplateX = 7

小智 0

您可以尝试使用 OpenCV 模板与平方差参数匹配,请参阅此处的教程。OpenCV 使用 OpenCL 进行了优化,但我不知道这个特定功能。我认为你应该尝试一下。