使用积分图像有效地对矩阵的行中的元素求和

时间:2015-07-14 12:54:23

标签: c++ visual-studio opencv matrix

我想在一个位置为+30-30的区间内为矩阵的每个元素求和。更确切地说,假设我有一个元素a [i] [j],我喜欢将所有元素的总和  a [i] [j - 30] + a [i] [j - 29] + a [i] [j - 28] + ..... + a [i] [j + 28] + a [i] [j + 29] + a [i] [j + 30; 我还计算了矩阵的积分图像,这样我就可以通过公式A + D - C - D轻松有效地求和。 在这里你可以看到它的工作原理 http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html#integral 我的问题是如何使用已经计算的积分图像有效地求和。还是有另一种有效的方法吗?

感谢您的时间!

P.S。我知道我可以计算前30个元素的总和,并且在每个步骤中添加和减去1个元素 - 从前面添加一个元素并从底部减去一个元素。但我想知道我能否做得更快

1 个答案:

答案 0 :(得分:1)

通过使用积分图像,您可以得到给定矩形中值的总和,如(来自维基百科):

enter image description here

您只需要为A,B,C,D设置正确的值。

Mat1f I; // your integral image

// for each i,j (check boundaries!)
int radius = 30;
float A = I[i-1][j-radius-1];
float B = I[i-1][j+radius];
float C = I[i][j-radius-1];
float D = I[i][j + radius];

float sum = D - B - C + A;