我正在尝试在给定图像矩阵的情况下构建总面积表或积分图像。对于那些不知道它是什么的人,来自维基百科:
面积求和表(也称为积分图像)是一种数据结构和算法,用于快速有效地生成网格矩形子集中的值之和
换句话说,它用于在恒定时间内对图像/矩阵中任何矩形区域的值求和。
我正在尝试在 R 中实现这一点。但是,我的代码似乎需要很长时间才能运行。
这是此链接的伪代码。in
是输入矩阵或图像,intImg
是什么返回
对于 i=0 到 w 做 总和←0 对于 j=0 到 h 做 sum ← sum + in[i, j] 如果 i = 0 那么 intImg[i, j] ← 总和 别的 intImg[i, j] ← intImg[i - 1, j] + sum 万一 结束 结束
这是我的实现
w = ncol(im) h = nrow(im) intImg = c(NA) 长度(intImg)= w*h for(i in 1:w){ #x 总和 = 0; for(j in 1:h){ #y ind = ((j-1)*w)+ (i-1) + 1 #index 总和 = 总和 + im[ind] 如果(我 == 1){ intImg[ind] = 总和 }别的{ intImg[ind] = intImg[ind-1]+sum } } } intImg = 矩阵(intImg,h,w,byrow=T)
输入输出矩阵示例:
然而,在480x640
矩阵上,这需要大约 4 秒。在论文中,他们将这些维度描述为以毫秒为单位。
我是否在循环或索引中做一些低效的事情?
我考虑用 C++ 编写它并用 R 包装它,但我对 C++ 不是很熟悉。
谢谢