我想用488个光栅文件计算GLCM。由于计算时间很长,我想使用我的多核处理器(AMD Phenom 6核)的所有功能。
library("glcm")
library(raster)
library(devtools)
install_github('azvoleff/glcm')
setwd(working dir.)
rasters <- list.files()[grep("()\\w*.tif", list.files())]
statistics <- c("mean", "variance", "homogeneity", "contrast", "dissimilarity", "entropy","second_moment", "correlation")
shift1 <- c(0,0,1,1)
shift2 <- c(0,1,0,1)
for (j in 1:length(rasters)){
raster1 <- raster(rasters[j])
for (i in 1:length(statistics)){
for (k in 1:length(shift1)){
GLCM <- glcm(raster1, window=c(11,11), statistics=statistics[i], shift = c(shift1[k],shift2[k]), na_opt="ignore")
file <- paste("./GLCM/", substr(tiles[j],0,nchar(tiles[j])-4),"_", statistics[i], "_shift_",shift1[k], shift2[k] , ".tif", sep="")
writeRaster(GLCM, filename = file, type = "GTIFF")
}
}
gc()
}
我在互联网上搜索R中的多核解决方案,但是找不到哪一个是最新的。所以我希望有人能帮我。
发布于 2014-05-06 17:49:44
glcm
不是并行运行的,但考虑到您正在处理488个光栅,我不会担心并行处理该算法本身--并行处理栅格(比如在一台普通的膝上型计算机上一次处理两个光栅,如果有更多的处理pwer和RAM的话)是这里最简单的方法。glcm
版本> 1.4将自动在大型图像上逐块运行(并将考虑边缘效应),因此内存不应成为问题。
下面这样的内容会让您开始(基于代码):
library(glcm)
library(raster)
library(foreach)
library(doparallel)
cl <- makeCluster()
registerDoParallel(cl)
setwd(working dir.)
rasters <- list.files()[grep("()\\w*.tif", list.files())]
statistics <- c("mean", "variance", "homogeneity", "contrast",
"dissimilarity", "entropy","second_moment",
"correlation")
shift1 <- c(0, 0, 1, 1)
shift2 <- c(0, 1, 0, 1)
foreach (j in 1:length(rasters), .packages=c('raster', 'glcm')) %dopar% {
raster1 <- raster(rasters[j])
for (i in 1:length(statistics)) {
for (k in 1:length(shift1)) {
GLCM <- glcm(raster1, window=c(11,11), statistics=statistics[i],
shift = c(shift1[k],shift2[k]), na_opt="ignore")
file <- paste("./GLCM/", substr(tiles[j], 0, nchar(tiles[j])-4),
"_", statistics[i], "_shift_",shift1[k], shift2[k],
".tif", sep="")
writeRaster(GLCM, filename = file, type = "GTIFF")
}
}
}
stopCluster(cl)
https://stackoverflow.com/questions/23274541
复制相似问题