Wolfram 语言与计算型显微镜

█ 本文译自 Wolfram 图像处理部门经理 Shadi Ashnai 和算法 R&D 顾问 Markus van Almsick,2017年9月29日的 Wolfram 博客文章:Computational Microscopy with the Wolfram Language

显微镜是四百年前发明的。但是今天,正如在许多其他领域一样,与计算相关的显微镜正在掀起一场革命。我们一直在努力使 Wolfram 语言成为计算显微镜这一新兴领域的最终平台。

首先是从光学显微镜、X 射线显微镜,透射电子显微镜(TEM)、共焦激光扫描显微镜(CLSM)、双光子激发或扫描电子显微镜(SEM)等等各种装置得到图像。然后进行处理来提升图像品质,重建对象并进行测量、检测、识别和分类。在上个月的显微镜和微量分析会议(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 (http://tupac.tue-image.nl/) 中提取。我们将数据预处理成97*97图像,环绕在所讨论的实际细胞周围。

使用大约四分之三的数据进行训练,其余用于测试:

再次,为了增加训练集,执行图像镜像和旋转:

计算分类器指标并验证神经网络的有效性:

考虑到任务的挑战性,错误率小于10%就可与病理学家相媲美了。

结束语

计算显微镜是一个新兴领域,借此文我们也可以对 Wolfram 语言的广泛功能略窥一斑。我们还将进一步扩展函数的应用范围,为显微镜图像分析提供权威的平台。

原文发布于微信公众号 - WOLFRAM(WolframChina)

原文发表时间:2017-10-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏每日一篇技术文章

OpengL ES _ 入门_03

好,记住这个过程,任务一就完成了。接下来的任务就是对每个步骤详细理解,加深记忆!!

10120
来自专栏人工智能头条

利用机器学习进行恶意代码分类

77640
来自专栏机器之心

教程 | 自动化机器学习第一步:使用Hyperopt自动选择超参数

52090
来自专栏AI研习社

怎样在树莓派上轻松实现深度学习目标检测?

这个现实世界造成了很多挑战,比如数据有限、只有微型的计算机硬件(像手机、树莓派)所造成的无法运行复杂深度学习模型等。这篇文章演示了如何使用树莓派来进行目标检测。...

23530
来自专栏量子位

码农の带娃绝技:TensorFlow+传感器,200美元自制猜拳手套

王小新 编译自 Google Cloud Blog 量子位 出品 | 公众号 QbitAI 你们程序员啊,连带娃都这么技术流…… 今年夏天,谷歌云负责维护开发者...

40850
来自专栏ATYUN订阅号

如何为地图数据使用tSNE聚类

在本文中,我会展示如何在经纬度坐标对上使用tSNE来创建地图数据的一维表示。这种表示有助于开发新的地图搜索算法。这对于诸如“这个经纬度坐标是新泽西或者纽约的吗?...

14030
来自专栏PaddlePaddle

技术流|五分钟带你鉴别垃圾邮件

1)邮件样本广告邮件,保存为典型的Spam,分为元数据(发信方、书信方、编码格式等)和正文,提炼代表垃圾邮件的关键词

11510
来自专栏量子位

Tensorflow官方语音识别入门教程 | 附Google新语音指令数据集

李林 编译整理 量子位 报道 | 公众号 QbitAI Google今天推出了一个语音指令数据集,其中包含30个词的65000条语音,wav格式,每条长度为一秒...

98180
来自专栏人工智能

支持向量机入门简介

我们会通过分享有用的图书馆和资源而不是用复杂的数学知识来带你入门 SVM 。

40790
来自专栏机器之心

学界 | Bengio等提出稀疏注意力回溯:长期依赖关系建模的更一般化机制

人类对与当前心理状态相关的很久之前的事件有很强的记忆能力(Ciaramelli et al., 2008)。大多数关于记忆的实验和理论分析都集中在理解形成记忆和...

10810

扫码关注云+社区

领取腾讯云代金券