Algorithm 平方子矩阵和的约束最大化

Algorithm 平方子矩阵和的约束最大化,algorithm,optimization,matrix,Algorithm,Optimization,Matrix,我有一个图像的强度图,我想选择具有较大平均值的子区域。要做到这一点,我想找到最大化子区域覆盖的强度贴图像素总和的子区域。为了防止返回的子区域过多,将对每个额外返回的子区域应用惩罚。此外,如果两个子区域重叠也可以,但重叠目标值只是子区域并集的值 更正式地说,假设您有一个矩阵a,其中包含维度mxn的非负值。您希望使用尺寸为sxs的方子矩阵覆盖矩阵,从而使方格面积并集覆盖的A值之和最大化。对于添加到解决方案中的每个正方形,将从解决方案的目标值中减去一个常数惩罚p 例如,考虑下面的矩阵: 0 0 0 0

我有一个图像的强度图,我想选择具有较大平均值的子区域。要做到这一点,我想找到最大化子区域覆盖的强度贴图像素总和的子区域。为了防止返回的子区域过多,将对每个额外返回的子区域应用惩罚。此外,如果两个子区域重叠也可以,但重叠目标值只是子区域并集的值

更正式地说,假设您有一个矩阵a,其中包含维度mxn的非负值。您希望使用尺寸为sxs的方子矩阵覆盖矩阵,从而使方格面积并集覆盖的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)个可能平方的值之和


有没有有效的解决办法?

这个问题是NP难问题。这可以通过减少平面最小顶点覆盖来证明。对于特殊情况s=3,p=2,且A只有值0或1的证明与的证明相同


至于蛮力解决方案,如果不尝试增加
k
的所有组合,而是以增量方式添加正方形,则可以提高效率。当部分解的目标值加上未覆盖值的总和不大于迄今为止的最佳目标值时,通过删除最近添加的平方,回滚到最后一个有效组合,然后尝试其他平方。避免添加将零添加到目标值的正方形。另外,避免添加次优平方:如果在OP部分解决方案的示例中包含平方[1,2;1,2],则不要添加平方[2,2;2,2],因为[2,1;2,2]总是至少一样好或更好。然后以这样一种方式重新排列正方形,您可以快速获得足够好的解决方案,这样可以更快地终止所有进一步的尝试。

如果a的条目如您所说是非负的,那么如果a也是正方形,则最佳解就是单个正方形a本身。(你提到了“大平均值”,但似乎没有将其纳入你的目标函数。)为了澄清,正方形是固定大小s x s的子矩阵(s是问题的给定参数),其中s表示歉意,我完全错过了你所说的“尺寸s x s”部分。现在清楚了。