我们常用、常说的TIF数据,全称 GeoTIFF,是 TIFF 文件的分支,即带有地理坐标系的 TIFF 文件,其格式后缀是
.tif
,所以也常称为 tif 文件。
tif 文件是常用的栅格格式,是一种
无损格式
,图像质量不会损失,即每一个像素都不会变。
而这种特性导致栅格 tif 文件往往非常大,特别是空间分辨率优于1米的文件。
在其之上,还要制作切片,导致后续的成果也非常庞大,几个T都止不住。
但是
我们真的需要存储量这么大的影像吗?
真的需要tif吗?
真的需要无损格式吗?
或许并不需要无损格式
首先有一个前提:
大家常用的栅格影像,一般都是
普通的多光谱影像
,甚至干脆就
没有波段
,三个颜色通道只是0-255之间的值而已。
所以说,所谓的影像就变成了图片、照片而已。
(
再次强调,这里指的是一般的三通道影像,不是全色影像以及多光谱影像
)
而针对图片,
用 jpg 格式是不是更好一些
。
JPG 完全可以胜任,不管是用作底图、外业内业,甚至是机器学习,甚至更好、速度更快了。
所以小荟结论是:
并不太需要无损格式。
JPG格式转换与对比
JPG(或 JPEG,全称为 Joint Photographic Experts Group),是一种常见图片格式,采用有损压缩算法,兼顾图像质量与文件大小。
这是一种非常成熟的图片格式,应用广泛。
如果要替代 tif 文件,需要解决坐标的问题,GeoTIFF 文件内部可以带坐标,也可以通过外部 .tfw 文件获得坐标。
而 JPG 图片内部不能带有坐标系,不过
可以通过外部 .jgw 文件让 JPG 图片带有地理坐标
,所以使用 JPG 文件是没有坐标系问题的。
JPG格式转换
打开 ArcMap,添加的测试 tif 影像下载于吉林1号:
右击即可导出 JPG 格式的影像。
由于JPG 不支持4波段及以上,所以勾选了
使用渲染器
、
强制为RGB颜色
,难得再去调整了。
选择导出格式为JPG,注意压缩质量为50,由于JPG是有损压缩,数字越高质量越好(文件越大),反之越模糊。通常设置在 75-90 之间。
对比
下面是原始 tif 数据和导出的 jpg 的对比。
下图1是无损的 tif,后面两个是不同压缩质量的 jpg,差别肯定有,tif 格式是最好的,不过 jpg 的差异不大,或者说
质量损失其实不大
。
无损tif
75%压缩质量jpg
50%压缩质量jpg
而大小差异就太大了
-
tif 格式(未压缩)有11326KB;
-
75%压缩质量jpg439KB;
-
50%压缩质量jpg大小有305KB。
可以说从 tif 转换为JPG 格式,
缩小25倍
以上!就算是使用100压缩质量的 jpg,也比 tif 小非常非常多。
当然 tif 文件也有压缩方式,我们可以用 lzw 方式进行无损压缩(或
QGIS高压缩
),可以让文件大小缩小2倍或更多。
但就算是压缩后的 tif 文件,其大小也比 jpg 格式大10倍。
所以
使用 jpg 格式的栅格影像,存储空间缩小10倍不是问题
,而质量损失是很低的。
GDAL转JPG
不使用 ArcMap,用 GDAL 如何转为 jpg 栅格?
# 输入和输出文件路径
input_tif = "input.tif" # 输入的 GeoTIFF 文件路径
output_jpg = "output.jpg" # 输出的 JPEG 文件路径
# 打开输入的 GeoTIFF 文件
dataset = gdal.Open(input_tif)
# 使用 JPEG 格式创建输出文件,保留地理参考信息,并控制压缩质量
driver = gdal.GetDriverByName("JPEG")
output_dataset = driver.CreateCopy(output_jpg, dataset, 0, ["QUALITY=75", "WORLDFILE=YES"])
# 释放资源
output_dataset = None
dataset = None
print("Conversion completed with world file. Output saved to:", output_jpg)
使用这种方式可以进行 JPG 压缩,可以控制质量,不过后缀会依然保持 .tif。
之前小荟也
介绍过 COG 栅格
,小荟认为这会是以后的主流栅格格式。
COG(Cloud Optimized GeoTIFF)是一种优化格式,支持分块存储和 HTTP 范围请求。支持高效存储和访问大规模遥感数据、在云下,通过 HTTP 按需读取数据部分内容。
而 COG 也可以进行 JPG 压缩,进一步提高网络端栅格数据请求的体验。代码如下:
# 输入和输出文件路径
input_tif = "input.tif" # 输入的 GeoTIFF 文件路径
output_cog = "output_cog.tif" # 输出的 COG 文件路径
# 打开输入的 GeoTIFF 文件
dataset = gdal.Open(input_tif)
# 选项设置:JPEG 压缩 + 生成 COG
options = [
"TILED=YES", # 启用分块存储
"COMPRESS=JPEG", # 使用 JPEG 压缩
"QUALITY=85"