这里有一些关于如何开始的一般性高级建议。
基本上,您正在做的是一个优化问题。这些算法用于解决很多问题,并且有几种众所周知的方法可以做到这一点。他们归结为
- 创建一个评分函数,它可以告诉您一个数字,说明您的结果有多好。数字越大越好。
- 创建一个函数,该函数接受输入和一些参数并产生可以评分的输出
- 这很重要:评分函数应该基于#2 的参数是连续的。如果您有两个参数,并在 3D 中绘制它(param1、param2、score),它看起来就像一个带有大山丘的凹凸不平的表面。
- 你现在的工作是在表面上找到最大值。你可能有两个以上的参数——在这种情况下,你有一个 ND 表面——但想法是一样的
查找爬山、遗传算法或优化问题。一本很好的 Python 代码书是 Toby Segaran 的“Programming Collective Intelligence”。
一般来说,爬山是这样的:
- 很好地猜测参数
- 创建输出和得分
- 稍微改变一个参数
- 给输出打分
- 如果更好,继续朝这个方向前进,如果更糟,请改变方向。
- 如果你被卡住了——去地表的其他地方试试。
- 如果你找到了一个局部最大值,但它还不够好——去别的地方试试
不过,查看实际的算法,它们比这要复杂一些。
许多研究归结为提出一个好的评分函数和一个了解哪些参数有效以及如何使用它们的好方法。
使用这个一般轮廓——只需尝试亮度/对比度作为输出生成函数(亮度和对比度是输入)。对于评分,您将需要一种比较两张照片的匹配方式——首先,选择简单的东西(也许硬编码一个要检查的区域)。
一旦你开始了,你将对如何做到这一点有更多的见解,并且可以回到论文中寻找想法。