R光栅识别黑色光栅图像

R raster recognizing black color raster image

下面的代码在我的图像上生成了两个框。我打算进一步分析这些框中的像素。

我想设置一个条件,如果沿着框的边缘有黑色(或类似颜色,例如灰色)像素,则不要继续。我如何指定这样的条件?

在下面的示例中,对于红色方块,我不想继续操作,因为它的右上角有黑色像素。虽然我想继续处理绿色方块,因为它的边缘没有黑色像素。

library(raster)
r1 <- brick(system.file("external/rlogo.grd", package="raster"))
x <- crop(r1, extent(0,50,0,50))
plotRGB(x)
plot(extent(c(0,20,0,20)), lwd=2, col="red", add=TRUE)
plot(extent(c(21,35,0,10)), lwd=2, col="Green", add=TRUE)

这不是很好定义,因为在这种情况下颜色是由 RGB 值组成的。但这是您可以采用的通用解决方案。我 'flatten' 通过取平均值将它们添加到单个通道,然后在边界处测试低于阈值的最小值(RGB 中的白色为 255、255、255,黑色为 0,0,0)

proceed <- function(f, e, threshold) {
    lns <- as(as(e, 'SpatialPolygons'), 'SpatialLines')
    v <- unlist(extract(f, lns))
    ifelse( min(v, na.rm=TRUE) < threshold, FALSE, TRUE)
}

# flat <- mean(x) # not sophisticated see
# 
flat <- sum(x * c(0.2989, 0.5870, 0.1140))
proceed(flat, extent(c(0,20,0,20)), 100)
proceed(flat, extent(c(21,35,0,10)), 100)

(看到 jbaums 的解决方案后有了很大改进;现在已经消失了)