上星期处理一景无人机正射影像,同事发来一个 1.2GB 的 TIF,我拖进 QGIS 以后,加载进度条走了半分钟,放大一下又要等三五秒。用识别工具点开一看,像素值是 16 位无符号整型,无压缩,还没建金字塔。这就是典型的只在菜市场买过土豆、没去地里刨过土豆——TIF 格式本身支持无损压缩、坐标信息、金字塔、瓦片式存储,明明可以通过几个参数把体验拉满,偏偏有人只用它的默认出厂设置。
这篇文章想把 TIF 格式在 QGIS 里的这些门道掰开揉碎讲清楚:它为什么是 GIS 领域的通用交换格式,无损压缩到底保护了什么,坐标信息是怎么写进文件里的,以及你在实际操作中会遇到哪些坑。适合刚接触 QGIS 的新人,也适合那些每天和遥感影像、扫描图、DEM 打交道,但还没系统整理过格式经验的中级用户。看完你至少能明白,同样是 TIF,为什么有的文件又小又流畅,有的文件又大又卡顿。
1. 从一张“拖不动的 TIF”说起:GIS 项目里为什么默认主角是它
1.1 普通图片格式在 GIS 里为什么不够用
很多人第一次接触 GIS 都会有个疑问:我有 JPG、PNG,甚至 BMP,为什么非要跟 TIF 打交道?答案很简单,因为普通图片格式在 GIS 里几乎都是“残废”。
JPG 是有损压缩,每保存一次就损一遍,照片看着还行,但你要是拿它做遥感解译、量测、分类,像素级的光谱值已经被改得面目全非。PNG 倒是无损,但它本身是面向屏幕显示设计的,不支持多波段、不支持浮点型高程数据,最关键的是标准 PNG 文件里写不进坐标系统。至于 BMP,文件体积大得离谱,一张影像动不动几个 GB,没人愿意在项目里用它。
GIS 不只是“看图”,它还要做到坐标对齐、像素精确、可量测、可分析。TIF 之所以能在这种环境下活三十年,核心在于它天生就是一个“能装”的容器:既能存普通照片,也能存多波段遥感影像、浮点型 DEM、带地理标签的扫描图,还能在文件内部嵌入坐标系统信息。这一条就足以让它在 GIS 生态里稳坐第一把交椅。
1.2 TIF 的“无损”到底护住了什么
TIF 格式支持多种压缩方式,其中 LZW、Deflate、PackBits 都是无损压缩。无损意味着什么?意味着解压出来的每个像素值,和压缩前一模一样,一个字节都不差。
这件事 GIS 从业者必须敏感。你手里如果是一张土地利用分类结果图,每个像元值对应一个地类代码,比如 1 是耕地、2 是林地、3 是建设用地,这串代码哪怕错一个数,面积统计就跟着错。你手里如果是一份 DEM 高程数据,高程值被有损压缩改了 0.5 米,后续做坡度分析、汇水分析、淹没模拟,结果全都不可信。所以只要涉及定量分析、分类后处理、原始影像存档,TIF 加无损压缩就是唯一稳妥的选择。
很多刚入行的人不理解“无损”和“有损”的界限,觉得反正都是一张图,差不多就行。实际上,有损压缩删除的是人眼不敏感的细节,而计算机分析恰恰会对这些细节极其敏感。这也是为什么遥感原始数据基本以 TIF 格式分发,而不是 JPG。记住一句话:用来给人看的图,有损可以接受;用来给机器算的图,必须无损。
1.3 GeoTIFF 与 TIF:一个标签就把坐标写进了文件里
TIF 和 GeoTIFF 的关系,就像租房和买房的区别。普通 TIF 只是一张图,你拖进 QGIS,它只会平铺在地图画布上,不跟你讲究经纬度;GeoTIFF 则是在 TIF 文件内部额外写入了地理参考信息,包含坐标系统、坐标范围、像素对应的地面尺寸等。QGIS 一读到这些标签,就能自动把影像放到正确的地理位置上。
这也是标题里“支持地理信息”的准确含义。1995 年,几位来自 NASA、测绘和地理信息领域的专家凑在一起,在标准 TIF 的标签体系里塞进了一组自定义标签,用来记录坐标系、投影参数、像素尺度和控制点,于是 GeoTIFF 诞生。从此,一个 TIF 文件不光是图像,还是“自带定位”的图。
实际使用中,你只要在 QGIS 里拖入一个 GeoTIFF,它的显示位置就会自动对齐到其他图层上,不需要手工移动。这个功能太常用了,以至于很多人根本没意识到这是 TIF 格式的功劳,还以为是 QGIS 自己聪明。真相是,QGIS 只是老老实实读出了文件内部的地理标签而已。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 坐标信息藏在哪:把 GeoTIFF 的文件结构翻个底朝天
2.1 IFD 和 Tag:TIF 格式的“乐高积木”
想真正理解 GeoTIFF,得先看一眼 TIF 的内部结构。TIF 格式最核心的概念是 IFD(Image File Directory)和 Tag。你可以把 TIF 文件想象成一个乐高积木箱,IFD 是积木的说明书,Tag 则是每一块积木。每个 Tag 有一个数字编号,代表一种属性。
比如 256 号 Tag 表示图像宽度,257 号表示图像高度,258 号表示每个像素的位数,259 号表示压缩方式。这些 Tag 一个挨一个写进文件头后面,标准看图软件只读自己认识的 Tag,不认识的就直接跳过,因此 TIF 格式的扩展性极强。GeoTIFF 正是利用了这一点,注册了 33550(像素尺度)、33922(配准点)、34735(坐标系统键目录)等一批专用 Tag。
这个设计的好处在于:兼容旧软件,同时又不妨碍新功能。一个老掉牙的照片浏览器打开 GeoTIFF,依然能正常显示图像内容,因为它忽略那些地理标签;QGIS 打开同一个文件,则能把坐标信息提取出来做空间定位。这就是“标签化存储”的威力,不需要额外单独的配置文件,信息跟图像锁死在同一个文件里。
2.2 用 gdalinfo 把 GeoTIFF 的底裤翻出来
打开命令行,输入一行 gdalinfo 就能看到 GeoTIFF 内部的所有信息。拿一个 UTM 投影的 DEM 举例,输出大致长这样:
bash复制gdalinfo dem.tif
输出里你能看到:
code复制Driver: GTiff/GeoTIFF
Files: dem.tif
Size is 3573, 3353
Origin = (500000.000000000000000, 3500000.000000000000000)
Pixel Size = (1.000000000000000, -1.000000000000000)
Coordinate System is:
PROJCRS["WGS 84 / UTM zone 50N", ...]
Corner Coordinates:
Upper Left ( 500000.000, 3500000.000) (114d 0'0.00"E, 31d37'9.91"N)
Lower Right ( 503573.000, 3496647.000) (114d 1'55.23"E, 31d36'8.79"N)
Image Structure Metadata:
COMPRESSION=LZW
INTERLEAVE=BAND
Band 1 Block=256x256 Type=Float32, ColorInterp=Gray
NoData Value=-9999
这一段信息量很大:文件驱动是 GTiff,说明它就是 GeoTIFF;图像尺寸是 3573 列乘 3353 行;Origin 是左上角坐标;Pixel Size 是每个像素对应 1 米、Y 方向是负值说明图像从上往下排列;坐标系统是 WGS 84 / UTM 50N;压缩方式是 LZW;块大小是 256x256;像素数据类型是 Float32;还定义了 NoData 值 -9999。
在 QGIS 里你当然不需要记这些输出,但如果你需要排查“为什么影像位置不对”“为什么数据读不出来”,gdalinfo 是最快的体检工具。建议每位用 QGIS 的人电脑上都装一个 GDAL,命令行版本能解决太多图形界面难以解释的问题。
2.3 没有地理标签时,.tfw 世界文件如何救场
并不是所有 TIF 都自带地理标签。老式 GIS 软件、部分扫描入库工具、一些 CAD 导出流程,生成的是普通 TIF 加一个同名文本文件,这个文本文件就叫世界文件,扩展名是 .tfw(对应 .tif)。
.tfw 文件只有六行数字,前两行是 X 方向和 Y 方向的像元大小,中间两行通常是 0(表示图像没有旋转),后两行是左上角像素的真实地理坐标。举个例子:
code复制1.000000
0.000000
0.000000
-1.000000
500000.000000
3500000.000000
QGIS 加载 TIF 时,发现文件本身没有坐标信息,会自动去找同名 .tfw,能找到就照着它把影像放到地图上。有了这个机制,即便你的 TIF 没写地理标签,也能靠外挂文本实现“支持地理信息”。
这里有个细节容易踩坑:.tfw 必须和 .tif 的主文件名完全一致,而且大小写敏感。如果你在 Windows 上是 demo.TIF,旁边放一个 DEMO.tfw,QGIS 有可能认不出;拿到 Linux 服务器上就更严格。所以做任何自动化处理时,统一文件命名规则非常重要。
2.4 QGIS 里如何快速查看坐标、像素尺寸和金字塔
在 QGIS 图形界面里,查看这些信息不需要命令行。右键图层,打开“属性”,切到“信息”页,就能看到图层的范围、坐标系统、像素尺寸、金字塔状态、压缩方式,以及每个波段的类型。用“识别”工具在地图上点一下,还能看到单个像素的数值,这是判断影像值域是否正常的最快路径。
如果你的 TIF 没有坐标信息,在“信息”页里坐标系统会显示“未知”。此时不要慌,可以手动指定坐标系,这个操作在后续的翻车现场章节里会展开说明。
3. QGIS 里和 TIF 高频打交道的四个场景
3.1 加载后先检查的三件事:坐标系、范围、像素类型
每次拿到一个新的 TIF,不管它是天上飞的遥感影像,还是扫描的地形图,我的习惯是第一时间检查三样东西。
第一是坐标系。右键图层看属性,如果坐标系不是预期的,后续做投影、量测、叠加全都会跑偏。第二是范围。范围应该落在它应有的地理区域内,如果一个标称某县的影像范围跑到隔壁省去了,那大概率是坐标系统理解错了或者投影参数填错了。第三是像素类型。像素类型决定了数据是 8 位、16 位还是 32 位浮点,这个参数直接决定你能不能正确拉伸显示、能不能做数值运算。
这三个参数串起来,基本决定了一个 TIF 文件能不能正常参与 GIS 分析。很多“文件加载了但不知道对不对”的焦虑,都源于没做这三步体检。
3.2 多波段 TIF 的波段组合与拉伸显示
TIF 文件常常不止一个波段。无人机多光谱影像有 5 个波段,Sentinel-2 有 13 个波段,很多航拍影像至少是 RGB 三波段。QGIS 里默认可能只显示其中的某些波段,你需要手动指定红、绿、蓝对应的波段号,才能得到想要的彩色合成结果。
操作路径是“图层属性” → “符号系统” → “渲染类型”选“多波段彩色”,然后把红、绿、蓝波段分别指定。比如做植被分析时,经常要用近红外波段参与合成,得到标准的假彩色影像,植被显示成红色,这在目视解译时特别有用。
另一个高频问题是拉伸显示。很多 16 位影像加载后全黑或者发灰,原因是 QGIS 没有正确计算拉伸范围。在“符号系统”里把“Min/Max”设置调整为本文件的实际统计范围,或者用“累计像素截断(2%-98%)”,一般就能看到理想效果。我强烈推荐使用百分位截断,它不受个别异常高亮像元干扰,显示效果更稳定。
3.3 导出、裁剪、合并 TIF 时的关键参数
在 QGIS 里把图层导成 TIF,用的是右键“导出” → “另存为”,对话框里有一大堆选项,很多人直接点“确定”就走了。实际上,这里最值得设置的是“创建选项”。
如果只是临时的中间产物,我通常用这样一组参数:
- 格式:GeoTIFF
- 创建选项:
- COMPRESS=LZW
- PREDICTOR=2
- TILED=YES
- BIGTIFF=IF_SAFER
翻译成人话就是:采用 LZW 无损压缩、开启水平差分预测、按瓦片方式存储、文件超过 4GB 时自动切换为 BigTIFF。这样导出的 TIF,体积小、读取快、兼容性好,后续不管在 QGIS 还是 ArcGIS 里用都很顺。
裁剪和合并同样依赖底层 GDAL 工具。裁剪单个 TIF 可以直接用工具箱里的“裁剪栅格”,合并多个 TIF 用“拼接”工具。它们本质上都调用 gdal_translate 和 gdalwarp,如果你要批量处理几百个文件,建议直接写命令行脚本,比在 GUI 里一个个点效率高得多。
3.4 地理配准:给扫描件 TIF 注入坐标的正确姿势
扫描的历史地图、纸质规划图,拿回来通常是普通 TIF,没有坐标信息。要让它参与 GIS 分析,就需要地理配准。QGIS 的“栅格”菜单里有“地理配准”工具,步骤不复杂,但细节决定成败。
操作时先打开配准工具,载入扫描 TIF,然后在图上寻找特征明显的控制点,比如道路交叉口、河流转弯处、建筑物角点,在 QGIS 地图画布或者已有参考图层上定位到同一位置,输入该点的真实坐标。控制点至少选三个,散布在图像四角,不要集中在某个局部区域。输入完控制点后,设置变换类型,扫描图一般用“线性”变换;如果扫描时纸张有变形,用“多项式 2 次”或“三次样条”做非线性校正。
最后的关键步骤是选择重采样方法:线划图、地类图这类边界分明的图,用“最近邻”,它不改变原始像元值,适合后续矢量化;色调连续的影像,用“双线性”或“三次卷积”,显示更平滑。配准完成后,QGIS 会输出一个 GeoTIFF,坐标信息已经写入文件内部,不需要再依赖外部文件。
很多人在做第二次全国国土调查、第三次全国国土调查这类业务时,都会用扫描图先配准,再做屏幕矢量化,最后挂接符号库出图。这一步的地基就是 GeoTIFF 配准质量,地基打不稳,后面所有叠加分析都会跟着错。
4. 压缩参数选不对,文件又大又卡:LZW、Deflate、JPEG 实测对比
4.1 每种压缩算法的原理和宿命
TIF 支持的压缩方式远不止一种,在 QGIS 导出对话框里你至少会看到 PackBits、LZW、Deflate、JPEG。它们各有各的适用场景。
| 压缩方式 | 是否为无损 | 压缩率 | 适用场景 |
|---|---|---|---|
| PackBits | 是 | 较低 | 大面积色块的简单图、老式扫描仪输出 |
| LZW | 是 | 中等 | GIS 中使用最广,适合分类图、扫描图、灰度影像 |
| Deflate | 是 | 较高 | DEM、浮点数据、压缩率优先的存档 |
| JPEG | 否 | 高 | 照片类影像、正射影像浏览版 |
| CCITT G4 | 是 | 很高 | 二值黑白扫描图(1 位像素) |
PackBits 是比较老的游程编码,对于连续重复的数据有效,但自然影像里相邻像素极少完全相同,所以压缩率一般。LZW 是目前 GIS 领域的默认选手,它无损、相对稳定,适合各种整数型栅格。Deflate 本质上就是 ZIP 算法,解压稍慢,但压缩率通常比 LZW 再高 10% 到 30%,重度存档场景我会首选它。JPEG 是有损压缩,对照片类数据压缩效果极好,体积能压到原来的十分之一,但代价是像素值被修改,只能用于显示和浏览。
4.2 Predictor 预测器:压缩率的催化剂
初次接触“预测器”这个选项的人,多半会一脸茫然。它实际上是压缩算法之前的预处理步骤,目的是让数据更容易被压缩。
原理并不复杂:相邻像素的值往往非常接近,比如一片山地 DEM,相邻像素高程可能只差 0.5 米。与其直接压缩那一串绝对高程值,不如先计算每个像素与左边像素的差值,差值比原值范围小得多,后面的无损压缩算法就能压得更狠。这个“先差分、再压缩”的操作就是 Predictor。
GDAL 里 Predictor 有三个常用值:1 是不使用预测器,适合分类图等值域跳跃大的数据;2 是水平差分,适合 8 位或 16 位的连续影像;3 是浮点预测器,专门针对 Float32 类型的高程影像。实际操作中,LZW 和 Deflate 都可以搭配 Predictor,我导 DEM 时固定用 DEFLATE + PREDICTOR=3,文件能比不设预测器小不少。
4.3 几套可以直接抄的导出方案
根据数据类型选择合适的压缩参数,是提升工作效率最直接的途径。我给几套常用的组合方案,直接照抄即可。
如果是土地利用分类结果:像素类型通常是 8 位整数,值域 0 到 255,用 COMPRESS=LZW、PREDICTOR=1。分类图像素值在空间上是跳跃的,差分预测没什么帮助,LZW 本身就够了。
如果是卫星影像或无人机正射影像:如果是原始多光谱存档,用 COMPRESS=DEFLATE、PREDICTOR=2,保证无损和文件体积;如果只是做显示用的浏览图,用 COMPRESS=JPEG、JPEG_QUALITY=85,并建金字塔,文件小、打开快。
如果是 DEM 高程数据:用 COMPRESS=DEFLATE、PREDICTOR=3。这是无损方案里对浮点数据最友好的一组参数,我实测过,压出来的 DEM 体积通常只有无压缩状态的一半左右。
如果是扫描的历史地图:如果是 1 位二值图,可以试 CCITT G4 压缩;如果是灰阶扫描图,用 LZW 就可以,压缩率已经很可观。
4.4 为什么 TIF 压缩后反而更大了
有人会有这样的经历:选了 LZW,文件体积反而比无压缩时还大,于是怀疑软件有问题。这种情况通常是三种原因造成的。
第一种,原始数据已经是压缩格式。你把一个 JPEG 文件转成 TIF 再加 LZW,LZW 面对 JPEG 里已经高度压缩的像素流,几乎找不到重复模式,压缩效率极低,加上额外的文件开销,体积不降反升。第二种,数据本身噪声太大。传感器噪声、抖动的扫描影像,像素间缺乏规律,任何无损压缩算法都对这种数据无能为力。第三种,参数没配对。比如对浮点型数据用了 LZW + PREDICTOR=1,而浮点数的二进制表示方式本身很“乱”,不经过差分预测很难压缩。
判断一个压缩方案是否有效,别只看文件体积,看速度也重要。如果压缩半天没反应,文件还大,就该换思路了。
5. 大文件救星三件套:金字塔、BigTIFF 与瓦片化存储
5.1 金字塔:加载速度的命根子
回到文章开头那个 1.2GB 的 TIF。为什么我拖进 QGIS 后会卡半分钟?原因就是它没有金字塔。金字塔说白了就是在原图旁边预生成多个缩小版本:2 倍、4 倍、8 倍、16 倍、32 倍,每一级都是上一级的重采样结果。显示时,QGIS 根据当前缩放级别自动选择合适层级,拉到全景就给你看最缩略的版本,放大到局部才去读原始像元。
没有金字塔的大影像,相当于你把一张 8K 海报拆成像素点,非要从头到尾扫一遍才能看清缩略图,那当然卡。构建金字塔的操作在 QGIS 里不复杂:处理工具箱里搜“金字塔”,或者用“栅格”菜单里的“构建金字塔(Build overviews)”,底层调用的是 gdaladdo。命令行方式是这样的:
bash复制gdaladdo -r average input.tif 2 4 8 16 32
重采样方法的选择值得多说一句:分类等离散数据用 -r nearest 保持类别值不模糊;高程和影像等连续数据用 -r average 或 -r gauss,显示更平滑。如果文件已有现有金字塔但数据更新过,记得重建,否则会出现“看着缩略图很旧,放大后才是新数据”的怪事。
5.2 超过 4GB 要懂 BigTIFF
标准 TIF 格式使用 32 位偏移量寻址,单个文件最大不能超过 4GB(大约 42 亿字节)。放在早期的扫描仪时代,4GB 绰绰有余,但到了无人机正射影像动辄十几 GB 的今天,这个限制就成了硬伤。
解决方案是 BigTIFF。它不是新格式,只是用了更大的 64 位偏移量,把单文件上限撑到了 16EB,对日常工作来说相当于没有上限。QGIS 导出对话框的“创建选项”里有 BIGTIFF=YES / IF_SAFER / NO 三个选择。IF_SAFER 的意思是:文件超过 4GB 时自动用 BigTIFF,没超时保持标准 TIF,这样兼容性最好,也是我最常用的设置。
需要注意的是,BigTIFF 与一些老软件不兼容。如果你的数据要发给政府单位、老旧的 CAD 环境,最好提前确认对方软件是否支持 BigTIFF。我见过某项目因为导出时用了 BIGTIFF=YES,对方单位打不开文件,来回折腾了一天,这种事真不值得。
5.3 条带改瓦片:局部浏览快一个量级
TIF 文件内部的像素存储方式有两种:条带(stripe)和瓦片(tile)。条带模式是最传统的方式,每一行像素连续存成一个条带,适合按顺序逐行读取,比如传统扫描仪写入。但 GIS 显示是随机访问,你放大某一块区域时,并不需要第 1 行到第 1000 行的全部数据,条带模式却可能把这些都读一遍,效率自然低。
瓦片模式则把图像切成 256×256 或 512×512 的小方块,每个方块独立存储。显示任一局部区域时,系统只要定位并读取包含该区域的几个瓦片即可,速度提升非常明显。在 QGIS 导出或 gdal_translate 里设置 TILED=YES 就开启了瓦片模式,还可以用 BLOCKXSIZE 和 BLOCKYSIZE 指定瓦片尺寸。
命令示例:
bash复制gdal_translate -of GTiff -co TILED=YES -co BLOCKXSIZE=256 -co BLOCKYSIZE=256 input.tif output.tif
这条命令相当于给影像做了内部结构优化,不改变任何像素值,却能大幅提升局部刷新的响应速度。我处理大影像时基本都会顺手做一次,配合金字塔,QGIS 的加载体验完全可以是另一个世界。
6. TIF 在 QGIS 里的典型翻车现场与排查思路
6.1 打开全黑:不是文件坏了,是值域没对上
最经典的翻车现场:明明一个正常的 16 位 TIF,拖进 QGIS 后整幅图黑漆漆一片。新手第一反应是文件损坏,老手第一反应是查像素类型和拉伸范围。
16 位无符号整型的值域是 0 到 65535,如果 QGIS 没有自动计算统计信息,默认的拉伸范围可能还是 0 到 255,影像里大部分像元落在 256 以上,映射到显示器上全部压成黑色。解决方式是右键图层 → 属性 → 符号系统 → 灰度渲染,“Min/Max”设置里选择“Min/Max”并选择完整的统计计算范围,或者直接用“累计像素截断,2% 到 98%”让显示效果更均衡。
排查这类问题有一个固定套路:先用识别工具点一下影像,看像素值大致在什么范围。如果数值是几千甚至几万,说明数据本身是好的,问题出在显示拉伸;如果像素值全是 0 或空值,再去怀疑文件或读取环节。
6.2 坐标显示为未知:手动指定和重投影是两件事
明明数据是从正规渠道拿来的,加载到 QGIS 里却显示坐标系统未知,这类问题也极其常见。原因大多数是文件在流转过程中,地理标签或者配套的 .tfw 文件丢了。
处理方式有两种,但很多人把这两件事搞混。第一种是“为图层设置 CRS”,它只是告诉 QGIS“这个图层用的是哪个坐标系”,并不改动任何像素位置,相当于给一件衣服补缝一个标签。第二种是“重新投影”,它会把像素重排到另一个坐标系下,生成一个新文件,是真正的地理变换。
如果你手里数据的空间位置本身是正确的,只是坐标系标签丢了,用第一种就够;如果数据要统一到另一个坐标系统,才用第二种。判断方法很简单:把图层叠加到已经有正确坐标系的参考图层上,看位置是否重合。重合就用第一种,不重合就得先搞清楚原始坐标系是什么,再交给第二种处理。
6.3 有 tfw 却不认:文件名和大写很倔
还有一种情况很磨人:目录里明明有 .tfw 文件,TIF 加载后却没有任何坐标信息。排错路线通常是这样的。
先看文件名是否完全匹配。QGIS 对大小写是敏感的,尤其在其他版本系统上,DEMO.TIF 和 demo.tfw 看起来是同一张图,实际上文件系统认为它们是不同的东西。再看 .tfw 是否在同一个文件夹。GDAL 读取 TIF 时会按固定逻辑搜索同名世界文件,目录不一致就找不到。最后打开 .tfw 验证内容,六行数据是否齐全,数值是否合理。有些来源的 .tfw 其实是空文件或者编码格式不对,也会导致读取失败。
如果实在不想依赖外挂文件,最简单的办法是用 gdal_translate 把外部 .tfw 的信息直接烧录进 TIF 内部,生成一个独立的 GeoTIFF。从此不用再担惊受怕文件配套丢失的问题。
6.4 背景 0 值参与统计:影像看着发灰的幕后黑手
很多遥感影像的背景是黑色,像素值是 0,但真正有用的数据只占整个影像的一小部分。如果不对 0 值做处理,统计直方图时它会形成一个巨大的尖峰,拉伸算法会被它带偏,导致有效区域的影像看起来偏灰、偏暗、对比度低。
排查方法是看直方图:如果 0 值附近有一个异常高的柱状突起,而其他数值都挤在一个很小的范围里,基本可以断定是背景值干扰。解决方式有两个。一个是在“符号系统”里设置“无数据值”为 0,或者在图层的透明度设置里忽略背景值;另一个是在导出时把 NoData 值固化成文件属性,比如 GDAL 的创建选项里设置 NODATA=0,这样后续每一个读这个文件的软件都会正确识别背景。
从数据管理的角度,我建议在项目之初就确定无数据值的规范,是 0、-9999 还是 255,并写进项目文档。很多深层次的分析错误,其实从一开始就没有统一好这个值。
说到底,TIF
