flow_transforms.py 文件源码

python
阅读 32 收藏 0 点赞 0 评论 0

项目:depth-semantic-fully-conv 作者: iapatil 项目源码 文件源码
def __call__(self, inputs,target):
        applied_angle  = random.uniform(-self.angle,self.angle)
        diff = random.uniform(-self.diff_angle,self.diff_angle)
        angle1 = applied_angle - diff/2
        angle2 = applied_angle + diff/2

        angle1_rad = angle1*np.pi/180
        angle2_rad = angle2*np.pi/180

        h, w, _ = inputs[0].shape

        def rotate_flow(i,j,k):
            return -k*(j-w/2)*(diff*np.pi/180) + (1-k)*(i-h/2)*(diff*np.pi/180)

        rotate_flow_map = np.fromfunction(rotate_flow, target.shape)
        target += rotate_flow_map

        inputs[0] = ndimage.interpolation.rotate(inputs[0], angle1, reshape=True, order=self.order)
        inputs[1] = ndimage.interpolation.rotate(inputs[1], angle2, reshape=True, order=self.order)
        target = ndimage.interpolation.rotate(target, angle1, reshape=True, order=self.order)

        #flow vectors must be rotated too!
        target_=np.array(target, copy=True)
        target[:,:,0] = np.cos(angle1_rad)*target_[:,:,0] - np.sin(angle1_rad)*target_[:,:,1]
        target[:,:,1] = np.sin(angle1_rad)*target_[:,:,0] + np.cos(angle1_rad)*target_[:,:,1]

        #keep angle1 and angle2 within [0,pi/2] with a reflection at pi/2: -1rad is 1rad, 2rad is pi - 2 rad
        angle1_rad = np.pi/2 - np.abs(angle1_rad%np.pi - np.pi/2)
        angle2_rad = np.pi/2 - np.abs(angle2_rad%np.pi - np.pi/2)

        c1 = np.cos(angle1_rad)
        s1 = np.sin(angle1_rad)
        c2 = np.cos(angle2_rad)
        s2 = np.sin(angle2_rad)
        c_diag = h/np.sqrt(h*h+w*w)
        s_diag = w/np.sqrt(h*h+w*w)

        ratio = c_diag/max(c1*c_diag+s1*s_diag,c2*c_diag+s2*s_diag)

        crop = CenterCrop((int(h*ratio),int(w*ratio)))
        scale = Scale(self.size)
        inputs, target = crop(inputs, target)
        return scale(inputs,target)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号