Beispiel #1
0
    def set_params(self, params):
        self.params = params

        self.rc_background = self.params['rc_background']
        self.angleBody_i = self.get_bodyangle_i()
        self.cosAngleBody_i = np.cos(self.angleBody_i)
        self.sinAngleBody_i = np.sin(self.angleBody_i)

        self.ptHinge_i        = np.array([self.params['gui'][self.name]['hinge']['x'], self.params['gui'][self.name]['hinge']['y']])
        self.ptHingeHead_i    = np.array([self.params['gui']['head']['hinge']['x'], self.params['gui']['head']['hinge']['y']])
        self.ptHingeAbdomen_i = np.array([self.params['gui']['abdomen']['hinge']['x'], self.params['gui']['abdomen']['hinge']['y']])

        
        # Compute the body-outward-facing angle, which is the angle from the body center to the bodypart hinge.
#         pt1 = [params['head']['hinge']['x'], params['head']['hinge']['y']]
#         pt2 = [params['abdomen']['hinge']['x'], params['abdomen']['hinge']['y']]
#         pt3 = [params['gui']['left']['hinge']['x'], params['gui']['left']['hinge']['y']]
#         pt4 = [params['right']['hinge']['x'], params['right']['hinge']['y']]
#         ptBodyCenter_i = get_intersection(pt1,pt2,pt3,pt4)
#         self.angleBodypart_i = float(np.arctan2(self.ptHinge_i[1]-ptBodyCenter_i[1], self.ptHinge_i[0]-ptBodyCenter_i[0]))

        # Compute the body-outward-facing angle, which is the angle to the current point from the forward body axis.
        if (self.name in ['head','abdomen']):
            nameRelative = {'head':'abdomen', 
                            'abdomen':'head', 
                            'left':'right', 
                            'right':'left'}
            self.angleBodypart_i = float(np.arctan2(self.params['gui'][self.name]['hinge']['y']-self.params['gui'][nameRelative[self.name]]['hinge']['y'], 
                                                    self.params['gui'][self.name]['hinge']['x']-self.params['gui'][nameRelative[self.name]]['hinge']['x']))
        else:
            ptBodyaxis_i = imageprocessing.get_projection_onto_axis(self.ptHinge_i, (self.ptHingeAbdomen_i, self.ptHingeHead_i))
            self.angleBodypart_i = float(np.arctan2(self.params['gui'][self.name]['hinge']['y']-ptBodyaxis_i[1], 
                                                    self.params['gui'][self.name]['hinge']['x']-ptBodyaxis_i[0]))

        self.angleBodypart_b = self.angleBodypart_i - self.angleBody_i

        
        cosAngleBodypart_i = np.cos(self.angleBodypart_i)
        sinAngleBodypart_i = np.sin(self.angleBodypart_i)
        self.R = np.array([[cosAngleBodypart_i, -sinAngleBodypart_i], 
                           [sinAngleBodypart_i, cosAngleBodypart_i]])

        # Turn on/off the extra windows.
        self.windowBG.set_enable(self.params['gui']['windows'] and self.params['gui'][self.name]['track'] and self.params['gui'][self.name]['subtract_bg'])
        self.windowFG.set_enable(self.params['gui']['windows'] and self.params['gui'][self.name]['track'])

        self.angle_hi_i = self.transform_angle_i_from_b(self.params['gui'][self.name]['angle_hi'])
        self.angle_lo_i = self.transform_angle_i_from_b(self.params['gui'][self.name]['angle_lo'])
        
        # Refresh the handle points.
        self.update_handle_points()
Beispiel #2
0
    def set_params(self, params):
        self.params = params

        self.rc_background = self.params['rc_background']
        self.angleBody_i = self.get_bodyangle_i()
        self.cosAngleBody_i = np.cos(self.angleBody_i)
        self.sinAngleBody_i = np.sin(self.angleBody_i)

        self.ptHinge_i = np.array([
            self.params['gui'][self.name]['hinge']['x'],
            self.params['gui'][self.name]['hinge']['y']
        ])
        self.ptHingeHead_i = np.array([
            self.params['gui']['head']['hinge']['x'],
            self.params['gui']['head']['hinge']['y']
        ])
        self.ptHingeAbdomen_i = np.array([
            self.params['gui']['abdomen']['hinge']['x'],
            self.params['gui']['abdomen']['hinge']['y']
        ])

        # Compute the body-outward-facing angle, which is the angle from the body center to the bodypart hinge.
        #         pt1 = [params['head']['hinge']['x'], params['head']['hinge']['y']]
        #         pt2 = [params['abdomen']['hinge']['x'], params['abdomen']['hinge']['y']]
        #         pt3 = [params['gui']['left']['hinge']['x'], params['gui']['left']['hinge']['y']]
        #         pt4 = [params['right']['hinge']['x'], params['right']['hinge']['y']]
        #         ptBodyCenter_i = get_intersection(pt1,pt2,pt3,pt4)
        #         self.angleBodypart_i = float(np.arctan2(self.ptHinge_i[1]-ptBodyCenter_i[1], self.ptHinge_i[0]-ptBodyCenter_i[0]))

        # Compute the body-outward-facing angle, which is the angle to the current point from the forward body axis.
        if (self.name in ['head', 'abdomen']):
            nameRelative = {
                'head': 'abdomen',
                'abdomen': 'head',
                'left': 'right',
                'right': 'left'
            }
            self.angleBodypart_i = float(
                np.arctan2(
                    self.params['gui'][self.name]['hinge']['y'] -
                    self.params['gui'][nameRelative[self.name]]['hinge']['y'],
                    self.params['gui'][self.name]['hinge']['x'] -
                    self.params['gui'][nameRelative[self.name]]['hinge']['x']))
        else:
            ptBodyaxis_i = imageprocessing.get_projection_onto_axis(
                self.ptHinge_i, (self.ptHingeAbdomen_i, self.ptHingeHead_i))
            self.angleBodypart_i = float(
                np.arctan2(
                    self.params['gui'][self.name]['hinge']['y'] -
                    ptBodyaxis_i[1],
                    self.params['gui'][self.name]['hinge']['x'] -
                    ptBodyaxis_i[0]))

        self.angleBodypart_b = self.angleBodypart_i - self.angleBody_i

        cosAngleBodypart_i = np.cos(self.angleBodypart_i)
        sinAngleBodypart_i = np.sin(self.angleBodypart_i)
        self.R = np.array([[cosAngleBodypart_i, -sinAngleBodypart_i],
                           [sinAngleBodypart_i, cosAngleBodypart_i]])

        # Turn on/off the extra windows.
        self.windowBG.set_enable(
            self.params['gui']['windows']
            and self.params['gui'][self.name]['track']
            and self.params['gui'][self.name]['subtract_bg'])
        self.windowFG.set_enable(self.params['gui']['windows']
                                 and self.params['gui'][self.name]['track'])

        self.angle_hi_i = self.transform_angle_i_from_b(
            self.params['gui'][self.name]['angle_hi'])
        self.angle_lo_i = self.transform_angle_i_from_b(
            self.params['gui'][self.name]['angle_lo'])

        # Refresh the handle points.
        self.update_handle_points()