以下内容是我从牛津大学Jon Chapman的讲座中总结记录的。
Chapman研究了Escher的画,Print Gallery。
他有如下发现:
- 在图像中旋转一周,则似乎画面中所有的东西都在放大,但是放大一圈之后,又跟原来一样了。
这种特性让Chapman想到了Droste Effect,其特点就是缩放不变。
- 在画面的局部,细节是保留的。比如垂直交叉的窗棂、栏杆和画框。这让Chapman想到保角变换(Conformal Mapping)。
然后Chapman发现,将两者结合起来,可以还原Print Gallery所实现的效果。具体做法是这样的:
- 找到一个缩放不变的图片;比如下图:
- 对其进行LogPolar变换;这个变换将缩放变换转换为在水平方向上的平移不变;同时,在垂直方向上,由于角度天然具有周期性,就得到了两个方向上的平移不变性。
注意图像在水平方向的平移不变在右端最明显,在图像左侧周期性似乎被打破了。这是因为原始图像的分辨率有限,按照数学计算,此时图像左侧对应的可能是第0.0003个像素,而如果图像是完全可缩放的,则0.0003个像素跟0.0004个像素是不一样的。但图像本身分辨率有限,就只能从第1个像素取数据。因此看上去被放大了。
如果从其中只取分辨率最高的一份,则得到如下结果:
在这幅图中,在水平方向移动,代表缩放,宽度对应了Droste Effect的大小;在垂直方向移动,代表旋转,整个图像的高度对应了0-2pi角度。
此时,如果将这个图像进行逆变换,则得到原图像。 - 但是我们希望把缩放的周期性跟旋转的周期性结合在一起,因此,我们对图像进行旋转。这个旋转的角度要恰到好处,使得在垂直方向上经过2pi角度后,仍然跟原像素一致。
- 可以看到,在旋转之后的图像中,任何一个点,在垂直方向中从0旋转到2pi,仍然会回到同样的颜色。然而,原来水平的线条,现在倾斜了,意味着原来位于同一个圆心角上的点,现在会分布在不同的圆心角上;原来大小一样的方框,现在进行了缩放。将这个图像反变换回去,就得到如下图形:
这就是Escher的Print Gallery用到的变换。
当然,这只是基本原理。要山寨Escher的作品,还面临很多实操上的挑战。