SNAP批量处理Sentinel-1A数据
通常情况,使用SNAP处理单景影像有两种方式,一是在SNAP中按照预处理步骤一个功能一个功能地处理数据,另一种是创建流程图直接运行得到最终的结果。
然而,当遇到时序数据时,上述做法显然不适用,这种情况下,我们可以采用gpt+流程图处理批量数据
.
具体操作流程如下(本实验数据为广州市2018年Sentinel-1A SAR影像,示例步骤为生成每一景影像的C2矩阵并配准)
SNAP批量处理Sentinel-1A数据
打开Windows PowerShell编译器
首先找到snap gpt的位置,选择【文件】->【Windows PowerShell】
在命令行,输入cmd
运行gpt(总览)
本实验目的是生成一年影像的C2矩阵,并配准
我们可以将此过程分解为三个步骤:
1、对参考影像进行极化预处理,便于后面配准
2、对每一景影像进行极化预处理
3、对极化预处理后的C2矩阵进行配准
总的gpt代码如下:
## 极化预处理——获取C2矩阵
# 打开cmd
cmd
# 对参考影像进行极化预处理
gpt F:\Data\S1_Guangzhou\C2-graph-main\1Reference.xml
# 对S1数据进行极化预处理
for /r "F:\Data\S1_Guangzhou\Sum" %X in (*.zip) do (gpt F:\Data\S1_Guangzhou\C2-graph-main\1Sum.xml -Pinput=%X -Poutput="F:\Data\S1_Guangzhou\S2_features\Subset_%~nX_features.dim")
# 对时序S1数据进行配准
for /r "F:\Data\S1_Guangzhou\S2_features" %X in (*.dim) do (gpt F:\Data\S1_Guangzhou\C2-graph-main\1Coregister.xml -Pinput=%X)
!!!注意:
1、循环的语句中的路径需要根据需求修改
2、xml文件可根据需要在SNAP中创建
3、xml文件创建好后,将原有的输入路径改为$ input,输入路径改为$ output,结合for循环即可实现遍历
Step1:对参考影像进行极化预处理
SNAP中创建的流程图以及xml文件内容如下:
<graph id="Graph">
<version>1.0</version>
<node id="Read">
<operator>Read</operator>
<sources/>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<file>F:\Data\S1_Guangzhou\S1A_IW_SLC__1SDV_20200108T103351_20200108T103419_030708_03852A_7855.zip</file>
</parameters>
</node>
<node id="Apply-Orbit-File">
<operator>Apply-Orbit-File</operator>
<sources>
<sourceProduct refid="Read"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<orbitType>Sentinel Precise (Auto Download)</orbitType>
<polyDegree>3</polyDegree>
<continueOnFail>true</continueOnFail>
</parameters>
</node>
<node id="TOPSAR-Split">
<operator>TOPSAR-Split</operator>
<sources>
<sourceProduct refid="Apply-Orbit-File"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<subswath>IW2</subswath>
<selectedPolarisations/>
<firstBurstIndex>3</firstBurstIndex>
<lastBurstIndex>6</lastBurstIndex>
<wktAoi/>
</parameters>
</node>
<node id="Calibration">
<operator>Calibration</operator>
<sources>
<sourceProduct refid="TOPSAR-Split"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<sourceBands/>
<auxFile>Latest Auxiliary File</auxFile>
<externalAuxFile/>
<outputImageInComplex>true</outputImageInComplex>
<outputImageScaleInDb>false</outputImageScaleInDb>
<createGammaBand>false</createGammaBand>
<createBetaBand>false</createBetaBand>
<selectedPolarisations/>
<outputSigmaBand>true</outputSigmaBand>
<outputGammaBand>false</outputGammaBand>
<outputBetaBand>false</outputBetaBand>
</parameters>
</node>
<node id="TOPSAR-Deburst">
<operator>TOPSAR-Deburst</operator>
<sources>
<sourceProduct refid="Calibration"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<selectedPolarisations/>
</parameters>
</node>
<node id="Subset">
<operator>Subset</operator>
<sources>
<sourceProduct refid="TOPSAR-Deburst"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<sourceBands/>
<region>0,0,0,0</region>
<referenceBand/>
<geoRegion>POLYGON ((113.17552185058594 23.3626651763916, 113.56804656982422 23.3626651763916, 113.56804656982422 22.93994140625, 113.17552185058594 22.93994140625, 113.17552185058594 23.3626651763916, 113.17552185058594 23.3626651763916))</geoRegion>
<subSamplingX>1</subSamplingX>
<subSamplingY>1</subSamplingY>
<fullSwath>false</fullSwath>
<tiePointGrids/>
<copyMetadata>true</copyMetadata>
</parameters>
</node>
<node id="Polarimetric-Matrices">
<operator>Polarimetric-Matrices</operator>
<sources>
<sourceProduct refid="Subset"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<matrix>C2</matrix>
</parameters>
</node>
<node id="Multilook">
<operator>Multilook</operator>
<sources>
<sourceProduct refid="Polarimetric-Matrices"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<sourceBands/>
<nRgLooks>4</nRgLooks>
<nAzLooks>1</nAzLooks>
<outputIntensity>false</outputIntensity>
<grSquarePixel>true</grSquarePixel>
</parameters>
</node>
<node id="Terrain-Correction">
<operator>Terrain-Correction</operator>
<sources>
<sourceProduct refid="Polarimetric-Speckle-Filter"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<sourceBands/>
<demName>SRTM 1Sec HGT</demName>
<externalDEMFile/>
<externalDEMNoDataValue>0.0</externalDEMNoDataValue>
<externalDEMApplyEGM>true</externalDEMApplyEGM>
<demResamplingMethod>BILINEAR_INTERPOLATION</demResamplingMethod>
<imgResamplingMethod>BILINEAR_INTERPOLATION</imgResamplingMethod>
<pixelSpacingInMeter>14.73</pixelSpacingInMeter>
<pixelSpacingInDegree>1.3232184135080554E-4</pixelSpacingInDegree>
<mapProjection>GEOGCS["WGS84(DD)", 
DATUM["WGS84", 
SPHEROID["WGS84", 6378137.0, 298.257223563]], 
PRIMEM["Greenwich", 0.0], 
UNIT["degree", 0.017453292519943295], 
AXIS["Geodetic longitude", EAST], 
AXIS["Geodetic latitude", NORTH]]</mapProjection>
<alignToStandardGrid>false</alignToStandardGrid>
<standardGridOriginX>0.0</standardGridOriginX>
<standardGridOriginY>0.0</standardGridOriginY>
<nodataValueAtSea>true</nodataValueAtSea>
<saveDEM>false</saveDEM>
<saveLatLon>false</saveLatLon>
<saveIncidenceAngleFromEllipsoid>false</saveIncidenceAngleFromEllipsoid>
<saveLocalIncidenceAngle>false</saveLocalIncidenceAngle>
<saveProjectedLocalIncidenceAngle>false</saveProjectedLocalIncidenceAngle>
<saveSelectedSourceBand>true</saveSelectedSourceBand>
<saveLayoverShadowMask>false</saveLayoverShadowMask>
<applyRadiometricNormalization>false</applyRadiometricNormalization>
<saveSigmaNought>false</saveSigmaNought>
<saveGammaNought>false</saveGammaNought>
<saveBetaNought>false</saveBetaNought>
<incidenceAngleForSigma0>Use projected local incidence angle from DEM</incidenceAngleForSigma0>
<incidenceAngleForGamma0>Use projected local incidence angle from DEM</incidenceAngleForGamma0>
<auxFile>Latest Auxiliary File</auxFile>
<externalAuxFile/>
</parameters>
</node>
<node id="Polarimetric-Speckle-Filter">
<operator>Polarimetric-Speckle-Filter</operator>
<sources>
<sourceProduct refid="Multilook"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<filter>Refined Lee Filter</filter>
<filterSize>5</filterSize>
<numLooksStr>1</numLooksStr>
<windowSize>7x7</windowSize>
<targetWindowSizeStr>3x3</targetWindowSizeStr>
<anSize>50</anSize>
<sigmaStr>0.9</sigmaStr>
<searchWindowSizeStr>15</searchWindowSizeStr>
<patchSizeStr>5</patchSizeStr>
<scaleSizeStr>1</scaleSizeStr>
</parameters>
</node>
<node id="Write">
<operator>Write</operator>
<sources>
<sourceProduct refid="Terrain-Correction"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<file>F:\Data\S1_Guangzhou\Reference.dim</file>
<formatName>BEAM-DIMAP</formatName>
</parameters>
</node>
<applicationData id="Presentation">
<Description/>
<node id="Read">
<displayPosition x="14.0" y="52.0"/>
</node>
<node id="Apply-Orbit-File">
<displayPosition x="91.0" y="53.0"/>
</node>
<node id="TOPSAR-Split">
<displayPosition x="201.0" y="54.0"/>
</node>
<node id="Calibration">
<displayPosition x="301.0" y="55.0"/>
</node>
<node id="TOPSAR-Deburst">
<displayPosition x="409.0" y="56.0"/>
</node>
<node id="Subset">
<displayPosition x="436.0" y="106.0"/>
</node>
<node id="Polarimetric-Matrices">
<displayPosition x="403.0" y="150.0"/>
</node>
<node id="Multilook">
<displayPosition x="437.0" y="195.0"/>
</node>
<node id="Terrain-Correction">
<displayPosition x="568.0" y="249.0"/>
</node>
<node id="Polarimetric-Speckle-Filter">
<displayPosition x="390.0" y="248.0"/>
</node>
<node id="Write">
<displayPosition x="704.0" y="250.0"/>
</node>
</applicationData>
</graph>
Step2:对时序S1数据进行极化预处理
SNAP中创建的流程图以及xml文件内容如下:
在这里插入代码片<graph id="Graph">
<version>1.0</version>
<node id="Read">
<operator>Read</operator>
<sources/>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<file>$input</file>
</parameters>
</node>
<node id="Apply-Orbit-File">
<operator>Apply-Orbit-File</operator>
<sources>
<sourceProduct refid="Read"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<orbitType>Sentinel Precise (Auto Download)</orbitType>
<polyDegree>3</polyDegree>
<continueOnFail>true</continueOnFail>
</parameters>
</node>
<node id="TOPSAR-Split">
<operator>TOPSAR-Split</operator>
<sources>
<sourceProduct refid="Apply-Orbit-File"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<subswath>IW2</subswath>
<selectedPolarisations/>
<firstBurstIndex>3</firstBurstIndex>
<lastBurstIndex>6</lastBurstIndex>
<wktAoi/>
</parameters>
</node>
<node id="Calibration">
<operator>Calibration</operator>
<sources>
<sourceProduct refid="TOPSAR-Split"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<sourceBands/>
<auxFile>Latest Auxiliary File</auxFile>
<externalAuxFile/>
<outputImageInComplex>true</outputImageInComplex>
<outputImageScaleInDb>false</outputImageScaleInDb>
<createGammaBand>false</createGammaBand>
<createBetaBand>false</createBetaBand>
<selectedPolarisations/>
<outputSigmaBand>true</outputSigmaBand>
<outputGammaBand>false</outputGammaBand>
<outputBetaBand>false</outputBetaBand>
</parameters>
</node>
<node id="TOPSAR-Deburst">
<operator>TOPSAR-Deburst</operator>
<sources>
<sourceProduct refid="Calibration"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<selectedPolarisations/>
</parameters>
</node>
<node id="Subset">
<operator>Subset</operator>
<sources>
<sourceProduct refid="TOPSAR-Deburst"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<sourceBands/>
<region>0,0,0,0</region>
<referenceBand/>
<geoRegion>POLYGON ((113.17552185058594 23.3626651763916, 113.56804656982422 23.3626651763916, 113.56804656982422 22.93994140625, 113.17552185058594 22.93994140625, 113.17552185058594 23.3626651763916, 113.17552185058594 23.3626651763916))</geoRegion>
<subSamplingX>1</subSamplingX>
<subSamplingY>1</subSamplingY>
<fullSwath>false</fullSwath>
<tiePointGridNames/>
<copyMetadata>true</copyMetadata>
</parameters>
</node>
<node id="Polarimetric-Matrices">
<operator>Polarimetric-Matrices</operator>
<sources>
<sourceProduct refid="Subset"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<matrix>C2</matrix>
</parameters>
</node>
<node id="Multilook">
<operator>Multilook</operator>
<sources>
<sourceProduct refid="Polarimetric-Matrices"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<sourceBands/>
<nRgLooks>4</nRgLooks>
<nAzLooks>1</nAzLooks>
<outputIntensity>false</outputIntensity>
<grSquarePixel>true</grSquarePixel>
</parameters>
</node>
<node id="Terrain-Correction">
<operator>Terrain-Correction</operator>
<sources>
<sourceProduct refid="Polarimetric-Speckle-Filter"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<sourceBands/>
<demName>SRTM 1Sec HGT</demName>
<externalDEMFile/>
<externalDEMNoDataValue>0.0</externalDEMNoDataValue>
<externalDEMApplyEGM>true</externalDEMApplyEGM>
<demResamplingMethod>BILINEAR_INTERPOLATION</demResamplingMethod>
<imgResamplingMethod>BILINEAR_INTERPOLATION</imgResamplingMethod>
<pixelSpacingInMeter>14.73</pixelSpacingInMeter>
<pixelSpacingInDegree>1.3232184135080554E-4</pixelSpacingInDegree>
<mapProjection>GEOGCS["WGS84(DD)", 
DATUM["WGS84", 
SPHEROID["WGS84", 6378137.0, 298.257223563]], 
PRIMEM["Greenwich", 0.0], 
UNIT["degree", 0.017453292519943295], 
AXIS["Geodetic longitude", EAST], 
AXIS["Geodetic latitude", NORTH]]</mapProjection>
<alignToStandardGrid>false</alignToStandardGrid>
<standardGridOriginX>0.0</standardGridOriginX>
<standardGridOriginY>0.0</standardGridOriginY>
<nodataValueAtSea>true</nodataValueAtSea>
<saveDEM>false</saveDEM>
<saveLatLon>false</saveLatLon>
<saveIncidenceAngleFromEllipsoid>false</saveIncidenceAngleFromEllipsoid>
<saveLocalIncidenceAngle>false</saveLocalIncidenceAngle>
<saveProjectedLocalIncidenceAngle>false</saveProjectedLocalIncidenceAngle>
<saveSelectedSourceBand>true</saveSelectedSourceBand>
<outputComplex>false</outputComplex>
<applyRadiometricNormalization>false</applyRadiometricNormalization>
<saveSigmaNought>false</saveSigmaNought>
<saveGammaNought>false</saveGammaNought>
<saveBetaNought>false</saveBetaNought>
<incidenceAngleForSigma0>Use projected local incidence angle from DEM</incidenceAngleForSigma0>
<incidenceAngleForGamma0>Use projected local incidence angle from DEM</incidenceAngleForGamma0>
<auxFile>Latest Auxiliary File</auxFile>
<externalAuxFile/>
</parameters>
</node>
<node id="Polarimetric-Speckle-Filter">
<operator>Polarimetric-Speckle-Filter</operator>
<sources>
<sourceProduct refid="Multilook"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<filter>Refined Lee Filter</filter>
<filterSize>5</filterSize>
<numLooksStr>1</numLooksStr>
<windowSize>7x7</windowSize>
<targetWindowSizeStr>3x3</targetWindowSizeStr>
<anSize>50</anSize>
<sigmaStr>0.9</sigmaStr>
<searchWindowSizeStr>15</searchWindowSizeStr>
<patchSizeStr>5</patchSizeStr>
<scaleSizeStr>1</scaleSizeStr>
</parameters>
</node>
<node id="Write">
<operator>Write</operator>
<sources>
<sourceProduct refid="Terrain-Correction"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<file>$output</file>
<formatName>BEAM-DIMAP</formatName>
</parameters>
</node>
<applicationData id="Presentation">
<Description/>
<node id="Read">
<displayPosition x="14.0" y="52.0"/>
</node>
<node id="Apply-Orbit-File">
<displayPosition x="91.0" y="53.0"/>
</node>
<node id="TOPSAR-Split">
<displayPosition x="201.0" y="54.0"/>
</node>
<node id="Calibration">
<displayPosition x="301.0" y="55.0"/>
</node>
<node id="TOPSAR-Deburst">
<displayPosition x="409.0" y="56.0"/>
</node>
<node id="Subset">
<displayPosition x="436.0" y="106.0"/>
</node>
<node id="Polarimetric-Matrices">
<displayPosition x="403.0" y="150.0"/>
</node>
<node id="Multilook">
<displayPosition x="437.0" y="195.0"/>
</node>
<node id="Terrain-Correction">
<displayPosition x="568.0" y="249.0"/>
</node>
<node id="Polarimetric-Speckle-Filter">
<displayPosition x="390.0" y="248.0"/>
</node>
<node id="Write">
<displayPosition x="704.0" y="250.0"/>
</node>
</applicationData>
</graph>
Step3:对时序C2数据进行配准
SNAP中创建的流程图以及xml文件内容如下:
<graph id="Graph">
<version>1.0</version>
<node id="CreateStack">
<operator>CreateStack</operator>
<sources>
<sourceProduct.2 refid="ProductSet-Reader"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<masterBands/>
<sourceBands/>
<resamplingType>NONE</resamplingType>
<extent>Master</extent>
<initialOffsetMethod>Orbit</initialOffsetMethod>
</parameters>
</node>
<node id="Cross-Correlation">
<operator>Cross-Correlation</operator>
<sources>
<sourceProduct refid="CreateStack"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<numGCPtoGenerate>200</numGCPtoGenerate>
<coarseRegistrationWindowWidth>64</coarseRegistrationWindowWidth>
<coarseRegistrationWindowHeight>64</coarseRegistrationWindowHeight>
<rowInterpFactor>2</rowInterpFactor>
<columnInterpFactor>2</columnInterpFactor>
<maxIteration>2</maxIteration>
<gcpTolerance>0.5</gcpTolerance>
<applyFineRegistration>false</applyFineRegistration>
<inSAROptimized>false</inSAROptimized>
<fineRegistrationWindowWidth>64</fineRegistrationWindowWidth>
<fineRegistrationWindowHeight>64</fineRegistrationWindowHeight>
<fineRegistrationWindowAccAzimuth/>
<fineRegistrationWindowAccRange/>
<fineRegistrationOversampling/>
<coherenceWindowSize>3</coherenceWindowSize>
<coherenceThreshold>0.6</coherenceThreshold>
<useSlidingWindow>false</useSlidingWindow>
<computeOffset>false</computeOffset>
<onlyGCPsOnLand>false</onlyGCPsOnLand>
</parameters>
</node>
<node id="Warp">
<operator>Warp</operator>
<sources>
<sourceProduct refid="Cross-Correlation"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<rmsThreshold>1.0</rmsThreshold>
<warpPolynomialOrder>1</warpPolynomialOrder>
<interpolationMethod>Bilinear interpolation</interpolationMethod>
<demRefinement/>
<demName/>
<excludeMaster>false</excludeMaster>
<openResidualsFile>false</openResidualsFile>
</parameters>
</node>
<node id="Write">
<operator>Write</operator>
<sources>
<sourceProduct refid="Warp"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<file>F:\Data\S1_Guangzhou\C2_features_Stack.dim</file>
<formatName>BEAM-DIMAP</formatName>
</parameters>
</node>
<node id="ProductSet-Reader">
<operator>ProductSet-Reader</operator>
<sources/>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<fileList>F:\Data\S1_Guangzhou\Reference.dim,$input</fileList>
</parameters>
</node>
<applicationData id="Presentation">
<Description/>
<node id="CreateStack">
<displayPosition x="154.0" y="101.0"/>
</node>
<node id="Cross-Correlation">
<displayPosition x="248.0" y="100.0"/>
</node>
<node id="Warp">
<displayPosition x="373.0" y="100.0"/>
</node>
<node id="Write">
<displayPosition x="449.0" y="101.0"/>
</node>
<node id="ProductSet-Reader">
<displayPosition x="24.0" y="99.0"/>
</node>
</applicationData>
</graph>
所有的文件可在C2_features_Stack文件夹中找到,后续处理可在matlab中进行