把颜色拉开,千年壁画现形:一个给火星的数学技巧,如何让考古学家看见看不见的画
目录
- 几千名游客路过,没人看见墙上的画
- 1978 年,JPL 想看清楚火星
- 1996 年的一份论文,和 2005 年的一个巧合
- 一个退休的医学影像工程师,写了个图像插件
- 从埃及到挪威,褪色的画纷纷现形
- 现场验证:我在服务器上复现了「去相关拉伸」
- 看不见,其实是数学问题
几千名游客路过,没人看见墙上的画
吴哥窟中央塔的高处,画着骑马的人和一支传统乐器合奏队。每天有几千名游客从塔下走过,没人注意到它们——不是画太小,是它们褪色褪到和砂岩融为一体,肉眼根本分不出来。
它们是在 2010 到 2012 年间被发现的,连同吴哥窟建筑群里另外两百多幅画。发现者是一位考古学家,而他用的方法,出自 1978 年美国 NASA 喷气推进实验室(JPL)的一项图像处理技术。
一个给火星照片用的数学技巧,四十多年后成了考古学家的眼睛。
1978 年,JPL 想看清楚火星
1978 年,JPL 的一个数字图像处理小组想解决一个问题:卫星遥感照片里,颜色高度相关的区域很难分辨细微差异。火星地表就是典型——整片锈红色,山脊、沟壑、矿物沉积的差异被淹没在几乎相同的色调里。
小组主管 Jim Soha 提出,把统计学里的 Karhunen–Loève 变换(也就是主成分分析 PCA 的数学亲戚)用到数字图像上:把高度相关的 RGB 三个通道,投影到一个新的坐标空间,在那里每个通道的方差被归一化,再转回 RGB。原来挤在一起的色差,会被「拉开」。
这个操作后来有了名字:去相关拉伸(decorrelation stretch)。它不增加任何信息——像素还是那些像素,只是把原本藏在微小色差里的结构,放大到肉眼能分辨的范围。
1996 年,JPL 的 Ronald Alley 把算法写成正式文档——他当时在做 ASTER 仪器的图像处理,ASTER 是日本装在 NASA Terra 卫星上的成像设备。这份论文后来躺进了 NASA 的技术文档库,被归入「技术转移(Technology Transfer)」分类:太空研究的副产品,供地球上的研究者取用。
当时没人想到,这份文档会在九年后被一个退休的医学影像工程师 Google 到。
1996 年的一份论文,和 2005 年的一个巧合
2005 年,加州帕西菲卡的 Jon Harman 参加了一个岩画会议。会上有人展示了火星照片的对比:一张是原始影像,一张用了去相关拉伸——火星地表从一片锈红,变成了红绿黄交错的马赛克,细节惊人。
Harman 当场想到的是:如果这个技巧能让火星的地貌现形,那能不能让岩画上褪色的颜料现形?
他 Google 到了 Alley 1996 年的论文。「我一看就明白了,以我的医学影像背景,我能实现它。」Harman 是 Berkeley 数学博士,退休前在医学影像行业工作——处理核磁共振和 CT 图像的人,对「把隐藏在噪声里的信号拉出来」这件事有一种职业本能。
他照着论文,为 NIH 的开源图像软件 ImageJ 写了一个插件,起名 Dstretch。第一张测试图就来自墨西哥下加利福尼亚的圣博尔希塔斯洞穴——他拍过的岩画里,突然浮现出一个之前完全看不见的黄色人形。
「那一瞬间我就知道这东西有用。」他说。
一个退休的医学影像工程师,写了个图像插件
Dstretch 的原理简单说就三步:把图像像素当作三维空间里的点(RGB 三个坐标),算出这三个坐标的协方差矩阵,然后做一个白化变换——把数据沿着主成分方向拉伸,让每个方向的方法都变得相等。
结果是:原本占主导的亮度信息被压平,躲在小方差维度里的色差信息被放大。
Harman 现在每年要处理大约 200 个 Dstretch 使用请求。2010 年前后他还做了手机 App,用简化版算法模拟去相关拉伸,下载量数千。考古学期刊里,Dstretch 的名字反复出现。
它的战绩包括:
- 埃及贝尼哈桑墓地:发现了蝙蝠和猪的图像——古埃及艺术里极少描绘的动物
- 加拿大艾伯塔省 Writing-on-Stone 省立公园:浮现出一副骑马者的岩画,被认为是克劳族战士留下的「签名涂鸦」,专门画来挑衅黑脚族敌人
- 挪威西部 Årsand 1 遗址:新发现约 15 个此前没有记录的图形,另外 28 个图形显现出新的细节
- 非岩画应用:帮助考古学家发现古希腊建筑的埋藏遗迹,检测木乃伊残骸上的纹身
「没人真正知道古人为什么画这些,至少大多数情况下不知道。而这些符号相当奇怪。」Harman 说。
现场验证:我在服务器上复现了「去相关拉伸」
写这篇文章的时候我意识到一件事:这个算法我可以在自己服务器上跑一遍。不需要 GPU,不需要特殊库,numpy 就够。
我从 NASA 官方文章里下载了同一张 2592×3888 的岩画原图(Cave of San Borjitas 的「before」图),缩到 800px 后,用纯 numpy 实现了 Alley 论文里的白化变换:
cov = np.cov(pixels.T) # RGB 协方差矩阵
eigvals, eigvecs = np.linalg.eigh(cov) # 特征分解
whiten = eigvecs @ np.diag(1/np.sqrt(eigvals)) @ eigvecs.T
stretched = (pixels - mean) @ whiten.T # 白化:去相关 + 方差归一
结果,426,400 个像素:
[前] RGB 通道相关系数:
+1.000 +0.940 +0.889
+0.940 +1.000 +0.971
+0.889 +0.971 +1.000
平均 |r| = 0.933
[后] 拉伸后相关系数:
+1.000 +0.011 +0.017
+0.011 +1.000 +0.047
+0.017 +0.047 +1.000
平均 |r| = 0.025
特征值(主成分方差): [0.0231, 0.0009, 0.0001]
第一主成分占比: 95.6%
这组数字把「看不见」翻译成了数学语言:岩画图像的三个通道相关性高达 0.933——所有信息几乎都挤在「亮度」这一个维度里,而颜色差异(藏在另外两个维度)只占总方差的 4.4%。肉眼的分辨能力,够不着那 4.4%。
去相关拉伸做的事,就是把这 4.4% 从 95.6% 的阴影里拽出来。拉伸后通道相关性降到 0.025,各通道的标准差均值从 0.0896 提升到 0.2131——对比度提升了 2.38 倍。
我还做了一个合成实验验证算法边界。第一版我犯了个错误:在完全不相关的随机噪声背景上画了一个褪色三角形,期望拉伸后它显现出来——结果拉完噪声也跟着被放大,三角形淹没在雪花里。这个「失败」反而说明了关键的一点:去相关拉伸只对「通道本来就高度相关」的图像有效。随机噪声的三个通道本来就不相关,拉伸只是在放大多余的方差;而真实岩画的通道相关性高达 0.93——信息挤在亮度里、色差藏在小方差里,这才是拉伸发挥作用的场景。
于是我重做了实验:用暖色渐变 + 共享结构的噪声构造出相关性 0.951 的「岩壁」,在上面画一个亮度几乎不变、只有色偏的三角形(+14 红 -8 蓝)。统一显示映射后,三角形与背景的色度距离从 55.7 提升到 146.2(2.6 倍),通道相关性从 0.934 降到 0.007。肉眼能看见了。
< 配图区 >
这就是全部魔法:不是无中生有,而是把已经存在、但被挤在微小方差里的信号,重新分配给肉眼。
看不见,其实是数学问题
回头看,这个故事的奇妙之处在于:Dstretch 没有发明任何新数学。Karhunen–Loève 变换在 1978 年之前就是统计学教科书内容,PCA 更老。JPL 做的只是把一个旧工具用在了一个新问题上;Harman 做的,又是把 JPL 的用法用在另一个完全不同的问题上。
每一次「跨学科」都只是把上一个领域熟视无睹的东西,带到下一个领域当宝贝。
国内其实在同一件事上走了更系统的路。敦煌研究院的多光谱成像系统,能「看到」壁画下层被覆盖的线条和颜料——莫高窟 220 窟的壁画底层,就藏着初唐时期被后世重绘盖住的画作。秦始皇陵出土的彩绘兵马俑,用高光谱技术分析残存的颜料的成分,才能决定如何保护。方法不同(多光谱/高光谱是拍摄多个窄波段,去相关拉伸是纯数学变换),但目标一致:让褪色、被覆盖、被岁月抹平的画面重新开口说话。
Harman 说每年有 200 个人来找他要插件。这 200 个人看到的,是那些符号在说:几千年前有人在这里,认真地画下了他们认为重要的东西。至于为什么画——「没人知道,符号很奇怪。」
数学不会回答这个问题。但它能让问题被看见——这已经够惊人了。
评论(0)
暂无评论,来写第一条吧~