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 的解决方案后有了很大改进;现在已经消失了)
下面的代码在我的图像上生成了两个框。我打算进一步分析这些框中的像素。
我想设置一个条件,如果沿着框的边缘有黑色(或类似颜色,例如灰色)像素,则不要继续。我如何指定这样的条件?
在下面的示例中,对于红色方块,我不想继续操作,因为它的右上角有黑色像素。虽然我想继续处理绿色方块,因为它的边缘没有黑色像素。
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 的解决方案后有了很大改进;现在已经消失了)