中国30米高精度DEM优化方案:哥白尼GLO-30数据处理与精度验证
做地形分析这些年DEM选型一直是个容易让人纠结的问题。全球公开DEM里ASTER、SRTM、ALOS、哥白尼都被不少人推荐过可真落到中国区域的高精度地形应用上我这两年固定用的还是哥白尼全球30米DEMCopernicus DEM GLO-30并且会在原始数据之上做一遍系统性优化。今天这篇就把优化后的中国30米高精度DEM数据分享出来完整交代我为什么要这么选、优化链路怎么设计的、精度验证靠不靠谱以及拿到数据后最容易被忽略的使用细节。无论是做水文分析、山地灾害评估还是选址规划、户外三维可视化的同学都建议耐心看完。很多人选DEM只看米数觉得30米一定比90米强其实真正的差距在垂直精度。哥白尼DEM基于雷达干涉测量任务生成两套天线同时观测地表提取出的高程信息整体噪声更低、连续性好。在中国区域的中低起伏地形上标称垂直精度基本能到10米以内按LE90统计换算成RMSE大约4~6米这和早期SRTM、ASTER的数据相比已经有代差优势。更关键的是它的全球一致性明显更好做跨区域拼接时不必担心相邻数据源之间的系统偏差。这次分享的优化版并不是我重新造了一套高程模型而是以哥白尼GLO-30为底图重点解决原始切片在中国区域的空洞、条带噪声、水体高程异常和接缝跳变问题。处理完的数据在可视化和工程分析里都更省心打开就能直接参与计算不用再做繁琐的预处理。1. 为什么哥白尼GLO-30在我的选型表里排第一1.1 垂直精度带来的优势不是玄学地形分析的源头数据只要误差稍大后面所有衍生结果都会被放大。比如提取坡度时高程误差每增大1米坡度计算误差可能增大到好几度而汇水积累、径流路径对地形起伏方向又格外敏感一个几十米的高程异常就可能让河道改道。SRTM数据虽然经典但它的采集时间是2000年山区存在雷达阴影和空洞后在回填时用了较粗的插值局部地区垂直误差明显偏大。ASTER GDEM由多时相光学立体影像拼接而成最大的问题是云、雪和阴影导致的噪声和异常值在东南丘陵、西南山区这种植被茂密区域经常会出现成片的伪坑和土包。ALOS AW3D30精度表现很好波段覆盖广但在印度、东南亚等区域拼接缝明显中国西部地区的条带问题也不可忽视。哥白尼GLO-30在整体平衡性上最好雷达数据不受云层干扰可以穿透一定植被冠层得到更接近地表的高度。1.2 一张表看懂几个主流DEM的实际差距数据源标称分辨率常见垂直精度LE90覆盖范围观测时段获取成本哥白尼GLO-3030米约10米全球2011—2015年免费SRTM 1弧秒30米约16米北纬60°至南纬56°2000年免费ASTER GDEM30米约17—20米全球多时相拼接免费ALOS AW3D3030米约5米区域差异大全球2006—2011年免费注意ALOS的标称精度确实高但它的全球一致性稍弱在中国西部高山区和部分低纬度地区拼接缝附近的高程差值可以达到十几米。哥白尼GLO-30在极端地形下的表现更稳定这也是它适合作为全国范围统一高程底座的根本原因。1.3 既然全球数据已经可用为什么还要单独做中国区域优化先说明一个朋友经常问的问题原始哥白尼GLO-30已经全球覆盖直接下载用不行吗答案是可以但很折腾。首先GLO-30按经纬度分幅分发中国区域要跨几十个图幅。每个图幅虽然来自同一套产品但相邻瓦片之间仍有细微的高差跳变直接拼接后会在边界形成线性台阶。这种台阶在整体渲染时不太起眼一旦提取坡度坡向或做流域切割就会变成密集的假山脊。其次原始数据在中国高山区和太湖水系周边存在局部空洞、异常负值和锯齿状纹理。整幅看比例不大放到局部工程里可能正好卡在坝址、道路或房屋选址点上。做优化处理本质上是把这些高级数据里的低级问题清理干净让使用者把精力放在业务模型上而不是死磕数据预处理。2. 原始哥白尼DEM在中国区域最容易踩的四个坑2.1 空值不是没有数据而是雷达没有拿到有效回波这是很常见的坑。雷达干涉测量在陡崖、深切河谷、水面和强反射区会发生相位失相干最终会留下大块空值区。很多软件在读取DEM时会把空值当成0米、-9999米甚至某个小数导致后续计算完全不收敛。我见过有人直接用原始DEM做淹没分析结果河道中心戳出一圈负三万米的深坑计算范围直接崩了。更隐蔽的是一些软件默认把空值设为0米在西部高山区直接把高程整体拉低了几千米坡度坡向全盘失真。所以拿到原始数据后第一件事必须检查NoData掩膜并且要在填洞前做一次边缘膨胀因为空洞边界常常有一圈半可靠的高程直接插值会把这些半污染值一并带进结果。2.2 水体区域的高程混乱不是小概率事件雷达信号在水面上反射很弱且受风浪影响严重导致水体的高程经常出现异常。哥白尼产品虽然有水体掩膜辅助但实际水面仍然存在两种情况一是水面被抬高了几米呈凸起状二是湖岸边出现一道环状高坎看起来像堤坝实际上是水面高程与陆地参考面不匹配造成的。这种问题对防洪、淹没分析是致命的。如果DEM中水面本身凹凸不平计算出的淹没边界会呈锯齿状甚至出现湖水漫到一边、另一边干旱的假象。我的处理流程里会专门做水面修复找出水体区域统计邻域水面高度把异常像元压平到参考水面再对岸线周边做过渡平滑。2.3 轨道条带噪声让地形纹理看起来像拉丝雷达数据由多个轨道拼接而成不同轨道虽然做过匹配校正但在高山峡谷、坡度突变区域仍然会留下方向性纹理。放大看就像一块金属表面被拉出细密的丝肉眼还能凑合接受等提取坡度图或者山体阴影图时规律性的亮暗条纹就藏不住了。这种条带不能用普通低通滤波硬压。低通滤波会把山脊线和河谷的真实形态一起磨平。正确做法是先做低频地形提取得到残差再只针对残差里方向性明显的条纹分量做削减最后把削减后的残差加回去。这样能在压制条纹的同时保住地形细节。2.4 海岸线附近的高程错位一样要管虽然标题是陆地DEM但中国有很长的海岸线和大量海岛区域。雷达参考面与潮汐参考面存在系统性差异导致海陆交界处经常出现负高程或错位台阶。有的地方陆地高程突然变成-5米有的地方海面上却冒出几个人工岛。做海岸带分析、海岛三维可视化和近岸淹没模拟的人如果直接拿原始DEM来用基本会在海岸线上翻车。我的处理方法是引入海岸线掩膜对陆地一侧做高程修正同时对海面区域统一压到0米或按需保留负值再把岸线周边做一圈低强度平滑。四个坑看起来不大但任何一个都可能让下游计算崩盘。它们不像数据下载失败那样容易被发现而是潜藏在结果里等业务模型给出一个看似合理但其实方向错误的答案。3. 我的优化链路从空洞检测到条带噪声压制这一节是全文最核心的部分整个处理流程我拆成五步每一步都有明确的输出物和校验方式。3.1 第一步把NoData和粗差统一标记出来先用栅格工具读取出整个区域的DEM数组把空值、异常负值、极低质量值统一标记为待处理区。需要注意的是不要只标记NoData本身还要把极端高程值也纳入异常检测。比如某个像元高程比周围邻域均值低几百米或者高出几百米即使它本身不是NoData也应该视为粗差。实践中我会对原始NoData掩膜做一次向外膨胀通常膨胀3至5个像元。这样做的好处是空洞边缘那圈半可靠数据也会被纳入待处理区插值时就不会被这些劣质边缘值带偏。这里基于常见实践做一个补充说明如果你使用的工具不支持膨胀操作也可以用邻域统计方法把邻域内有效像元占比低于90%的点全部标记为可疑点。3.2 第二步按地形类型选择插值策略而不是一把梭填洞最怕的就是一刀切。把平原和山地用同一种插值方法处理结果一定是平原出现鼓包、山地出现阶梯。我的方案是把待处理区按坡度分成三类平缓区坡度小于3度使用邻域均值加中值滤波优先保证高程过渡自然。中起伏区坡度3度到15度使用反距离加权插值同时参考周围多个方向的高程趋势。陡峭区坡度大于15度使用带坡度趋势约束的插值器确保填补后的高程与周边山体走向一致不会在悬崖边上造出反向斜坡。这样做的好处很明显填补后的地形不会出现平台上突然冒尖或者山谷里多了一段反向坡的反常形态。以我处理过的西部高山峡谷样区为例优化前陡坡区空洞周边的高程跳变经常超过30米优化后控制在5米以内而且视觉上完全看不出插值痕迹。3.3 第三步用残差法压制条带噪声而不是直接模糊条带噪声和真实地形叠加在一起直接去掉很难。我常用的方法是残差分解对DEM做一次窗口较大的局部低频提取比如使用25×25窗口的中值滤波或高斯低通得到低频地形。用原始DEM减去低频地形得到残差图。残差图里包含高频地形细节也包含条带噪声和随机噪声。在残差图上检测方向性纹理。具体做法是沿着多个角度计算灰度共现或梯度统计找到主导纹理方向。只削减主导方向上的残差分量子保留其他方向的细节。把处理后的残差加回低频地形得到最终降噪结果。这种方法比直接做整体滤波科学得多。直接低通滤波会把山脊、河谷的细节全部磨掉而残差法只动噪声方向真实的地形高频信息能保留九成以上。优化完成后的坡度图几乎看不到原来的木纹状条纹但等高线的弯曲形态依然清晰。3.4 第四步水体修复和跨瓦片接缝匀色水体修复分为两个动作水面压平。结合水体掩膜统计水体覆盖范围内高程的众数或中位数把明显高于这个基准的像元压低再用小窗口平滑让水边线自然过渡。岸线修正。对紧贴水面的一圈陆地像元做高程检查若高差超过设定阈值则按过渡带处理避免出现环状高坎。跨瓦片拼接匀色相对简单相邻瓦片重叠区做渐入渐出的加权融合融合范围建议设定为重叠区内的若干像元这样能保证边界位置没有台阶感。需要提醒的是匀色不是把两张图平均一下完事而是在拼接前先把两个瓦片的高程统计量均值、标准差对齐再做融合否则会出现阴一半晴一半的双重纹理。3.5 第五步输出格式、坐标系和分片命名优化后的数据我统一输出为GeoTIFF格式坐标系保持WGS84经纬度高程单位是米NoData值显式设置为-9999。每个分片同时生成金字塔概览这样在桌面GIS里缩放不会卡顿。分片命名逻辑建议带上区域和生产日期比如cop30m_chn_区域代号_v202406.tif。在实际项目里我不建议一次性打包一个超大全国文件因为桌面软件加载会非常吃力。按区域分片使用者按需下载才是更合理的分享方式。4. 优化后数据是否可信我用的三重校验数据优化完不能直接宣称精度很高。不管处理链路设计得多漂亮都必须有可量化的验证过程。我这套数据校验分成三个层次缺一不可。4.1 第一重内部一致性检查把优化前后的DEM做差值统计生成一张差异栅格图。检查目标很简单差值分布是否集中在某个合理区间内是否存在异常的大范围偏移优化后的坡度、坡向图是否还残留条带通常优化后差异栅格的标准差会明显小于原始数据噪声水平。比如某片区域原始局部高程抖动达到8米优化后应降到3米以内。同时要看差异栅格的空间分布不能出现某条轨道覆盖范围内全部被大幅修改的情况那说明条带处理过头了。内部一致性检查还会统计空洞回填率。比如原始数据某区域空洞面积占5%优化后应降为0%。同时记录填补区域的面积占比方便后续使用者评估这些区域的不确定性。4.2 第二重与高精度参考点对比内部看起来顺滑不意味着数值接近真实地形。还需要外部参考数据。在可获得的区域里我整理了一批高精度实测点、已知的固定站数据和多条GNSS轨迹数据从中提取优化前后的高程值计算差值。对比时按地形类型分组平原区高程差均值应接近0米标准差控制在2米以内。丘陵区高程差标准差控制在5米以内。高山区高程差标准差可以放宽到8米左右。这里要注意一个原则修复区域的统计结果不能与原数据区域内统计结果差太多。如果修复区域误差明显偏大说明插值策略有问题如果修复区域和原始区域误差接近说明优化没有引入新的系统性偏差。我在部分样区测下来的结果是优化后整体LE90依然在10米内修复区域和未修复区域没有统计上的显著差异。4.3 第三重面向应用的反向验证数字指标达标了最终还要看真实业务能不能用。我会用优化后的DEM做三类典型应用测试水文分析提取河流网络检查河道是否连续有没有因为空值或异常高程导致河道莫名其妙断裂。坡度坡向提取生成坡度图肉眼检查是否存在规律性方向的条纹再对比原始数据确认山脊线没有位移。可视域分析选取若干高点做视域计算看山顶点、谷底点、鞍部的相对关系是否符合基本地学常识。这类验证的好处是它抓住了数据用于业务后是否合理这一层而不是只盯着单点误差。实际测下来优化后的河道连续性明显好过原始数据那些原本被空洞截断的水流都能自然汇入主干河道说明空洞填补的质量是可靠的。5. 拿到数据后的一些使用建议与避坑经验5.1 坐标系和投影别用错否则坡度直接失真不少朋友拿到DEM后习惯在Web墨卡托投影下直接计算坡度坡向结果高纬度地区坡度被夸张放大山体变得极其险峻。这不是DEM的问题而是投影变形导致的。我的建议是做全国或大区域范围概览时可以用WGS84经纬度坐标直接渲染但如果做坡度、坡向、流域分析这类对方向和距离敏感的计算务必先转到当地最合适的平面投影坐标系。通常在中国区域可以选择高斯-克吕格投影或合适的UTM分带中央子午线要和目标区域经度对应起来。跨度大的区域建议按带拆分处理不要强行用一个投影覆盖全国。5.2 重采样分辨率要克制别指望插值变出细节优化数据原始分辨率是30米。有人为了视觉好看在ArcGIS里直接重采样到5米然后渲染出非常高清的地形图。这种图看着舒服但那些细腻变化都是插值算出来的不是真实地形做工程分析时没有任何增益。我的习惯是区域尺度分析直接用30米若模型需要更细网格可以重采样到15米或20米算法选择双线性内插或立方卷积极端追求平滑效果可以用中值重采样但注意它会改变地形细节。千万不要为了更细而无脑加密那样只会增加计算负担不会提升精度。5.3 坡度算法别默认一把梭Horn算法通常更稳很多GIS软件的坡度计算默认是基于简单差分在平原地区容易生成大量伪坡度比如水田地区出现3度到5度的假斜坡。针对这种情况推荐使用Horn算法八邻域加权来计算坡度它在起伏地形的表现更接近真实情况。同时在坡度图拉伸显示时建议把0到2度的范围单独设色不要和2度以上的区域混在一起否则平地区域的地形噪声会被明显放大。很多人做完坡度图觉得怎么到处都是坡其实不一定是数据问题而是渲染方案问题。5.4 应用场景扩展水文、灾害、选址都能用优化后的DEM最直接的应用就是水文分析。之前用原始数据跑水文模型经常出现小支流中断、主河道偏移的问题换成优化数据后流向连续子流域边界稳定模型参数调试效率高了很多。山地灾害评估方面坡度、坡向、地形起伏度这些基础因子都可以直接提取不需要再额外修数据。选址规划也能用比如建筑选址、光伏选址前期用DEM看坡度分级和坡向分布能省掉大量现场踏勘的试错成本。5.5 最后再分享一个小技巧很多人在拿到DEM后习惯直接加载到三维场景里看效果但如果发现山体出现搓衣板纹理可以先查看是否是显示分辨率设置太低或者渲染时采样的像素间距太大。排除了这两个因素才需要考虑数据本身是否有条带问题。这套优化数据在常规三维场景下不需要额外滤波但每个软件的重采样方式不同极偶尔还是会出现轻微锯齿。遇到这种情况把显示采样改为双线性通常就能解决。我现在的主要工作流基本固定了原始哥白尼GLO-30作为基础输入先做空洞与粗差修复再做条带压制和水体处理最后拼接匀色。整个流程跑下来不仅图面干净后续的计算结果也更稳定。这套优化后的中国区域30米DEM不管自己用还是分享给同行都能明显缩短从拿到数据到产出结论之间的路径。希望这篇梳理对你也有参考价值。

相关新闻

Python错题管理系统实战:Flask+SQLite完整开发指南

Python错题管理系统实战:Flask+SQLite完整开发指南

前阵子帮朋友做了一套基于Python的错题管理系统,从数据库设计到页面交互完整跑通,前后花了一周左右。这类系统在课程设计、毕业设计里出现频率非常高,工作里做学习类产品也经常用到,但网上找得到的教程大多停留在“能跑就行”的阶…

2026/10/14 2:52:29 阅读更多 →
从零跑通微信小程序:环境配置、数据绑定与发布避坑全指南

从零跑通微信小程序:环境配置、数据绑定与发布避坑全指南

简介:这是一份面向小程序初学者的微信小程序开发入门教程文档,以DOCX格式整理,系统覆盖从环境搭建到最终发布上线的完整开发流程。内容从注册微信公众平台账号、安装微信开发者工具入手,逐步讲解项目创建、目录结构解析、app.json…

2026/10/14 2:52:29 阅读更多 →
微记账开发实战:从产品定位到技术踩坑的全记录

微记账开发实战:从产品定位到技术踩坑的全记录

做第一个原创项目的时候,我给自己定的目标很简单:把“微记账”做出来,哪怕只给自己用也认了。当时市面上记账软件已经一堆了,随手一搜就能看到各种“智能记账”“自动同步银行卡”“语音记账”,功能卷得厉害。我一个开…

2026/10/14 2:52:29 阅读更多 →

最新新闻

一张图微调YOLOv11:自然栖息地鸟类检测的流程与扩充

一张图微调YOLOv11:自然栖息地鸟类检测的流程与扩充

简介:面向 YOLOv11 模型验证需求,这份精简版鸟类目标检测数据集包含一张真实野外鸟类图像及配套标准标注,可用于快速原型验证、轻量级部署测试与小样本检测基线建立。压缩包共五个文件,包含三张 JPG 图像、一个数据配置文件与一个…

2026/10/14 3:39:38 阅读更多 →
ASP.NET + SQLServer葡萄酒商城源码:从数据库还原到下单事务全攻略

ASP.NET + SQLServer葡萄酒商城源码:从数据库还原到下单事务全攻略

简介:一套基于ASP.NET与SQL Server的葡萄酒网上商城销售系统,面向ASP.NET WebForm学习者、毕业设计学生以及需要搭建在线商城教学演示的开发者。系统围绕普通会员、商户会员和管理员三类角色展开,覆盖商品管理、购物车、订单处理、发货、商户…

2026/10/14 3:39:38 阅读更多 →
LangChain项目代码拆解:Chain、Agent、Memory与Retrieval四大核心组件实战指南

LangChain项目代码拆解:Chain、Agent、Memory与Retrieval四大核心组件实战指南

简介:这是一份LangChain入门与实践的项目代码包,面向正在学习大模型应用开发的Python开发者,旨在帮助读者快速理解LangChain的模块化设计与核心用法。包内共3个文件,包含一个HTML格式的入门讲解页、一个项目运行配置文件以及一个版…

2026/10/14 3:39:38 阅读更多 →
C++学习日记 Day21:C++11(下)lambda表达式和function包装器

C++学习日记 Day21:C++11(下)lambda表达式和function包装器

## 今天学了什么今天学习C11的lambda表达式和function包装器。## 可调用对象概念:在C中有一类对象可像函数一样调用;分类:①函数指针using prt void(*)(int, string); prt f1 fun; f1(1, "函数指针");②仿函数 --有 operator&am…

2026/10/14 3:39:38 阅读更多 →
一人公司AI工作流:6步实现内容生产去体力化

一人公司AI工作流:6步实现内容生产去体力化

1. 一人公司的内容困局与破局思路一个人做内容,最怕的不是没灵感,而是灵感来了却卡在“执行”上。写一篇长文要三小时,做一张配图要半小时,剪一条短视频要一整个下午,排版发布又要来回切换四五个平台。一天下来&#x…

2026/10/14 3:39:38 阅读更多 →
8765平台前后摄DVDD电压不一致排查与修复指南

8765平台前后摄DVDD电压不一致排查与修复指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 3:38:38 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →