(rect坐标转换)rect矩形框的坐标形式转换,以及坐标形式到bbox边界框的转换

常见的坐标框转换: 

cxy_wh_2_bbox,cxy_wh_2_rect, rect_2_cxy_wh

预定义:

框坐标表示中  (x,y)为中心点坐标,(x1,y1)为左上角坐标,(x2,y2)为右下角坐标,w和h分别是宽和高,使用图像坐标系(x轴正方向向下,y轴正方向向右)



rect矩形框形式:

(rect坐标转换)rect矩形框的坐标形式转换,以及坐标形式到bbox边界框的转换_第1张图片

Cxy坐标形式:

(rect坐标转换)rect矩形框的坐标形式转换,以及坐标形式到bbox边界框的转换_第2张图片

bbox边界框形式:

(rect坐标转换)rect矩形框的坐标形式转换,以及坐标形式到bbox边界框的转换_第3张图片

一般方法:

def rect1_2_cxy_wh(rect):    #将矩形框表示形式转换成坐标形式   输入rect为(x1,y1,w,h)
    return np.array([rect[0]+rect[2]/2-1, rect[1]+rect[3]/2-1]), np.array([rect[2], rect[3]])    

# return ((x,y),(w,h))  此处(x,y)为中心坐标

def cxy_wh_2_rect1(pos, sz):  #将坐标转换成矩形框的表示形式  输入pos,sz = ((x,y),(w,h))
    return np.array([pos[0]-sz[0]/2+1, pos[1]-sz[1]/2+1, sz[0], sz[1]]) 

# return (x1,y1,w,h)  此处(x1,y1)为左上角坐标

def cxy_wh_2_bbox(cxy, wh):  #将坐标转换成边界框     输入cxy,wh = ((x,y),(w,h))
    return np.array([cxy[0]-wh[0]/2, cxy[1]-wh[1]/2, cxy[0]+wh[0]/2, cxy[1]+wh[1]/2]) 

# return (x1,y1,x2,y2)  此处(x1,y1)为左上角坐标,此处(x2,y2)为右下角坐标

 上面的类似 pos[0]-sz[0]/2+1的+1  -1 操作应该是取整操作,个人觉得可用//代替

对应使用的场景有: 

target_pos, target_sz = rect1_2_cxy_wh(init_rect)  #init_rect初始矩形框
bbox = cxy_wh_2_bbox(target_pos, window_sz)  #Window_sz 边界框大小
res = [cxy_wh_2_rect1(target_pos, target_sz)]  #target_sz 矩形框大小



在计算IoU时,一般就是转换成bbox的(x1,y1,x2,y2) 形式计算的

注意:

        一般在转换成边界框bbox时,函数cxy_wh_2_bbox(pos,sz)中的sz是 windos_sz(具体情况具体分析)


说明:

        笔者仅做学习笔记使用,若有错误,欢迎指正!

你可能感兴趣的