随着朱诺号太空探测器的图片公布于世,对这些图片亲自进行一番图像处理想必会很有趣。虽然本人毫无图像处理经验, 借助 Wolfram 语言里一些非常好用的工具,可以减轻学习负担,使我不必纠结于如何做,而是专注于想做什么。
朱诺的任务是为了理解行星的形成。木星,作为我们太阳系中最有影响的行星,无论是从字面上 (从引力效应),还是象征性地 (在我们关于宇宙起源的叙述中) ,都是最具竞争力的研究对象。朱诺号探测器发射到既定轨道上,将木星表面的气体的高清图像送回地球进行研究,以回答我们关于宇宙的一些问题。
朱诺探测器拍摄的图像以彩色滤镜、表面贴片的形式给我们提供了一张完整的木星表面图像。需要对其进行一些几何和图像处理,才能组装成一个完整的表面彩图。
预处理图像
JunoCam 的图像采用了四种不同的滤镜:红色、绿色、蓝色和近红外线。其中前三个来自同一次航天器自转 (每分钟大约两次旋转),并且近红外线图像来自第二次自转。最后产生的图像将所有的单滤波图像缝合在一起,得到一个投影图像。
NASA 把通过 JunoCam 捕获的图像汇集成一个图片库,其中包含本过程所用的全部图片,包括未排序的原始图像;红色、绿色和蓝色滤波图片;和最终的投影图像。
让我们先导入特定的红色、绿色和蓝色图像:
要从这些频带组装成 RGB 图像,我使用 ColorCombine:
为了清除图像中的一些雾气,我们需要调整其对比度、亮度和伽玛参数:
可以看到,在最初的彩色组合图像中,有一个阴影效果并不突出。为了防止前景图像上的阴影干扰任何进一步的分析,亮度需要在整个图像中保持一致。我首先创建一个掩膜来限制对白色区域的校正:
应用这个掩膜得到:
现在图像变得过暗了,所以必须重新调整图像。这次,我用一个 Manipulate 来交互操作:
使用在 Manipulate 中找到的参数值创建调整后的图像:
在相机上拍摄的图像总是多少有点模糊。Wolfram 语言有多种反褶积算法可立即用于计算,减少这种意外的模糊。
大多数人在做图像处理时,特别是对天文图像进行处理时,都有一种直觉, 知道如何最好地通过反褶积来恢复图像。因为我没有这种直觉,最好的方法是这样交互式地做:
我再次使用了交互式得到的模糊校正,得到一个清晰的图像:
作为可用性测试,来看看这些变化是如何并排显示的:
处理图像
现在,图像的清理工作已经完成,可以通过多种方式对其进行分析。虽然哪种方式最好,并不总是那么明显。这对我来说是一个非常有挑战的探索过程——我尝试了很多最终并不正确的方法,如分水岭分割或图像的 Dilation 和 Erosion;这些方法对二值化图像非常重要,但这里的重点是增强彩色图像。
对于木星,大红斑倍受关注,所以为什么不来突出一下这个特征呢?
首先,我需要过滤图像,以便易于区分三个不同的区域:背景、前景和前景中的大红点。为了做到这一点, 我应用了 MeanShiftFilter:
这是很有用的,因为这个滤镜删除了大红斑的锯齿边缘。此外,此滤镜还保留了边缘,使大红斑周围的边界更平滑,便于计算机检测。
再次使用 Manipulate,我可以手动放置指示图像三个区域位置的种子点(您可以看到上面的滤镜对区域分离的效果):
这些地方的种子值存放于一个变量中,以供进一步使用:
使用这些种子,我可以用编程方式进行分割:
随着区域分割,我为大红斑创建了一个掩膜:
将这个掩膜应用于图像:
这虽然很棒,但我希望图像中的大红斑有一个近似数值边界。幸运的是,这对于 Wolfram 语言来说,是相当简单的。
交互式右键单击菜单,即可以从图像中找到创建此数值边界所需的坐标:
这是一个方便的 UI 功能,在笔记本前端直观地指导我查找大红斑内部 y 坐标最小值的大致位置:
以及同一区域内部 x 坐标最小值的大致位置:
我也同样找到了各坐标的最大值。通过这些值,生成一个步长为. 1的数值范围:
我构造了主轴和次轴:
然后近似得到中心:
最后创建椭圆边界:
将此椭圆边界应用于图像:
关于木星的更多巧妙分析
为了更好地了解木星,除了对外部 JunoCam 图像进行图像处理,木星(和太阳系中的任何其他行星一样)还有许多内置属性,已经存在于语言本身,随时可供计算:
这里提供了木星表面的一个纹理等距圆柱投影 (ERP),它非常适用于3维重建。
使用这个投影,我可以将它映射到一个球形图形基元:
结语
从起初我对图像处理几乎一无所知,通过很少几行代码,就能够以相当彻底的方式进行数据挖掘和分析,即使没有多少直觉可以指导我。
Wolfram 语言将图像处理所带来的单调乏味一扫而光,并帮助我专注于我想做的事情。正因为如此,我可以发现并尝试更多更有趣的事情——比如使用 ImageAssemble 组装原始图像,或者尝试通过颜色而不是数字来突出显示感兴趣的特征等,并且让我对提取正在寻找的信息更加自信。