我需要为每个矩阵返回一个矩阵集合和相关的x,y值(即图像的一部分,以及它在原始内的x / y位置)
我正在尝试这样的事情:
getPortions <- function(imgLocation, portionSize, stepSize) {
require(dplyr)
require(foreach)
require(ripa)
require(jpeg)
img <- readJPEG(imgLocation) %>% rgb2grey
prows <- seq(1, nrow(img) - portionSize, by = stepSize)
pcols <- seq(1, ncol(img) - portionSize, by = stepSize)
portions <- foreach(r = prows, .combine = rbind) %do% {
foreach(c = pcols, .combine = rbind) %do% {
portion <- img[r:(r + portionSize), c:(c + portionSizee)]
# this doesn't work correctly
as.data.frame(portion, r, c)
}
}
portions
}
...但这给我带来了巨大的数据框架。
理想情况下,我想要取回一个包含3列的数据框。第一列是该部分的向量/矩阵,另外两列将包含该部分的行和列位置。
当我在寻找解决方案时,我发现有一些hack允许多种返回类型,但这不是一个很好的解决方案。
编辑&gt; 显然这还不够清楚。如果这是另一种语言(例如C#),我将返回一种IEnumerable&gt;。我不知道如何在R中做到这一点。
Repro
# If necessary
install.packages(c('dplyr', 'foreach', 'doParallel', 'ripa', 'jpeg'))
library(dplyr)
library(foreach)
library(doParallel)
library(ripa)
library(jpeg)
# copy/paste function here
portions <- getPortions('path/to/image.jpg', 10, 5)
ncol(portions)
[1] 9409
返回的列数取决于图像和部分/步长,但无论哪种方式都超过3,我无法轻易地从数据框中提取矩阵和r / c值。