সংলগ্ন রাস্টার কোষগুলিতে মানগুলির শর্তসাপেক্ষ অ্যাসাইনমেন্ট?


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)

এই রাস্টার থেকে, আমি কীভাবে এই চিত্রণ অনুসারে বর্তমান ঘরের সংলগ্ন কোষগুলিতে মান (বা মান পরিবর্তন) নির্ধারণ করতে পারি? আমি এই কোড লাইন থেকে বর্তমান ঘরের মধ্যে একটি লাল পয়েন্ট রেখেছি:

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

এখানে চিত্র বর্ণনা লিখুন

এখানে, প্রত্যাশিত ফলাফলটি হবে:

এখানে চিত্র বর্ণনা লিখুন

যেখানে বর্তমান কক্ষের মান (অর্থাত্, মান রাস্টারে 5) এর পরিবর্তিত 0 হয়।

সামগ্রিকভাবে, 8 সংলগ্ন কক্ষের জন্য নতুন মানগুলি নিম্নলিখিত হিসাবে গণনা করতে হবে:

নতুন আয়াত = লাল আয়তক্ষেত্রের মধ্যে থাকা ঘরের মানগুলির গড় * বর্তমান ঘর (লাল বিন্দু) এবং সংলগ্ন ঘরের মধ্যে দূরত্ব (যেমন, বর্গাকার (2) ত্রিভুজ সংলগ্ন কোষের জন্য বা অন্যথায় 1)

হালনাগাদ

যখন সংলগ্ন কক্ষগুলির সীমানা রাস্টার সীমা ছাড়িয়ে যায়, তখন আমাকে সংলগ্ন কোষগুলির জন্য নতুন মান গণনা করতে হবে যা শর্তগুলিকে সম্মান করে। সংলগ্ন ঘরগুলি যা শর্তগুলিকে সম্মান করে না তারা "এনএ" এর সমান হবে।

উদাহরণস্বরূপ, যদি [সারি, কর্ন] স্বরলিপি ব্যবহার করে সি (5,5) এর পরিবর্তে রেফারেন্স অবস্থানটি সি (1,1) হয় তবে কেবল নীচের ডানদিকে ডানদিকে নতুন মান গণনা করা যেতে পারে। সুতরাং, প্রত্যাশিত ফলাফল হবে:

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

উদাহরণস্বরূপ, যদি রেফারেন্স পজিশনটি সি (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
আপনি উদাহরণগুলি বোঝা যায় না। প্রথমটিতে, যদি রেফারেন্স পজিশনটি সি (1,1) হয় তবে কেবল নীচের ডান সি (2,2) নতুন মান পাবে তবে আপনি দেখিয়েছেন যে সি (3,3) নতুন_ভ্যালু পাচ্ছে। এ ছাড়া সি (1,1) 0 হয়ে যাবে না সি (2,2)।
ফরিদ চেরাগি

উত্তর:


4

ফাংশন AssignValuesToAdjacentRasterCellsআয় নিচে একটি নতুন RasterLayer মূল থেকে নির্ধারিত পছন্দসই মান বস্তু রাস্টার ইনপুট। রেফারেন্স অবস্থান থেকে সংলগ্ন ঘরগুলি রাস্টার সীমাতে অন্তর্ভুক্ত কিনা তা ফাংশনটি পরীক্ষা করে। কিছু বাউন্ড বাইরে থাকলে বার্তা প্রদর্শন করে। আপনার যদি রেফারেন্স অবস্থানটি সরানোর দরকার হয় তবে আপনি কেবল ইনপুট অবস্থান সি ( 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

একটি ছোট ম্যাট্রিক্সে ম্যাট্রিক্স অপারেটরের জন্য এটি অর্থবোধক এবং ট্র্যাকটেবল। তবে কোনও বড় রাস্টারকে এই জাতীয় ফাংশন প্রয়োগ করার সময় আপনি আপনার যুক্তিটি পুনর্বিবেচনা করতে চাইতে পারেন। ধারণামূলকভাবে, এটি সত্যিই সাধারণ প্রয়োগগুলিতে ট্র্যাক করে না। আপনি যা রীতিগতভাবে একটি ব্লক পরিসংখ্যান হিসাবে উল্লেখ করা হয়েছে সম্পর্কে কথা বলছেন। যাইহোক, একটি ব্লক পরিসংখ্যান প্রকৃতির দ্বারা রাস্টারটির এক কোণে শুরু হওয়া এবং একটি অপারেটর সহ একটি নির্দিষ্ট উইন্ডো আকারের মধ্যে মানগুলির ব্লকগুলি প্রতিস্থাপন করে। সাধারণত এই ধরণের অপারেটর ডেটা একত্রিত করার জন্য। আপনি যদি ম্যাট্রিক্সের কেন্দ্রের মান গণনা করার জন্য শর্তাবলীর ব্যবহারের শর্তাবলী বিবেচনা করেন তবে এটি যথেষ্ট বেশি ট্র্যাকটেবল হবে। এইভাবে আপনি সহজেই একটি ফোকাল ফাংশন ব্যবহার করতে পারেন।

কেবল মনে রাখবেন যে রাস্টার ফোকাল ফাংশন ডেটাগুলির ব্লকগুলিতে পড়ছে যা ডাব্লু আর্গুমেন্টে ম্যাট্রিক্সের উপর ভিত্তি করে সংজ্ঞায়িত প্রতিবেশে ফোকাল মানগুলি উপস্থাপন করে। ফলাফল প্রতিটি পাড়ার জন্য একটি ভেক্টর এবং ফোকাল অপারেটরের ফলাফল কেবল পুরো কেন্দ্রের জন্য নয় কেবলমাত্র ফোকাস সেলকে বরাদ্দ করা হয়। এটিকে কোনও সেল মানকে ঘিরে একটি ম্যাট্রিক্স দখল করা, তার উপর পরিচালিত হওয়া, সেলে একটি নতুন মান নির্ধারণ করে পরবর্তী কক্ষে চলে যাওয়ার মত মনে করুন।

আপনি যদি নিশ্চিত হন যে na.rm = FALSE তবে ভেক্টর সর্বদা সঠিক প্রতিবেশকে প্রতিনিধিত্ব করবে (যেমন, একই দৈর্ঘ্যের ভেক্টর) এবং একটি ম্যাট্রিক্স অবজেক্টে জোর করা হবে যা কোনও ফাংশনের মধ্যে চালিত হতে পারে। এ কারণে, আপনি কেবল এমন একটি ফাংশন লিখতে পারেন যা প্রত্যাশিত ভেক্টর গ্রহণ করে, একটি ম্যাট্রিক্সে coerces করে, আপনার প্রতিবেশী স্বরলিপি যুক্তি প্রয়োগ করে এবং তারপরে ফলাফল হিসাবে একটি একক মান নির্ধারণ করে। এই ফাংশনটি তখন রাস্টার :: ফোকাল ফাংশনে প্রেরণ করা যায়।

ফোকাল উইন্ডোর সাধারণ জবরদস্তি এবং মূল্যায়নের উপর ভিত্তি করে প্রতিটি কক্ষে কী ঘটবে তা এখানে রয়েছে। "ডাব্লু" অবজেক্টটি মূলত একই ম্যাট্রিক্স সংজ্ঞা হবে যে ফোকাসে ডাব্লু যুক্তিকে পাস করবে। প্রতিটি ফোকাল মূল্যায়নে এটি সাবসেট ভেক্টরের আকার নির্ধারণ করে।

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) 

এখন একটি ফাংশন তৈরি করুন যা ফোকালটিতে প্রয়োগ করা যেতে পারে উপরের যুক্তি প্রয়োগ করে। এক্ষেত্রে আপনি se অবজেক্টকে মান হিসাবে নির্ধারণ করতে পারেন বা মূল্যায়নের ভিত্তিতে একটি মান নির্ধারণের জন্য "ifelse" এর মতো কিছুতে এটি শর্ত হিসাবে ব্যবহার করতে পারেন। আমি কীভাবে প্রতিবেশীর একাধিক অবস্থার মূল্যায়ন করতে পারি এবং একটি ম্যাট্রিক্স অবস্থান (আশেপাশের স্বরলিপি) শর্ত প্রয়োগ করব তা বোঝাতে আমি ইফেলস বিবৃতি যুক্ত করছি। এই ডামি ফাংশনটিতে ম্যাট্রিক্সে এক্স এর জবরদস্তি সম্পূর্ণ অপ্রয়োজনীয় এবং কেবল এটি কীভাবে হবে তা চিত্রিত করার জন্য। কেউ ম্যাট্রিক্স জবরদস্তি ছাড়াই সরাসরি ভেক্টরের কাছে প্রতিবেশ সংকেত শর্ত প্রয়োগ করতে পারে, কারণ ভেক্টরের অবস্থানটি ফোকাস উইন্ডোতে তার অবস্থানের জন্য প্রয়োগ করে স্থির থাকে।

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] এর নীচে এক [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)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.