更新大气延迟校正算法新增输出校正后的解缠图。

更新正射配准模块,修改影像过大时读取报错的问题。
更新后向散射系数结果为方像元
dev
tian jiax 2024-08-28 16:53:27 +08:00
parent dd590cf38c
commit 42e93fdd33
77 changed files with 317 additions and 119 deletions

View File

@ -538,6 +538,7 @@ class OrthoMain:
# 对映射表进行校正
sim_ori_tiff = out_dir_path + "\\" + "RD_sim_ori.tif"
out_sim_ori = out_dir_path + "\\" + "sim_ori-ortho.tif"
out_sim_ori_temp = self.__workspace_baseMap_path + "\\" + "sim_ori-ortho.tif"
parameter_path = os.path.join(self.__workspace_package_path, "orth_para.txt")
in_tif_paths = list(glob.glob(os.path.join(slc_paths, '*.tiff')))
out_rpc_db = os.path.join(self.__workspace_baseMap_path, 'rpc_line.tif')
@ -573,7 +574,9 @@ class OrthoMain:
lon_new = im_geotrans[0] + x
lat_new = im_geotrans[3] - y
im_geosNew = [lon_new, im_geotrans[1], im_geotrans[2], lat_new, im_geotrans[4], im_geotrans[5]]
ImageHandler().write_img(out_sim_ori, im_proj, im_geosNew, im_arr)
# ImageHandler().write_img(out_sim_ori, im_proj, im_geosNew, im_arr)
ImageHandler().write_img(out_sim_ori_temp, im_proj, im_geosNew, im_arr)
pp.resample_by_gdal(out_sim_ori_temp, out_sim_ori) # todo 重采样为方像元
os.remove(sim_ori_tiff)
return out_sim_ori
@ -779,3 +782,4 @@ if __name__ == '__main__':
pass
end = datetime.datetime.now()
logger.info('running use time: %s ' % (end - start))

View File

@ -49,7 +49,7 @@
<MinValue>DEFAULT</MinValue>
<MaxValue>DEFAULT</MaxValue>
<ParaValue>
F:\VegetationPhenology-likun\rusuoces\GF3C_MYC_QPSI_006270_E100.4_N27.0_20230615_L1A_AHV_L10000158764.tar.gz</ParaValue>
F:\isce_yuan\lancover-yuan\GF3B_KSC_QPSI_010328_E86.1_N44.5_20231109_L1A_AHV_L10000262134.tar.gz</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>False</EnMultipleChoice>
<Control>File</Control>
@ -62,12 +62,12 @@
<ParaChsName>DEM数字高程影像</ParaChsName>
<Description>30m分辨率DEM数字高程影像tif</Description>
<ParaType>File</ParaType>
<DataType>File</DataType>
<DataType>tif</DataType>
<OptionValue>DEFAULT</OptionValue>
<MinValue>DEFAULT</MinValue>
<MaxValue>DEFAULT</MaxValue>
<ParaSource>Cal</ParaSource>
<ParaValue>F:\VegetationPhenology-likun\rusuoces\dem</ParaValue>
<ParaValue>F:\xibei_LandCover\dem.tif</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>True</EnMultipleChoice>
<Control>File</Control>
@ -86,7 +86,7 @@
<MinValue>DEFAULT</MinValue>
<MaxValue>DEFAULT</MaxValue>
<ParaValue>
F:\VegetationPhenology-likun\rusuoces\S1A</ParaValue>
F:\isce_yuan\lancover-yuan\S1A_map</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>False</EnMultipleChoice>
<Control>File</Control>
@ -121,7 +121,7 @@
<ParaType>File</ParaType>
<DataType>tar.gz</DataType>
<ParaSource>Cal</ParaSource>
<ParaValue>D:\micro\WorkSpace\ortho\Output\GF3C_MYC_QPSI_006270_E100.4_N27.0_20230615_L1A_AHV_L10000158764-ortho.tar.gz</ParaValue>
<ParaValue>D:\micro\WorkSpace\ortho\Output\GF3B_KSC_QPSI_010328_E86.1_N44.5_20231109_L1A_AHV_L10000262134-ortho.tar.gz</ParaValue>
<OptionValue>DEFAULT</OptionValue>
<MinValue>DEFAULT</MinValue>
<MaxValue>DEFAULT</MaxValue>

View File

@ -142,7 +142,7 @@
<ParaType>File</ParaType>
<DataType>tar.gz</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>D:\micro\WorkSpace\AtmosphericDelay\Output\GF3_SAY_FSI_001614_E113.2_N34.5_20161129_L1A_HHHV_L10002015686</ParaValue>
<ParaValue>D:\micro\WorkSpace\AtmosphericDelay\Output\GF3_SAY_FSI_001614_E113.2_N34.5_20161129_L1A_HHHV_L10002015686-IADC.tar.gz</ParaValue>
</Parameter>
</Outputs>
</AlgCompt>

View File

@ -924,6 +924,8 @@ class AtmosphericMain:
self.atmospheric_product_path = self.__workspace_atmos_dely_path + srcName_m + tar + ".tif"
out_pha_path = os.path.join(apsWork, 'topo_pha.tiff')
bias_result = createpha(master_pha, aux_pha, mas_lambd, out_pha_path)
out_result_path = os.path.join(apsWork, 'topo_pha_ERA5.tif')
correct_single_ifgram(Filt_path, out_pha_path, out_result_path)
# bias_result = correct_single_ifgram(Filt_path, out_pha_path, self.atmospheric_product_path) # 剔除相位延迟后的数组->剔除相位延迟干涉图
ImageHandler.write_img(self.atmospheric_product_path, self.__proj, self.__geo, bias_result) # 剔除相位延迟后的数组->剔除相位延迟干涉图

View File

@ -298,6 +298,7 @@ class ScatteringMain:
# 对映射表进行校正
sim_ori_tiff = out_dir_path + "\\" + "RD_sim_ori.tif"
out_sim_ori = out_dir_path + "\\" + "sim_ori-ortho.tif"
out_sim_ori_temp = self.__workspace_baseMap_path + "\\" + "sim_ori-ortho.tif"
parameter_path = os.path.join(self.__workspace_processing_path, "orth_para.txt")
in_tif_paths = list(glob.glob(os.path.join(slc_paths, '*.tiff')))
out_rpc_db = os.path.join(self.__workspace_baseMap_path, 'rpc_line.tif')
@ -333,7 +334,8 @@ class ScatteringMain:
lon_new = im_geotrans[0] + x
lat_new = im_geotrans[3] - y
im_geosNew = [lon_new, im_geotrans[1], im_geotrans[2], lat_new, im_geotrans[4], im_geotrans[5]]
ImageHandler().write_img(out_sim_ori, im_proj, im_geosNew, im_arr)
ImageHandler().write_img(out_sim_ori_temp, im_proj, im_geosNew, im_arr)
pp.resample_by_gdal(out_sim_ori_temp, out_sim_ori) #todo 重采样为方像元
os.remove(sim_ori_tiff)
return out_sim_ori
@ -383,10 +385,8 @@ class ScatteringMain:
ortho_bsMap_path = self.__workspace_baseMap_path
bsMap_merged_path = DEMProcess.bsMap_merged(bsMap, meta_file_path, ortho_bsMap_path)
dem_path = self.cut_dem(dem_merged_path, meta_file_path)
in_slc_path = None
for slc_path in in_tif_paths:
if slc_path.find(".tiff") > 0 and (

View File

@ -1,6 +1,29 @@
# -*- mode: python ; coding: utf-8 -*-
import sys
from shutil import copy
import os
cwdpath = os.getcwd()
toolDir = os.path.join(cwdpath, 'tool')
if os.path.exists(toolDir):
os.remove(toolDir)
os.mkdir(toolDir)
source_folder = '../tool'
def copy_file(path_read, path_write):
names = os.listdir(path_read)
for name in names:
path_read_new = os.path.join(path_read, name)
path_write_new = os.path.join(path_write, name)
if os.path.isdir(path_read_new):
if not os.path.exists(path_write_new):
os.mkdir(path_write_new)
copy_file(path_read_new, path_write_new)
else:
copy(path_read_new, path_write_new)
copy_file(source_folder, toolDir)
block_cipher = None

View File

@ -42,7 +42,7 @@
<ParaType>File</ParaType>
<DataType>tar.gz</DataType>
<ParaSource>Cal</ParaSource>
<ParaValue>F:\VegetationPhenology-likun\rusuoces\GF3C_MYC_QPSI_006270_E100.4_N27.0_20230615_L1A_AHV_L10000158764.tar.gz</ParaValue>
<ParaValue>F:\MicroWorkspace\20240826Ortho\GF3B_MH1_UFS_012705_E116.4_N44.2_20240422_L1A_DH_L10000343416.tar.gz</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>False</EnMultipleChoice>
<Control>File</Control>
@ -57,7 +57,7 @@
<ParaType>File</ParaType>
<DataType>File</DataType>
<ParaSource>Cal</ParaSource>
<ParaValue>F:\VegetationPhenology-likun\lijiang\dem</ParaValue>
<ParaValue>F:\MicroWorkspace\20240826Ortho\dem</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>True</EnMultipleChoice>
<Control>File</Control>
@ -72,7 +72,7 @@
<ParaType>File</ParaType>
<DataType>File</DataType>
<ParaSource>Cal</ParaSource>
<ParaValue>F:\VegetationPhenology-likun\rusuoces\S1A</ParaValue>
<ParaValue>F:\MicroWorkspace\20240826Ortho\S1GBM</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>True</EnMultipleChoice>
<Control>File</Control>
@ -89,7 +89,7 @@
<ParaType>File</ParaType>
<DataType>tar.gz</DataType>
<ParaSource>Cal</ParaSource>
<ParaValue>D:\micro\WorkSpace\BackScattering\Output\GF3C_MYC_QPSI_006270_E100.4_N27.0_20230615_L1A_AHV_L10000158764-cal.tar.gz</ParaValue>
<ParaValue>D:\micro\WorkSpace\BackScattering\Output\GF3B_MH1_UFS_012705_E116.4_N44.2_20240422_L1A_DH_L10000343416-cal.tar.gz</ParaValue>
<MaxValue>DEFAULT</MaxValue>
<MinValue>DEFAULT</MinValue>
<OptionValue>DEFAULT</OptionValue>

View File

@ -79,7 +79,7 @@
<MinValue>DEFAULT</MinValue>
<MaxValue>DEFAULT</MaxValue>
<ParaSource>Man</ParaSource>
<ParaValue>34.62;34.67;113.15;113.18</ParaValue>
<ParaValue>empty</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>True</EnMultipleChoice>
<Control>UploadInput</Control>

View File

@ -87,9 +87,10 @@ def read_tiff_dataset(tiff_data,band_idx=0):
def saveTiff(target_data_path,xsize,ysize,gt,srs,target_arr):
driver = gdal.GetDriverByName('GTiff') # 数据类型必须有,因为要计算需要多大内存空间
target_arr[np.where(target_data_path == -9999)] = 0
tiff_geo=driver.Create(target_data_path, int(xsize)+1, int(ysize)+1, 1, gdal.GDT_Float32)
tiff_geo.GetRasterBand(1).WriteArray(target_arr)
tiff_geo.GetRasterBand(1).SetNoDataValue(-9999)
tiff_geo.GetRasterBand(1).SetNoDataValue(0)
tiff_geo.SetGeoTransform(gt)
tiff_geo.SetProjection(srs.ExportToWkt())
del tiff_geo
@ -136,10 +137,71 @@ def geoCoding(tree,X_min,X_max,Y_min,Y_max,block_size,value_data,target_arr):
return target_arr
def get_filt_fine_cor_path(isce_work_path):
flit_fine_cor_path_ls=[]
interferograms_path=os.path.join(isce_work_path,"Igrams")
for rootdir, dirs, files in os.walk(interferograms_path):
for filename in files:
# if filename=="filt_fine.unw.vrt":
if filename.endswith(".cor.vrt"):
flit_fine_cor_path_ls.append(os.path.join(rootdir, filename))
return flit_fine_cor_path_ls
def detrend_2d(unw_filename,cor_filename, out_file):
unwImg = ImageHandler.get_data(unw_filename)
# unwImg = unwImgt[1,:,:]
corImg = ImageHandler.get_data(cor_filename)
height = corImg.shape[0]
width = corImg.shape[1]
lines_intv = int(np.floor(height * 0.005))
width_intv = int(np.floor(width * 0.005))
x = np.arange(1, width, width_intv)
y = np.arange(1, height, lines_intv)
pointX = []
pointY = []
pointZ = []
for i in y:
for j in x:
if corImg[i,j] < 0.2:
continue
else:
pointX.append(j)
pointY.append(i)
pointZ.append(unwImg[i,j])
int_xy = np.multiply(np.array(pointX), np.array(pointY))
int_xx = np.multiply(np.array(pointX), np.array(pointX))
int_yy = np.multiply(np.array(pointY), np.array(pointY))
design_matrix = np.column_stack((np.array(pointX), np.array(pointY), int_xy, int_xx, int_yy))
X = np.linalg.lstsq(design_matrix, pointZ, rcond=None)[0]
a = X[0] # 系数1
b = X[1] # 系数2
c = X[2] # 系数3
d = X[3] # 系数4
e = X[4] # 系数5
dtd_unw = np.zeros((height, width), dtype=float)
for ii in range(width):
for jj in range(height):
str = a * (ii+1) + b * (jj+1) + c * (ii+1) * (jj+1) + d * (ii+1) * (ii+1) + e * (jj+1) * (jj+1)
# dtd_unw[ii, jj] = unwImg[ii, jj] - str
dtd_unw[jj, ii] = unwImg[jj, ii] - str
dtd_unw[np.where(corImg==0)] = 0
ImageHandler.write_img(out_file, '', [0.0, 1.0, 0.0, 0.0, 0.0, 1.0], dtd_unw)
return dtd_unw
def get_Dem(isce_work_path,temp_work_path,pack_path,product_name):
# lamda=get_lambel_sentinel(isce_work_path)
lamda=0.055517
filt_topophase_unw_path=get_filt_fine_unw_path(isce_work_path)[0]
filt_topophase_cor_path = get_filt_fine_cor_path(isce_work_path)[0]
unw_tiff_path=os.path.join(temp_work_path,"unw.tiff")
vrt2tiff(filt_topophase_unw_path,unw_tiff_path,1)
@ -166,7 +228,9 @@ def get_Dem(isce_work_path,temp_work_path,pack_path,product_name):
lat = lat_data[:, lat_data.shape[1]-1]
lat_min = np.min(lat)
lat_max = np.max(lat)
unw_data=read_tiff_dataset(unw_tiff_path,band_idx=0)
out_detrend_path = os.path.join(temp_work_path, "detrend_unw.tif")
unw_data = detrend_2d(unw_tiff_path, filt_topophase_cor_path, out_detrend_path)
# unw_data=read_tiff_dataset(unw_tiff_path,band_idx=0)
hgt_data=read_tiff_dataset(hgt_tiff_path,band_idx=0)
los_data=los_data.reshape(-1)
@ -230,9 +294,9 @@ def get_Dem(isce_work_path,temp_work_path,pack_path,product_name):
return dem_target_data_path
if __name__ == '__main__':
isce_work_path = r"D:\micro\WorkSpace\Dem\Temporary\processing\isce_workspace"
temp_work_path = r"D:\micro\WorkSpace\Dem\test"
out_work_path = r"D:\micro\WorkSpace\Dem\test"
product = r'D:\micro\WorkSpace\Dem\test\dem.tiff'
isce_work_path = r"D:\micro\WorkSpace\AtmosphericDelay\Temporary\isce\processing\isce_workspace"
temp_work_path = r"D:\micro\WorkSpace\AtmosphericDelay\Temporary\deformation"
out_work_path = r"D:\micro\WorkSpace\AtmosphericDelay\Temporary\deformation"
product = r'D:\micro\WorkSpace\AtmosphericDelay\Temporary\deformation\dem.tiff'
get_Dem(isce_work_path, temp_work_path, out_work_path, product)
pass

View File

@ -42,7 +42,7 @@
<MaxValue>DEFAULT</MaxValue>
<ParaSource>Cal</ParaSource>
<ParaValue>
F:\MicroWorkspace\GF3A_nanjing\input-ortho\GF3_SAY_QPSI_011444_E118.9_N31.4_20181012_L1A_AHV_L10003515422-ortho.tar.gz</ParaValue>
F:\isce_yuan\lancover-yuan\GF3B_KSC_QPSI_010328_E86.1_N44.5_20231109_L1A_AHV_L10000262134-ortho.tar.gz</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>False</EnMultipleChoice>
<Control>File</Control>
@ -55,12 +55,12 @@
<ParaChsName>标记数据</ParaChsName>
<Description>标记的样本数据</Description>
<ParaType>File</ParaType>
<DataType>zip</DataType>
<DataType>csv</DataType>
<OptionValue>DEFAULT</OptionValue>
<MinValue>DEFAULT</MinValue>
<MaxValue>DEFAULT</MaxValue>
<ParaSource>Cal</ParaSource>
<ParaValue>F:\al_zhongji\C-SAR-data\landcover\CSAR_land_LandCoverLable.zip</ParaValue>
<ParaValue>F:\isce_yuan\lancover-yuan\train_landConver1.csv</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>True</EnMultipleChoice>
<Control>UploadTable</Control>
@ -120,7 +120,7 @@
<MaxValue>DEFAULT</MaxValue>
<NoDataValue>DEFAULT</NoDataValue>
<ParaSource>Man</ParaSource>
<ParaValue>D:\micro\WorkSpace\LandCover\Output\GF3_SAY_QPSI_011444_E118.9_N31.4_20181012_L1A_AHV_L10003515422-ortho-LANDCLASS.tar.gz</ParaValue>
<ParaValue>D:\micro\WorkSpace\LandCover\Output\GF3B_KSC_QPSI_010328_E86.1_N44.5_20231109_L1A_AHV_L10000262134-ortho-LANDCLASS.tar.gz</ParaValue>
</Parameter>
</Outputs>
</AlgCompt>

View File

@ -53,7 +53,7 @@
<ParaType>File</ParaType>
<DataType>tar.gz</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>E:\辅助数据\GF3Data\leafindex\GF3_MDJ_QPSI_031847_E116.4_N43.9_20220828_L1A_AHV_L10006708819-cal.tar.gz</ParaValue>
<ParaValue>F:\Tian-GF3-Wenchang\GF3_MYC_QPSI_040611_E110.6_N20.0_20240427_L1A_AHV_L10006928143-cal.tar.gz</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>False</EnMultipleChoice>
<Control>File</Control>
@ -81,9 +81,9 @@
<ParaChsName>土壤水分产品</ParaChsName>
<Description>土壤水分产品</Description>
<ParaType>File</ParaType>
<DataType>zip</DataType>
<DataType>tif</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>E:\辅助数据\GF3Data\leafindex\CSAR_leaf_NEW_soil_moisture.zip</ParaValue>
<ParaValue>F:\Tian-GF3-Wenchang\GF3_MYC_QPSI_040611_E110.6_N20.0_20240427_L1A_AHV_L10006928143-cal-SMC.tif</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>False</EnMultipleChoice>
<Control>File</Control>
@ -96,9 +96,9 @@
<ParaChsName>叶面积指数实测数据</ParaChsName>
<Description>叶面积指数实测数据</Description>
<ParaType>File</ParaType>
<DataType>zip</DataType>
<DataType>tif</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>E:\辅助数据\GF3Data\leafindex\CSAR_leaf_new_LAI.zip</ParaValue>
<ParaValue>F:\Tian-GF3-Wenchang\LAI\LAi.csv</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>False</EnMultipleChoice>
<Control>File</Control>
@ -111,9 +111,9 @@
<ParaChsName>NDVI</ParaChsName>
<Description>NDVI影像坐标系要求WGS84</Description>
<ParaType>File</ParaType>
<DataType>zip</DataType>
<DataType>tif</DataType>
<ParaSource>Cal</ParaSource>
<ParaValue>E:\辅助数据\GF3Data\leafindex\CSAR_leaf_L9NDVI.zip</ParaValue>
<ParaValue>F:\Tian-GF3-Wenchang\NDVI\S2_NDVImed_SMC_GF3.tif</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>False</EnMultipleChoice>
<Control>File</Control>
@ -141,9 +141,9 @@
<ParaChsName>地表覆盖度</ParaChsName>
<Description>地表覆盖度数据坐标系要求WGS84</Description>
<ParaType>File</ParaType>
<DataType>zip</DataType>
<DataType>tif</DataType>
<ParaSource>Cal</ParaSource>
<ParaValue>E:\辅助数据\GF3Data\leafindex\CASR_leaf_N50_40_2020LC030.zip</ParaValue>
<ParaValue>F:\Tian-GF3-Wenchang\landCover.tif</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>False</EnMultipleChoice>
<Control>File</Control>
@ -158,7 +158,7 @@
<ParaType>Value</ParaType>
<DataType>string</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>10;20;30;40;50;60;80;90</ParaValue>
<ParaValue>empty</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>False</EnMultipleChoice>
<Control>UploadInput</Control>
@ -235,7 +235,7 @@
<ParaType>File</ParaType>
<DataType>tar.gz</DataType>
<ParaSource>Cal</ParaSource>
<ParaValue>D:\micro\WorkSpace\LeafAreaIndex\Output\GF3_MDJ_QPSI_031847_E116.4_N43.9_20220828_L1A_AHV_L10006708819-cal-LAI.tar.gz</ParaValue>
<ParaValue>D:\micro\WorkSpace\LeafAreaIndex\Output\GF3_MYC_QPSI_040611_E110.6_N20.0_20240427_L1A_AHV_L10006928143-cal-LAI.tar.gz</ParaValue>
<MaxValue>DEFAULT</MaxValue>
<MinValue>DEFAULT</MinValue>
<OptionValue>DEFAULT</OptionValue>

View File

@ -371,7 +371,7 @@ class LeafIndexMain:
# 处理归一化植被指数
F_VEG = (NDVI_tiff['data'] - NDVI_min) / (NDVI_max - NDVI_min) # 处理得到植被覆盖度
soil_water_tiff['data'] = soil_water_tiff['data'] / 100.0 # 转换为百分比
soil_water_tiff['data'] = soil_water_tiff['data'] # 转换为百分比
incident_angle['data'] = incident_angle['data'] * np.pi / 180.0 # 转换为弧度值
sigma_tiff['data'] = np.power(10, (sigma_tiff['data'] / 10)) # 转换为线性值

View File

@ -143,13 +143,13 @@ def check_sample(sample_list):
sample_time,sample_code,sample_lon,sample_lat,sample_lai,csv_sigma,sample_soil,sample_inc,sample_sigma,sample_NDVI=item
else:
sample_time,sample_code,sample_lon,sample_lat,sample_lai,csv_sigma,sample_soil,sample_inc,sample_sigma=item
if sample_sigma<=0:
if sample_sigma<=0 or np.isnan(sample_sigma):
continue
if (sample_inc*180/np.pi)>90:
if (sample_inc*180/np.pi)>90 or np.isnan(sample_inc):
continue
if sample_soil<=0 or sample_soil>=1:
if sample_soil<=0 or sample_soil>=1 or np.isnan(sample_soil):
continue
if sample_lai<=0 or sample_lai>=20:
if sample_lai<=0 or sample_lai>=20 or np.isnan(sample_lai):
continue
result.append(item)
# 绘制分布图
@ -200,3 +200,5 @@ def split_sample_list(sample_list,train_ratio):
else:
sample_test.append(sample_list[i])
return [sample_train,sample_test]

View File

@ -36,7 +36,7 @@
<ParaType>File</ParaType>
<DataType>tar.gz</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>D:\micro\WorkSpace\BackScattering\Output\GF3B_KSC_QPSI_010328_E86.0_N44.7_20231109_L1A_AHV_L10000262135-cal.tar.gz</ParaValue>
<ParaValue>F:\Tian-GF3-Wenchang\GF3_SYC_QPSI_040488_E110.7_N20.1_20240418_L1A_AHV_L10006923782-cal.tar.gz</ParaValue>
</Parameter>
<Parameter>
<ParaName>Covering</ParaName>
@ -45,7 +45,7 @@
<ParaType>File</ParaType>
<DataType>tif</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>F:\2023xibei\fugaileixing.tif</ParaValue>
<ParaValue>F:\Tian-GF3-Wenchang\landCover_Glob30.tif</ParaValue>
</Parameter>
<Parameter>
<ParaName>CoveringIDs</ParaName>
@ -54,7 +54,7 @@
<ParaType>Value</ParaType>
<DataType>string</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>empty</ParaValue>
<ParaValue>10;20;30;40;70;90</ParaValue>
<MaxValue>DEFAULT</MaxValue>
<MinValue>DEFAULT</MinValue>
<OptionValue>DEFAULT</OptionValue>
@ -66,7 +66,7 @@
<ParaType>File</ParaType>
<DataType>tif</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>F:\2024xibei\S2_NDVImed2.tif</ParaValue>
<ParaValue>F:\Tian-GF3-Wenchang\NDVI\S2_NDVImed_SMC_GF3.tif</ParaValue>
</Parameter>
<Parameter>
<ParaName>NDVIScope</ParaName>
@ -100,7 +100,7 @@
<ParaType>File</ParaType>
<DataType>tif</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>F:\2024xibei\S2_NDWImed.tif</ParaValue>
<ParaValue>F:\Tian-GF3-Wenchang\NDWI\S2_NDWImed_SMC_GF3.tif</ParaValue>
</Parameter>
<Parameter>
<ParaName>e1</ParaName>
@ -109,7 +109,7 @@
<ParaType>Value</ParaType>
<DataType>float</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>438.4106624354813</ParaValue>
<ParaValue>-12.772025319313864</ParaValue>
<MaxValue>100</MaxValue>
<MinValue>-100</MinValue>
<OptionValue>DEFAULT</OptionValue>
@ -121,7 +121,7 @@
<ParaType>Value</ParaType>
<DataType>float</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>6.378881543182451</ParaValue>
<ParaValue>11.555079721123748</ParaValue>
<MaxValue>100</MaxValue>
<MinValue>-100</MinValue>
<OptionValue>DEFAULT</OptionValue>
@ -133,7 +133,7 @@
<ParaType>Value</ParaType>
<DataType>float</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>-2035131.498410542</ParaValue>
<ParaValue>28.605979879379152</ParaValue>
<MaxValue>9999</MaxValue>
<MinValue>-9999</MinValue>
<OptionValue>DEFAULT</OptionValue>
@ -145,7 +145,7 @@
<ParaType>Value</ParaType>
<DataType>float</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>0.3015485630885973</ParaValue>
<ParaValue>-0.04303182290305167</ParaValue>
<MaxValue>9999</MaxValue>
<MinValue>-9999</MinValue>
<OptionValue>DEFAULT</OptionValue>
@ -157,7 +157,7 @@
<ParaType>Value</ParaType>
<DataType>float</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>11303.518113684022</ParaValue>
<ParaValue>-17.212613314078236</ParaValue>
<MaxValue>9999</MaxValue>
<MinValue>-9999</MinValue>
<OptionValue>DEFAULT</OptionValue>
@ -169,7 +169,7 @@
<ParaType>Value</ParaType>
<DataType>float</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>-0.6110363015619775</ParaValue>
<ParaValue>1.1965671296029239</ParaValue>
<MaxValue>9999</MaxValue>
<MinValue>-9999</MinValue>
<OptionValue>DEFAULT</OptionValue>
@ -183,7 +183,7 @@
<ParaType>File</ParaType>
<DataType>tar.gz</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>D:\micro\WorkSpace\SoilMoisture\Output\GF3B_KSC_QPSI_010328_E86.0_N44.7_20231109_L1A_AHV_L10000262135-cal-SMC.tar.gz</ParaValue>
<ParaValue>D:\micro\WorkSpace\SoilMoisture\Output\GF3_SYC_QPSI_040488_E110.7_N20.1_20240418_L1A_AHV_L10006923782-cal-SMC.tar.gz</ParaValue>
<MaxValue>DEFAULT</MaxValue>
<MinValue>DEFAULT</MinValue>
<OptionValue>DEFAULT</OptionValue>

View File

@ -6,6 +6,7 @@ sd=2.65;
dcs=(1.01+0.44*sd)^2-0.062;
dc0=0.008854;
dcw0 = 88.045-0.4147.*T+6.295e-4.*T.^2+1.075e-5.*T.^3; % Refer to [3]
tpt=0.11109-3.824e-3.*T+6.938e-5.*T.^2-5.096e-7.*T.^3; %2*pi*tao, Refer to [4]
dcwinf=4.9;
if f>=1.4
@ -14,12 +15,10 @@ else
sigma = 0.0467+0.2204*bd-0.004111*vsand +0.006614*vclay;% Refer to [2]
end
dcwr=dcwinf+((dcw0-dcwinf)./(1+(tpt.*f).^2));
% dcwi=(tpt.*f.*(dcw0-dcwinf))./(1+(tpt.*f).^2)...
% +sigma*(1.0-(bd/sd))./(8.0*atan(1.0)*dc0.*f.*vwc);% Refer to [1]
betar=1.2748-0.00519*vsand-0.00152*vclay;
betai=1.33797-0.00603*vsand-0.00166*vclay;
% dcsr=(1.0+(bd/sd)*((dcs^alpha)-1.0)+(vwc.^betar)*(dcwr^alpha)-vwc).^(1/alpha);% Result real part
% dcsi=(vwc.^(betai/alpha)).*dcwi;%Result imaginary part
vwc=fminsearch(@(vwc)abs(sqrt(((1.0+(bd/sd)*((dcs^alpha)-1.0)+(vwc.^betar)*(dcwr^alpha)-vwc).^(1/alpha))^2+((vwc.^(betai/alpha)).*((tpt.*f.*(dcw0-dcwinf))./(1+(tpt.*f).^2)...
+sigma*(1.0-(bd/sd))./(8.0*atan(1.0)*dc0.*f.*vwc)))^2)-er),x0);
end

View File

@ -104,7 +104,7 @@ class MoistureMain:
else:
raise ValueError("input Para 'Polarization' is not 'HH''VV'or 'empty'!")
self.__processing_paras = InitPara.init_processing_paras(self.__input_paras)
self.__processing_paras = InitPara.init_processing_paras(self.__input_paras, self.__workspace_preprocessed_path)
self.__processing_paras.update(InitPara(DEBUG).get_mult_tar_gz_infs(self.__processing_paras, self.__workspace_preprocessing_path))
self.__sar_names_list = self.__processing_paras['name_list']
@ -150,7 +150,7 @@ class MoistureMain:
para_names = ['Covering', 'NDVI']
ref_img_name =''
for name in self.__sar_names_list:
para_names.append(name+'_'+self.__polar_name)
para_names.append(name+'_'+self.__polar_name) # todo 名称根据LT04实际命名进行缩短
if ref_img_name == '':
ref_img_name = name+'_'+self.__polar_name
para_names.append(name+'_LocalIncidenceAngle')
@ -277,7 +277,6 @@ class MoistureMain:
mois2[n] = fmin(fun_mois, x0, disp=0) # Dobson模型
if n in bar_list:
logger.info('block:{},cal soil_moisture proggress bar:{}%,use time :{}'.format(block_num, round(n / num * 100), (datetime.datetime.now() - start)))
sar1[:] = 0
sar2[:] = 0
sar1[w] = mois1 # 土壤水分
@ -290,6 +289,55 @@ class MoistureMain:
out_image = Image.fromarray(sar2)
out_image.save(moisure2_path)
'''
f: 频率通常以赫兹Hz为单位它可能与土壤中电磁波的传播有关
T: 温度通常以摄氏度°C为单位它影响土壤水分的介电常数
er: 测量的土壤介电常数这是一个无量纲的量它表示土壤对电磁波的响应
bd: 土壤的干容重Bulk Density通常以克/立方厘米g/cm³为单位它表示单位体积土壤中固体的质量
vsand: 砂土体积比例这是一个介于0和1之间的无量纲量表示土壤中砂土的体积占比
vclay: 黏土体积比例这也是一个介于0和1之间的无量纲量表示土壤中黏土的体积占比
x0: 初始猜测值用于数值优化算法的起始点通常是一个介于0和1之间的量表示体积含水量Volume Water Content的初始估计
'''
def dobsen_inverse(self, f, T, er, bd, vsand, vclay, x0):
# 设置模型参数
alpha = 0.65
sd = 2.65
dcs = (1.01 + 0.44 * sd) ** 2 - 0.062
dc0 = 0.008854
dcw0 = 88.045 - 0.4147 * T + 6.295e-4 * T ** 2 + 1.075e-5 * T ** 3
tpt = 0.11109 - 3.824e-3 * T + 6.938e-5 * T ** 2 - 5.096e-7 * T ** 3
dcwinf = 4.9
# 计算土壤的电导率 sigma
if f >= 1.4:
sigma = -1.645 + 1.939 * bd - 0.0225622 * vsand + 0.01594 * vclay
else:
sigma = 0.0467 + 0.2204 * bd - 0.004111 * vsand + 0.006614 * vclay
# 计算水分相关土壤颗粒的直径 dcwr
dcwr = dcwinf + ((dcw0 - dcwinf) / (1 + (tpt * f) ** 2))
# 计算与土壤水分保持能力相关的参数 betar 和 betai
betar = 1.2748 - 0.00519 * vsand - 0.00152 * vclay
betai = 1.33797 - 0.00603 * vsand - 0.00166 * vclay
# 定义目标函数
def objective(vwc):
return np.abs(np.sqrt(
((1.0 + (bd / sd) * ((dcs ** alpha) - 1.0) + (vwc ** betar) * (dcwr ** alpha) - vwc) ** (
1 / alpha)) ** 2 +
((vwc ** (betai / alpha)) * (
(tpt * f * (dcw0 - dcwinf)) / (1 + (tpt * f) ** 2) + sigma * (1.0 - (bd / sd)) /
(8 * math.atan(1.0) * dc0 * f * vwc))) ** 2
) - er)
# 使用数值优化方法找到最佳的 vwc 值
result = minimize(objective, x0, method='Nelder-Mead')
# 返回最优解
return result.x[0]
def process_handle(self, start):
"""
算法主处理函数
@ -297,10 +345,20 @@ class MoistureMain:
"""
# 计算ROI区域
bare_land_mask_path = self.create_roi()
radar_center_frequency = MetaDataHandler.get_RadarCenterFrequency(self.__processing_paras['META'])
radar_center_frequency = MetaDataHandler.get_RadarCenterFrequency(self.__processing_paras[self.__sar_names_list[0] + '_Origin_META'])
file.copyfile2dir(bare_land_mask_path, self.__workspace_preprocessed_path)
logger.info('progress bar: 50%')
for name in self.__sar_names_list:
file_key = name + '_' + self.__polar_name
if os.path.exists(self.__preprocessed_paras[file_key]):
lee_path = os.path.join(self.__workspace_preprocessed_path,
os.path.basename(self.__preprocessed_paras[file_key]).split("-")[0] + '_lee.tif')
Filter().lee_process_sar(self.__preprocessed_paras[file_key], lee_path, 3, 0.25)
logger.info('lee process finish: ' + self.__preprocessed_paras[file_key])
os.remove(self.__preprocessed_paras[file_key])
self.__preprocessed_paras.update({file_key: lee_path})
# 分块
bp = BlockProcess()
block_size = bp.get_block_size(self.__rows, self.__cols)
@ -314,11 +372,11 @@ class MoistureMain:
tmp = key
if self.__sar_names_list[0]+'_LocalIncidenceAngle' in tmp:
angle1_list = dir_dict[key]
elif self.__sar_names_list[0]+'_'+self.__polar_name in tmp:
elif self.__sar_names_list[0].split('-')[0]+'_lee' in tmp:
sar1_list = dir_dict[key]
elif self.__sar_names_list[1] + '_LocalIncidenceAngle' in tmp:
angle2_list = dir_dict[key]
elif self.__sar_names_list[1] + '_' + self.__polar_name in tmp:
elif self.__sar_names_list[1].split('-')[0]+'_lee' in tmp:
sar2_list = dir_dict[key]
elif 'bare_land_mask'in tmp :
bare_land_mask_list = dir_dict[key]
@ -329,10 +387,6 @@ class MoistureMain:
# 开启多进程处理
processes_num = min([len(angle1_list), multiprocessing_num])
if DEBUG == False:
f = Filter()
f.lee_filter_multiprocess(sar1_list, sar1_list, FILTER_SIZE, processes_num)
f.lee_filter_multiprocess(sar2_list, sar2_list, FILTER_SIZE, processes_num)
pool = multiprocessing.Pool(processes=processes_num)
for i in range(len(angle1_list)):

View File

@ -1,7 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<Root>
<TaskID>GEOSAR_202107275419_0001-0</TaskID>
<WorkSpace>D:\micro\WorkSpace\Geo_sar\</WorkSpace>
<WorkSpace>D:\micro\GEOWork\</WorkSpace>
<AlgCompt>
<DataTransModel>File</DataTransModel>
<Artificial>ElementAlg</Artificial>
@ -39,7 +39,7 @@
<ParaType>Value</ParaType>
<DataType>string</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>VV</ParaValue>
<ParaValue>HH</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>False</EnMultipleChoice>
<Control>UploadInput</Control>
@ -56,7 +56,8 @@
<ParaType>File</ParaType>
<DataType>tar.gz</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>F:\MicroWorkspace\Micro\soil_geo\input_back\GF3_SAY_QPSI_008634_E102.3_N33.7_20180331_L1A_AHV_L10003096081.tar.gz;F:\MicroWorkspace\Micro\soil_geo\input_back\GF3_SAY_QPSI_009051_E102.3_N33.7_20180429_L1A_AHV_L10003153708.tar.gz
<ParaValue>F:\202306hb\sar_img\GF3B_SYC_QPSI_008316_E116.0_N43.0_20230622_L1A_AHV_L10000202893-cal.tar.gz;
F:\202306hb\sar_img\GF3B_SYC_QPSI_008316_E116.1_N43.3_20230622_L1A_AHV_L10000202892-cal.tar.gz
</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>False</EnMultipleChoice>
@ -87,7 +88,7 @@
<ParaType>File</ParaType>
<DataType>tif</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>F:\MicroWorkspace\Micro\soil_geo\cover\cover.tif</ParaValue>
<ParaValue>F:\202306hb\Landcover\50T_20220101-20230101.tif</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>False</EnMultipleChoice>
<Control>File</Control>
@ -102,7 +103,7 @@
<ParaType>Value</ParaType>
<DataType>string</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>20;30;70;71;72;73;74;90</ParaValue>
<ParaValue>empty</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>False</EnMultipleChoice>
<Control>UploadInput</Control>
@ -117,7 +118,7 @@
<ParaType>File</ParaType>
<DataType>tif</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>F:\MicroWorkspace\Micro\soil_geo\201806NDVI\201806_NDVImax.tif</ParaValue>
<ParaValue>F:\202306hb\NDVI\S2_202306_NDVI.tif</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>False</EnMultipleChoice>
<Control>File</Control>
@ -239,7 +240,7 @@
<ParaType>File</ParaType>
<DataType>tar.gz</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>D:\micro\WorkSpace\Geo_sar\SoilMoisture\Output\SoilMoistureProduct.tar.gz</ParaValue>
<ParaValue>D:\micro\GEOWork\SoilMoisture\Output\SoilMoistureProduct.tar.gz</ParaValue>
</Parameter>
</Outputs>
</AlgCompt>

View File

@ -39,7 +39,7 @@
<DataType>tar.gz</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>
F:\2024xibei\GF3C_KSC_QPSI_008440_E86.2_N44.1_20231113_L1A_AHV_L10000215823-ortho.tar.gz
F:\Tian-GF3-Wenchang\GF3_MYC_QPSI_040611_E110.6_N20.0_20240427_L1A_AHV_L10006928143-ortho.tar.gz
</ParaValue>
<MaxValue>DEFAULT</MaxValue>
<MinValue>DEFAULT</MinValue>
@ -68,7 +68,7 @@
<ParaType>File</ParaType>
<DataType>tif</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>F:\2024xibei\S2_NDVImed.tif</ParaValue>
<ParaValue>F:\Tian-GF3-Wenchang\landCover_Glob30.tif</ParaValue>
<MaxValue>DEFAULT</MaxValue>
<MinValue>DEFAULT</MinValue>
<OptionValue>DEFAULT</OptionValue>
@ -82,7 +82,7 @@
<ParaType>File</ParaType>
<DataType>zip</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>D:\micro\WorkSpace\SoilSalinityTrain\Output\GF3C_KSC_QPSI_008440_E86.2_N44.1_20231113_L1A_AHV_L10000215823-ortho-SSAA.zip</ParaValue>
<ParaValue>D:\micro\WorkSpace\SoilSalinityTrain\Output\GF3_MYC_QPSI_040611_E110.6_N20.0_20240427_L1A_AHV_L10006928143-ortho-SSAA.zip</ParaValue>
<MaxValue>DEFAULT</MaxValue>
<MinValue>DEFAULT</MinValue>
<OptionValue>DEFAULT</OptionValue>
@ -96,7 +96,7 @@
<ParaType>Value</ParaType>
<DataType>string</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>empty</ParaValue>
<ParaValue>10;20;30;40;70;90</ParaValue>
<MaxValue>DEFAULT</MaxValue>
<MinValue>DEFAULT</MinValue>
<OptionValue>DEFAULT</OptionValue>
@ -110,7 +110,7 @@
<ParaType>File</ParaType>
<DataType>tif</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>F:\2024xibei\S2_NDVImed.tif</ParaValue>
<ParaValue>F:\Tian-GF3-Wenchang\NDVI\S2_NDVImed_SMC_GF3.tif</ParaValue>
<MaxValue>DEFAULT</MaxValue>
<MinValue>DEFAULT</MinValue>
<OptionValue>DEFAULT</OptionValue>
@ -140,7 +140,7 @@
<ParaType>File</ParaType>
<DataType>tar.gz</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>D:\micro\WorkSpace\SoilSalinityPredict\Output\GF3C_KSC_QPSI_008440_E86.2_N44.1_20231113_L1A_AHV_L10000215823-ortho-SSAA.tar.gz</ParaValue>
<ParaValue>D:\micro\WorkSpace\SoilSalinityPredict\Output\GF3_MYC_QPSI_040611_E110.6_N20.0_20240427_L1A_AHV_L10006928143-ortho-SSAA.tar.gz</ParaValue>
<MaxValue>DEFAULT</MaxValue>
<MinValue>DEFAULT</MinValue>
<OptionValue>DEFAULT</OptionValue>

View File

@ -39,7 +39,7 @@
<DataType>tar.gz</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>
F:\2024xibei\GF3C_KSC_QPSI_008440_E86.2_N44.1_20231113_L1A_AHV_L10000215823-ortho.tar.gz
F:\Tian-GF3-Wenchang\GF3_MYC_QPSI_040611_E110.6_N20.0_20240427_L1A_AHV_L10006928143-ortho.tar.gz
</ParaValue>
<MaxValue>DEFAULT</MaxValue>
<MinValue>DEFAULT</MinValue>
@ -68,7 +68,7 @@
<ParaType>File</ParaType>
<DataType>csv</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>F:\2024xibei\soilty.csv</ParaValue>
<ParaValue>F:\Tian-GF3-Wenchang\soilSality.csv</ParaValue>
<MaxValue>DEFAULT</MaxValue>
<MinValue>DEFAULT</MinValue>
<OptionValue>DEFAULT</OptionValue>
@ -84,7 +84,7 @@
<ParaType>File</ParaType>
<DataType>tar.gz</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>D:\micro\WorkSpace\SoilSalinityTrain\Output\GF3C_KSC_QPSI_008440_E86.2_N44.1_20231113_L1A_AHV_L10000215823-ortho-SSAA.zip</ParaValue>
<ParaValue>D:\micro\WorkSpace\SoilSalinityTrain\Output\GF3_MYC_QPSI_040611_E110.6_N20.0_20240427_L1A_AHV_L10006928143-ortho-SSAA.zip</ParaValue>
<MaxValue>DEFAULT</MaxValue>
<MinValue>DEFAULT</MinValue>
<OptionValue>DEFAULT</OptionValue>

View File

@ -38,7 +38,7 @@
<ParaType>File</ParaType>
<DataType>tar.gz</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>F:\2023xibei\GF3C_KSC_QPSI_008440_E86.0_N44.7_20231113_L1A_AHV_L10000215825-ortho.tar.gz</ParaValue>
<ParaValue>F:\Tian-GF3-Wenchang\GF3_MYC_QPSI_040611_E110.6_N20.0_20240427_L1A_AHV_L10006928143-ortho.tar.gz</ParaValue>
<MaxValue>DEFAULT</MaxValue>
<MinValue>DEFAULT</MinValue>
<OptionValue>DEFAULT</OptionValue>
@ -66,7 +66,7 @@
<ParaType>File</ParaType>
<DataType>csv</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>F:\2023xibei\soilSality.csv</ParaValue>
<ParaValue>F:\Tian-GF3-Wenchang\soilSality.csv</ParaValue>
<MaxValue>DEFAULT</MaxValue>
<MinValue>DEFAULT</MinValue>
<OptionValue>DEFAULT</OptionValue>
@ -80,7 +80,7 @@
<ParaType>File</ParaType>
<DataType>tif</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>F:\2023xibei\fugaileixing.tif</ParaValue>
<ParaValue>F:\Tian-GF3-Wenchang\landCover.tif</ParaValue>
<MaxValue>DEFAULT</MaxValue>
<MinValue>DEFAULT</MinValue>
<OptionValue>DEFAULT</OptionValue>
@ -108,7 +108,7 @@
<ParaType>File</ParaType>
<DataType>tif</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>F:\2023xibei\S2_NDVImed2.tif</ParaValue>
<ParaValue>F:\Tian-GF3-Wenchang\NDVI\S2_NDVImed_SMC_GF3.tif</ParaValue>
<MaxValue>DEFAULT</MaxValue>
<MinValue>DEFAULT</MinValue>
<OptionValue>DEFAULT</OptionValue>
@ -138,7 +138,7 @@
<ParaType>File</ParaType>
<DataType>tar.gz</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>D:\micro\WorkSpace\SoilSalinity\Output\GF3C_KSC_QPSI_008440_E86.0_N44.7_20231113_L1A_AHV_L10000215825-ortho-SSAA.tar.gz</ParaValue>
<ParaValue>D:\micro\WorkSpace\SoilSalinity\Output\GF3_MYC_QPSI_040611_E110.6_N20.0_20240427_L1A_AHV_L10006928143-ortho-SSAA.tar.gz</ParaValue>
<MaxValue>DEFAULT</MaxValue>
<MinValue>DEFAULT</MinValue>
<OptionValue>DEFAULT</OptionValue>

View File

@ -326,18 +326,25 @@ class SalinityMain:
key_name = key
block_num = len(dir_dict[key])
for n in range(block_num):
name = os.path.basename(dir_dict[key_name][n])
suffix = '_' + name.split('_')[-4] + "_" + name.split('_')[-3] + "_" + name.split('_')[-2] + "_" + \
mergeFeaturesDir = os.path.join(self.__workspace_block_tif_processed_path, "features")
# 创建文件
if os.path.exists(mergeFeaturesDir) is False:
os.makedirs(mergeFeaturesDir)
for i in range(block_num):
file_list = []
for value in dir_dict.values():
file_list.append(os.path.basename(value[i]))
name = os.path.basename(file_list[0])
suffix = 'features_' + name.split('_')[-4] + "_" + name.split('_')[-3] + "_" + name.split('_')[-2] + "_" + \
name.split('_')[-1]
features_path = self.__workspace_block_tif_processed_path + "features\\features" + suffix
features_array = np.zeros((len(dir_dict), block_size, block_size), dtype='float32')
for m, value in zip(range(len(dir_dict)), dir_dict.values()):
features_array[m, :, :] = self.imageHandler.get_band_array(value[n], 1)
# 异常值转为0
features_array[np.isnan(features_array)] = 0.0
features_array[np.isinf(features_array)] = 0.0
self.imageHandler.write_img(features_path, "", [0, 0, 1, 0, 0, 1], features_array)
out_str = os.path.join(mergeFeaturesDir, suffix)
input_str1 = os.path.dirname(value[0])
input_str2 = ','.join(file_list)
input_str3 = out_str
cmd = r".\baseTool\tifMerge\x64\Release\tifMerge.exe {} {} {}".format(input_str1, input_str2, input_str3)
# print(cmd)
os.system(cmd)
logger.info('create features matrix success!')

View File

@ -11,7 +11,7 @@
<AlgorithmDesc>微波卫星3-5级产品生产模型</AlgorithmDesc>
<Version>3</Version>
<AlgorithmClass>陆表类产品_土壤盐碱度</AlgorithmClass>
<AlgorithmAlias>SoilSalinity_C_SAR_V3</AlgorithmAlia>
<AlgorithmAlias>SoilSalinity_C_SAR_V3</AlgorithmAlias>
<AlgorithmLevel>5</AlgorithmLevel>
<AlgoirthmID>SoilSalinity_CSAR_中科卫星应用德清研究院_3</AlgoirthmID>
<Author>中科卫星应用德清研究院</Author>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -38,7 +38,7 @@
<ParaType>File</ParaType>
<DataType>tar.gz</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>F:\2024xibei\GF3C_KSC_QPSI_008440_E86.0_N44.7_20231113_L1A_AHV_L10000215825-ortho.tar.gz</ParaValue>
<ParaValue>F:\Tian-GF3-Wenchang\GF3_MYC_QPSI_040611_E110.6_N20.0_20240427_L1A_AHV_L10006928143-ortho.tar.gz</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>False</EnMultipleChoice>
<Control>File</Control>
@ -68,7 +68,7 @@
<ParaType>File</ParaType>
<DataType>tif</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>F:\2024xibei\auxfile\LandaCover.tif</ParaValue>
<ParaValue>F:\Tian-GF3-Wenchang\landCover_Glob30.tif</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>False</EnMultipleChoice>
<Control>File</Control>
@ -83,7 +83,7 @@
<ParaType>Value</ParaType>
<DataType>string</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>empty</ParaValue>
<ParaValue>10;20;30;40;70;90</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>False</EnMultipleChoice>
<Control>UploadInput</Control>
@ -98,7 +98,7 @@
<ParaType>File</ParaType>
<DataType>tif</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>F:\2024xibei\auxfile\S2_NDVImed.tif</ParaValue>
<ParaValue>F:\Tian-GF3-Wenchang\NDVI\S2_NDVImed_SMC_GF3.tif</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>False</EnMultipleChoice>
<Control>File</Control>
@ -130,7 +130,7 @@
<ParaType>File</ParaType>
<DataType>tar.gz</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>D:\micro\WorkSpace\SurfaceRoughness\Output\GF3C_KSC_QPSI_008440_E86.0_N44.7_20231113_L1A_AHV_L10000215825-ortho-SR.tar.gz</ParaValue>
<ParaValue>D:\micro\WorkSpace\SurfaceRoughness\Output\GF3_MYC_QPSI_040611_E110.6_N20.0_20240427_L1A_AHV_L10006928143-ortho-SR.tar.gz</ParaValue>
</Parameter>
</Outputs>
</AlgCompt>

View File

@ -61,7 +61,7 @@ def train_WMCmodel(lai_water_inc_sigma_list,params_X0,train_err_image_path,draw_
h = leastsq(f, X0)
# logger.info(h[0],h[1])
err_f=f(h[0])
x_arr=[lai_waiter_inc_sigma_item[4] for lai_waiter_inc_sigma_item in lai_water_inc_sigma_list]
x_arr=[lai_waiter_inc_sigma_item[5] for lai_waiter_inc_sigma_item in lai_water_inc_sigma_list]
# 根据误差大小进行排序
# logger.info("训练集:\n根据误差输出点序\n数量{}\n点序\t误差值\t 样点信息".format(str(np.array(err_f).shape)))
# for i in np.argsort(np.array(err_f)):

View File

@ -435,7 +435,7 @@ class PreProcess:
prepro_imgs_path = {}
for name in para_names:
img_path = img_paths[name]
output_para = os.path.join(out_dir, name + '_preprocessed.tif') # + name + '_preprocessed.tif'
output_para = os.path.join(out_dir, name + '_ppd.tif') # + name + '_preprocessed.tif'
self.resampling_by_scale(img_path, output_para, refer_img_path)
prepro_imgs_path.update({name: output_para})
logger.info('resampling %s success!', name)
@ -477,9 +477,6 @@ class PreProcess:
scale_x = ref_cols/cols
scale_y = ref_rows/rows
# rows = dataset.RasterYSize # 行数
# cols = int(cols * scale) # 计算新的行列数
# rows = int(rows * scale)
cols = ref_cols
rows = ref_rows
@ -515,6 +512,39 @@ class PreProcess:
del target
return True
@staticmethod
def resample_by_gdal(in_path, out_path):
src_ds = gdal.Open(in_path, gdal.GA_ReadOnly)
# 设置目标影像的投影和范围
target_projection = src_ds.GetProjection()
target_geotransform = src_ds.GetGeoTransform()
x_scale = target_geotransform[1]
y_scale = target_geotransform[5]
scale = [x_scale, np.abs(y_scale)]
new_scale = np.max(scale)
dst_geotransform = [target_geotransform[0], new_scale, target_geotransform[2], target_geotransform[3], target_geotransform[4], -new_scale]
target_x_size = int(src_ds.RasterXSize * x_scale / new_scale) # 假设我们要将影像大小缩小到原来的一半
target_y_size = int(src_ds.RasterYSize * np.abs(y_scale) / new_scale)
# 创建输出驱动
driver = gdal.GetDriverByName('GTiff')
# 创建输出文件
dst_ds = driver.Create(out_path, target_x_size, target_y_size, src_ds.RasterCount,
src_ds.GetRasterBand(1).DataType)
dst_ds.SetGeoTransform(dst_geotransform)
dst_ds.SetProjection(target_projection)
# 执行重采样
gdal.ReprojectImage(src_ds, dst_ds, None, None, gdal.GRA_Bilinear) # 使用双线性插值
# 关闭数据集
dst_ds = None
src_ds = None
@staticmethod
def cv_mean_filter(out_path, in_path, filter_size):
"""
@ -551,3 +581,9 @@ class PreProcess:
ImageHandler.write_img(out_tif_path, proj, geo, angle)
if __name__ == '__main__':
fn = r"F:\Tian-GF3-Wenchang\GF3_MYC_QPSI_040611_E110.6_N20.0_20240427_L1A_AHV_L10006928143-ortho\GF3_MYC_QPSI_040611_E110.6_N20.0_20240427_L1B_v_h_L10006928143-ortho.tif"
out = r"F:\Tian-GF3-Wenchang\GF3_MYC_QPSI_040611_E110.6_N20.0_20240427_L1A_AHV_L10006928143-ortho\GF3_MYC_QPSI_040611_E110.6_N20.0_20240427_L1B_v_h_L10006928143-ortho.tif"
PreProcess.resample_by_gdal(fn, out)

View File

@ -737,6 +737,11 @@ class ImageHandler:
img_col_end = x_split * 3
img_row_start = y_split * 1
img_row_end = y_split *3
cols = img_col_end - img_col_start
rows = img_row_end - img_row_start
if cols > 10000 or rows > 10000:
img_col_end = img_col_start + 10000
img_row_end = img_row_start + 10000
point_upleft = self.trans_rowcol2geo(img_geotrans, img_col_start, img_row_start)
point_upright = self.trans_rowcol2geo(img_geotrans, img_col_end, img_row_start)

View File

@ -1064,9 +1064,9 @@ if __name__ == '__main__':
#
# tr = TransImgL1A(ori_sim_path,roi_Extend)
# tr.l1a_2_geo("I:/cut.tif", "I:/salinity.tif", "I:/salinity_geo2.tif")
ori_sim = r"D:\micro\LWork\AtmosphericDelay\Temporary\cut\ori_sim.tif"
product_tif = r"D:\micro\LWork\AtmosphericDelay\test\master_ztd\dlosout.tiff"
result = r"D:\micro\LWork\AtmosphericDelay\test\master_ztd\dlosout_geo.tiff"
ori_sim = r"D:\micro\WorkSpace\AtmosphericDelay\Temporary\cut\ori_sim.tif"
product_tif = r"D:\micro\LWork\AtmosphericDelay\test\pro_m_filt_fine_ERA5.tif"
result = r"D:\micro\LWork\AtmosphericDelay\test\pro_m_filt_fine_ERA5_geo.tif"
method = 'linear'
scopes = ImageHandle.ImageHandler().get_scopes(ori_sim)
# """

View File

@ -114,7 +114,7 @@
<ParaType>Value</ParaType>
<DataType>string</DataType>
<ParaSource>Man</ParaSource>
<ParaValue>0,1,2</ParaValue>
<ParaValue>0,1,2,3,4,5,6,7,8,9</ParaValue>
<EnModification>True</EnModification>
<EnMultipleChoice>True</EnMultipleChoice>
<Control>UploadInput</Control>

View File

@ -410,7 +410,7 @@ class PhenologyMain:
logger.info("generate train and test set success!")
logger.info('progress bar: 30%')
optimal_X_train, optimal_Y_train, optimal_feature = ml.sel_optimal_feature(X_train, Y_train, total_name_list,important_threshold=0.5, correlation_threshold=0.8)
optimal_X_train, optimal_Y_train, optimal_feature = ml.sel_optimal_feature(X_train, Y_train, total_name_list,important_threshold=0.0, correlation_threshold=20)
# RF
clf = ml.trainRF(optimal_X_train, optimal_Y_train)

View File

@ -51,11 +51,12 @@ def createcsv_roi_polygon(coordinates):
return polygon_str
if __name__ == '__main__':
xmlpath = r"F:\MicroWorkspace\Micro\likun-GF3-VegetationP\vegTest.xml"
xmlpath = r"F:\MicroWorkspace\20240814tw\shp\20240819\landCover.xml"
tree_obj = ET.parse(xmlpath)
csv_header = ['sar_img_name', 'phenology_id', 'phenology_name', 'roi_polygon']
csvpath = r"F:\MicroWorkspace\Micro\likun-GF3-VegetationP\vegTest.csv"
# csv_header = ['sar_img_name', 'phenology_id', 'phenology_name', 'roi_polygon']
csv_header = ['parent_id', 'id', 'covernm', 'roi_polygon']
csvpath = r"F:\MicroWorkspace\20240814tw\shp\20240819\LandCover.csv"
# csvcreateTitile(csvpath,csv_header)
csvfile(csvpath,csv_header)
# 得到所有匹配Region 标签的Element对象的list集合