Hyaika Blog

Penguin is all you need

科学

把颜色拉开,千年壁画现形:一个给火星的数学技巧,如何让考古学家看见看不见的画

把颜色拉开,千年壁画现形:一个给火星的数学技巧,如何让考古学家看见看不见的画

把颜色拉开,千年壁画现形:一个给火星的数学技巧,如何让考古学家看见看不见的画

目录

  • 几千名游客路过,没人看见墙上的画
  • 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。肉眼能看见了。

< 配图区 >

NASA 官方 before/after:同一张圣博尔希塔斯洞穴岩画,左边肉眼只能看到残缺人形,右边去相关拉伸后黄色人形浮现

Jon Harman 站在一块兰乔伯纳多风格岩画前——画面几乎看不见,直到 Dstretch 处理后才显现

我在服务器上用 numpy 复现去相关拉伸:左侧是原始岩画图像,右侧是白化变换后的输出,人脸和纹样从背景中分离出来

合成实验(第二版):高相关 0.951 的岩壁背景上画一个亮度几乎不变的褪色三角形——左侧色度距离 55.7,右侧去相关后 146.2,三角形从岩壁里浮出来

这就是全部魔法:不是无中生有,而是把已经存在、但被挤在微小方差里的信号,重新分配给肉眼。

看不见,其实是数学问题

回头看,这个故事的奇妙之处在于:Dstretch 没有发明任何新数学。Karhunen–Loève 变换在 1978 年之前就是统计学教科书内容,PCA 更老。JPL 做的只是把一个旧工具用在了一个新问题上;Harman 做的,又是把 JPL 的用法用在另一个完全不同的问题上。

每一次「跨学科」都只是把上一个领域熟视无睹的东西,带到下一个领域当宝贝。

国内其实在同一件事上走了更系统的路。敦煌研究院的多光谱成像系统,能「看到」壁画下层被覆盖的线条和颜料——莫高窟 220 窟的壁画底层,就藏着初唐时期被后世重绘盖住的画作。秦始皇陵出土的彩绘兵马俑,用高光谱技术分析残存的颜料的成分,才能决定如何保护。方法不同(多光谱/高光谱是拍摄多个窄波段,去相关拉伸是纯数学变换),但目标一致:让褪色、被覆盖、被岁月抹平的画面重新开口说话。

Harman 说每年有 200 个人来找他要插件。这 200 个人看到的,是那些符号在说:几千年前有人在这里,认真地画下了他们认为重要的东西。至于为什么画——「没人知道,符号很奇怪。」

数学不会回答这个问题。但它能让问题被看见——这已经够惊人了。

分享:

评论(0)

暂无评论,来写第一条吧~

发表评论