专栏首页生信菜鸟团R tips:EBImage用于定量分析细胞荧光图

R tips:EBImage用于定量分析细胞荧光图

EBImage是一个用于图形处理的R包,简洁优雅功能强大,可以完成很多计算机图形处理算法。

本文使用EBImage完成对一组细胞荧光图的定量分析,数据使用EBImage内置的测试图片。

EBImage的图像对象

先看一下EBImage中对图形的定义,EBImage使用readImage函数读入R,读进来的对象是EBImage包定义的Image对象。

nuc = readImage(system.file('images', 'nuclei.tif', package='EBImage'))
cel = readImage(system.file('images', 'cells.tif', package='EBImage'))

其实这个Image对象就是基于一个多维数组,所以它也可以使用很多数组的函数。它的前两维度固定是图形的宽与高,后面的维度是图层:或者是R、G、B通道的颜色图层,或者是叠加的其他图片(如果是叠加彩色图,那么第三维是通道,第四维是叠加)。

这两种图层的区别在于是否会渲染为一张图片,比如说一张彩色图片是有三个颜色通道的,所以一张彩色图片的维度就是(X,Y,3),渲染是一张图片。如果是三个灰度图叠加在一起,那么其维度也是(X,Y,3),但是渲染的时候,它是三张图片。

在Image中是通过frames.render这个参数来区别的,有几张图片就有多少render图层,所以一张彩色图片的frames.render是1,但是三个灰度图叠加的frames.render是3。

nuc
#Image 
#  colorMode    : Grayscale 
#  storage.mode : double 
#  dim          : 510 510 4 
#  frames.total : 4 
#  frames.render: 4 
#
#imageData(object)[1:5,1:6,1]
#           [,1]       [,2]       [,3]       [,4]       [,5]       [,6]
#[1,] 0.06274510 0.07450980 0.07058824 0.08235294 0.10588235 0.09803922
#[2,] 0.06274510 0.05882353 0.07843137 0.09019608 0.09019608 0.10588235
#[3,] 0.06666667 0.06666667 0.08235294 0.07843137 0.09411765 0.09411765
#[4,] 0.06666667 0.06666667 0.07058824 0.08627451 0.08627451 0.09803922
#[5,] 0.05882353 0.06666667 0.07058824 0.08235294 0.09411765 0.10588235

dim(nuc)
#[1] 510 510   4

通过一个例子来看一下:

red <- blue <- green <- matrix(0, nrow = 3, ncol = 3)
red[, 1] <- 1
blue[, 2] <- 1
green[, 3] <- 1

# 一张彩图
p_col <- rgbImage(red = red, blue = blue, green = green)
# 三个单一图形
p_combn <- combine(as.Image(red), as.Image(blue), as.Image(green))

display(p_col, method = "raster", all = TRUE)
display(p_combn, method = "raster", interpolate = FALSE, all = TRUE)

彩色图只渲染一张图,但是三个组合在一起的图层是渲染了三个灰度图,如下图所示。

在R中,颜色使用0-1的数值范围,另外matrix在转换为Image对象时,行数会转换为宽度,列数为转换为高度。 图2中为了区分三个图的边界,人工添加了两条边界线。

细胞segment

先将测试图片合并成一张图形:细胞核和细胞质的扫描图合并成一张彩色图。

从刚才nuc的输出信息可以知道,它是由四个图层组成,这里合并成彩色图时也是四张。

cells <- rgbImage(green=1.5*cel, blue=nuc) # cel是胞质, 乘以1.5代表提高了一下对比度
display(cells, method = "raster", all = TRUE)

Thresholding阈值化

在做图形处理的时候,一般都是现将图片转换成灰度图进行处理,再进行阈值化。

上面的显微镜扫描的原始图其实已经是灰度图了,需要再进行阈值化。

可以有两个策略:一个是直接寻找一个阈值,原图减去即可。另一个是本地化策略,比较前景和背景的差异决定其阈值化的策略。

原图减去阈值

# 只以第一个图层为例
nuc %>% getFrame(1) %>% EBImage::otsu()
#[1] 0.3535156

# 减去阈值
# combine函数可以将读个图层合并成一个Image对象
combine(nuc %>% getFrame(1) %>% {. > 0.35},
       nuc %>% getFrame(1)
      ) %>%
display("raster", all = TRUE)

本地化阈值

为了获取一个图片的各个位置的背景表达,其实是通过一个滤镜实现的,然后再定义一个cutoff值代表超过背景值多少既可以认为有表达。

由于这个过程非常常用,所以EBImage封装了一个函数来执行这个过程:thresh函数。

一般做完阈值后,还会处理一下噪点或者断连的地方,再将闭合空腔填充完整。如下,opening用于去除噪点,fillHull用于填充闭合空腔。如果有断连的地方,可以使用closing函数处理一下。

细胞核分割

有两个函数可以用来做分割,一个是bwlabel,另一个是watershed。

如果细胞都是各自游离的位置,那么bwlabel函数就可以很好的分开。一旦有细胞核黏连,那么watershed进行切割会更加理想。

下面以watershed为例进行:

# 阈值化
nuc_th <- nuc %>% thresh(w=10, h=10, offset=0.05) %>% opening(kern = makeBrush(5, shape = "diamond")) %>% fillHull()

# 区分
nmask <- watershed( distmap(nuc_th), 2 )

有两种展示方式:

display(colorLabels(nmask))
display(paintObjects(nmask, cells, col="red"))

泰森多边形分割单细胞

可以使用propagate来对胞质进行单细胞分割,从细胞核位置到细胞质位置进行分析,屏蔽掉非细胞的空腔位置。

ctmask <- opening(cel>0.1, makeBrush(5, shape='disc')) #阈值化
cmask  <- propagate(cel, seeds=nmask, mask=ctmask) #单细胞分割

查看一下分割的效果:

# segment visualization
segmented <- paintObjects(cmask, cells, col='#ff00ff')
segmented <- paintObjects(nmask, segmented, col='#ffff00')

定量

computeFeature函数用于计算单细胞的各项指标:

# 根据cmask计算表达量
computeFeatures.basic(
    x = cmask %>% getFrame(1), 
    ref = cel %>% getFrame(1)
) %>% head

#       b.mean       b.sd      b.mad     b.q001     b.q005      b.q05     b.q095     b.q099
#1  0.15659996 0.03345964 0.04360588 0.10196078 0.10588235 0.15686275 0.20529412 0.22380392
#2  0.27868010 0.07614482 0.05232706 0.10588235 0.12784314 0.30980392 0.36470588 0.38541176
#3  0.19299299 0.07739029 0.07558353 0.10196078 0.10588235 0.16470588 0.33098039 0.34901961
#4  0.12109329 0.01324227 0.01162824 0.09137255 0.10196078 0.12156863 0.14117647 0.15294118
#5  0.05376344 0.01155338 0.01744235 0.03529412 0.03529412 0.05490196 0.07058824 0.07058824
#6  0.17997949 0.04603025 0.05814118 0.10196078 0.11372549 0.17647059 0.25490196 0.27450980
#...

# 计算细胞形态
computeFeatures.shape(cmask %>% getFrame(1)) %>% head

#   s.area s.perimeter s.radius.mean s.radius.sd s.radius.min s.radius.max
#1     194          67      9.030723   4.0627810     2.269099    16.275598
#2     473          88     12.583776   3.0285855     8.505285    18.975435
#3     333          91     12.143212   4.9556619     2.991797    21.763092
#4     231          61      8.389792   1.9535046     4.813758    12.861499
#5      31          16      2.681693   0.4283942     2.000000     3.162278
#6    1587         158     22.357467   3.2960345    15.564528    28.457854
#...

# 计算细胞位置信息
computeFeatures.moment(cmask %>% getFrame(1)) %>% head

#         m.cx       m.cy m.majoraxis m.eccentricity     m.theta
#1  124.139175   4.288660   31.563604      0.9523654  0.15538879
#2  202.209302  10.723044   31.644121      0.6983248  0.88456709
#3  224.177177   7.300300   38.638433      0.9238340 -0.41367500
#4  503.536797   8.627706   21.587927      0.7170447  0.94331665
#5  490.000000   8.000000    7.326488      0.6933752  1.57079633
#6   21.199118  23.676749   52.513408      0.6364721  1.37670424
#...

文末友情推荐

做教学我们是认真的,如果你对我们的马拉松授课(直播一个月互动教学)有疑问,可以看完我们从2000多个提问互动交流里面精选的200个问答! 2021第二期_生信入门班_微信群答疑整理,以及 2021第二期_数据挖掘班_微信群答疑笔记

本文分享自微信公众号 - 生信菜鸟团(bio_123456789),作者:冰糖

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-09-07

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 免疫荧光分析误区,别踩雷了!

    最近,陆陆续续有多个粉丝朋友在后台咨询关于“免疫荧光”的问题,基本都是在问免疫荧光分析的问题。

    Mark Chen
  • 学界 | 谷歌《Cell》论文:使用深度学习,直接对细胞影像生成荧光标记

    选自Google Research 机器之心编译 很多常用的细胞标记方法有明显的缺点,包括不一致性、空间重叠、物理干预等。近日,谷歌利用深度学习方法即「in s...

    机器之心
  • 学界 | 谷歌《Cell》论文:光学显微镜+深度学习=荧光显微镜

    谷歌在透射光显微镜和荧光显微镜这两种显微镜技术上获得灵感,在《Cell》上发表了利用深度学习来对显微镜细胞图像进行分色荧光标记的论文。 AI 科技评论按:在生物...

    AI科技评论
  • 【技术】谷歌利用深度学习结合荧光标记,准确预估显微图像

    AiTechYun 编辑:chux ? 在生物学和医学领域,显微技术为研究人员提供人肉眼无法观察到的细胞和分子的细节。透射光显微镜能够将生物样本照亮的同时进行成...

    AiTechYun
  • R语言实现流式细胞数据分析

    流式细胞术通过光学检测系统快速检测多参数的细胞流。许多因素使得流式细胞术能够成功和广泛的应用,比如检测速度(能够允许大量的细胞被检测),高度的准确性和分辨率,低...

    一粒沙
  • 单细胞实验也了解一下?让细胞计数更加准确的7个步骤

    单细胞数据处理教程我们已经分享了太多太多,而且也出了专辑介绍单细胞的各个技术原理,但是基本上没有涉及到实验操作本身。首先是因为我们都是生信工程师,不太有机会接触...

    生信技能树jimmy
  • 【原理篇】免疫荧光染色的平均荧光强度

    一般来讲,荧光标记染色的目的有3个:①多种蛋白标记后,分析蛋白在空间上的分布特征;②免疫荧光标记后进行蛋白半定量分析,分析蛋白半定量表达量;③标记细胞核,以便分...

    Mark Chen
  • 和免疫荧光标记说拜拜 | 谷歌Cell论文:深度学习模型预测荧光位置

    常用的相差显微镜观察法,是从生物组织的一侧给光,对细胞损伤小,且材料准备过程非常简单。

    量子位
  • 【操作篇】荧光共定位的定量分析!

    荧光共定位是很常见的实验方法,一般用来验证2种或3种蛋白是否存在共定位关系。在常规Protocol的指导下进行实验操作,很容易得到双荧光或多重荧光染色图像。

    Mark Chen
  • 【重要补充】荧光共定位定量分析之AOI圈选

    前面写过4期荧光共定位定量分析的文章,有一些小伙伴整理数据时正好用上了。非常开心能够帮到你们。(没有看过的可点击下方链接回顾)

    Mark Chen
  • 【附加篇】免疫荧光相关的注意事项

    免疫荧光实验原理很简单,其实就是使用荧光二抗,并在荧光显微镜下采集图像,其它的和IHC或ICC区别不大。

    Mark Chen
  • 【Image J】图像的背景校正

    答:无论是明场还是荧光场的图像,都可能出现一定程度的光照不均匀。这种不均匀不仅影响图像的美观,而且也会影响对该图像的测量分析(尤其是荧光图像)。如下:

    Mark Chen
  • 热点综述 | Nature Methods:利用空间组学和多路成像技术探索癌症生物学

    了解肿瘤异质性——肿瘤内细胞间的分子变异——有望解决癌症生物学中的突出问题,并改善特定癌症亚型的诊断和治疗。近日,来自澳大利亚的科研团队在《Nature Met...

    尐尐呅
  • mRNA的胞内研究技术路线

    RNA也分为很多种了,像miRNA、mRNA、lncRNA、circRNA等,前面也有蛮多的文章介绍过了,咱们今天主要介绍mRNA的研究路线。

    微点
  • 一篇9分的miRNA文章了解一下!

    大约70%的多囊卵巢综合征 (PCOS) 妇女存在与体质量相关的高于或超过体质量的内在胰岛素抵抗 (IR),包括脂肪组织 (AT) 的糖代谢功能失调。在AT中,...

    DoubleHelix
  • Science: 小鼠肾脏单细胞转录组+突变分析揭示肾病潜在的细胞靶标

    昨天Science文章背靠背揭示癌症中细胞感应氧气的新机制一文从表观水平分析了细胞中组蛋白修饰如何感知环境变化而发生不同的调控机制。

    生信宝典
  • 【Nature Methods】 2016 最值得关注的 8 大技术

    《Nature Methods》是Nature旗下最重要子刊之一,也是方法论领域的权威刊物,其影响因子自从2004年创刊开始就一路飙升,在2014年已经达到32...

    新智元
  • AI识别细胞3D结构?人工智能做到了人类不可能做到的事情

    位于华盛顿州西雅图的艾伦细胞科学研究所的定量细胞生物学家和副主任Susanne Rafelski 说「我们希望能够在活体成像中标记细胞的多种不同结构」。

    新智元
  • Nat. Chem. | 通过深度学习设计靶向核的非生物微蛋白

    今天带来的是Carly K. Schissel发表在nature chemistry上的Deep learning to design nuclear-targ...

    DrugAI

扫码关注云+社区

领取腾讯云代金券