我有一张图像的强度图,我想选择平均值较大的子区域。为此,我想找到最大化子区域所覆盖的强度图像素之和的子区域。为了防止返回的子区域数量过多,对返回的每个附加子区域应用惩罚。另外,如果两个子区域重叠,则很好,但重叠目标值只是子区域的并集。
更正式地说,假设您的矩阵 A 包含尺寸 m x n 的非负值。您希望使用尺寸 s x s 的方形子矩阵覆盖矩阵,以便 A 的值的总和由广场面积的联合最大化。对于您添加到解决方案的每个方格,从解决方案的目标值中减去常数惩罚 p 。
例如,请考虑以下矩阵:
0 0 0 0 0 0
0 1 2 2 1 0
0 1 2 2 2 0
0 0 0 0 0 0
0 3 0 0 0 0
参数p = -4且s = 2.最优解是两个正方形S1 = [1,2; 1,2]和S2 = [2,1; 2,2'分别用坐标(2:3,2:3)和(2:3,4:5)(用Matlab表示法)。请注意,在此示例中,逐渐添加具有最大值的正方形直到无法添加正方形(不降低目标值)的贪婪方法失败。
解决它的一种强力方法是使用正好k个方格来检查所有可能的组合。从k = 1开始,您将计算出恰好k平方的最佳组合,增量k并重复直到目标值停止增加。这显然非常昂贵。
您可以使用积分图像在时间O(mn)中预先计算(m-s + 1)*(n-s + 1)个可能的正方形的值的总和。
这是否有效的解决方案?
答案 0 :(得分:2)
问题是NP-Hard。这可以通过减少平面最小顶点覆盖来证明。特殊情况的证明s = 3,p = 2,且只有0或1的A与other SO question的证明相同。
对于蛮力解决方案,如果不是尝试增加k
的所有组合,而是逐步添加方块,则可以提高效率。当部分解的客观值加上尚未覆盖的值的总和不大于最佳目标值时,通过删除最近添加的正方形并尝试其他正方形来回滚到最后的有效组合。避免添加为目标值添加零的方块。同时避免添加次优平方:如果在OP中,部分解包含square [1,2]; 1,2],不加方[2,2]; 2,2]因为[2,1]; 2,2]总是至少同样好或甚至更好。并以这样的方式重新排列方块,以便您快速获得足够好的解决方案,这样可以更快地终止所有进一步的尝试。