一个哥们要批处理一些图片,可能也是帮别人弄的。有很多大量的细胞的照片JPG格式的,他已经知道了如何统计一张照片中细胞数量的近似方法。也就是在ArcMap中打开细胞的图片,一共有三个波段,从其中挑选出比较适合计算细胞数量的波段。下面四张图片是在ArcMap中打开细胞图片以及图片的三个波段的比较,可以看出波段1中细胞与细胞液之间区分的最清楚。波段1中术语细胞的白色像元值大于120,而怎么得到细胞个数了,就是用肉眼去数数,也不可能很精确,只能根据属于细胞的像元数除以1000,近似为细胞个数,当然以上两个阈值也可以更改。
刚开始准备在python下进行,调用ArcMap的一些处理函数来进行批处理这些细胞照片。活到了我的手中,想想自己在处理MODIS影像的时候用到得Sp以及rgdal程序包,以矩阵的方式读取遥感影像,然后对矩阵进行处理。如果用Python和ArcGIS两个来做批处理,还不如我用R来得快。PS:自己毕竟对R有些熟悉,而且用Python+ArcGIS有些大材小用。
先确定思路已经R给我们提供了那些功能。
1.所有要批处理的照片放在一个文件夹内,可以用R的list.files()函数获取所在目录下所有的文件名。文件名以数组的形式存储,处理的时候直接循环访问。
2.利用rgdal包提供的readGDAL()函数读取JPG图片,读取之后就是一个矩阵。如果照片大小是100*100,得到的矩阵就是100*100*3,因为JPG有三个“波段”。
3.直接对波段1所对应的矩阵进行处理,统计大于120的个数,然后处理1000,得到细胞数量。
4.批处理结果输出,用write.table()将结果输出为csv文件。
源代码
# setup the workspace
# the space you store the jpg files of Cells
setwd("E:/tupian")
# get the jpg filenames in the dir
jpgfile <- list.files(getwd())
counts <- rep(NA,length(jpgfile))
cells <- rep(NA,length(jpgfile))
# summary the count for all files
for (i in 1:length(jpgfile)){
# readGDAL read the jpg file to matirx, so JPG is a matrix.
JPG <- readGDAL(jpgfile[i])
# summary the counts.
num <- summary(JPG@data[[1]]>Value)[[3]]
counts[i] <- as.integer(num)
cells[i] <- count[i]/Reference
}
x <- data.frame(filename=I(jpgfile),count=counts,cell=cells)
# write the results to the Excel
write.table(x,file="E:\\output\\test.csv",append=TRUE,quote=FALSE,/
sep=",",row.names=FALSE,qmethod="double")






2009/12/28 21:26:36
楼主好强大!
2009/12/28 21:50:25
2010/01/02 15:12:29
你的站挺不错的!!