无人机地理参考数据集企鹅计数的bounding box质心坐标获取及转换方法问询
问题解决实现方案
1. Bounding Box质心坐标计算
你首先需要明确目标检测模型输出的bbox格式,不同框架的输出格式不同,计算逻辑统一如下:
- 若输出为
(xmin, ymin, xmax, ymax)格式(即左上角、右下角像素坐标,为绝大多数检测框架如YOLO、Faster R-CNN的默认输出):
质心x坐标 = (xmin + xmax) / 2
质心y坐标 = (ymin + ymax) / 2 - 若输出为
(x_center, y_center, width, height)格式(部分YOLO版本的输出格式):
可直接取x_center、y_center作为质心坐标,无需额外计算
注意:所有坐标取浮点型即可,不需要提前转整数,避免精度损失影响后续地理配准结果
2. 瓦片质心坐标对齐到原始影像的实现方法
你提到的第三步核心是做瓦片局部坐标到全局影像坐标的映射,实现逻辑如下:
前置准备
你需要提前记录每块ROI瓦片的两个关键参数:
- 瓦片在原始大尺寸ROI影像上的左上角全局坐标:
(tile_offset_x, tile_offset_y),这个参数是你切分瓦片的时候生成的,比如原始影像第一行第一列的瓦片偏移量为(0,0),如果瓦片尺寸为640*640,那么第一行第二列的瓦片偏移量就是(640, 0),以此类推 - 可选:如果切瓦时有重叠区域,需要记录重叠像素宽度
overlap_size,后续去重时会用到
坐标转换步骤
对每个瓦片输出的bbox质心(local_x, local_y)(即相对于瓦片自身左上角的坐标),直接做偏移量叠加即可得到其在原始ROI影像上的全局坐标:
global_x = local_x + tile_offset_x global_y = local_y + tile_offset_y
重叠区域重复检测去重
如果你的瓦片存在重叠区,同一个企鹅会在相邻2-3个瓦片中被分别检测出来,需要做全局去重,常用方法是DBSCAN聚类:
- 将所有转换后的全局质心坐标作为输入
- 设置聚类半径为企鹅bbox的平均宽度(一般为3-10像素,根据你的影像分辨率调整)
- 每个聚类簇仅保留1个坐标点,即可消除重复计数
3. 后续地理坐标转换提示
拿到原始影像的全局像素坐标后,你可以直接用遥感影像的地理变换矩阵(GeoTransform)做转换,逻辑为:
GeoTransform一般是6参数数组,格式为
(origin_x, pixel_width, rotation_x, origin_y, rotation_y, pixel_height),可直接用GDAL等库读取tif影像的元数据获取
gps_lon = origin_x + global_x * pixel_width + global_y * rotation_x gps_lat = origin_y + global_x * rotation_y + global_y * pixel_height
内容的提问来源于stack exchange,提问作者OlegRuskiy
相关产品推荐
相关产品推荐

