跳转到内容

感觉系统/计算机模型/视网膜功能模拟

来自维基教科书,开放的书籍,开放的世界
File:Home-image.png
图 1:著名 Lena 图像的视网膜模拟示例

以下部分描述了使用计算机语言Python和图像和视频处理包OpenCV对视网膜神经节细胞活动进行的逼真模拟。在总结了对模拟重要的视网膜主要特征之后,描述了所需软件包的安装。本节的其余部分介绍了模拟和相应的参数。

视网膜生理学

[编辑 | 编辑源代码]

当光线到达眼睛后部时,它会进入视网膜的细胞层。视网膜中检测和响应光线的光感受器位于视网膜的最后部。有两种类型的光感受器:杆状细胞和锥状细胞。杆状细胞使我们能够在昏暗的光线下看到,但不能感知颜色。另一方面,锥状细胞使我们能够在正常照明条件下感知颜色。在大多数视网膜中,杆状细胞数量超过锥状细胞。视网膜中提供最高视觉敏锐度的区域位于我们凝视的中心。当光线照射到光感受器时,它会与称为感光色素的分子相互作用,从而开始一系列反应,用于传播视觉信号。 该信号被传递到称为双极细胞的细胞,这些细胞连接光感受器和神经节细胞。双极细胞将信号传递给神经节细胞,神经节细胞在视神经盘称为视神经的区域中大量离开眼睛。离开视网膜后,神经节细胞被称为视神经。视神经将视觉信息传递到大脑进行处理。视网膜中还有另外两种类型的细胞需要提及:水平细胞和无长突细胞。水平细胞接收来自多个光感受器细胞的输入。无长突细胞接收来自双极细胞的信号,并负责调节和整合双极细胞和神经节细胞中的活动[1]。可以在这里找到有关视网膜的更多说明。

细小通路和粗大通路中的传导时间。

视网膜细胞形成两层细胞层:外丛状层 (OPL) 和内丛状层 (IPL)。每层都用特定滤波器建模。在构成视网膜输出的 IPL 水平,可以识别出不同的信息通道。我们在这里关注已知的:专门用于细节提取的细小通道 (Parvo) 和专门用于运动信息提取的粗大通道 (Magno)。在人类视网膜中,细小通道在中央凹 (中央视觉) 水平最为常见,而粗大通道在中央凹外 (周围视觉) 中最为重要,这是由于专门细胞的相对变化[2]。有趣的是,细小通道信号的到达时间比粗大通道信号晚,如左侧图像所示[3]

为了了解 Magno 和 Parvo 细胞执行的功能,科学家对将信息传递到大脑的通路进行了病变,并对动物由于病变而产生的表现进行了研究。当猴子外侧膝状核的细小通路层中的细胞被破坏时,在各种任务中的表现都会下降,例如颜色辨别和模式检测[4]。最具信息量的结果是,当粗大通路层中的神经元被破坏时,动物对快速闪烁的低空间频率目标的敏感度降低。这种敏感度下降表明,粗大通路包含最佳信息,可以提高我们执行需要高时间频率信息的任务的能力[3]。粗大通路神经元携带的信息提供了图像中高时间频率和低空间频率成分的最佳信息。当粗大通路信号可用时,在运动任务和其他需要此信息的任务中的表现会更好。这些信号对于执行任务不是绝对必要的。可以通过简单地增加刺激对比度来弥补运动任务中的表现缺陷;也就是说,可以通过提高细小通路信息质量来弥补粗大通路信息损失。因此,粗大通路包含对视觉任务(如运动感知)特别有用的信息。此外,细小通路和粗大通路与阿尔茨海默病、帕金森病等神经系统疾病有关。更多信息总结在[5]中。

以下模拟是使用 Python 中的 OpenCV 库完成的。图 1 显示了著名 Lena 图像从 Magno 和细小通路层得到的输出。我们可以看到,Parvo 细胞的输出包含颜色和图案信息,而 Magno 细胞的输出包含低空间频率的轮廓。将视网膜生理学描述成数学模型对于促进视网膜植入物和视觉研究的发展至关重要。一些关于视网膜植入物的有趣文章见[6]webvision

以下部分详细介绍了包、参数设置和演示。

安装指南和源代码

[编辑 | 编辑源代码]
骑马
骑马细小通路

此包目前托管在 GitHub 上,单击此处查看源代码。此包支持Python 2.x 和 3.x

骑马粗大通路

为了成功安装和运行此包,我们强烈建议使用Anaconda。Anaconda 将减轻更新和安装第三方包的许多问题。

  • OpenCV3:用于图像和视频处理。安装 OpenCV 有多种方法。首先,您可以按照OpenCV 网站上的在线文档进行操作,并从源代码构建 OpenCV(在这种情况下,请确保您启用了 Python 选项并构建了额外的模块)。Anaconda 用户可以直接从二进制文件安装该包
    conda install -c menpo opencv3=3.1.0
    
    您可以在 Linux 终端或 Windows 控制台中键入上面的命令,Anaconda 将自动安装此包。
  • PyQtGraph:用于设计和管理 GUI。我们建议您使用 Anaconda 的构建来安装此包
    conda install pyqtgraph
    
    您可能不想直接从 PyPI 安装此包,因为您需要注意一些棘手的问题。
  • 其他必需的包(如 numpy)可以通过 PyPI 安装,并在包安装期间进行检查

从 PyPI(推荐)

[编辑 | 编辑源代码]

如果您已安装上述提到的包,则可以通过以下方式从 PyPI 获取最新的稳定版本

pip install simretina

从 GitHub

[编辑 | 编辑源代码]

您应该确保您的计算机上安装了Git。对于 Windows 用户,请确保 Git 可执行文件位于您的路径中。

安装OpenCV3pyqtgraph后,可以通过以下方式安装视网膜模拟包

pip install git+git://github.com/duguyue100/retina-simulation.git \
-r https://raw.githubusercontent.com/duguyue100/retina-simulation/master/requirements.txt

pip 获取包的最新版本并自动安装。

启动视网膜查看器

[编辑 | 编辑源代码]

视网膜查看器是整个软件包的核心组件。它允许您使用不同的参数设置来操作视网膜模型。运行查看器还可以验证您的安装。

假设您已根据上述说明成功安装了软件包,您可以在终端/控制台中输入以下命令:

retina_viewer.py

上面的命令不是文件名,而是一个命令。安装完成后,该命令可以在您的终端/控制台中搜索到。

对于 Windows 用户,您的系统要么立即启动查看器,要么会询问打开文件的程序,您应该从 Anaconda 安装目录中找到并选择 python.exe 。如果它没有响应,您可能需要打开一个新的控制台并再次输入上述命令。

请注意,如果软件包未检测到 FFMPEG,则会在第一次使用时自动下载。

软件 GUI 解释

[编辑 | 编辑源代码]
视网膜查看器 GUI

retina_viewer.py (如左侧所示)当前分为 5 个面板。在顶部,有三个显示器,从左到右依次显示原始图像/视频、视网膜小细胞通路输出和视网膜大细胞通路输出。在左下角,是一些允许您以不同模式操作查看器的功能。在中间下方,是一些定义视网膜小细胞通路在内层丛状层 (IPL) 和外层丛状层 (OPL) 的参数。在右下角,是一些定义视网膜大细胞通路在 IPL 的参数。

您可以在模拟过程中更改参数设置。但是由于视网膜模型也考虑了时间维度,因此在更改参数后需要短暂的适应。参数设置的详细信息将在下一节中介绍。

从右下角面板开始,首先需要选择操作模式,查看器提供 5 种模式

操作模式 描述
图像 内置示例中选择图像。查看器包含 2 个图像示例:Lena 和 Dog。Lena 图像是标准测试图像,而 Dog 图像取自公开的图像识别数据集 Caltech-256。
图像 (外部) 提供外部图像,支持常用的图像格式。您可以点击打开图像/视频按钮进行选择。
视频 内置示例中选择 2 个视频示例:骑马和太极。这些示例取自 UCF-101 动作识别数据集。
视频 (外部) 此模式需要来自您系统的外部视频。您可以点击打开图像/视频按钮进行选择。
网络摄像头 如果您机器上装有网络摄像头,则查看器将从网络摄像头获取视频流并进行处理。

参数和设置

[编辑 | 编辑源代码]

视网膜模型的简要数学描述

[编辑 | 编辑源代码]
计算视网膜模型

在本节中,我们将简要回顾[7]中提出的视网膜模型。右侧显示了一个概念图。首先,输入帧的光照度被光感受器归一化,然后由外层丛状层 (OPL) 和内层丛状层 (IPL) 处理。IPL 层的输出进入两个通道:视网膜小细胞通路用于提取细节,视网膜大细胞通路用于运动分析。

使用光感受器对光照度变化进行归一化

[编辑 | 编辑源代码]

以下公式用于将输入亮度 调整为调整后的亮度 ,范围为 ,其中 表示图像中允许的最大像素值(在本例中,8 位图像为 255。如果图像使用不同的编码方案,则该值可能不同),这基于光感受器能够根据其邻域的亮度调整其灵敏度的事实。

其中 是一个静态压缩参数, 是一个与光感受器邻域的局部亮度 线性相关的压缩参数。 是通过对图像应用空间低通滤波器计算的,这是通过实现水平细胞网络实现的。

该模型增强了暗区对比度的可见度,同时保持了亮区的对比度。

外丛状层

[edit | edit source]

OPL 模型描述了水平细胞对起源于光感受器的信号的影响。OPL 层可以用一个不可分离的时空滤波器建模,其中 是空间频率, 是时间频率,该滤波器由以下特征:

其中

上面两个方程可以看作两个低通时空滤波器,它们模拟了光感受器网络 和水平细胞网络 。网络 的输出只包含图像的极低空间频率,它被用作局部亮度 是滤波器 的增益, 是滤波器 的增益。 是时间常数,它们允许将时间噪声最小化。 是空间滤波常数,其中 设置高截止频率, 设置低截止频率。

之间的差异可以用两个算子 BipON 和 BipOFF 来表示,它们分别给出 图像之间差异的正负部分。这模拟了双极细胞的作用,它将 OPL 输出分成两个通道:ON 和 OFF。OPL 滤波器可以去除时空噪声并增强轮廓。

内丛状层和细小细胞通道

[编辑 | 编辑源代码]

细小细胞通道的节细胞 (细小细胞) 接收来自 OPL 的 BipON 和 BipOFF 输出的轮廓信息。

在这里,我们可以对 BipON 和 BipOFF 输出应用与光感受器相同的局部适应定律,从而进一步增强轮廓信息。这些经过适应的输出最终组合在一起并作为细小细胞通路输出发送出去。

内丛状层和大细胞通道

[编辑 | 编辑源代码]

在 IPL 的大细胞通道上,无长突细胞充当高通时间滤波器。

其中 是离散时间步长,而 是滤波器的时常数(在默认配置中为 2 个时间步长)。此滤波器可增强空间和时间发生变化的区域。

无长突细胞 () 连接到双极细胞(BipON 和 BipOFF)以及到 "伞形"神经节细胞。与 Parvo 通道一样,神经节细胞执行局部对比度压缩,但也充当空间低通滤波器。结果是轮廓信息的时域高通滤波,该信息经过平滑和增强(通过低通滤波器和局部对比度压缩)。因此,只有低空间频率的移动轮廓会被提取和增强(特别是垂直于运动方向的轮廓)。

参数和设置摘要

[edit | edit source]

以下参数设置主要来自最初的 视网膜模型,该模型在 OpenCV 中开发。请注意,此处的参数与 [7] 中使用的设置有很大不同。但是,微调的参数设置会产生比论文中声称的更好的可视化效果。

IPL 和 OPL 处的视网膜小细胞通路参数

[edit | edit source]
参数 默认设置 生物“现实”设置 描述
颜色模式 颜色 颜色 指定是否将帧处理为彩色图像或灰度图像。
规范化输出 如果是,则 Parvo 输出的结果将在 0 到 255 之间进行重新缩放。
感光细胞局部适应灵敏度 () 0.75 0.89 感光细胞灵敏度范围为 0~1,如果值增加,则对数压缩效果更强。
感光细胞时间常数

()

0.9 0.9 用于裁剪高时间频率(噪声、快速运动等),单位为帧。虽然从逻辑上来说它应该是整数,但它也可以使用浮点设置。
感光细胞空间常数 () 0.53 0.53 用于裁剪高空间频率(噪声、粗轮廓等),单位为像素。虽然从逻辑上来说它应该是整数,但它也可以使用浮点设置,因为默认值为 0.53。
水平细胞增益 () 0.01 0.3 水平细胞网络的增益,如果为 0,则输出的平均值为零,如果该值接近 1,则亮度不会被过滤。
水平细胞时间常数

()

0.5 0.5 用于裁剪低时间频率(局部亮度变化),单位为帧。它还可以接收浮点数设置。
水平细胞空间常数 () 7 7 用于裁剪低空间频率(局部亮度),单位为像素。该值也用于在计算神经节细胞级别的局部对比度适应时计算局部对比度。
神经节细胞灵敏度 () 0.75 0.89 神经节细胞局部适应输出的压缩强度,最佳结果的范围为 0.6 到 1,更高的值会增加更多低值灵敏度,并且输出会更快饱和。

IPL 处的视网膜大细胞通路参数

[edit | edit source]
参数 默认设置 生物“现实”设置 描述
规范化输出 如果是,则 Magno 输出的结果将在 0 到 255 之间进行重新缩放(推荐),如果你选择否,你可能什么也看不见。
局部对比度的低通滤波器增益

IPL 级别的适应 (parasolCells_beta)

()

0 0 对于神经节细胞局部适应,通常为 0。
用于

IPL 级别的局部对比度适应的低通滤波器时间常数 (parasolCells_tau)()

0 0 对于神经节细胞局部适应,单位为帧,通常响应为 0(即时响应)。
用于

局部对比度适应在 IPL 水平(parasolCells_k)()

7 7 对于神经节细胞的局部适应,单位为像素。
无长突细胞的时间截止频率() 2 2 大细胞通路一阶高通滤波器的时常数,单位为帧。
V0 压缩参数() 0.95 0.95 神经节细胞局部适应的压缩强度,最佳结果的范围为 0.6 到 1,较高的值会增加更多低值敏感度,并且输出更快地饱和。
局部适应积分的时间常数() 0 0 用于局部适应计算的局部“运动平均值”局部计算中涉及的低通滤波器的时常数。
局部适应积分的空间常数() 7 7 用于局部适应计算的局部“运动平均值”局部计算中涉及的低通滤波器的空间常数。

查看器编写方式

[编辑 | 编辑源代码]

中央模拟组件是视网膜模拟查看器。此查看器采用直接方法编写,其中我们编写了一个静态 GUI 界面,并在参数或帧发生更改时强制更新整个窗口。

GUI 完全使用pyqtgraphpyqt编写,如果您熟悉Qt 框架,您实际上可以设计您想要的 GUI,然后将其导出到 XML 标注描述文件,然后您也可以使用pyqt将描述转换为 Python 类。在这里,我们手写了整个 GUI,因此,如果您查看代码,您会发现大部分代码都在配置图形模块。

代码中最重要的部分是脚本中的更新函数,更新函数与 GUI 窗口挂钩,并在需要时强制其更新。在每一步中,更新函数都会根据配置检查配置是否通过比较来自前一步的配置字典而更改,然后决定程序是否重新初始化数据源和视网膜模型。更新函数始终会生成一个符合当前配置的帧。然后,此帧由给定的视网膜模型处理并显示。

参考文献

[编辑 | 编辑源代码]
  1. Helga Kolb. 视网膜的工作原理。美国科学家,91(1):28{35, 2003
  2. D.M. Dacey,视觉系统中的高级处理,在:Ciba 基金会研讨会,第 184 卷,Wiley,奇切斯特,1994 年,第 12-34 页。
  3. a b Wandell,Brian A;视觉基础。1995 年。
  4. Pasternak,Tatiana,和 William H. Merigan。“猴子颞上沟损伤后的运动感知。” 大脑皮层 4.3 (1994): 247-259。
  5. Yoonessi,Ali,和 Ahmad Yoonessi。“大细胞、小细胞和 K 细胞通路的​​功能评估;当前状态和未来的临床应用。”眼科与视觉研究杂志 6,第 2 期(2011 年):119-126。哈佛
  6. Dagnelie,G.(2012 年)。视网膜植入:多学科领域的出现。神经病学现状,25(1), 67-75。
  7. a b A. Benoit,A. Caplier,B. Durette,J. Herault,使用人类视觉系统建模进行生物启发的低级图像处理,计算机视觉与图像理解,第 114 卷,第 7 期,2010 年 7 月,第 758-773 页,ISSN 1077-3142,http://dx.doi.org/10.1016/j.cviu.2010.01.011。
华夏公益教科书