Python 可以使用 rasterio 库创建 TIF 文件,本文记录相关信息。
环境配置 {#环境配置}
-
python > v3.7
-
rasterio = v1.4.3
-
imagecodecs = 2024.12.30
-
tifffile = 2025.1.10
创建 TIF 图像 {#创建-TIF-图像}
压缩算法选择 {#压缩算法选择}
压缩算法可以有多种选择,枚举内容在 from rasterio.enums import Compression
类中,源码如下:
常用的压缩算法,以原始图像文件 23096 x 17713 x 4
的tif图像为例:
| 压缩算法 | 是否无损压缩 | 执行速度 | 压缩后图像大小 | |--------------|--------|-------|---------| | LZMA | 是 | 巨慢 | 320m | | ZSTD | 是 | 26.5s | 414m | | LZW | 是 | 快 | 511m | | DEFLATE | 是 | 54s | 410m | | LERC_DEFLATE | 否 | 中 | 354m | | LERC_ZSTD | 否 | 中 | 357m | | JPEG | 否 | 18s | 39m | | NONE | 是 | 快 | 1600m |
可以选择不同压缩算法写入 tif 图像
用 imageio 读取图像时特殊格式需要安装 python 图像格式包
可能需要安装依赖:
LERC 错误 {#LERC-错误}
有个问题是 LERC 系的算法用 imageio 读取时会报错
综合压缩率和读写速度来看,无损算法ZSTD 算法是最优的。
有损压缩 {#有损压缩}
无损压缩代价有点高,可以采用有损压缩的方式牺牲一点点图像质量换来读写速度和硬盘空间
jpeg 是常用的数据格式,可以用来做有损压缩的算法,默认 rasterio 的质量因子 是 75, 可以通过设置 JPEG_QUALITY
参数调整:
有损压缩损失自然图像质量是没有办法的事,但是对于第四通道 mask 来说,原始 0 和 255 的 mask,压缩后的结果采用 mask > 128
是与原始 mask 完全相同的,也就是说jpeg 压缩的 mask 可以无损恢复。
示例代码 {#示例代码}
UTM 坐标系,可以从一张现成的 utm tif 图像以图像和 tif 信息两部分合成一张新的 tif 图为例
参考资料 {#参考资料}
文章链接:
https://www.zywvvd.com/notes/study/image-processing/format/tiff/tiff-create/tiff-create/