【问题标题】:How can I save multiple jpegs from raster data in R?如何从 R 中的栅格数据中保存多个 jpeg?
【发布时间】:2014-08-29 20:30:08
【问题描述】:

我在一个文件夹中有大约 40 个 .tiff 格式的空间栅格。我正在尝试从 R 中的每个栅格生成直方图,并将每个直方图作为 jpeg 保存在单独的文件夹中。我编写了代码来遍历每个光栅,创建一个直方图并使用“jpeg”包保存它。

setwd("G:/Research/MODIS Albedo Oct 08-July 09/Test") 
library(raster)
library(jpeg)
files <- list.files(path="G:/Research/MODIS Albedo Oct 08-July 09/Test", pattern=".tif",all.files=T, full.names=F, no.. = T) #generate a list of rasters in the folder
number<-length(files) #count the number of rasters
for(r in 1:number) #loop over each raster in the folder
{
  x<-raster(files[r], header=F) #load one raster file
  jpeg("G:/Research/MODIS Albedo Oct 08-July 09/test_histplots/r.jpg") #create jpeg using the name 'r' generated by loop 
  hist(x) #generate histogram
  dev.off()  
}

我希望每个生成的 jpeg 都具有不同的名称,最好是原始光栅名称的子集。例如,如果栅格的原始名称为“MODIS101_265”,则 jpeg 的名称应为 265。这里,265 是年份中的儒略日期。我假设这可能涉及在 C 中使用像 %d 这样的格式说明符,但我不确定这在 R 中是如何工作的。

当我运行上面的代码时,我只得到一个直方图。似乎代码正确地循环了原始栅格,但将所有生成的直方图保存到单个 jpeg。

任何建议都会有所帮助!谢谢!

【问题讨论】:

  • jpeg 调用中生成文件名时使用sprintfpaste。即jpeg(sprintf("G:/Research/MODIS Albedo Oct 08-July 09/test_histplots/r%04d.jpg", r))

标签: r image-processing raster r-raster satellite-image


【解决方案1】:

使用gsub 的正则表达式是您从名称中取出数字的好朋友。假设您的所有文件都按照您的示例命名(“MODIS101_265.tif”),那么下面的代码将为您工作。

另外,欢迎使用 R,其中 for 循环很慢,通常可以用更快的 lapply 代替。

saveMyHist <- function(fileName) {
  fileNum <- as.numeric(gsub(".*_(\\d+)\\.tif", "\\1", fileName))
  x <- raster(fileName, header=F)
  jpeg(sprintf("G:/Research/MODIS Albedo Oct 08-July 09/test_histplots/%03d.jpg", 
    fileNum))
  hist(x)
  dev.off()
}

files <- list.files("/Users/home/Documents/Development/Rtesting", 
  pattern=".tif",all.files=T, full.names=F, no.. = T)
lapply(files, saveMyHist)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2019-06-28
    • 2013-03-30
    • 1970-01-01
    相关资源
    最近更新 更多