आसन्न रास्टर कोशिकाओं को मूल्यों का सशर्त असाइनमेंट?


12

मेरे पास एक मूल्य रेखापुंज है:

m <- matrix(c(2,4,5,5,2,8,7,3,1,6,
         5,7,5,7,1,6,7,2,6,3,
         4,7,3,4,5,3,7,9,3,8,
         9,3,6,8,3,4,7,3,7,8,
         3,3,7,7,5,3,2,8,9,8,
         7,6,2,6,5,2,2,7,7,7,
         4,7,2,5,7,7,7,3,3,5,
         7,6,7,5,9,6,5,2,3,2,
         4,9,2,5,5,8,3,3,1,2,
         5,2,6,5,1,5,3,7,7,2),nrow=10, ncol=10, byrow = T)
r <- raster(m)
extent(r) <- matrix(c(0, 0, 10, 10), nrow=2)
plot(r)
text(r)

इस रेखापुंज से, मैं इस चित्रण के अनुसार वर्तमान सेल के 8 आसन्न कक्षों को मान (या मान कैसे बदल सकता हूं) बता सकता हूं? मैंने इस कोड लाइन से वर्तमान सेल के भीतर एक लाल बिंदु रखा:

points(xFromCol(r, col=5), yFromRow(r, row=5),col="red",pch=16)

यहाँ छवि विवरण दर्ज करें

यहाँ, अपेक्षित परिणाम होगा:

यहाँ छवि विवरण दर्ज करें

जहां वर्तमान सेल का मूल्य (यानी, मूल्य रेखापुंज में 5) को 0 से बदल दिया जाता है।

कुल मिलाकर, 8 आसन्न कोशिकाओं के नए मूल्यों की गणना निम्नानुसार की जानी चाहिए:

नया मान = लाल आयत में निहित सेल वैल्यू का औसत * वर्तमान सेल (लाल बिंदु) और आसन्न सेल के बीच की दूरी (यानी, तिरछे आसन्न कोशिकाओं के लिए sqrt (2) या 1 अन्यथा)

अपडेट करें

जब आसन्न कोशिकाओं के लिए सीमा रेखापुंज सीमा से बाहर होती है, तो मुझे आसन्न कोशिकाओं के लिए नए मूल्यों की गणना करने की आवश्यकता होती है जो शर्तों का सम्मान करते हैं। आसन्न कोशिकाएं जो शर्तों का सम्मान नहीं करती हैं, वे "NA" के बराबर होंगी।

उदाहरण के लिए, यदि [पंक्ति, कर्नल] संकेतन का उपयोग करके c (5,5) के बजाय संदर्भ स्थिति c (1,1) है, तो नीचे-दाएं कोने पर केवल नए मान की गणना की जा सकती है। इस प्रकार, अपेक्षित परिणाम होगा:

     [,1] [,2] [,3]       
[1,] NA   NA   NA         
[2,] NA   0    NA         
[3,] NA   NA   New_value

उदाहरण के लिए, यदि संदर्भ स्थिति c (3,1) है, तो शीर्ष-दाएं, दाएं और नीचे-दाएं कोनों पर केवल नए मानों की गणना की जा सकती है। इस प्रकार, अपेक्षित परिणाम होगा:

     [,1] [,2] [,3]       
[1,] NA   NA   New_value         
[2,] NA   0    New_value         
[3,] NA   NA   New_value

यहां फ़ंक्शन का उपयोग करके मेरा यह पहला प्रयास है focalलेकिन मुझे स्वचालित कोड बनाने में थोड़ी कठिनाई है।

आसन्न कोशिकाओं का चयन करें

mat_perc <- matrix(c(1,1,1,1,1,
                     1,1,1,1,1,
                     1,1,0,1,1,
                     1,1,1,1,1,
                     1,1,1,1,1), nrow=5, ncol=5, byrow = T)
cell_perc <- adjacent(r, cellFromRowCol(r, 5, 5), directions=mat_perc, pairs=FALSE, sorted=TRUE, include=TRUE)
r_perc <- rasterFromCells(r, cell_perc)
r_perc <- setValues(r_perc,extract(r, cell_perc))
plot(r_perc)
text(r_perc)

यदि आसन्न कोशिका वर्तमान कोशिका के ऊपरी-बाएँ कोने पर स्थित है

focal_m <- matrix(c(1,1,NA,1,1,NA,NA,NA,NA), nrow=3, ncol=3, byrow = T)
focal_function <- function(x) mean(x,na.rm=T)*sqrt(2)
test <- as.matrix(focal(r_perc, focal_m, focal_function))

यदि आसन्न सेल वर्तमान सेल के ऊपरी-मध्य कोने में स्थित है

focal_m <- matrix(c(1,1,1,1,1,1,NA,NA,NA), nrow=3, ncol=3, byrow = T)
focal_function <- function(x) mean(x,na.rm=T)
test <- as.matrix(focal(r_perc, focal_m, focal_function))

यदि आसन्न कोशिका वर्तमान कोशिका के ऊपरी-बाएँ कोने पर स्थित है

focal_m <- matrix(c(NA,1,1,NA,1,1,NA,NA,NA), nrow=3, ncol=3, byrow = T)
focal_function <- function(x) mean(x,na.rm=T)*sqrt(2)
test <- as.matrix(focal(r_perc, focal_m, focal_function))

यदि आसन्न सेल वर्तमान सेल के बाएं कोने पर स्थित है

focal_m <- matrix(c(1,1,NA,1,1,NA,1,1,NA), nrow=3, ncol=3, byrow = T)
focal_function <- function(x) mean(x,na.rm=T)
test <- as.matrix(focal(r_perc, focal_m, focal_function))

यदि निकटवर्ती सेल वर्तमान सेल के दाहिने कोने पर स्थित है

focal_m <- matrix(c(NA,1,1,NA,1,1,NA,1,1), nrow=3, ncol=3, byrow = T)
focal_function <- function(x) mean(x,na.rm=T)
test <- as.matrix(focal(r_perc, focal_m, focal_function))

यदि आसन्न सेल वर्तमान सेल के निचले-बाएँ कोने पर स्थित है

focal_m <- matrix(c(NA,NA,NA,1,1,NA,1,1,NA), nrow=3, ncol=3, byrow = T)
focal_function <- function(x) mean(x,na.rm=T)*sqrt(2)
test <- as.matrix(focal(r_perc, focal_m, focal_function))

यदि आसन्न सेल वर्तमान सेल के निचले-मध्य कोने में स्थित है

focal_m <- matrix(c(NA,NA,NA,1,1,1,1,1,1), nrow=3, ncol=3, byrow = T)
focal_function <- function(x) mean(x,na.rm=T)
test <- as.matrix(focal(r_perc, focal_m, focal_function))

यदि आसन्न सेल वर्तमान सेल के निचले-दाएं कोने पर स्थित है

focal_m <- matrix(c(NA,NA,NA,NA,1,1,NA,1,1), nrow=3, ncol=3, byrow = T)
focal_function <- function(x) mean(x,na.rm=T)*sqrt(2)
test <- as.matrix(focal(r_perc, focal_m, focal_function))

+1 करना चाहते हैं कि सभी प्रश्न इस तरह से तैयार किए गए थे! क्या आप एक फोकल ऑपरेशन (चलती खिड़की के आँकड़ों) की तलाश कर रहे हैं? आर के की जाँच करें rasterपैकेज और focal(): समारोह (पी 90 प्रलेखन।) Cran.r-project.org/web/packages/raster/raster.pdf
हारून

आपकी सलाह के लिए बहुत बहुत धन्यवाद हारून! वास्तव में, फ़ंक्शन फोकल बहुत उपयोगी लगता है लेकिन मैं इससे परिचित नहीं हूं। उदाहरण के लिए, आसन्न कोशिका = 8 (शीर्ष-बाएं कोने पर आकृति) के लिए, मैंने परीक्षण किया mat <- matrix(c(1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0), nrow=5, ncol=5, byrow = T) f.rast <- function(x) mean(x)*sqrt(2) aggr <- as.matrix(focal(r, mat, f.rast))। मैं वर्तमान कोशिका के केवल 8 आसन्न कोशिकाओं और सभी रेखापुंज के लिए परिणाम कैसे प्राप्त कर सकता हूं? यहाँ, परिणाम होना चाहिए res <- matrix(c(7.42,0,0,0,0,0,0,0,0), nrow=3, ncol=3, byrow = T):। आपका बहुत बहुत धन्यवाद !
पियरे

@Pierre क्या आपको केवल पंक्ति 5, कॉल 5 के लिए आसन्न मानों की गणना करने की आवश्यकता है ? या उदाहरण के लिए इस संदर्भ स्थिति को एक नई संदर्भ स्थिति पंक्ति 6, कॉल 6 में ले जाएं?
गुज्जन

2
क्या आप इस बारे में अधिक (अपने प्रश्न का संपादन) कर सकते हैं कि आसन्न मूल्यों की गणना करने की आवश्यकता कैसे है जब आसन्न कोशिकाओं के लिए सीमा रेखापुंज सीमा से बाहर हैं? उदा: पंक्ति 1, कर्नल 1.
गुज्मैन

1
आप उदाहरण समझ में नहीं आता है। पहले एक में, यदि संदर्भ स्थिति c (1,1) है, तो केवल नीचे दाएं c (2,2) को नया मान मिलेगा लेकिन आपने दिखाया है कि c (3,3) को New_Value मिल रहा है। इसके अलावा c (1,1) 0 नहीं c (2,2) बन जाएगा।
फरीद चराघी

जवाबों:


4

AssignValuesToAdjacentRasterCellsनीचे दिया गया फ़ंक्शन मूल रैस्टर इनपुट से निर्दिष्ट वांछित मानों के साथ एक नया रैस्टरलेयर ऑब्जेक्ट देता है । फ़ंक्शन जाँचता है कि संदर्भ से आसन्न कोशिकाएँ स्थिति रेखापुंज सीमा के अंदर हैं। कुछ बाउंड आउट होने पर यह संदेश भी प्रदर्शित करता है। यदि यो को संदर्भ स्थान को स्थानांतरित करने की आवश्यकता है, तो आप बस इसे ( i , j ) इनपुट परिवर्तन स्थिति लिख सकते हैं ।

डेटा इनपुट

# Load packages
library("raster")

# Load matrix data
m <- matrix(c(2,4,5,5,2,8,7,3,1,6,
              5,7,5,7,1,6,7,2,6,3,
              4,7,3,4,5,3,7,9,3,8,
              9,3,6,8,3,4,7,3,7,8,
              3,3,7,7,5,3,2,8,9,8,
              7,6,2,6,5,2,2,7,7,7,
              4,7,2,5,7,7,7,3,3,5,
              7,6,7,5,9,6,5,2,3,2,
              4,9,2,5,5,8,3,3,1,2,
              5,2,6,5,1,5,3,7,7,2), nrow=10, ncol=10, byrow = TRUE)

# Convert matrix to RasterLayer object
r <- raster(m)

# Assign extent to raster
extent(r) <- matrix(c(0, 0, 10, 10), nrow=2)

# Plot original raster
plot(r)
text(r)
points(xFromCol(r, col=5), yFromRow(r, row=5), col="red", pch=16)

समारोह

# Function to assigning values to the adjacent raster cells based on conditions
# Input raster: RasterLayer object
# Input position: two-dimension vector (e.g. c(5,5))

AssignValuesToAdjacentRasterCells <- function(raster, position) {

  # Reference position
  rowPosition = position[1]
  colPosition = position[2]

  # Adjacent cells positions
  adjacentBelow1 = rowPosition + 1
  adjacentBelow2 = rowPosition + 2
  adjacentUpper1 = rowPosition - 1
  adjacentUpper2 = rowPosition - 2
  adjacentLeft1 = colPosition - 1 
  adjacentLeft2 = colPosition - 2 
  adjacentRight1 = colPosition + 1
  adjacentRight2 = colPosition + 2

  # Check if adjacent cells positions are out of raster positions limits
  belowBound1 = adjacentBelow1 <= nrow(raster)
  belowBound2 = adjacentBelow2 <= nrow(raster)
  upperBound1 = adjacentUpper1 > 0
  upperBound2 = adjacentUpper2 > 0
  leftBound1 = adjacentLeft1 > 0 
  leftBound2 = adjacentLeft2 > 0 
  rightBound1 = adjacentRight1 <= ncol(raster)
  rightBound2 = adjacentRight2 <= ncol(raster) 

  if(upperBound2 & leftBound2) {

    val1 = mean(r[adjacentUpper2:adjacentUpper1, adjacentLeft2:adjacentLeft1]) * sqrt(2)

  } else {

    val1 = NA

  }

  if(upperBound2 & leftBound1 & rightBound1) {

    val2 = mean(r[adjacentUpper1:adjacentUpper2, adjacentLeft1:adjacentRight1])

  } else {

    val2 = NA

  }

  if(upperBound2 & rightBound2) {

    val3 = mean(r[adjacentUpper2:adjacentUpper1, adjacentRight1:adjacentRight2]) * sqrt(2)

  } else {

    val3 = NA

  }

  if(upperBound1 & belowBound1 & leftBound2) {

    val4 = mean(r[adjacentUpper1:adjacentBelow1, adjacentLeft2:adjacentLeft1])

  } else {

    val4 = NA

  }

  val5 = 0

  if(upperBound1 & belowBound1 & rightBound2) {

    val6 = mean(r[adjacentUpper1:adjacentBelow1, adjacentRight1:adjacentRight2])

  } else {

    val6 = NA

  }

  if(belowBound2 & leftBound2) {

    val7 = mean(r[adjacentBelow1:adjacentBelow2, adjacentLeft2:adjacentLeft1]) * sqrt(2)

  } else {

    val7 = NA

  }

  if(belowBound2 & leftBound1 & rightBound1) {

    val8 = mean(r[adjacentBelow1:adjacentBelow2, adjacentLeft1:adjacentRight1])

  } else {

    val8 = NA

  }

  if(belowBound2 & rightBound2) {

    val9 = mean(r[adjacentBelow1:adjacentBelow2, adjacentRight1:adjacentRight2]) * sqrt(2)

  } else {

    val9 = NA

  }

  # Build matrix
  mValues = matrix(data = c(val1, val2, val3,
                            val4, val5, val6,
                            val7, val8, val9), nrow = 3, ncol = 3, byrow = TRUE)    

  if(upperBound1) {

    a = adjacentUpper1

  } else {

    # Warning message
    cat(paste("\n Upper bound out of raster limits!"))
    a = rowPosition
    mValues <- mValues[-1,]

  }

  if(belowBound1) {

    b = adjacentBelow1

  } else {

    # Warning message
    cat(paste("\n Below bound out of raster limits!"))
    b = rowPosition
    mValues <- mValues[-3,]

  }

  if(leftBound1) {

    c = adjacentLeft1

  } else {

    # Warning message
    cat(paste("\n Left bound out of raster limits!"))
    c = colPosition
    mValues <- mValues[,-1]

  }

  if(rightBound1) {

    d = adjacentRight1

  } else {

    # Warning
    cat(paste("\n Right bound out of raster limits!"))
    d = colPosition
    mValues <- mValues[,-3]

  }

  # Convert matrix to RasterLayer object
  rValues = raster(mValues)

  # Assign values to raster
  raster[a:b, c:d] = rValues[,]  

  # Assign extent to raster
  extent(raster) <- matrix(c(0, 0, 10, 10), nrow = 2)

  # Return raster with assigned values
  return(raster)      

}

उदाहरण चलाते हैं

# Run function AssignValuesToAdjacentRasterCells

# reference position (1,1)
example1 <- AssignValuesToAdjacentRasterCells(raster = r, position = c(1,1))

# reference position (1,5)
example2 <- AssignValuesToAdjacentRasterCells(raster = r, position = c(1,5))

# reference position (1,10)
example3 <- AssignValuesToAdjacentRasterCells(raster = r, position = c(1,10))

# reference position (5,1)
example4 <- AssignValuesToAdjacentRasterCells(raster = r, position = c(5,1))

# reference position (5,5)
example5 <- AssignValuesToAdjacentRasterCells(raster = r, position = c(5,5))

# reference position (5,10)
example6 <- AssignValuesToAdjacentRasterCells(raster = r, position = c(5,10))

# reference position (10,1)
example7 <- AssignValuesToAdjacentRasterCells(raster = r, position = c(10,1))

# reference position (10,5)
example8 <- AssignValuesToAdjacentRasterCells(raster = r, position = c(10,5))

# reference position (10,10)
example9 <- AssignValuesToAdjacentRasterCells(raster = r, position = c(10,10))

प्लॉट उदाहरण

# Plot examples
par(mfrow=(c(3,3)))

plot(example1, main = "Position ref. (1,1)")
text(example1)
points(xFromCol(example1, col=1), yFromRow(example1, row=1), col="red", cex=2.5, lwd=2.5)

plot(example2, main = "Position ref. (1,5)")
text(example2)
points(xFromCol(example2, col=5), yFromRow(example2, row=1), col="red", cex=2.5, lwd=2.5)

plot(example3, main = "Position ref. (1,10)")
text(example3)
points(xFromCol(example3, col=10), yFromRow(example3, row=1), col="red", cex=2.5, lwd=2.5)

plot(example4, main = "Position ref. (5,1)")
text(example4)
points(xFromCol(example4, col=1), yFromRow(example4, row=5), col="red", cex=2.5, lwd=2.5)

plot(example5, main = "Position ref. (5,5)")
text(example5)
points(xFromCol(example5, col=5), yFromRow(example5, row=5), col="red", cex=2.5, lwd=2.5)

plot(example6, main = "Position ref. (5,10)")
text(example6)
points(xFromCol(example6, col=10), yFromRow(example6, row=5), col="red", cex=2.5, lwd=2.5)

plot(example7, main = "Position ref. (10,1)")
text(example7)
points(xFromCol(example7, col=1), yFromRow(example7, row=10), col="red", cex=2.5, lwd=2.5)

plot(example8, main = "Position ref. (10,5)")
text(example8)
points(xFromCol(example8, col=5), yFromRow(example8, row=10), col="red", cex=2.5, lwd=2.5)

plot(example9, main = "Position ref. (10,10)")
text(example9)
points(xFromCol(example9, col=10), yFromRow(example9, row=10), col="red", cex=2.5, lwd=2.5)

चित्र उदाहरण

exampleFigure

नोट: सफेद कोशिकाओं का अर्थ है NAमान


3

एक छोटे मैट्रिक्स पर एक मैट्रिक्स ऑपरेटर के लिए यह समझ में आता है और ट्रैक्टेबल है। हालाँकि, आप एक बड़े रैस्टर पर इस तरह के फंक्शन को लागू करते समय अपने तर्क पर फिर से विचार कर सकते हैं। वैचारिक रूप से, यह वास्तव में सामान्य अनुप्रयोग में ट्रैक नहीं करता है। आप इस बारे में बात कर रहे हैं कि पारंपरिक रूप से ब्लॉक स्टेटिस्टिक के रूप में क्या संदर्भित किया गया है। हालांकि, एक ब्लॉक आँकड़ा प्रकृति द्वारा होता है, जो एक ऑपरेटर के साथ, एक निर्दिष्ट विंडो आकार के भीतर, रास्टर के एक कोने से शुरू होता है और मूल्यों के स्थान को बदलता है। आम तौर पर इस प्रकार का ऑपरेटर डेटा एकत्र करने के लिए होता है। यदि आप मैट्रिक्स के केंद्र मूल्य की गणना करने के लिए शर्तों का उपयोग करने के संदर्भ में सोचते हैं तो यह काफी अधिक ट्रैफ़िक होगा। इस तरह आप आसानी से एक फोकल फ़ंक्शन का उपयोग कर सकते हैं।

बस यह ध्यान रखें कि रेखापुंज फोकल फ़ंक्शन डेटा के ब्लॉक में पढ़ रहा है जो w तर्क में दिए गए मैट्रिक्स के आधार पर परिभाषित पड़ोस में फोकल मूल्यों का प्रतिनिधित्व करता है। परिणाम प्रत्येक पड़ोस के लिए एक वेक्टर है और फोकल ऑपरेटर का परिणाम सिर्फ फोकल सेल को सौंपा गया है न कि पूरे पड़ोस को। एक सेल वैल्यू के आसपास के मैट्रिक्स को हथियाने के बारे में सोचें, इस पर काम करते हुए सेल को एक नया मूल्य प्रदान करें और फिर अगले सेल पर जाएं।

यदि आप यह सुनिश्चित करते हैं कि na.rm = FALSE तो वेक्टर हमेशा सटीक पड़ोस (यानी, एक ही लंबाई के वेक्टर) का प्रतिनिधित्व करेगा और एक मैट्रिक्स ऑब्जेक्ट में coerced किया जाएगा जिसे एक फ़ंक्शन के भीतर संचालित किया जा सकता है। इस वजह से, आप बस एक फ़ंक्शन लिख सकते हैं जो उम्मीद वेक्टर को ले जाता है, मैट्रिक्स में coerces, आपके पड़ोस संकेतन तर्क को लागू करता है और फिर परिणाम के रूप में एक एकल मान प्रदान करता है। यह फ़ंक्शन तब रैस्टर :: फोकल फ़ंक्शन को पास किया जा सकता है।

यहाँ एक प्रकोष्ठ और फोकल विंडो के मूल्यांकन के आधार पर प्रत्येक सेल में क्या हो रहा है। "डब्ल्यू" ऑब्जेक्ट अनिवार्य रूप से एक ही मैट्रिक्स परिभाषा होगी जो कि किसी एक को फोकल में w तर्क पास करेगी। यह वह है जो प्रत्येक फोकल मूल्यांकन में सबसेट वेक्टर के आकार को परिभाषित करता है।

w=c(5,5)
x <- runif(w[1]*w[2])
x[25] <- NA
print(x)
( x <- matrix(x, nrow=w[1], ncol=w[2]) ) 
( se <- mean(x, na.rm=TRUE) * sqrt(2) )
ifelse( as.vector(x[(length(as.vector(x)) + 1)/2]) <= se, 1, 0) 

अब एक फ़ंक्शन बनाएं जो फोकल पर लागू किया जा सकता है उपरोक्त तर्क को लागू करता है। इस मामले में आप मूल्य के रूप में से ऑब्जेक्ट को असाइन कर सकते हैं या मूल्यांकन के आधार पर मूल्य प्रदान करने के लिए "ifelse" जैसी किसी चीज में एक शर्त के रूप में उपयोग कर सकते हैं। मैं यह बताने के लिए ifelse स्टेटमेंट जोड़ रहा हूं कि कोई कैसे आस-पड़ोस की कई स्थितियों का मूल्यांकन करेगा और मैट्रिक्स स्थिति (पड़ोस नोटेशन) की स्थिति लागू करेगा। इस डमी फ़ंक्शन में x का मैट्रिक्स के साथ ज़बरदस्ती पूरी तरह से अनावश्यक है और केवल यह वर्णन करने के लिए कि यह कैसे किया जाएगा। कोई भी मैट्रिक्स संकेतन के बिना वेक्टर पर सीधे पड़ोस की स्थिति को लागू कर सकता है, क्योंकि वेक्टर में स्थिति फोकल विंडो में अपने स्थान पर लागू होगी और स्थिर रहेगी।

f.rast <- function(x, dims=c(5,5)) {
  x <- matrix(x, nrow=dims[1], ncol=dims[2]) 
  se <- mean(x, na.rm=TRUE) * sqrt(2)
  ifelse( as.vector(x[(length(as.vector(x)) + 1)/2]) <= se, 1, 0)   
}  

और इसे एक रैस्टर पर लागू करें

library(raster)
r <- raster(nrows=100, ncols=100)
  r[] <- runif( ncell(r) )
  plot(r)

( r.class <- focal(r, w = matrix(1, nrow=w[1], ncol=w[2]), fun=f.rast) )
plot(r.class)  

2

आप [पंक्ति, कर्नल] संकेतन का उपयोग करके रैस्टर को कम करके रैस्टर मानों को आसानी से अपडेट कर सकते हैं। बस ध्यान दें कि पंक्ति और स्तंभ रेखापुंज के ऊपरी-बाएँ कोने से शुरू होते हैं; r [1,1] ऊपरी बाएँ पिक्सेल इंडेक्स है और r [2,1] r [1,1] के नीचे एक है।

यहाँ छवि विवरण दर्ज करें

# the function to update raster cell values
focal_raster_update <- function(r, row, col) {
  # copy the raster to hold the temporary values
  r_copy <- r
  r_copy[row,col] <- 0
  #upper left
  r_copy[row-1,col-1] <- mean(r[(row-2):(row-1),(col-2):(col-1)]) * sqrt(2)
  #upper mid
  r_copy[row-1,col] <- mean(r[(row-2):(row-1),(col-1):(col+1)])
  #upper right
  r_copy[row-1,col+1] <- mean(r[(row-2):(row-1),(col+1):(col+2)]) * sqrt(2)
  #left
  r_copy[row,col-1] <- mean(r[(row-1):(row+1),(col-2):(col-1)])
  #right
  r_copy[row,col+1] <- mean(r[(row-1):(row+1),(col+1):(col+2)])
  #bottom left
  r_copy[row+1,col-1] <- mean(r[(row+1):(row+2),(col-2):(col-1)]) * sqrt(2)
  #bottom mid
  r_copy[row+1,col] <- mean(r[(row+1):(row+2),(col-1):(col+1)])
  #bottom right
  r_copy[row+1,col+1] <- mean(r[(row+1):(row+2),(col+1):(col+2)]) * sqrt(2)
  return(r_copy)
}
col <- 5
row <- 5
r <- focal_raster_update(r,row,col)

dev.set(1)
plot(r)
text(r,digits=2)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.