使用r-raster矢量化栅格砖对象,以便我可以计算它们

时间:2015-10-07 20:18:43

标签: r r-raster

我有一个红色和蓝色边框圆柱的图像,如下所示:

graph image

其中列交替显示红色和蓝色(在此示例中,第一列为红色)

我已经能够创建一个光栅砖并在RGB图层中绘制图像,但我想将这些列计算为这样的矢量(从上面的例子)。值1(红色)和2(蓝色)

1,1,1,1,2,2,2,1,1,2,1,1,1 ...

是否有可能清除我不需要计算的砖块区域,并将砖块折叠成我可以转换成我想要的数字或标签的值?还是有一种更简单的方法,我无法找到?从长远来看,我希望能够将程序指向多个图像,而无需自己打开它们。

编辑:为了清除某些事情,我想从上到下,从左到右计算圆圈。例如,一旦计算了第一个col,我想重新开始在右边的下一列的顶部。此外,我不确定我是否朝着正确的方向前进,但我能够从图像中删除所有背景细胞。给我留下一个只有圆圈值的情节。

编辑2:

我上面图片的当前代码。

color.image <- brick("image")
color.image = dropLayer(color.image,4) #gets rid of a channel
plot(color.image)

e <- extent(-10, 240, 45, 84.8) #xmin,xmax, ymin,ymax
ccolor.image <- crop(color.image, e)

plot(ccolor.image)
#thresholding to simplify what I was dealing with
mini=ccolor.image[ccolor.image > 97] = NA
mini=ccolor.image[ccolor.image < 15] = NA
mini=ccolor.image[ccolor.image > 20] = 80
plot(ccolor.image)

mcolor = as.matrix(ccolor.image)
colSums(ccolor.image)
rowSums(ccolor.image)

编辑3:

我明白了!或者至少找到了一个关于这样做的方法,一旦我清理了一些就会发布代码。然而,我仍然希望输入基于我的简化栅格砖矩阵的值矩阵来创建矢量。代码即将推出!

1 个答案:

答案 0 :(得分:0)

计算栅格中值的最快方法是freq(x, merge=T)。这将为您提供一列中的值以及与行数一样多的列中的频率。通过这种方式,我们需要轮询感兴趣的值并汇总所有其他列(计数)。希望有所帮助!

freq_vals <- freq ( rasterbrick , merge = T )
sum( freq_vals [ which ( freq_vals$value == 1 ) , 2 : ncol ( freq_vals ) ] )