如何将图像划分为8x8图像块并访问每个

时间:2018-02-24 21:39:21

标签: r bigdata

我的图像如下。它是256 * 256像素。我们假设它的左下角是0,0。从该图像,我想创建如下的多个图像,并将它们保存在工作文件夹中。每个图像的大小为8 * 8像素。每个图像将通过其左下角坐标保存。

示例光栅图像

library(raster)
dem <- raster(nrow=256, ncol=256, vals=1:(256*256))

我使用以下代码将图像分割成8 * 8块

agg      <- aggregate(raster(dem),fact=c(8,8))
agg_poly <- rasterToPolygons(agg)
r_list <- list()
for(i in 1:ncell(agg)){
    r_list[[i]] <- crop(dem, agg_poly[i,])
}

如果不使用光栅扫描库,如何在R中完成?

先谢谢

2 个答案:

答案 0 :(得分:1)

你可以沿着这些方向做点什么

d <- as.matrix(dem)
ii <- seq(1, nrow(dem), 8)
jj <- seq(1, ncol(dem), 8)
r <- list()
q <- 1
for (i in ii) {
    for (j in jj) {
        r[[q]] <- d[i:(i+7), j:(j+7)]
        q <- q + 1
    }
}

使用你可以做的光栅包(保留RasterLayer对象):

d <- dem
ii <- seq(1, nrow(dem), 8)
jj <- seq(1, ncol(dem), 8)
r <- list()
q <- 1
for (i in ii) {
    for (j in jj) {
        r[[q]] <- d[i:(i+7), j:(j+7), drop=FALSE]
        q <- q + 1
    }
}

答案 1 :(得分:0)

另一种方法

data = readImage("reSizedDogCatLatest.jpg")
grayimage<-channel(data,"gray")

CutBySize <- function(m, block.size, nb = ceiling(m / block.size)) {
  int <- m / nb
  upper <- round(1:nb * int)
  lower <- c(1, upper[-nb] + 1)
  size <- c(upper[1], diff(upper))
  df = data.frame()
  df = cbind(lower, upper, size)
  return(df)
}
mf = data.frame()
mf = CutBySize(nrow(grayimage), nb = 32)
numextract <- function(string){
  str_extract(string, "\\-*\\d+\\.*\\d*")
}
final = data.frame()
libraray(stringr)
for (i in 1:nrow(mf))
{
  lower = numextract(mf[i,][1])
  upper = numextract(mf[i,][2])
  for(j in 1:nrow(mf))
  {
    lowerj = numextract(mf[j,][1])
    upperj = numextract(mf[j,][2])
    final = rbind(final,grayimage[lower:upper, lowerj:upperj])
  }
}