yolo-obb后处理归一化的坐标怎么变为实际坐标
时间: 2025-04-17 09:42:14 浏览: 39
### 如何将YOLO-OBB模型后处理中的归一化坐标转换为实际坐标
在YOLO-OBB模型的预测过程中,输出的边界框坐标通常是归一化的形式。为了将其转换为原始图像上的真实坐标,需要执行反归一化操作。
假设输入图像是宽度`W`和高度`H`,而YOLO-OBB模型给出的是归一化后的四个角点坐标`(x1_norm, y1_norm), (x2_norm, y2_norm), (x3_norm, y3_norm), (x4_norm, y4_norm)`,那么可以按照下面的方式进行转换:
```python
import numpy as np
def denormalize_coordinates(normalized_coords, image_width, image_height):
"""
反归一化给定的一组归一化坐标至原图尺度
参数:
normalized_coords (list or ndarray): 归一化后的坐标列表或数组 [(x1,y1),(x2,y2)...]
image_width (int): 原始图片宽
image_height (int): 原始图片高
返回:
list of tuples: 实际坐标的列表[(X1,Y1),(X2,Y2)...]
"""
actual_coords = []
for coord in normalized_coords:
x_actual = int(coord[0] * image_width)
y_actual = int(coord[1] * image_height)
actual_coords.append((x_actual, y_actual))
return actual_coords
# 示例使用
normalized_points = [[0.5, 0.6], [0.7, 0.8], [0.9, 0.2], [0.3, 0.4]] # 这里只是举例说明
image_w = 1920
image_h = 1080
actual_points = denormalize_coordinates(normalized_points, image_w, image_h)
print(actual_points)
```
上述代码展示了如何通过乘以相应的维度来实现从归一化空间到物理像素位置之间的映射[^1]。注意这里的输入应该是一个二维张量或者是形状为(n,2)的NumPy数组,其中每一行代表一对(x,y)坐标对。
对于具体的YOLO-OBB应用来说,在获取到网络输出的结果之后,通常还需要调用`.detach()`方法去除梯度信息并转成CPU端的数据结构再做进一步的操作,比如上面提到过的将Tensor类型的坐标值转化为ndarray格式以便后续处理[^3]。
阅读全文
相关推荐
















