模糊与精确

盖阴阳者,万物之终始,死生之本,逆之则灾害生,从之则苛疾不起,故能取法以和调。—《黄帝内经》

我在读研时做过一些图像处理的研究,其中一个课题就是目标跟踪,要求在视频的某一帧上圈出一个目标,然后随着视频的录放,始终跟住这个目标。

我一开始是这么做的,

  • 分析目标的特征,选择尽可能多的特征点
  • 建立一个关于目标的尽可能精确的目标模型
  • 基于这一套我认为非常完美的模型和阈值,进行目标跟踪

然而,结果不尽如人意。目标跟丢了。

难道是特性点不够?我增加了更多的特征点,建立了更加精确的模型,但是效果不明显,有时甚至更差。

先抛开这个问题,我们看看中医是怎么说的。

中医中说:阴平阳密,命曰平人。是指人体内的阴阳达到平衡状态的时候,这个人就是一个健康的人。怎样叫阴阳平衡状态?阴在内,阳之守也,阳在外,阴之使也。

假如此时是春天,一个健康人的阴阳平衡状态是这样的。那么随着天气变热,到了夏天,这个人还是保持这样一种状态,那就要生病了。

到了冬天天气变冷,人体内的阴阳也要跟随的调整。并不是特定的某一种状态就是阴阳平衡,而是适合当前环境的平衡。阴阳平衡是动态的平衡。

这就是上文所说的“盖阴阳者,。。。逆之则灾害生,从之则苛疾不起。。。”

我们没必须把所有的事件都强加上阴阳属性。这里的阴阳,我理解为是事物发展变化的规律。

根据阴阳理论,事物是在不断发展变化的。既然事物是注定要变化了,那么一开始做的再精确的模型,也会有不适用的时候。所以我们要做的,不是一开始就做好万全的准备,只要满足当时的需求就可以了。投入更多的精力在发现规律,顺应变化,随着变化不断地调整自身。

我当时做这个课题时,并不懂这些中医理论。师兄们教了我这样的方法:

  • 精心选取特征点
  • 建立满足当前跟踪需求的合适的对象模型
  • 开始跟踪
  • 根据跟踪结果建立新的模型
  • 新模型与旧模型融合,调整阈值
  • 继续跟踪

跟踪效果确实有了明显改善。

我没有做过软件工程,但我们可以从这个例子推演到软件工程。

在软件开发过程中,精确似乎是理所当然的。我们的程序是精心设计的,程序的运行过程是由我们控制的。我们很难想象,如果执行我们的程序时我们却不知道它究竟发生了什么,也难以接受,执行了我们的程序,却无法预测它的执行结果。

我们这样精心地设计我们的程序,可我们的程序注定是要改变的。不管是程序本身的运行状态,还是程序运行所依赖的环境,或者我们对程序的期望,都有可能发生改变。

幸运的是,事物的发展变化是有规律的,虽然我们不能预见到它会变成怎样,但我们可以预测到它可能会怎样变化。

所以,与其在一开始把软件设计到尽善尽美,不如好好研究一下这个软件有可能在哪些方面发生变化,以及如何更好地响应这些变化。