12 KiB
SBAS-InSAR Gamma 实现与专家文档对照审阅记录
审阅日期:2026-06-03
审阅对象:
- 专家文档:
D:\Code\Insar_management_system_v2\LT1_GAMMA_SBAS_逐命令处理流程.docx - 当前实现:
backend/app/services/sbas_insar_production_service.py - 当前入库:
backend/app/services/sbas_insar_catalog_service.py - 样本 Run:
backend/runtime/sbas_insar_production/runs/sbas_7537cc71c998
1. 审阅结论
当前 SBAS-InSAR Gamma 实现不能视为专家文档的逐命令复刻。
它更接近“参考专家文档后形成的 Gamma/PyINT 混合生产链路”。这条链路曾跑出完整产物,但从专家文档一致性、结果验收语义和空间范围表达看,存在需要优先修正的问题。专家反馈“结果和实现路径有问题”,从代码和样本产物看是有依据的。
核心判断:
- 生产坐标系中的 RDC/SAR 栅格本身是矩形。
- 系统展示和入库使用的是地理坐标 bbox/GeoTIFF,而不是 SAR 坐标矩形。
- 当前把“发现阶段影像范围”“最终地理编码外包矩形”“最终有效像元范围”混在一起,容易造成范围和质量误判。
- 样本 Run 的 DEM 没有覆盖完整 stack bbox,但仍被标记为 ready,这是结果边缘异常和黑边风险的直接原因。
2. 专家文档主流程
专家文档的 LT-1 Gamma SBAS 主链路可以概括为:
par_LT1_SLC
ORB_filt_spline.py
multi_look
dem_import / fill_gaps
gc_map2 / pixel_area / create_diff_par / offset_pwrm / offset_fitm / gc_map_fine / geocode
create_offset / init_offset_orbit / init_offset / offset_pwr / offset_fit / SLC_interp
mk_mli_all
base_calc / base_plot / mk_diff_2d
mk_adf_2d / ave_image / rascc_mask / mk_unw_2d
quad_fit / quad_sub / atm_mod_2d / fill_gaps / atm_sim_2d / sub_phase
mb / unw_to_cpx / unw_model / mb / mb
replace_values / mask_data / dispmap / ts_rate
geocode_back / data2geotiff / disp_prt_2d
专家文档强调正式运行前必须用实际数据替换日期、极化、宽度、行数、DEM 宽度、种子点、阈值和小基线阈值,并用 grep、SLC_corners、显示检查命令进行核对。
3. 当前实现主流程
当前系统实现的主要阶段是:
01_baseline_audit.sh
02_coreg_common_ref.sh
03_prepare_rdc_dem.sh
04_diff_unwrap_common_ref.sh
05_detrend_atm.sh
05_mb_ts_rate.sh
07_publish_products.sh
08_point_timeseries.sh
实现入口集中在:
backend/app/services/sbas_insar_production_service.pybackend/app/services/job_handlers.pydeploy/wsl/runners/gamma_sbas_product_tools.py
当前文档化的 stage 名称与专家文档相近,但部分脚本内部命令不是专家文档原命令序列。
4. 主要问题
4.1 DEM 允许只覆盖中心点,不强制覆盖完整 stack
严重级别:高
当前 DEM 选择逻辑允许以下任一条件成立即保留 DEM:
self._bbox_contains(coverage, stack_bbox, margin_degrees=0.05)
or self._bbox_contains_point(coverage, self._stack_center(stack_manifest), margin_degrees=0.05)
位置:
backend/app/services/sbas_insar_production_service.py::_resolve_rdc_dem_source
样本 Run sbas_7537cc71c998 的证据:
"covers_stack_bbox": false,
"covers_stack_center": true,
"stack_bbox": {
"min_lon": 128.7690438245,
"min_lat": 43.7486321624,
"max_lon": 129.6293024728,
"max_lat": 44.3582486206
}
同一 Run 的 DEM coverage:
"coverage": {
"min_lon": 127.99998768,
"max_lon": 130.99998756,
"min_lat": 44.00000064,
"max_lat": 46.000000560000004
}
也就是说,stack 南界到 43.7486,DEM 南界只到约 44.0000。这会造成南侧边缘缺失、NoData、黑边或地理编码结果范围不足。
当前 summary 仍显示:
"ready": true
这是验收逻辑漏洞。
建议:
- DEM 选择必须强制
covers_stack_bbox=true,并增加安全缓冲。 - 如果 DEM 不覆盖完整 stack,应直接阻断 RDC DEM 阶段,不允许标记 ready。
selection_note不应写“covering the SBAS stack extent”,除非确实覆盖完整 stack bbox。
4.2 干涉和解缠命令链与专家文档不一致
严重级别:高
专家文档:
mk_diff_2d
mk_adf_2d
ave_image
rascc_mask
mk_unw_2d
当前实现:
create_offset
phase_sim_orb
SLC_diff_intf
adf
cc_wave
rascc_mask
mcf
位置:
backend/app/services/sbas_insar_production_service.py::_write_interferogram_script
这不是简单命令名称不同,而是处理策略不同。当前链路可能可以跑通,但不能直接说“与专家逐命令流程一致”。如果专家按文档检查结果,当前实现路径会对不上。
建议:
- 保留当前混合链路时,应将 profile 标记为
lt1_gamma_sbas_hybrid或experimental。 - 新增严格专家链路 profile,例如
lt1_gamma_sbas_expert_v1,按专家文档生成mk_diff_2d/mk_adf_2d/mk_unw_2d脚本。
4.3 SBAS 反演缺少专家文档中的二次修正链路
严重级别:高
专家文档在第一次 mb 后包含:
unw_to_cpx
unw_model
mb
mb
当前实现基本是:
mb
ts_rate
位置:
backend/app/services/sbas_insar_production_service.py::_write_ipta_timeseries_script
这会影响 2π 跳变修正、最终反演稳定性和专家验收一致性。
建议:
- 明确把第一次
mb、模型辅助解缠修正、第二次mb、最终mb分成独立可审计步骤。 - 每次
mb输出都应记录输入列表、itab、参考点、窗口、阈值和输出统计。
4.4 配准实现不是专家文档的显式逐命令配准
严重级别:中高
专家文档配准链:
create_offset
init_offset_orbit
init_offset
offset_pwr
offset_fit
SLC_interp
当前实现调用:
SLC_coreg.py --init_offset
位置:
backend/app/services/sbas_insar_production_service.py::_write_coregistration_script
如果 SLC_coreg.py 内部等价,仍需要把内部日志和参数展开到系统审计里。否则专家无法按逐命令流程核对。
建议:
- 专家链路 profile 中显式生成
create_offset/init_offset_orbit/init_offset/offset_pwr/offset_fit/SLC_interp。 - 混合链路可以保留
SLC_coreg.py,但必须与专家链路区分。
4.5 DEM 查找表链路与专家文档不一致
严重级别:中
专家文档:
dem_import
fill_gaps
gc_map2
pixel_area
create_diff_par
offset_pwrm
offset_fitm
gc_map_fine
geocode
当前实现:
复用已有 Gamma DEM cache
replace_values
gc_map1
geocode
create_diff_par
init_offsetm
offset_pwrm
offset_fitm
gc_map_fine
geocode
位置:
backend/app/services/sbas_insar_production_service.py::_write_rdc_dem_script
当前方式可能是工程上可行的,但与专家文档命令链不一致;同时 DEM 覆盖检查还存在高风险漏洞。
建议:
- 专家链路 profile 中按文档执行
dem_import/gc_map2/pixel_area。 - 混合链路继续使用 DEM cache 时,必须加强 DEM 覆盖、坐标、分辨率、NoData 验收。
4.6 入库和展示范围来自 stack 元数据,不是最终产品有效范围
严重级别:中
当前 geographic coverage 构造来自 stack scenes 的 metadata bbox:
backend/app/services/sbas_insar_production_service.py::_build_stack_geographic_coverage
入库时使用该 coverage 写入:
min_lonmin_latmax_lonmax_latgeomcoverage_polygon
位置:
backend/app/services/sbas_insar_catalog_service.py::_build_product
这意味着系统中展示的是“发现阶段影像范围”,不是最终 GeoTIFF 的真实 footprint,更不是最终有效像元 footprint。
样本 Run 的最终 GeoTIFF los_rate_toward_mm_per_year.tif 信息:
Size is 966, 435
Origin = (128.790404333349983,44.362917266649994)
Pixel Size = (0.000833333300000,-0.000833333300000)
Upper Left = (128.7904043, 44.3629173)
Lower Right = (129.5954043, 44.0004173)
NoData Value=0
而 stack bbox 是:
{
"min_lon": 128.7690438245,
"min_lat": 43.7486321624,
"max_lon": 129.6293024728,
"max_lat": 44.3582486206
}
两者明显不同。
建议:
- 入库时从主 GeoTIFF 读取外包矩形、CRS、transform 和 NoData。
- 另行计算有效像元 footprint,或至少计算有效像元 bbox。
- 前端明确区分:
- stack metadata footprint
- RDC/SAR processing grid
- geocoded raster extent
- valid-pixel footprint
4.7 质量统计把 0 当成有效值
严重级别:中
当前 _gamma_float32_stats 使用 finite 像元作为 valid_count,只额外记录 nonzero_count。但 GeoTIFF 明确 NoData Value=0,因此黑边或无效像元会被 valid_count 掩盖。
位置:
backend/app/services/sbas_insar_production_service.py::_gamma_float32_stats
样本质量统计:
"pixel_count": 11480259,
"valid_count": 11480259,
"nonzero_count": 1956770
nonzero_count 只占约 17%,但 valid_count 却是 100%。这会误导验收。
建议:
- 对最终产品统计必须把 NoData 排除。
- 对 RDC 中间文件可以同时报告:
- finite_count
- nonzero_count
- nodata_count
- valid_pixel_ratio
- valid_bbox
ready不应只看文件尺寸和 finite 统计。
5. SAR 坐标矩形问题
专家反馈“SAR 坐标应该是矩形”,需要拆成两个层次理解。
5.1 处理坐标
RDC/SAR 处理网格应该是规则矩形。
样本 Run 中:
"reference_geometry": {
"range_samples": 2693,
"azimuth_lines": 4263,
"expected_float32_bytes": 45921036
}
RDC 文件大小匹配 2693 * 4263 * 4,说明处理中间产品本身是矩形栅格。
5.2 展示和入库坐标
系统前端和 catalog 当前展示的是 EPSG:4326 的地理 bbox 或 scene bbox,不是 SAR 坐标矩形。
地理编码后的 GeoTIFF 是经纬度网格矩形,但有效像元可能因为 SAR 覆盖、DEM 覆盖、查找表外推、NoData 而不是满矩形。前端如果只画地理 bbox,会让用户误以为整块都有效。
5.3 结论
当前问题不是“RDC 文件不是矩形”,而是系统把以下内容混用了:
- SAR/RDC 处理矩形。
- 原始 scene metadata bbox。
- stack 多景 bbox union/intersection。
- 最终 GeoTIFF 地理外包矩形。
- 最终有效像元 footprint。
建议把这些空间语义拆开保存和展示。
6. 建议整改路线
第一阶段:先修验收与范围表达
目标:不改变核心 Gamma 命令,先避免错误结果被标记为 ready。
- DEM 必须完整覆盖 stack bbox,加缓冲;否则阻断。
rdc_dem_summary.ready必须检查 DEM coverage。publish_product_summary读取主 GeoTIFF 的真实 extent、NoData、valid pixel ratio。- catalog 入库优先使用主 GeoTIFF extent 和 valid footprint,而不是 stack metadata bbox。
- 前端展示拆分为“数据发现范围”和“产品有效范围”。
第二阶段:建立专家文档严格链路
目标:给专家可逐命令审计的生产路径。
新增 profile:
lt1_gamma_sbas_expert_v1
特性:
- 按专家文档 12 节生成脚本。
- 每节脚本命令、输入、输出、日志与专家文档一一对应。
- 保留当前混合链路,但命名为 hybrid/experimental,不再和专家链路混称。
第三阶段:结果质量验收
目标:形成可解释的质量结论。
建议增加:
- DEM 覆盖检查。
- RDC 栅格尺寸检查。
- GeoTIFF extent 检查。
- NoData/valid-pixel ratio 检查。
- 相干性统计。
- 每对干涉图解缠覆盖率。
mb输入层数、有效像元、参考点窗口记录。- LOS 速度范围和 sigma 分布阈值告警。
7. 当前不建议的做法
- 不建议继续把当前链路称为“专家文档逐命令链路”。
- 不建议只看产物文件存在和文件大小判断成功。
- 不建议用 stack metadata bbox 代表最终产品有效范围。
- 不建议把 0 NoData 统计为有效像元。
- 不建议在 DEM 未覆盖完整 stack 的情况下继续标记 ready。
8. 后续需要专家确认的问题
- 是否要求严格使用专家文档中的
mk_diff_2d/mk_adf_2d/mk_unw_2d,还是允许保留SLC_diff_intf/adf/mcf混合链路。 - DEM 来源是否必须每次从 GeoTIFF 通过
dem_import重新导入,还是允许复用 Gamma DEM cache。 mb的三次反演和unw_model修正是否必须进入正式链路。- 参考点
R_REF/A_REF、窗口、阈值是否由系统自动选择,还是必须由专家人工确认。 - 最终业务展示默认应展示 SAR/RDC 矩形、GeoTIFF extent,还是有效像元 footprint。