为了完成根据显著图自动调整布局的算法,我们首先需要知道如何转化为数学问题。
- 设计->数学问题
图像本质上是一个二维的矩阵,于是,我们可以把问题转化为寻找二维矩阵中的最大子矩阵这么一个数学问题:
寻找二维矩阵的最大子矩阵
我们可以进一步把数学问题具体化,把问题转化为任务:
已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 × 1)子矩阵。
比如,如下4 × 4的矩阵
代码语言:javascript复制0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
代码语言:javascript复制
的最大子矩阵是
代码语言:javascript复制 9 2
-4 1
-1 8
代码语言:javascript复制
这个子矩阵的大小是15。
这样转化就可以直观地理解问题本身。找到了这个问题所属的“数学问题”,我们可以利用搜索引擎来找答案啦。
经过一番搜索调研, 我们可以知道解法多样,主要是要考虑时间复杂度问题:
穷举法、记忆化、动态规划法
然后,找对应的编程语言实现即可。
- 设计规则如何用数学公式表达?
来一个例子,比如我们的设计规则是:
文字区域应尽可能少干扰图像内容的表达,
同时尽可能多地符合设计构图原则。
来条数学公式表达下,可以仔细品读下数学公式与设计规则的对应关系。
对于任意图像,若最优文字区域记为R∗(x,y,w,h),(x,y)为矩形区域左上角定点坐标,w为矩形框宽度,h为矩形框高度,求R的过程就是求最大子矩阵的过程。
备注:
HOFsal(i,j)是(i,j)这个点的显著性分值,Tsp(i,j)表示在(i,j)符合设计构图的程度。