文章目录
- 前言
- 步骤
- 1.ENVI:打开Image Registration Workflow
- 2.Image Registration Workflow
- (1)选择GF2为Base Image File,某季节Sentinel2为Warp,然后Next
- (2)修改该参数为100
- (3)人为选择5个左右控制点,然后Next
- (4)删除离谱点
- (5)在ENVI输出配准好的Sentinel影像为.tiff
- 最后
前言
由于GF-2影像的地理偏移,我们需要在地理上配准下载的Sentinel-2(4季节)和GF-2。

链接:https://pan.baidu.com/s/1Tt-v2WqEpl26zN4LMeyF-w
提取码:kout
步骤
需要准备:1.ENVI;2.区域A的GF-2影像;3.区域A对应的四季节的哨兵影像。
哨兵影像要根据GF-2的矢量框,在Gee下载,矢量框的获取较为简单:
①定义地理坐标系为WGS1984;②重分类;③栅格转面
Gee下载四季影像
1.ENVI:打开Image Registration Workflow

2.Image Registration Workflow
(1)选择GF2为Base Image File,某季节Sentinel2为Warp,然后Next

(2)修改该参数为100

(3)人为选择5个左右控制点,然后Next
点“Start Editing"后便可以开始选择控制点

在GF-2上,瞅准某个位置,然后鼠标左键按下(出现十字),然后鼠标右键点击,弹出下图窗口,点击”Accept as Individual Points",然后会自动跳转到Sentinel-2影像,找到对应位置的点,同操作,便完成了控制点1的人工选择。

你也可以随时"Stop Editing",然后通过来回点击"Switch to Wrap"来查看两幅影像,去寻找你认为合适的控制点(我通常会选择十字路口、房屋或桥的交界处)。唯一需要注意的是,你决定要去选控制点时(“Start Editing”),第一个Accept是要在GF-2影像上点击的(有时候"Switch to Wrap"后,你没有切回Base Image,即使显示的是Wrap Image,你Accept的这个点,实际是在Base Image上的,这会导致你选择的控制点完全匹配不上)。
(4)删除离谱点
这时它自动选好了控制点,点击"Show Table"。





(5)在ENVI输出配准好的Sentinel影像为.tiff

Sentinel{}/Warpsenti{}_C.tiff
例如:目标区域1:
Sentinel1/Warpsenti1_C.tiff
Sentinel1/Warpsenti1_X.tiff
Sentinel1/Warpsenti1_Q.tiff
Sentinel1/Warpsenti1_D.tiff

最后
如果以GF-2为Base Image,那么每个区域要做4次配准,n个区域就是4n次配准;
如果以Sentinel-2为Base Image,那么每个区域只需要做1次配准,但最终的耕地结果可能和比赛方的“参考答案”存在地理偏差,不知道会不会因此影响比赛分数。
如果不影响,那么就能大大节省时间!
Gee代码:
//—————————————————————————————需要修改的参数1:ro 矢量框路径————————————————————————
var ro = ee.FeatureCollection("users/Liuyifei/MAP_data/Studyarea/huantai");
ro = ro.first().geometry()
function maskS2clouds(image) {var qa = image.select('QA60');// Bits 10 and 11 are clouds and cirrus, respectively.var cloudBitMask = 1 << 10;var cirrusBitMask = 1 << 11;// Both flags should be set to zero, indicating clear conditions.var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(qa.bitwiseAnd(cirrusBitMask).eq(0));return image.updateMask(mask).divide(10000);
}
var Mlt = function(image) {return image.multiply(10000);
};
//——————————————————————需要修改的参数2:folderr 第几个目标区域,只改数字————————————————————————
var folderr='Mapsenti'+'1';
//——————————————————————其它不需要动了————————————————————————
var start1='2020-12-01';
var end1='2021-03-01';
var dirname1=folderr+'_D';var start2='2020-03-01';
var end2='2020-06-01';
var dirname2=folderr+'_C';var start3='2021-06-01';
var end3='2021-09-01';
var dirname3=folderr+'_X';var start4='2020-09-01';
var end4='2020-12-01';
var dirname4=folderr+'_Q';
// Map the function over one year of data.// Load Sentinel-2 TOA reflectance data.//export data1
var exportdataset1 = ee.ImageCollection('COPERNICUS/S2_SR').filterBounds(ro).filterDate(start1,end1)// Pre-filter to get less cloudy granules..filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))// .sort('CLOUDY_PIXEL_PERCENTAGE',false).map(maskS2clouds).select(['B2','B3', 'B4', 'B8']);var exp1=exportdataset1.map(Mlt)
var mosaic1 = exp1.median().clip(ro);Map.addLayer(mosaic1, {bands: ['B4', 'B3', 'B2'],min:0.0,max:0.3,gamma:0.5}, 'Crop Landcover');Export.image.toDrive({image:mosaic1,description:dirname1,scale:10,folder :folderr,// crs: "EPSG:32649",maxPixels: 1e13,region:ro,fileFormat: 'GeoTIFF',formatOptions: {cloudOptimized: true}});
var num=exportdataset1.size()
print('Winter',num)
//export data2
var exportdataset2 = ee.ImageCollection('COPERNICUS/S2_SR').filterBounds(ro).filterDate(start2,end2)// Pre-filter to get less cloudy granules..filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20)).map(maskS2clouds).select(['B2','B3', 'B4', 'B8']);var exp2=exportdataset2.map(Mlt);
var mosaic2 = exp2.median().clip(ro);Export.image.toDrive({image:mosaic2,description:dirname2,scale:10,folder :folderr,// crs: "EPSG:32649",maxPixels: 1e13,region:ro,fileFormat: 'GeoTIFF',formatOptions: {cloudOptimized: true}});
var num=exportdataset2.size()
print('Spring',num)
//export data3
var exportdataset3 = ee.ImageCollection('COPERNICUS/S2_SR').filterBounds(ro).filterDate(start3,end3)// Pre-filter to get less cloudy granules..filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20)).map(maskS2clouds).select(['B2','B3', 'B4', 'B8']);var exp3=exportdataset3.map(Mlt);
var mosaic3 = exp3.median().clip(ro);Export.image.toDrive({image:mosaic3,description:dirname3,scale:10,folder :folderr,// crs: "EPSG:32649",maxPixels: 1e13,region:ro,fileFormat: 'GeoTIFF',formatOptions: {cloudOptimized: true}});
var num=exportdataset3.size()
print('Summer',num)
//export data4
var exportdataset4 = ee.ImageCollection('COPERNICUS/S2_SR').filterBounds(ro).filterDate(start4,end4)// Pre-filter to get less cloudy granules..filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20)).map(maskS2clouds).select(['B2','B3', 'B4', 'B8']);var exp4=exportdataset4.map(Mlt);
var mosaic4 = exp4.median().clip(ro);Export.image.toDrive({image:mosaic4,description:dirname4,scale:10,folder :folderr,// crs: "EPSG:32649",maxPixels: 1e13,region:ro,fileFormat: 'GeoTIFF',formatOptions: {cloudOptimized: true}});
var num=exportdataset4.size()
print('Autumn',num)'''