【发布时间】:2014-12-29 10:18:15
【问题描述】:
我有一张图像的强度图,我想选择平均值较大的子区域。为此,我想找到使子区域覆盖的强度图像素总和最大化的子区域。为防止返回的子区域数量过多,对返回的每个附加子区域应用惩罚。另外,两个子区域重叠也可以,但重叠目标值只是子区域并集的值。
更正式地说,假设您有一个矩阵 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) 个可能平方的值的总和。
有没有有效的解决方案?
【问题讨论】:
-
如果A的条目如你所说的非负,那么如果A也是正方形,则最优解是单个正方形A本身。 (您提到“大平均值”,但似乎没有将其纳入您的目标函数。)
-
为了澄清,正方形是固定大小 s x s(s 是问题的给定参数)的子矩阵,其中 s
-
抱歉,我完全错过了你所说的“尺寸为 s x s”的部分。现在很清楚了。
标签: algorithm optimization matrix