亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Google Earth Engine 中的 imageCollection 上對每個圖像執行

在 Google Earth Engine 中的 imageCollection 上對每個圖像執行

qq_花開花謝_0 2022-10-08 17:06:01
我需要對圖像集合執行每個圖像的 PCA。然后,我只想保留主組件軸 1,并將其作為一個帶添加到我的圖像集中的每個圖像中。最終,我想導出一個 .csv 文件,其中行標題處的 GPS 采樣位置和圖像 ID 作為列標題,平均主成分軸 1 作為值。這樣做背后的想法是,我想要一個代理(光譜異質性)用于 R 中的進一步統計分析。這是我到目前為止的代碼://Create an test image to extract information to be used during PCAvar testImage =ee.Image('LANDSAT/LC08/C01/T1_SR/LC08_168080_20130407').select(['B2', 'B3', 'B4', 'B5', 'B6', 'B7'],        ['Blue', 'Green', 'Red', 'NIR', 'SWIR1', 'SWIR2']);// Define variables for PCAvar region = Extent;var scale = testImage.projection().nominalScale();var bandNames = testImage.bandNames();Map.centerObject(region);// Function for performing PCAfunction doPCA(image){  // This code is from https://code.earthengine.google.com/7249153a8a0f5c79eaf562ed45a7adadvar meanDict = image.reduceRegion({    reducer: ee.Reducer.mean(),    geometry: region,    scale: scale,    maxPixels: 1e9});var means = ee.Image.constant(meanDict.values(bandNames));var centered = image.subtract(means);// This helper function returns a list of new band names.var getNewBandNames = function(prefix) {  var seq = ee.List.sequence(1, bandNames.length());  return seq.map(function(b) {    return ee.String(prefix).cat(ee.Number(b).int());  });};// [START principal_components]var getPrincipalComponents = function(centered, scale, region) {  var arrays = centered.toArray();  var covar = arrays.reduceRegion({    reducer: ee.Reducer.centeredCovariance(),    geometry: region,    scale: scale,    maxPixels: 1e9  });Extent是我的 ROI,而LandsatCol是經過預處理的圖像集。嘗試將 PCA 映射到圖像集合(代碼的倒數第二行)時,此處的代碼會產生錯誤。錯誤顯示:“數組:需要參數‘值’”。關于如何處理這個問題的任何建議?以及如何在圖像集合上添加主分量軸 1 作為每個圖像的帶?
查看完整描述

1 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

我想到了。錯誤“Array: Parameter 'values' is required”與稀疏矩陣有關,稀疏矩陣是執行 PCA 的過濾、裁剪和指定區域的產物。Earth Engine 無法處理稀疏矩陣。


這是工作代碼。LandsatCol是我的預處理圖像集。


// Display AOI

var point = ee.Geometry.Point([30.2261, -29.458])

Map.centerObject(point,10);


// Prepairing imagery for PCA

var Preped = LandsatCol.map(function(image){

  var orig = image;

  var region = image.geometry();

  var scale = 30;

  var bandNames = ['Blue', 'Green', 'Red', 'NIR', 'SWIR1', 'SWIR2'];

  var meanDict = image.reduceRegion({

    reducer: ee.Reducer.mean(),

    geometry: region,

    scale: scale,

    maxPixels: 1e9

  });

  var means = ee.Image.constant(meanDict.values(bandNames));

  var centered = image.subtract(means);

  var getNewBandNames = function(prefix) {

  var seq = ee.List.sequence(1, 6);

  return seq.map(function(b) {

    return ee.String(prefix).cat(ee.Number(b).int());

    });

  };


  // PCA function

  var getPrincipalComponents = function(centered, scale, region) {

    var arrays = centered.toArray();

    var covar = arrays.reduceRegion({

      reducer: ee.Reducer.centeredCovariance(),

      geometry: region,

      scale: scale,

      maxPixels: 1e9

    });

    var covarArray = ee.Array(covar.get('array'));

    var eigens = covarArray.eigen();

    var eigenValues = eigens.slice(1, 0, 1);

    var eigenVectors = eigens.slice(1, 1);

    var arrayImage = arrays.toArray(1);

    var principalComponents = ee.Image(eigenVectors).matrixMultiply(arrayImage);

    var sdImage = ee.Image(eigenValues.sqrt())

    .arrayProject([0]).arrayFlatten([getNewBandNames('sd')]);

    return principalComponents.arrayProject([0])

    .arrayFlatten([getNewBandNames('pc')])

    .divide(sdImage);

    };


  var pcImage = getPrincipalComponents(centered, scale, region);

  return ee.Image(image.addBands(pcImage));

});

print("PCA imagery: ",Preped);


查看完整回答
反對 回復 2022-10-08
  • 1 回答
  • 0 關注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號