import numpy as np def get_color_map(): color = np.array([ [244,242,229], # living room [253,244,171], # bedroom [234,216,214], # kitchen [205,233,252], # bathroom [208,216,135], # balcony [185,231,168], # balcony [249,222,189], # Storage [ 79, 79, 79], # exterior wall [255,225, 25], # FrontDoor [128,128,128], # interior wall [255,255,255] ],dtype=np.int64) cIdx = np.array([1,2,3,4,1,2,2,2,2,5,1,6,1,10,7,8,9,10])-1 return color[cIdx] def rot90_2D(pts,k=1,cnt=np.array([127.5,127.5])): ang = k*np.pi/2 R = np.array([[np.cos(ang),np.sin(ang)],[-np.sin(ang),np.cos(ang)]]) return np.dot(pts-cnt,R)+cnt def fliplr_2D(pts,size=255): return np.stack([pts[:,0],size-pts[:,1]],1) def align_image(image,rot_old,rot_new=0): k = np.ceil((rot_old-rot_new+2*np.pi)%(2*np.pi)/(np.pi/4))//2 return np.rot90(image,k) def align_box(box,rot_old,rot_new=0): box = box-np.array([0,0,1,1]) k = np.ceil((rot_old-rot_new+2*np.pi)%(2*np.pi)/(np.pi/4))//2 box = rot90_2D(box.reshape(-1,2),k).reshape(-1,4) return np.concatenate([np.minimum(box[:,:2],box[:,2:]),np.maximum(box[:,:2],box[:,2:])+1],-1).round().astype(int) def fliplr_box(box,size=255): box = box-np.array([0,0,1,1]) box=fliplr_2D(box.reshape(-1,2),size=size).reshape(-1,4) return np.concatenate([np.minimum(box[:,:2],box[:,2:]),np.maximum(box[:,:2],box[:,2:]+1)],-1).round().astype(int) def align_points(pts, rot_old, rot_new=0): k = np.ceil((rot_old - rot_new + 2 * np.pi) % (2 * np.pi) / (np.pi / 4)) // 2 pts = rot90_2D(pts, k) return pts.round().astype(int) def point_box_relation(u,vbox): uy,ux = u vy0, vx0, vy1, vx1 = vbox if (ux