serigrafia - R trama que reconoce la imagen de trama de color negro
lineatura para cuatricomia (1)
Eso no está muy bien definido ya que en este caso el color está hecho de valores RGB. Pero aquí hay una solución general que puedes adaptar. Los aplasto a un solo canal tomando el promedio, y luego pruebo que el valor más pequeño está por debajo de un umbral (el blanco es 255, 255, 255 en RGB, el negro es 0,0,0) en el límite
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
# http://stackoverflow.com/questions/687261/converting-rgb-to-grayscale-intensity
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)
(muy mejorado después de ver la solución de jbaums, que ahora se ha ido)
El siguiente código produce dos cuadros en mi imagen. Estoy planeando analizar los píxeles dentro de esas cajas más.
Quiero poner una condición de que si en un borde de una caja hay un píxel de color negro (o un color similar como el gris), entonces no continúes. ¿Cómo puedo especificar tal condición?
En el siguiente ejemplo, en el caso del cuadrado rojo, no deseo continuar ya que tiene píxeles negros en la esquina superior derecha. Aunque me gustaría proceder en el caso del cuadrado verde ya que no tiene un píxel de color negro a lo largo de su borde.
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)