R النقطية تعترف اللون الأسود صورة النقطية



image image-processing (1)

ينتج الرمز التالي صندوقين على صورتي. أنا أخطط لتحليل البكسل داخل هذه الصناديق كذلك.

أريد أن أضع شرطا أنه إذا على طول حافة مربع، هناك لون أسود (أو لون مماثل مثل الرمادي) بكسل ثم لا المضي قدما. كيف يمكنني تحديد هذه الحالة؟

في المثال أدناه، في حالة المربع الأحمر أنا لا أريد المضي قدما كما أن لديها بكسل سوداء في أعلى الزاوية اليمنى. بينما أود أن المضي قدما في حالة المربع الأخضر كما أنه ليس لديها بكسل اللون الأسود على طول انها حافة.

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)

وهذا ليس معرفا جيدا كما هو الحال في هذه الحالة اللون مصنوع من قيم رغب. ولكن هنا هو الحل العام الذي يمكن أن تتكيف. أنا 'تسطيح' هذه إلى قناة واحدة عن طريق اتخاذ المتوسط، ومن ثم اختبار لأصغر قيمة يجري أقل من عتبة (أبيض 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
# http://.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)

(تحسنت كثيرا بعد رؤية حل جبومز؛ الذي ذهب الآن)





raster