我有一个红色和蓝色边框圆柱的图像,如下所示:
其中列交替显示红色和蓝色(在此示例中,第一列为红色)
我已经能够创建一个光栅砖并在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:
我明白了!或者至少找到了一个关于这样做的方法,一旦我清理了一些就会发布代码。然而,我仍然希望输入基于我的简化栅格砖矩阵的值矩阵来创建矢量。代码即将推出!
答案 0 :(得分:0)
计算栅格中值的最快方法是freq(x, merge=T)
。这将为您提供一列中的值以及与行数一样多的列中的频率。通过这种方式,我们需要轮询感兴趣的值并汇总所有其他列(计数)。希望有所帮助!
freq_vals <- freq ( rasterbrick , merge = T )
sum( freq_vals [ which ( freq_vals$value == 1 ) , 2 : ncol ( freq_vals ) ] )