我的图像如下。它是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中完成?
先谢谢
答案 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])
}
}