You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于JGW元数据对DJI单张无人机影像地理配准并导出GeoTIFF

为DJI无人机JPG影像添加地理参考并保存为GeoTIFF

问题背景

我有一张DJI无人机拍摄的JPG格式影像,使用R语言terra包读取后信息如下:

library(terra)
single.image <- stack("https://github.com/Leprechault/trash/raw/main/DJI_0274.JPG")
plotRGB(single.image,  r = 3, g = 2, b = 1, stretch = "lin")
# class      : RasterStack 
# dimensions : 3648, 4864, 17743872, 3  (nrow, ncol, ncell, nlayers)
# resolution : 1, 1  (x, y)
# extent     : 0, 4864, 0, 3648  (xmin, xmax, ymin, ymax)
# crs        : NA 
# names      : DJI_0274_1, DJI_0274_2, DJI_0274_3 

同时我有对应的JGW格式元数据文件,读取代码及内容如下:

single.image.mtd <- read.table("https://github.com/Leprechault/trash/raw/main/DJI_0274.jgw", header = FALSE, skip=1)
single.image.mtd
#              V1
# 1 -3.532000e-07
# 2  2.600000e-09
# 3  3.100000e-09
# 4  2.976000e-07
# 5 -5.170865e+01
# 6 -1.973617e+01

该元数据各值对应的含义为:

# X-cell size(X方向像元大小)
# rotation(X方向旋转参数,通常为0)
# rotation(Y方向旋转参数,通常为0)
# Y-cell size(Y方向像元大小,通常为负值)
# Upper left X(影像左上角X坐标)
# Upper left Y(影像左上角Y坐标)

请问是否可以利用上述元数据为该影像添加地理参考,并将其保存为GeoTIFF格式?


解决方案:可以实现

以下是完整的R语言操作步骤:

1. 读取影像并转为terra标准格式

推荐使用terra包的rast()函数读取影像,替代旧版raster包的stack():

library(terra)
# 读取JPG影像为SpatRaster对象
single.image <- rast("https://github.com/Leprechault/trash/raw/main/DJI_0274.JPG")
# 预览影像(可选)
plotRGB(single.image, r = 3, g = 2, b = 1, stretch = "lin")

2. 提取JGW元数据参数

从已读取的元数据中提取地理参考所需的6个核心参数:

# 提取元数据中的数值
params <- single.image.mtd$V1
x_res <- params[1]       # X方向像元大小
rot_x <- params[2]       # X方向旋转参数
rot_y <- params[3]       # Y方向旋转参数
y_res <- params[4]       # Y方向像元大小
ul_x <- params[5]        # 左上角X坐标
ul_y <- params[6]        # 左上角Y坐标

3. 设置地理参考(仿射变换+坐标系)

DJI无人机影像的GPS数据通常采用WGS84经纬度坐标系(EPSG:4326),结合JGW参数完成地理参考设置:

# 构建仿射变换参数矩阵(对应公式:x' = a*x + b*y + c;y' = d*x + e*y + f)
trans_matrix <- c(x_res, rot_x, rot_y, y_res, ul_x, ul_y)
# 为影像设置地理变换规则
single.image_geo <- setGeo(single.image, trans_matrix)
# 绑定WGS84坐标系
crs(single.image_geo) <- "EPSG:4326"

4. 验证地理参考信息

执行代码查看影像属性,确认地理参考参数已正确加载:

# 输出带地理参考的影像详细信息
single.image_geo

5. 保存为GeoTIFF格式

使用writeRaster()函数完成格式转换与保存:

# 保存影像,设置overwrite=TRUE可覆盖已有文件
writeRaster(single.image_geo, 
            filename = "DJI_0274_geo.tif", 
            format = "GTiff", 
            overwrite = TRUE)

内容的提问来源于stack exchange,提问作者Leprechault

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:02:08