显微镜是四百年前发明的。但是今天,正如在许多其他领域一样,与计算相关的显微镜正在掀起一场革命。我们一直在努力使 Wolfram 语言成为计算显微镜这一新兴领域的最终平台。
首先是从光学显微镜、X 射线显微镜,透射电子显微镜(TEM)、共焦激光扫描显微镜(CLSM)、双光子激发或扫描电子显微镜(SEM)等等各种装置得到图像。然后进行处理来提升图像品质,重建对象并进行测量、检测、识别和分类。在2017年8月的显微镜和微量分析会议(http://microscopy.org/MandM/2017)上,我们使用蔡司(Zeiss)显微镜和ToupTek 数码相机,展示了这一流程的各种示例。
图像采集
使用 Import 将标准图像文件格式转换为 Wolfram 语言(通过BioFormatsLink(https://github.com/WolframResearch/BioFormatsLink)可以访问显微镜生成的更罕见的文件格式)。更酷的是,您还可以连接到显微镜,让图像直接进入 CurrentImage。
图像导入后,就可以使用 Wolfram 语言的各种功能大显身手了。
亮度均衡
通常,显微镜获取的图像表现出不均匀的照明。不均匀照明问题可以通过根据已知平面场调整图像背景或通过对可见背景的照明进行建模来解决。BrightnessEqualize 正可以达到此目的。
这是显微镜下糖晶体的原始图像:
这是一个纯粹的图像调整:
这里是使用经验平面场亮度均衡的结果:
如果平面场图像不可用,则构造一个。可以分割背景并用二阶多项式对其照明进行建模:
颜色反褶积
颜色反褶积是将染色样品的图像转换成染料吸收分布的技术。
这是使用苏木精 C19 和 DAB(3,3-二氨基联苯胺)的染色样本:
每种染料的相应 RGB 颜色为:
获得从染料浓度到 RGB 颜色的转换矩阵:
计算从颜色到染料浓度的逆变换:
由于颜色吸收与染料浓度呈指数比例,因此可在色度强度对数范围内进行实际的去混合。
颜色反褶积为苏木精和 DAB 染料浓度:
染料浓度的假着色:
图像查看和手动测量
查看大图像,请使用 DynamicImage,它是一个高效的图像面板,用于缩放、平移、拖动和滚动核心内外的图像:
以下代码是实现圆形对象半径测量的自定义交互界面所需要的。您可以通过 Alt +拖动或 Command +拖动来移动叠加圆的位置和半径。圆的半径显示在左上角:
聚焦堆叠
为了克服显微镜的浅景深,您可以收集一个焦栈,即一个图像堆栈,其中每个图像具有不同的焦距。可以通过选择性地取出堆栈中每个图像的焦点区域将焦栈压缩成单个图像 。imageFocusCombine 正具有这一功能。
这是 ImageFocusCombine 的重新实现以提取深度,并更进一步从焦栈重构 3D 模型。
将拉普拉斯滤波器的范数作为像素对焦与否的指示器。拉普拉斯滤波器拾取高傅立叶系数,如果图像失焦,则首先被抑制:
然后对于每个像素,选择展现最大拉普拉斯滤波器范数的层:
将所得到的二进制体积与焦栈相乘,并将所有图层相加。这样,您仅收集那些聚焦的像素值:
二进制体积 depthVol 包含每个像素的深度信息。将其转换为二维深度图:
深度信息相当嘈杂,并且对于所有像素位置来说并不能同等可靠。如果图像区域处于焦点,则边缘仅提供清晰的指示。因此,使用 focusResponse 总和作为深度图的置信度指标:
考虑置信度大于 0.05 的的深度指标:
可以使用 MedianFilter 对深度值进行正则化,并通过 FillingTransform 关闭间隙:
使用对焦图像作为其纹理,显示 3D 深度图:
机器学习示例:花粉分类
Wolfram 语言具有强大的机器学习功能,可以在显微镜下实现各种检测、识别或分类应用。
这里是一个六种花粉类型的小型数据集,我们想要对其进行分类:
通常情况下,需要一个巨大的数据集从头开始训练神经网络。然而,使用其他预训练模型,我们可以使用这样一个小数据集进行分类。
通过 NetModel 得到在 ImageNet 上训练的 VGG-16 网络:
删除在这个网络中执行特定分类的最后几层。这将留下一个生成特征向量的网络:
接下来,计算花粉数据集中所有图像的特征向量:
特征向量处于 4k 维空间中。为了快速验证特征向量是否适合对数据进行分类,将特征空间降低到三维,看起来花粉图像按照类型分组效果不错:
为了增加训练集的大小并使其旋转-反演不变,生成额外的数据:
使用该训练数据,创建一个分类器:
在新的数据范例上测试分类器:
深度神经网络示例:检测有丝分裂
先前的分类器依赖于一个预训练的神经网络。如果有足够的数据,可以从头开始训练一个神经网络,一个自动学习相关特征并同时作为后续分类器的网络。
作为示例,我们来谈谈检测细胞发生有丝分裂的情况。这是一个简单的卷积神经网络,可以做到这一点:
训练和测试的数据已从 Tumor Proliferation Assessment Challenge 2016 中提取。我们将数据预处理成97*97图像,环绕在所讨论的实际细胞周围。
使用大约四分之三的数据进行训练,其余用于测试:
再次,为了增加训练集,执行图像镜像和旋转:
计算分类器指标并验证神经网络的有效性:
考虑到任务的挑战性,错误率小于10%就可与病理学家相媲美了。
结束语
计算显微镜是一个新兴领域,借此文我们也可以对 Wolfram 语言的广泛功能略窥一斑。我们还将进一步扩展函数的应用范围,为显微镜图像分析提供权威的平台。
来源:武汉墨光