今天给大家介绍一个病理图像中肿瘤细胞计数的图像处理包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"))
上面的热图主要是指的图中肿瘤细胞的分布,颜色越深代表肿瘤细胞的数量在这个位置越多。