c – 在2d数组的矩形区域内快速查找最大值的方法

我有一个2d深度值数组,需要一种快速的方法来找到给定矩形区域内的最大值.将针对给定的深度缓冲器测试许多矩形,因此可以接受合理的预处理步骤.

天真的方法是扫描矩形中的每个像素,跟踪最大值,需要宽度*高度迭代.

通过首先创建深度缓冲区的四叉树,其中每个父节点包含其子节点的最大值,复杂度可以减少到大约宽度高度迭代.这种方法很好,但我想知道它是否可以更快地完成.

我给出了一个通过使用线性时间预处理here找到平均值而不是恒定时间内的最大值的方法的示例.

有没有人知道找到最大值的类似技术?

最佳答案 是的,您可以概括平均值的技巧,但仅适用于较小的颜色深度,例如8位深度(0-255).假设您有k种颜色(或不同的深度值).

供您参考,这里是通过积分图像Viola/Jones CVPR 2001平均计算矩形的一个很好的解释,见2.1节.

我的广义算法是预先计算具有维数k的向量的积分,颜色/深度值经常出现的频率.从这个向量中,您可以采用与技巧相同的差异来计算均值.这不仅为您提供矩形区域内的最大值,而且实际上是恒定时间内该矩形内直方图的矢量.当然,直方图允许您提取最大值(或最小值或其他分位数).

时间和内存要求当然随着颜色的数量而增长,我认为复杂度类是用于查找的O(k)和用于预计算的O(k *宽度*高度).

(如果以前使用过我的想法,我会很感兴趣.)

点赞