Momocs是一个使用R进行表型变化的软件包,旨在从形状中提取定量变量。下面就来看看Momocs是如何操作的:
首先,把要处理的图片准备好
将图像颜色降为8位
然后调整threshold
拖动使得红色与要测量的形状符合
形状提取好了
加入Erode
加Dilate
加入Gaussian Blur
设定sigma值
转换好了
#保存为JPG格式
#再保存为text image格式
install.packages("devtools")
library(devtools)
devtools::install_github("MomX/Momocs")
library(Momocs)
#获取文件列表
lf <- list.files(full.names=TRUE, pattern = "jpg")
#读取jpg文件
coo <- import_jpg(lf)
#编辑标签
#导入标签
label<-read.table("label.txt",head=T)
#把图像与标签合并
cooo<-Out(coo, fac = label, ldk = list())
#只画第一张图
coo[1] %>% paper %>% draw_outline
#画所有的图
coo %>% paper %>% draw_curve
#改为透明背景
coo %>% paper_chess %>% draw_outline -> x
x
#载入不同背景
apropos("paper")
#加颜色
paper(cooo) %>%draw_outlines(factor(rep(1:2, 1)), bor=col_qual) %>%
draw_centroid(~type, pch=c(1, 3))
#画出单个形状
shp <- coo[1]coo_plot(shp)
#填充颜色
#描点
#平滑
#坐标轴转换
coo_center %>% coo_scale %>%
coo_alignxax() %>% coo_slidedirection("up") %T>%
print() %>% stack()
#添加颜色
draw_outline(~type, bor=col_qual) %>%
draw_axes %>% draw_centroid %>% draw_firstpoint
#填充颜色
cooo
panel(cooo, fac="type", names=TRUE)
#椭圆分析
#托勒密分析
#直方图
bot.f
hist(bot.f, drop=0)
#箱线图
#主成分分析
class(bot.p) # a PCA object, let's plot it
plot(bot.p)
#填充颜色
#主成分分析
plot(bot.p)
plot(bot.p, 1, chull=TRUE, pos.shp = "full_axes", abbreviate.labelsgroups = TRUE, points=FALSE, labelspoints = TRUE)
#主成分分析比重
scree_plot(bot.p)
boxplot(bot.p, 1)
PCcontrib(bot.p)
下面,开始一个项目的分析
#清空R中数据
rm(list = ls())
#加载包
require(Momocs)
#规定轮廓的配位数,拟南芥一般为400-1000
pnt_num <- 500
#导入信息表格,信息表格如下
files <- read.csv("er_BinaryImageFileList.csv")
#读取轮廓信息,点为255,空白为0
dataNames.txt <- files$txt.files
#导入黑白图像
dataNames.jpg <- files$jpg.files
#得到图片数字
fn <- dim(files)[1]
#创建新的空白项目
dataAll <- list(0)
#导入图片
for (i in 1:fn) {in_f <- as.character(dataNames.txt[i]) #文件名
dat.imgj <- read.delim(in_f) # 用imageJ生成的txt
dat.imgj <- which(dat.imgj < 127, arr.ind = T) #从txt中得到轮廓坐标
image.ori <- import_jpg1(as.character(dataNames.jpg[i])) #导入图片
cimage <- Out(image.ori) #转换为Coo项目
files $Area.pixels[i] <- coo_area(cimage) #计算面积,填充到$Area.pixels
image1 <- coo_sample(cimage[1], pnt_num) #重新定义轮廓点
image1 <- as.data.frame(image1)
pet.pos <- min(image1[,2]) #得到叶柄切线坐标
image.coo <- image1[image1$V2 > pet.pos + 1, ] #删除叶柄切线处的点
#开始对称转化
lm2 <- lm(dat.imgj[,1] ~ 1 + dat.imgj[,2] + I(dat.imgj[,2]^2)) #将转角折线转化为中心曲线
k1 <- as.numeric(lm2$coefficients[1])
k2 <- as.numeric(lm2$coefficients[2])
k3 <- as.numeric(lm2$coefficients[3])
dat.corr.x <- image.coo[,2] - min(image.coo[,2]) #叶片纵轴的值
dat.corr.y <- k1 + k2 * image.coo[,2] + k3 * image.coo[,2]^2 - image.coo[,1] #转化为对称的形状
datXY <- as.data.frame(cbind(dat.corr.x, dat.corr.y))
dataAll[[i]] <- datXY
}
#开始画图
plot(x = dataAll[[1]][,1], y = abs(dataAll[[1]][,2]), type="l")
for (i in 2:fn) {
points(x = dataAll[[i]][,1], y = abs(dataAll[[i]][,2]), col="gray", type="l")
}
size <- sqrt(files $Area.pixels)
dataAllCorr <- list(0)
for (i in 1:fn) {
dataAllCorr[[i]] <- dataAll[[i]]/size[i]
}
#画为对称和统一大小的结果
for (i in 2:fn) {
points(x = dataAllCorr[[i]][,1], y = abs(dataAllCorr[[i]][,2]), col="gray", type="l")
}
#将轮廓分为上层与下层
for (i in 1:fn) {
j <- 2*i - 1
k <- 2*i
erUD[[j]] <- dataAllCorr[[i]][dataAllCorr[[i]]$dat.corr.y > 0,]
erUD[[k]] <- dataAllCorr[[i]][dataAllCorr[[i]]$dat.corr.y < 0,]
}
plot(x = erUD[[1]]$ dat.corr.x, y = abs(erUD[[1]]$ dat.corr.y), col="blue", type= "l", xlim = c(0, 1.4), main="Corrected by Leaf Area (er 001-014)")
for (i in 1:length(erUD) ) {
points(x = erUD[[i]]$ dat.corr.x, y = abs(erUD[[i]]$ dat.corr.y), col="blue", type= "l")
}
一步代码:
require(Momocs)
pnt_num <- 500
files <- read.csv("er_BinaryImageFileList.csv")
dataNames.txt <- files$txt.files
dataNames.jpg <- files$jpg.files
fn <- dim(files)[1]
dataAll <- list(0)
for (i in 1:fn) {
in_f <- as.character(dataNames.txt[i])
dat.imgj <- read.delim(in_f)
dat.imgj <- which(dat.imgj < 127, arr.ind = T)
image.ori <- import_jpg1(as.character(dataNames.jpg[i]))
cimage <- Out(image.ori)
files $Area.pixels[i] <- coo_area(cimage)
image1 <- coo_sample(cimage[1], pnt_num)
image1 <- as.data.frame(image1)
pet.pos <- min(image1[,2])
image.coo <- image1[image1$V2 > pet.pos + 1, ]
lm2 <- lm(dat.imgj[,1] ~ 1 + dat.imgj[,2] + I(dat.imgj[,2]^2))
k1 <- as.numeric(lm2$coefficients[1])
k2 <- as.numeric(lm2$coefficients[2])
k3 <- as.numeric(lm2$coefficients[3])
dat.corr.x <- image.coo[,2] - min(image.coo[,2])
dat.corr.y <- k1 + k2 * image.coo[,2] + k3 * image.coo[,2]^2 - image.coo[,1]
datXY <- as.data.frame(cbind(dat.corr.x, dat.corr.y))
dataAll[[i]] <- datXY
}
names(dataAll) <- dataNames.txt
plot(x = dataAll[[1]][,1], y = abs(dataAll[[1]][,2]), type="l")
for (i in 2:fn) {
points(x = dataAll[[i]][,1], y = abs(dataAll[[i]][,2]), col="gray", type="l")
}
size <- sqrt(files $Area.pixels)
dataAllCorr <- list(0)
for (i in 1:fn) {
dataAllCorr[[i]] <- dataAll[[i]]/size[i]
}
plot(x = dataAllCorr[[1]][,1], y = abs(dataAllCorr[[1]][,2]), xlim= c(0, 1.4), type="l")
for (i in 2:fn) {
points(x = dataAllCorr[[i]][,1], y = abs(dataAllCorr[[i]][,2]), col="gray", type="l")
}
erUD <- list(0)
for (i in 1:fn) {
j <- 2*i - 1
k <- 2*i
erUD[[j]] <- dataAllCorr[[i]][dataAllCorr[[i]]$dat.corr.y > 0,]
erUD[[k]] <- dataAllCorr[[i]][dataAllCorr[[i]]$dat.corr.y < 0,]
}
plot(x = erUD[[1]]$ dat.corr.x, y = abs(erUD[[1]]$ dat.corr.y), col="blue", type= "l", xlim = c(0, 1.4), main="Corrected by Leaf Area (er 001-014)")
for (i in 1:length(erUD) ) {
points(x = erUD[[i]]$ dat.corr.x, y = abs(erUD[[i]]$ dat.corr.y), col="blue", type= "l")
}
想知道转录组测得怎么样?快来RSeQC一下
用guidance检测序列比对准确率
生物软件,会用这个就够了!
快速检索英文文献?Web of knowledge了解一下
用Evolview美化系统发育树,简单又高级
使用Imaris对激光共聚焦照片进行体积测量及共定位分析
页面更新:2024-05-11
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号