Google Earth Engine(GEE)——当我们遇到色差问题应该如何处理?

举报
此星光明 发表于 2022/09/25 08:24:37 2022/09/25
【摘要】 这里的这个代码是有问题的,本来代码的本意是想去除条带,可以他采取的做法却是利用mean或者median等方式来进行,这只是影像聚合的一种方式,并不是通过改变影像的DN值来改变影像的的色调,所以我们可以先看下面的代码,然后回给大家在文章末尾提供两个直方图匹配的修复方案! 代码: var L8SR_collection = ee.Ima...

这里的这个代码是有问题的,本来代码的本意是想去除条带,可以他采取的做法却是利用mean或者median等方式来进行,这只是影像聚合的一种方式,并不是通过改变影像的DN值来改变影像的的色调,所以我们可以先看下面的代码,然后回给大家在文章末尾提供两个直方图匹配的修复方案!

代码:


  
  1. var L8SR_collection = ee.ImageCollection("LANDSAT/LC08/C02/T1_L2"),
  2. roi =
  3. /* color: #d63000 */
  4. /* shown: false */
  5. /* displayProperties: [
  6. {
  7. "type": "rectangle"
  8. }
  9. ] */
  10. ee.Geometry.Polygon(
  11. [[[35.656721917962024, -9.845627851094253],
  12. [35.656721917962024, -10.34249880734705],
  13. [36.4353779238214, -10.34249880734705],
  14. [36.4353779238214, -9.845627851094253]]], null, false),
  15. geometry_1 = /* color: #d63000 */ee.Geometry.Point([35.78712134946283, -9.929366325427338]),
  16. geometry_2 = /* color: #98ff00 */ee.Geometry.Point([36.311674920891406, -10.291949698399549]);
  17. //**
  18. Map.centerObject(roi,9.3)
  19. var empty = ee.Image().byte()
  20. var outline = empty.paint({featureCollection:roi, color:1, width:1})
  21. Map.addLayer (outline,{palette:'red'},'Boundary')
  22. //===============================================================================\\
  23. /*
  24. 1. 影像集合和筛选 (TOA & SR)
  25. */
  26. //================================================================================\\
  27. //** Timeframe
  28. var start = '2014-06-01'
  29. var end = '2014-11-01'
  30. var cloudcover = 30
  31. var cloudProperty = 'CLOUD_COVER_LAND'
  32. //** 1. Dry
  33. var drystart = 6
  34. var dryend = 9
  35. //** 2. Wet
  36. var wetstart = 1
  37. var wetend = 5
  38. //============================================================================\\
  39. /*
  40. 2.数据预处理 (TOA & SR)
  41. */
  42. //=============================================================================\\
  43. // 对Landsat Collection 2 SR图像进行缩放,并将云层掩码添加为波段。
  44. function maskL8sr(image) {
  45. // 为不需要的像素制定蒙版(填充、云、云影)。
  46. var qaMask1 = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0)
  47. .rename('dilated');
  48. var qaMask2 = image.select('QA_PIXEL').bitwiseAnd(parseInt('11101', 2)).eq(0)
  49. .rename('not_dilated');
  50. // 将缩放系数应用于适当的波段。
  51. var getFactorImg = function(factorNames) {
  52. var factorList = image.toDictionary().select(factorNames).values();
  53. return ee.Image.constant(factorList);
  54. };
  55. var scaleImg = getFactorImg([
  56. 'REFLECTANCE_MULT_BAND_.|TEMPERATURE_MULT_BAND_ST_B10']);
  57. var offsetImg = getFactorImg([
  58. 'REFLECTANCE_ADD_BAND_.|TEMPERATURE_ADD_BAND_ST_B10']);
  59. var scaled = image.select('SR_B.|ST_B10').multiply(scaleImg).add(offsetImg);
  60. // 用按比例的波段替换原来的波段,并添加mask。
  61. return image.addBands(scaled, null, true).addBands([qaMask1, qaMask2]);
  62. }
  63. //** 波段选择
  64. //** Surface Reflectance
  65. var l8_bands_sr = ['SR_B1','SR_B2','SR_B3','SR_B4','SR_B5','SR_B6','SR_B7'];
  66. var L8SR_new_names = ['SR_ULTRABLUE','SR_BLUE','SR_GREEN','SR_RED','SR_NIR','SR_SWIR1','SR_SWIR2'];
  67. //============================================================================\\
  68. /*
  69. 3. 应用函数到影像 (TOA & SR)
  70. */
  71. //=============================================================================\\
  72. var L8SR_1 = L8SR_collection.filterDate(start,end)
  73. .filter(ee.Filter.lte(cloudProperty,cloudcover))
  74. .sort(cloudProperty)
  75. .filterBounds(geometry_1)
  76. .map(maskL8sr)
  77. .select(l8_bands_sr,L8SR_new_names)
  78. .first()
  79. //.clip(roi)
  80. var L8SR_2 = L8SR_collection.filterDate(start,end)
  81. .filter(ee.Filter.lte(cloudProperty,cloudcover))
  82. .sort(cloudProperty)
  83. .filterBounds(geometry_2)
  84. .map(maskL8sr)
  85. .select(l8_bands_sr,L8SR_new_names)
  86. .first()
  87. //.clip(roi)
  88. var collection = ee.ImageCollection([L8SR_1,L8SR_2])
  89. var L8_SRMosaic = collection.median()
  90. //============================================================================\\
  91. /*
  92. 4. 可视化参数设定 (TOA & SR)
  93. */
  94. //=============================================================================\\
  95. //** Prefered band combination
  96. var truecolor_SR = ['SR_RED','SR_GREEN','SR_BLUE']
  97. var falsecolor_SR = ['SR_NIR','SR_SWIR1','SR_SWIR2']
  98. var l8SR_visualization = {
  99. bands: falsecolor_SR,
  100. min: 0.05,
  101. max: 0.39,
  102. };
  103. //============================================================================\\
  104. /*
  105. 5. 添加图层到地图上
  106. */
  107. //=============================================================================\\
  108. Map.addLayer (L8_SRMosaic.clip(roi),l8SR_visualization,'L8 SR Mosaic'+start+'/'+end)

处理完后有很明显的条带信息 

 我们这里面并不是通过最大、最小或者中位数的不同合成来改变影像的色调,我们需要色彩平衡函数来完成,这里有两个博客链接提供给大家:

(1233条消息) GEE(Google Earth Engine)消除影像色差——直方图匹配算法_此星光明的博客-CSDN博客

(1233条消息) Google Earth Engine(GEE)——python影像色差匹配(直方图匹配算法)万字长文_此星光明的博客-CSDN博客_python 色差计算

文章来源: blog.csdn.net,作者:此星光明,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_31988139/article/details/127011695

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。