使用GEE中的不同位进行质量检查

时间:2019-03-07 09:23:11

标签: qa masking google-earth-engine

我在选择MCD64A1燃烧区域产品的高质量数据时遇到问题。 Here是对质量检查频段的描述,但我确实对不同的位感到困惑。

我要做的是选择所有 在土地上进行高质量的观测,并基于它们进行掩盖。我有以下内容,但这不是正确的方法。

感谢您的帮助。

    var geometry = /* color: #d63000 */ee.Geometry.Polygon(
            [[[23.821277851635955, 46.07285332090363],
              [23.274708027417205, 45.952681148559265],
              [24.11378883796408, 45.554067690813184],
              [24.89381813483908, 45.84372892769175],
              [24.17146706062033, 46.25167241706428]]]);
    var dataset = ee.ImageCollection('MODIS/006/MCD64A1')
                      .filterBounds(geometry)
        .map(function(image){return image.clip(geometry)}) 
                          .filter(ee.Filter.calendarRange(7,7,'month'));
    var burnedArea = dataset.select('BurnDate','QA');

//good quality observations

var good= (function(img) {
  var goodQA = img.select("QA").eq(1); 
  return img.updateMask(burnedArea .and(goodQA));
});

编辑

此外,我尝试了以下操作,该操作既没有错误,也没有数据。

var good= function(img){  
  var qa = img.select(['QA']);
  var mask = qa.bitwiseAnd(0).eq(1).and( 
             qa.bitwiseAnd(1).eq(1)).and( 
             qa.bitwiseAnd(2).eq(1)); 
  return img.updateMask(mask);
};

1 个答案:

答案 0 :(得分:1)

我认为这段代码可能适合您的需求:

var good = function(img) {
    var qa = img.select(['QA']);
    var mask = qa.bitwiseAnd(3).eq(3);
    return img.updateMask(mask);
}
burnedArea = burnedArea.map(good);

基本上,这段代码只是修改了您编辑后的代码中的行var mask = ...。在burnedArea = burnedArea.map(good);行之后,您的burnedArea变量将仅显示在QA波段中具有“位0值1和位1值1”的像素。

由于数字3的二进制形式为11(位0值1和位1值1),所以qa.bitwiseAnd(3)所做的就是将QA波段中的任何像素变成四个值之一:

    如果3像素具有“ bit 0值1和bit 1值1”(例如3、7、11、15等)的
  • QA

    < / li> 如果2像素具有“位0值0和位1值1”(例如2、6、10等)的
  • QA

  • 如果1像素具有“ bit 0值1和bit 1值0”(例如1、5、9等)的
  • QA

  • 如果0像素具有“ bit 0值0和bit 1值0”(例如0、4、8等)的
  • QA(例如0、4、8等)

您可能已经知道,.eq(3)部分将值3的像素转换为1,其余部分转换为0

希望这可以消除您对“小问题”的困惑。