【问题标题】:Google Earth Engine: How can I perform image calculations with random values pixel by pixel?Google 地球引擎:如何逐个像素地使用随机值执行图像计算?
【发布时间】:2017-12-05 23:07:22
【问题描述】:

我想逐个像素地对 ee.Image 执行一些计算,但是计算的结果必须服从概率高斯分布,因此某些像素会被修改而其他像素不会。我已经编写了一个概率函数,但我不知道如何将它应用于 GEE 中的每个像素。有什么办法吗?

我已经尝试过类似以下的方法,但每个像素都使用相同的随机数,这不是我想要的。

试用 1)

var result = img.where(img.lte(32 + Math.floor((Math.random() * 10) + 1)),1);

试用 2)

var result = img.expression(
    '(B1 > 32 + P) ? 1', {
    'P': Math.floor((Math.random() * 10) + 1),
    'B1': img.select('B1')});

试用 3)

var result = img.expression(
    'P > 10 ? 1', {
    'P': MyProbabilisticFunction(),
    'B1': img.select('B1')});

我还尝试使用以下方法生成“概率”图像来执行我的计算,但由于我在同一个栅格中有多个类,“事件”的概率不太正确。

试验 4)

var rd = ee.FeatureCollection.randomPoints(geometry,1000,Math.floor((Math.random() * 10) + 1));
var prob = rd.draw('000000',5,0).select('vis-red');
var result = img.where(prob.eq(0),1);

【问题讨论】:

  • 我不清楚你想做什么。看第一次试验,值小于或等于 (32 + Math.floor((Math.random() * 10) + 1)) 的像素放 1,否则保持原样。图像是关于什么的?一些索引?
  • 嗨罗德里戈,感谢您的帮助。我想要做的是检查马赛克的所有像素并更改它们的值,但是,这种变化可能发生与否,这取决于事件的概率。值本身无所谓,我担心的是概率。例如,如果我有一个 10x10 的图像,并且我想更改其 40% 像素的值,则将更改 40 个随机像素,而其余 60 个将保​​持不变。这是我正在尝试编码的概率过滤器的核心。
  • 首先您需要阅读这部分文档:developers.google.com/earth-engine/client_server
  • 对于我正在研究的东西,我也很想知道如何逐个像素地进行计算,但在你的情况下,以某种方式创建一个随机值的图像然后执行可能会更好您对整个图像的所有操作。

标签: javascript random pixel raster google-earth-engine


【解决方案1】:

您可以使用 ee.Image.random() 为每个像素生成一个随机值。

也就是说,Earth Engine 的其余部分无法按照您尝试使用的方式工作。所有图像函数都是“矢量化的”;你永远不会“逐个像素”地工作。

【讨论】:

    猜你喜欢
    • 2017-06-18
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多