首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据其他栅格的比例覆盖来移除栅格像素

如何根据其他栅格的比例覆盖来移除栅格像素
EN

Stack Overflow用户
提问于 2019-09-02 17:28:02
回答 1查看 310关注 0票数 0

我有两个不同分辨率的栅格,我想要的是基于栅格B的比例覆盖来遮蔽栅格A的区域。例如,如果至少1/3的像素被栅格B覆盖,我想遮蔽栅格A的像素。

我不知道如何做到这一点,所以任何帮助将不胜感激。

代码语言:javascript
运行
复制
library(raster)

A <- raster(matrix(1:60,3,4))
B <- raster(matrix(1:20,5,6))
EN

回答 1

Stack Overflow用户

发布于 2019-09-21 12:40:12

您的光栅在x和y上的0和1之间是相同范围内的不同分辨率。A是4x3,B是6x5。

代码语言:javascript
运行
复制
par(mfrow=c(1,2)) 
plot(A)
plot(B)

第一步可能是将两者对齐,使其具有相同的分辨率,以便我们可以应用掩码函数。raster::disaggregate函数将每个单元格拆分为整数个列和行。在这种情况下,在低分辨率的情况下,我可以将每个单元格拆分为另一个矩阵的列数和行数,因此A的4列可以拆分为6列,B的6列可以拆分为4列,这样两者都是24宽。(感谢this answer的帮助。)

代码语言:javascript
运行
复制
A_resize <- disaggregate(A, fact = c(dim(B)[2], dim(B)[1]), method = "bilinear") 
B_resize <- disaggregate(B, fact = c(dim(A)[2], dim(A)[1]), method = "bilinear")
par(mfrow=c(1,2)) 
plot(A_resize)
plot(B_resize)

我将你的问题解释为,当B的值小于max的1/3时,你想屏蔽掉A。

我们可以制作一个修改版本的B_resize,它将所有小于最大值1/3的内容重新分类为安娜。(感谢this answer的帮助。)

代码语言:javascript
运行
复制
B_mask <- reclassify(B_resize, 
                     rbind(c(0, B@data@max * 1/3, NA), 
                           c(B@data@max * 1/3,  B@data@max, 1)))
plot(B_mask)

然后我们可以用它来掩码A:

代码语言:javascript
运行
复制
par(mfrow = c(1,1))
plot(mask(A_resize,B_mask))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57754499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档