def save_fine_data(self, modeCfg): """ 第二轮匹配,根据各通道的的mean和std计以为,角度和距离等进行精细化过滤 """ # 最终的公共匹配点数量 idx = np.where(self.PubIdx > 0) if len(idx[0]) == 0: return print u'所有粗匹配点数目 ', len(idx[0]) # 掩码清零 self.MaskRough[:] = 0 # 计算共同区域的距离差 ######### disDiff = np.full_like(self.S1_Time, '-1', dtype='i2') a = np.power(self.S2_Lon[idx] - self.S1_Lon[idx], 2) b = np.power(self.S2_Lat[idx] - self.S1_Lat[idx], 2) disDiff[idx] = np.sqrt(a + b) * 100. idx_Rough = np.logical_and(disDiff < modeCfg.distdif_max, disDiff >= 0) idx1 = np.where(idx_Rough) print u'1. 距离过滤后剩余点 ', len(idx1[0]) timeDiff = np.abs(self.S1_Time - self.S2_Time) idx_Rough = np.logical_and(idx_Rough, timeDiff <= modeCfg.timedif_max) idx1 = np.where(idx_Rough) print u'2. 时间过滤后剩余点 ', len(idx1[0]) # 过滤太阳天顶角 ############### idx_Rough = np.logical_and( idx_Rough, self.S1_SoZ <= modeCfg.solzenith_max) idx_Rough = np.logical_and( idx_Rough, self.S2_SoZ <= modeCfg.solzenith_max) idx1 = np.where(idx_Rough) print u'3. 太阳天顶角过滤后剩余点 ', len(idx1[0]) # 计算耀斑角 ############### glint1 = np.full_like(self.S1_SatZ, -999.) glint2 = np.full_like(self.S1_SatZ, -999.) glint1[idx] = sun_glint_cal( self.S1_SatA[idx], self.S1_SatZ[idx], self.S1_SoA[idx], self.S1_SoZ[idx]) glint2[idx] = sun_glint_cal( self.S2_SatA[idx], self.S2_SatZ[idx], self.S2_SoA[idx], self.S2_SoZ[idx]) idx_Rough = np.logical_and(idx_Rough, glint1 > modeCfg.solglint_min) idx_Rough = np.logical_and(idx_Rough, glint2 > modeCfg.solglint_min) print np.nanmin(glint1[idx]), np.nanmax(glint1[idx]) print np.nanmin(glint2[idx]), np.nanmax(glint2[idx]) idx1 = np.where(idx_Rough) print u'4. 太阳耀斑角过滤后剩余点 ', len(idx1[0]) # 角度均匀性 ################# SatZRaio = np.full_like(self.S1_Time, 9999) SatZ1 = np.cos(self.S1_SatZ[idx] * np.pi / 180.) SatZ2 = np.cos(self.S2_SatZ[idx] * np.pi / 180.) SatZRaio[idx] = np.abs(SatZ1 / SatZ2 - 1.) idx_Rough = np.logical_and(idx_Rough, SatZRaio <= modeCfg.angledif_max) idx1 = np.where(idx_Rough) print u'5. 卫星天顶角均匀性过滤后剩余点 ', len(idx1[0]) idx_Rough = np.logical_and( idx_Rough, self.S1_SatZ <= modeCfg.satzenith_max) idx1 = np.where(idx_Rough) print u'6. FY卫星观测角(天顶角)滤后剩余点 ', len(idx1[0]) self.MaskRough[idx1] = 1 for Band1 in modeCfg.chan1: # 掩码清零 self.MaskFine[Band1][:] = 0 th_vaue_max = modeCfg.CH_threshold[Band1]['value_max'] th1 = modeCfg.CH_threshold[Band1]['angledif_max'] th2 = modeCfg.CH_threshold[Band1]['homodif_fov_max'] th3 = modeCfg.CH_threshold[Band1]['homodif_env_max'] th4 = modeCfg.CH_threshold[Band1]['homodif_fov_env_max'] flag = 0 # 可见光通道 if hasattr(self, 'S1_FovRefMean') and Band1 in self.S1_FovRefMean.keys(): flag = 'vis' homoFov1 = np.abs( self.S1_FovRefStd[Band1] / self.S1_FovRefMean[Band1]) homoEnv1 = np.abs( self.S1_EnvRefStd[Band1] / self.S1_EnvRefMean[Band1]) homoFovEnv1 = np.abs( self.S1_FovRefMean[Band1] / self.S1_EnvRefMean[Band1] - 1) homoValue1 = self.S1_FovRefMean[Band1] homoFov2 = np.abs( self.S2_FovRefStd[Band1] / self.S2_FovRefMean[Band1]) homoEnv2 = np.abs( self.S2_EnvRefStd[Band1] / self.S2_EnvRefMean[Band1]) homoFovEnv2 = np.abs( self.S2_FovRefMean[Band1] / self.S2_EnvRefMean[Band1] - 1) homoValue2 = self.S2_FovRefMean[Band1] condition = np.logical_and(self.MaskRough > 0, True) condition = np.logical_and(SatZRaio < th1, condition) idx = np.where(condition) print u'%s %s 角度均匀性过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoValue1 < th_vaue_max, condition) condition = np.logical_and(homoValue1 > 0, condition) idx = np.where(condition) print u'%s %s 饱和值过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoFov1 < th2, condition) idx = np.where(condition) print u'%s %s 靶区过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoEnv1 < th3, condition) idx = np.where(condition) print u'%s %s 环境过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoFovEnv1 < th4, condition) idx = np.where(condition) print u'%s %s 靶区环境过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) # sat 2过滤 condition = np.logical_and(homoValue2 > 0, condition) condition = np.logical_and(homoValue2 < th_vaue_max, condition) idx = np.where(condition) print u'%s %s 饱和值2过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoFov2 < th2, condition) idx = np.where(condition) print u'%s %s 靶区2过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoEnv2 < th3, condition) idx = np.where(condition) print u'%s %s 环境2过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoFovEnv2 < th4, condition) idx = np.where(condition) print u'%s %s 靶区环境2过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) self.MaskFine[Band1][idx] = 1
def save_fine_data(self, modeCfg): """ 第二轮匹配,根据各通道的的mean和std计以为,角度和距离等进行精细化过滤 """ # 最终的公共匹配点数量 idx = np.where(self.PubIdx > 0) if len(idx[0]) == 0: return print u'所有粗匹配点数目 ', len(idx[0]) # 掩码清零 self.MaskRough[:] = 0 # 计算共同区域的距离差 ######### disDiff = np.full_like(self.S1_Time, '-1', dtype='i2') a = np.power(self.S2_Lon[idx] - self.S1_Lon[idx], 2) b = np.power(self.S2_Lat[idx] - self.S1_Lat[idx], 2) disDiff[idx] = np.sqrt(a + b) * 100. idx_Rough = np.logical_and(disDiff < modeCfg.distdif_max, disDiff >= 0) idx1 = np.where(idx_Rough) print u'1. 距离过滤后剩余点 ', len(idx1[0]) timeDiff = np.abs(self.S1_Time - self.S2_Time) idx_Rough = np.logical_and(idx_Rough, timeDiff <= modeCfg.timedif_max) idx1 = np.where(idx_Rough) print u'2. 时间过滤后剩余点 ', len(idx1[0]) # 过滤太阳天顶角 ############### idx_Rough = np.logical_and(idx_Rough, self.S1_SoZ <= modeCfg.solzenith_max) idx_Rough = np.logical_and(idx_Rough, self.S2_SoZ <= modeCfg.solzenith_max) idx1 = np.where(idx_Rough) print u'3. 太阳天顶角过滤后剩余点 ', len(idx1[0]) # 计算耀斑角 ############### glint1 = np.full_like(self.S1_SatZ, -999.) glint2 = np.full_like(self.S1_SatZ, -999.) glint1[idx] = sun_glint_cal(self.S1_SatA[idx], self.S1_SatZ[idx], self.S1_SoA[idx], self.S1_SoZ[idx]) glint2[idx] = sun_glint_cal(self.S2_SatA[idx], self.S2_SatZ[idx], self.S2_SoA[idx], self.S2_SoZ[idx]) idx_Rough = np.logical_and(idx_Rough, glint1 > modeCfg.solglint_min) idx_Rough = np.logical_and(idx_Rough, glint2 > modeCfg.solglint_min) idx1 = np.where(idx_Rough) print u'4. 太阳耀斑角过滤后剩余点 ', len(idx1[0]) # 角度均匀性 ################# SatZRaio = np.full_like(self.S1_Time, 9999) SatZ1 = np.cos(self.S1_SatZ[idx] * np.pi / 180.) SatZ2 = np.cos(self.S2_SatZ[idx] * np.pi / 180.) SatZRaio[idx] = np.abs(SatZ1 / SatZ2 - 1.) idx_Rough = np.logical_and(idx_Rough, SatZRaio <= modeCfg.angledif_max) idx1 = np.where(idx_Rough) print u'5. 卫星天顶角均匀性过滤后剩余点 ', len(idx1[0]) idx_Rough = np.logical_and(idx_Rough, self.S1_SatZ <= modeCfg.satzenith_max) idx1 = np.where(idx_Rough) print u'6. FY卫星观测角(天顶角)滤后剩余点 ', len(idx1[0]) self.MaskRough[idx1] = 1 # 添加spec, 粗匹配后剩余的点是要记录光谱谱线的。。。2维转1维下标 idx_1d = np.ravel_multi_index(idx1, (self.row, self.col)) if modeCfg.write_spec: # 定义spec_MaskRough_value 然后记录需要保存的谱线 if hasattr(self, 'S2_Spec_all'): for i in idx_1d: self.S2_Spectral.append(self.S2_Spec_all[i]) self.S2_Spectral = np.array(self.S2_Spectral) # 记录根据MaskRough表记录的格点信息 self.S2_Spec_row = idx1[0] self.S2_Spec_col = idx1[1] for Band1 in modeCfg.chan1: # 掩码清零 self.MaskFine[Band1][:] = 0 th_vaue_max = modeCfg.CH_threshold[Band1]['value_max'] th1 = modeCfg.CH_threshold[Band1]['angledif_max'] th2 = modeCfg.CH_threshold[Band1]['homodif_fov_max'] th3 = modeCfg.CH_threshold[Band1]['homodif_env_max'] th4 = modeCfg.CH_threshold[Band1]['homodif_fov_env_max'] th_cld1 = modeCfg.CH_threshold[Band1]['cld_angledif_max'] th_cld2 = modeCfg.CH_threshold[Band1]['cld_homodif_fov_max'] th_cld3 = modeCfg.CH_threshold[Band1]['cld_homodif_env_max'] th_cld4 = modeCfg.CH_threshold[Band1]['cld_homodif_fov_env_max'] flag = 0 # 如果 rad和tbb都有就用rad 做均匀性判断 if hasattr(self, 'S1_FovRadMean') and Band1 in self.S1_FovRadMean.keys(): flag = 'ir' # 固定通道值用于检测红外晴空和云 # irValue = self.FovTbbMean1[modeCfg.clear_band_ir] homoFov1 = np.abs(self.S1_FovRadStd[Band1] / self.S1_FovRadMean[Band1]) homoEnv1 = np.abs(self.S1_EnvRadStd[Band1] / self.S1_EnvRadMean[Band1]) homoFovEnv1 = np.abs(self.S1_FovRadMean[Band1] / self.S1_EnvRadMean[Band1] - 1) homoValue1 = self.S1_FovRadMean[Band1] homoFov2 = np.abs(self.S2_FovRadStd[Band1] / self.S2_FovRadMean[Band1]) homoEnv2 = np.abs(self.S2_EnvRadStd[Band1] / self.S2_EnvRadMean[Band1]) homoFovEnv2 = np.abs(self.S2_FovRadMean[Band1] / self.S2_EnvRadMean[Band1] - 1) homoValue2 = self.S2_FovRadMean[Band1] # 如果只有 tbb 就用tbb if hasattr(self, 'S1_FovTbbMean') and not hasattr(self, 'S1_FovRadMean'): if Band1 in self.S1_FovTbbMean.keys(): flag = 'ir' # 固定通道值用于检测红外晴空和云 # irValue = self.FovTbbMean1[modeCfg.clear_band_ir] homoFov1 = np.abs(self.FovTbbStd1[Band1] / self.FovTbbMean1[Band1]) homoEnv1 = np.abs(self.EnvTbbStd1[Band1] / self.EnvTbbMean1[Band1]) homoFovEnv1 = np.abs(self.FovTbbMean1[Band1] / self.EnvTbbMean1[Band1] - 1) homoValue1 = self.FovTbbMean1[Band1] homoFov2 = np.abs(self.FovTbbStd2[Band1] / self.FovTbbMean2[Band1]) homoEnv2 = np.abs(self.EnvTbbStd2[Band1] / self.EnvTbbMean2[Band1]) homoFovEnv2 = np.abs(self.FovTbbMean2[Band1] / self.EnvTbbMean2[Band1] - 1) homoValue2 = self.FovTbbMean2[Band1] # 可见光通道 if hasattr(self, 'S1_FovRefMean') and Band1 in self.S1_FovRefMean.keys(): flag = 'vis' # visValue = self.FovRefMean1[modeCfg.clear_band_vis] homoFov1 = np.abs(self.S1_FovRefStd[Band1] / self.S1_FovRefMean[Band1]) homoEnv1 = np.abs(self.S1_EnvRefStd[Band1] / self.S1_EnvRefMean[Band1]) homoFovEnv1 = np.abs(self.S1_FovRefMean[Band1] / self.S1_EnvRefMean[Band1] - 1) homoValue1 = self.S1_FovRefMean[Band1] homoFov2 = np.abs(self.S2_FovRefStd[Band1] / self.S2_FovRefMean[Band1]) homoEnv2 = np.abs(self.S2_EnvRefStd[Band1] / self.S2_EnvRefMean[Band1]) homoFovEnv2 = np.abs(self.S2_FovRefMean[Band1] / self.S2_EnvRefMean[Band1] - 1) homoValue2 = self.S2_FovRefMean[Band1] # 云判识关闭状态 #### if (modeCfg.clear_min_ir == 0 and 'ir' in flag) or (modeCfg.clear_max_vis == 0 and 'vis' in flag): condition = np.logical_and(self.MaskRough > 0, True) condition = np.logical_and(SatZRaio < th1, condition) idx = np.where(condition) print u'%s %s 云判识关闭,角度均匀性过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoFov1 < th2, condition) idx = np.where(condition) print u'%s %s 云判识关闭,靶区过滤后,精匹配点个数 %d' % (Band1, flag, len( idx[0])) condition = np.logical_and(homoEnv1 < th3, condition) idx = np.where(condition) print u'%s %s 云判识关闭,环境过滤后,精匹配点个数 %d' % (Band1, flag, len( idx[0])) condition = np.logical_and(homoFovEnv1 < th4, condition) idx = np.where(condition) print u'%s %s 云判识关闭,靶区环境过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoValue1 < th_vaue_max, condition) condition = np.logical_and(homoValue1 > 0, condition) idx = np.where(condition) print u'%s %s 云判识关闭,饱和值过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) # sat 2过滤 condition = np.logical_and(homoFov2 < th2, condition) idx = np.where(condition) print u'%s %s 云判识关闭,靶区2过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoEnv2 < th3, condition) idx = np.where(condition) print u'%s %s 云判识关闭,环境2过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoFovEnv2 < th4, condition) idx = np.where(condition) print u'%s %s 云判识关闭,靶区环境2过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoValue2 > 0, condition) condition = np.logical_and(homoValue2 < th_vaue_max, condition) idx = np.where(condition) print u'%s %s 云判识关闭,饱和值2过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) self.MaskFine[Band1][idx] = 1 # 云判识开启状态 #### else: # 晴空判别 if 'ir' in flag: # 固定通道值用于检测可见晴空和云 irValue = self.S1_FovTbbMean[modeCfg.clear_band_ir] condition = np.logical_and(self.MaskRough > 0, irValue >= modeCfg.clear_min_ir) elif 'vis' in flag: # 固定通道值用于检测可见晴空和云 visValue = self.S1_FovRefMean[modeCfg.clear_band_vis] condition = np.logical_and( self.MaskRough > 0, visValue < modeCfg.clear_max_vis) condition = np.logical_and(visValue > 0, condition) idx = np.where(condition) test_idx = np.where(self.MaskRough > 0) # print len(test_idx[0]) # print modeCfg.clear_band_ir, modeCfg.clear_min_ir # print np.min(irValue[test_idx]), np.max(irValue[test_idx]) print u'%s %s 云判识开启,晴空点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(SatZRaio < th1, condition) idx = np.where(condition) print u'%s %s 云判识开启,晴空点中 角度 均匀过滤后, 精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoFov1 < th2, condition) idx = np.where(condition) print u'%s %s 云判识开启,晴空点中 靶区1 均匀过滤后, 精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoEnv1 < th3, condition) idx = np.where(condition) print u'%s %s 云判识开启,晴空点中 环境1 均匀过滤后, 精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoFovEnv1 < th4, condition) idx = np.where(condition) print u'%s %s 云判识开启,晴空点中 靶区/环境 1 均匀过滤后, 精匹配点个数 %d' % ( Band1, flag, len(idx[0])) condition = np.logical_and(homoValue1 > 0, condition) condition = np.logical_and(homoValue1 < th_vaue_max, condition) idx = np.where(condition) print u'%s %s 云判识开启,晴空点中 饱和值1 均匀过滤后, 精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoFov2 < th2, condition) idx = np.where(condition) print u'%s %s 云判识开启,晴空点中 靶区2 均匀过滤后, 精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoEnv2 < th3, condition) idx = np.where(condition) print u'%s %s 云判识开启,晴空点中 环境2 均匀过滤后, 精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoFovEnv2 < th4, condition) idx = np.where(condition) print u'%s %s 云判识开启,晴空点中 靶区/环境 2 均匀过滤后, 精匹配点个数 %d' % ( Band1, flag, len(idx[0])) condition = np.logical_and(homoValue2 > 0, condition) condition = np.logical_and(homoValue2 < th_vaue_max, condition) idx = np.where(condition) print u'%s %s 云判识开启,晴空点中 饱和值1 均匀过滤后, 精匹配点个数 %d' % (Band1, flag, len(idx[0])) idx_clear = np.where(condition) self.MaskFine[Band1][idx_clear] = 1 # 云区判别 if 'ir' in flag: condition = np.logical_and(self.MaskRough > 0, irValue < modeCfg.clear_min_ir) condition = np.logical_and(irValue > 0, condition) elif 'vis' in flag: condition = np.logical_and( self.MaskRough > 0, visValue >= modeCfg.clear_max_vis) idx = np.where(condition) print u'%s %s 云判识开启,云区点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(SatZRaio < th_cld1, condition) idx = np.where(condition) print u'%s %s 云判识开启,云区点中 角度 均匀过滤后, 精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoFov1 < th_cld2, condition) idx = np.where(condition) print u'%s %s 云判识开启,云区点中 靶区1 均匀过滤后, 精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoEnv1 < th_cld3, condition) idx = np.where(condition) print u'%s %s 云判识开启,云区点中 环境1 均匀过滤后, 精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoFovEnv1 < th_cld4, condition) idx = np.where(condition) print u'%s %s 云判识开启,云区点中 靶区/环境 1 均匀过滤后, 精匹配点个数 %d' % ( Band1, flag, len(idx[0])) condition = np.logical_and(homoValue1 > 0, condition) condition = np.logical_and(homoValue1 < th_vaue_max, condition) idx = np.where(condition) print u'%s %s 云判识开启,云区点中 饱和值1 均匀过滤后, 精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoFov2 < th_cld2, condition) idx = np.where(condition) print u'%s %s 云判识开启,云区点中 靶区2 均匀过滤后, 精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoEnv2 < th_cld3, condition) idx = np.where(condition) print u'%s %s 云判识开启,云区点中 环境2 均匀过滤后, 精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoFovEnv2 < th_cld4, condition) idx = np.where(condition) print u'%s %s 云判识开启,云区点中 靶区/环境 2 均匀过滤后, 精匹配点个数 %d' % ( Band1, flag, len(idx[0])) condition = np.logical_and(homoValue2 > 0, condition) condition = np.logical_and(homoValue2 < th_vaue_max, condition) idx = np.where(condition) print u'%s %s 云判识开启,云区点中 饱和值1 均匀过滤后, 精匹配点个数 %d' % (Band1, flag, len(idx[0])) idx_cloud = np.where(condition) totalNums = len(idx_cloud[0]) + len(idx_clear[0]) print u'%s %s 云判识开启,匹配点个数,晴空 %d 云区 %d 总计:%d' % ( Band1, flag, len(idx_clear[0]), len( idx_cloud[0]), totalNums) self.MaskFine[Band1][idx_cloud] = 1
def save_fine_data(self, modeCfg): """ 第二轮匹配,根据各通道的的mean和std计以为,角度和距离等进行精细化过滤 """ # 最终的公共匹配点数量 idx = np.where(self.PubIdx > 0) if len(idx[0]) == 0: return print u'所有粗匹配点数目 ', len(idx[0]) # 掩码清零 self.MaskRough[:] = 0 # 计算共同区域的距离差 ######### disDiff = np.full_like(self.MERSI_Lons, '-1', dtype='i2') a = np.power(self.MODIS_Lons[idx] - self.MERSI_Lons[idx], 2) b = np.power(self.MODIS_Lats[idx] - self.MERSI_Lats[idx], 2) disDiff[idx] = np.sqrt(a + b) * 100. idx_Rough = np.logical_and(disDiff < modeCfg.distdif_max, disDiff >= 0) idx1 = np.where(idx_Rough) print u'1. 距离过滤后剩余点 ', len(idx1[0]) # 过滤太阳天顶角 ############### idx_Rough = np.logical_and( idx_Rough, self.MERSI_SoZ <= modeCfg.solzenith_max) idx1 = np.where(idx_Rough) print u'2. 太阳天顶角过滤后剩余点 ', len(idx1[0]) # 计算耀斑角 ############### glint1 = np.full_like(self.MERSI_SatZ, -999.) glint1[idx] = sun_glint_cal( self.MERSI_SatA[idx], self.MERSI_SatZ[idx], self.MERSI_SoA[idx], self.MERSI_SoZ[idx]) idx_Rough = np.logical_and(idx_Rough, glint1 > modeCfg.solglint_min) print np.nanmin(glint1[idx]), np.nanmax(glint1[idx]) idx1 = np.where(idx_Rough) print u'3. 太阳耀斑角过滤后剩余点 ', len(idx1[0]) idx_Rough = np.logical_and( idx_Rough, self.MERSI_SatZ <= modeCfg.satzenith_max) idx1 = np.where(idx_Rough) print u'4. FY卫星观测角(天顶角)滤后剩余点 ', len(idx1[0]) self.MaskRough[idx1] = 1 for Band1 in modeCfg.chan1: # 掩码清零 self.MaskFine[Band1][:] = 0 th_vaue_max = modeCfg.CH_threshold[Band1]['value_max'] th2 = modeCfg.CH_threshold[Band1]['homodif_fov_max'] flag = 0 # 可见光通道 if hasattr(self, 'MERSI_FovMean') and Band1 in self.MERSI_FovMean.keys(): flag = 'vis' print '1111', Band1 homoFov1 = np.abs( self.MERSI_FovStd[Band1] / self.MERSI_FovMean[Band1]) homoValue1 = self.MERSI_FovMean[Band1] homoFov2 = np.abs( self.MODIS_FovStd[Band1] / self.MODIS_FovMean[Band1]) homoValue2 = self.MODIS_FovMean[Band1] condition = np.logical_and(self.MaskRough > 0, True) condition = np.logical_and(homoValue1 < th_vaue_max, condition) condition = np.logical_and(homoValue1 > 0, condition) idx = np.where(condition) print u'%s %s 饱和值过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoFov1 < th2, condition) idx = np.where(condition) print u'%s %s 靶区过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) # sat 2过滤 condition = np.logical_and(homoValue2 > 0, condition) condition = np.logical_and(homoValue2 < th_vaue_max, condition) idx = np.where(condition) print u'%s %s 饱和值2过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) condition = np.logical_and(homoFov2 < th2, condition) idx = np.where(condition) print u'%s %s 靶区2过滤后,精匹配点个数 %d' % (Band1, flag, len(idx[0])) self.MaskFine[Band1][idx] = 1