R语言实现肿瘤细胞计数

2019-10-17 22:27:49 浏览数 (1)

今天给大家介绍一个病理图像中肿瘤细胞计数的图像处理包CRImage。此包对R语言的版本要求比较高,必须是不低于3.6版本的R语言才可以安装。安装需要的前期准备:

代码语言:javascript复制
install.packages("e1071")
install.packages("sgeostat")
install.packages("jpeg")
install.packages("png")
install.packages("locfit")
install.packages("fftwtools")
BiocManager::install("EBImage")
BiocManager::install("CRImage")

如果不把以上的包安装完整,那么就会报下面的错误:

接下来我们看下如何使用:

首先是数据的载入,我们这里用到的图像是此包自带的图像数据,需要用到函数readImage。

此函数支持jpeg, png, 以及tiff格式的图像数据。

看下实例:

代码语言:javascript复制
f = system.file("extdata","exImg2.jpg", package="CRImage")
img=readImage(f)

display(img)

然后图像各颜色空间(HSV,LAB)之间的转化,需要用到函数convertRGBToHSV,convertRGBToLAB,convertHSVToRGB,convertLABToRGB。通过函数名称我们可以直接看出对应的功能。那我们看下他们之间的区别:

代码语言:javascript复制
imgHSV=convertRGBToHSV(img)
代码语言:javascript复制
imgLAB=convertRGBToLAB(img)

接下来就是灰度图像的阈值设置,需要用到函数createBinaryImage对设置的阈值进行过滤,实例如下:

代码语言:javascript复制
imgG=EBImage::channel(img,"gray")
代码语言:javascript复制
whitePixelMask=img[,,1]>0.85 &img[,,2]>0.85 & img[,,3]>0.85
imgB=createBinaryImage(imgG,img,method="otsu",numWindows=4,whitePixelMask=whitePixelMask)

以上通过设置阈值会增大目标与噪音的色差。

接下来是图像的标记,需要用到函数segmentImage

代码语言:javascript复制
segmentationValues=segmentImage(f,maxShape=800,minShape=40,failureRegion=2000,threshold="otsu",numWindows=4)
image=segmentationValues[[1]]#原始图像
segmentedImage=segmentationValues[[2]]#标记好的图像
imageFeatures=segmentationValues[[3]]#图像获取的一些特征值

当然,如果直接对病理图像中细胞进行分类,不一定靠谱,此刻此包还引进机器学习的算法,首先是创建训练集数据,我们可以先人工获取标注的数据,然后构建分类器,这里用到的算法是支持向量机:

代码语言:javascript复制
f = system.file("extdata", "trainingData.txt",package="CRImage")
trainingData=read.table(f,header=TRUE)
代码语言:javascript复制
classifierValues=createClassifier(trainingData)
classifier=classifierValues[[1]]

接下来我们看下我们构建的分类器的效果:

代码语言:javascript复制
f = system.file("extdata","exImg2.jpg", package="CRImage")
classesValues=classifyCells(classifier,filename=f,KS=TRUE,maxShape=800,minShape=40,failureRegion=2000)

肿瘤细胞结构的标注:

代码语言:javascript复制
exImg=readImage(f)
cellularity=calculateCellularity(classifier=classifier,filename=f,KS=TRUE,maxShape=800,minShape=40,failureRegion=2000,classifyStructures=FALSE,cancerIdentifier="c",numDensityWindows=2,colors=c("green","red"))

上面的热图主要是指的图中肿瘤细胞的分布,颜色越深代表肿瘤细胞的数量在这个位置越多。

0 人点赞