def set_params(self, params): MotionTrackedBodypartPolar.set_params(self, params) self.imgRoiBackground = None self.iCount = 0 self.state.intensity = 0.0 self.state.angles = [] self.state.gradients = [] # Compute the 'handedness' of the head/abdomen and wing/wing axes. self.sense specifies the direction of positive angles. matAxes = np.array( [ [ self.params["gui"]["head"]["hinge"]["x"] - self.params["gui"]["abdomen"]["hinge"]["x"], self.params["gui"]["head"]["hinge"]["y"] - self.params["gui"]["abdomen"]["hinge"]["y"], ], [ self.params["gui"]["right"]["hinge"]["x"] - self.params["gui"]["left"]["hinge"]["x"], self.params["gui"]["right"]["hinge"]["y"] - self.params["gui"]["left"]["hinge"]["y"], ], ] ) if self.name in ["left", "right"]: self.senseAxes = np.sign(np.linalg.det(matAxes)) a = -1 if (self.name == "right") else 1 self.sense = a * self.senseAxes else: self.sense = 1 self.detector.set_params(params[self.name]["threshold"], params["n_edges_max"], self.sense)
def set_params(self, params): MotionTrackedBodypartPolar.set_params(self, params) self.imgRoiBackground = None self.iCount = 0 self.state.intensity = 0.0 self.state.angles = [] self.state.gradients = [] # Compute the 'handedness' of the head/abdomen and wing/wing axes. self.sense specifies the direction of positive angles. matAxes = np.array([[ self.params['gui']['head']['hinge']['x'] - self.params['gui']['abdomen']['hinge']['x'], self.params['gui']['head']['hinge']['y'] - self.params['gui']['abdomen']['hinge']['y'] ], [ self.params['gui']['right']['hinge']['x'] - self.params['gui']['left']['hinge']['x'], self.params['gui']['right']['hinge']['y'] - self.params['gui']['left']['hinge']['y'] ]]) if (self.name in ['left', 'right']): self.senseAxes = np.sign(np.linalg.det(matAxes)) a = -1 if (self.name == 'right') else 1 self.sense = a * self.senseAxes else: self.sense = 1 self.detector.set_params(params[self.name]['threshold'], params['n_edges_max'], self.sense)
def update(self, dt, image, bInvertColor): MotionTrackedBodypartPolar.update(self, dt, image, bInvertColor) if (self.imgComparison is None) and (self.iCount>1): self.imgComparison = self.imgRoiFgMaskedPolarCroppedWindowed self.windowComparison.set_image(self.imgComparison) if (self.params['gui'][self.name]['track']): self.update_state()
def update(self, dt, image, bInvertColor): MotionTrackedBodypartPolar.update(self, dt, image, bInvertColor) if (self.imgComparison is None) and (self.iCount > 1): self.imgComparison = self.imgRoiFgMaskedPolarCroppedWindowed self.windowComparison.set_image(self.imgComparison) if (self.params['gui'][self.name]['track']): self.update_state()
def draw(self, image): MotionTrackedBodypartPolar.draw(self, image) if (self.params['gui'][self.name]['track']): # Draw the bodypart state position. angle = self.state.angles[0] * self.sense pt = self.R.dot([ self.state.radii[0] * np.cos(angle), self.state.radii[0] * np.sin(angle) ]) ptState_i = imageprocessing.clip_pt( (int(pt[0] + self.params['gui'][self.name]['hinge']['x']), int(pt[1] + self.params['gui'][self.name]['hinge']['y'])), image.shape) cv2.ellipse(image, ptState_i, (2, 2), 0, 0, 360, self.bgra_state, 1) # Set a pixel at the min/max state positions. try: angle = self.stateLo_p.angles[0] * self.sense pt = self.R.dot([ self.state.radii[0] * np.cos(angle), self.state.radii[0] * np.sin(angle) ]) ptStateLo_i = imageprocessing.clip_pt( (int(pt[0] + self.params['gui'][self.name]['hinge']['x']), int(pt[1] + self.params['gui'][self.name]['hinge']['y'])), image.shape) angle = self.stateHi_p.angles[0] * self.sense pt = self.R.dot([ self.state.radii[0] * np.cos(angle), self.state.radii[0] * np.sin(angle) ]) ptStateHi_i = imageprocessing.clip_pt( (int(pt[0] + self.params['gui'][self.name]['hinge']['x']), int(pt[1] + self.params['gui'][self.name]['hinge']['y'])), image.shape) # Set the pixels. image[ptStateLo_i[1]][ptStateLo_i[0]] = np.array( [255, 255, 255]) - image[ptStateLo_i[1]][ptStateLo_i[0]] image[ptStateHi_i[1]][ptStateHi_i[0]] = np.array( [255, 255, 255]) - image[ptStateHi_i[1]][ptStateHi_i[0]] except ValueError: pass # Draw line from hinge to state point. ptHinge_i = imageprocessing.clip_pt( (int(self.ptHinge_i[0]), int(self.ptHinge_i[1])), image.shape) cv2.line(image, ptHinge_i, ptState_i, self.bgra_state, 1) self.windowStabilized.show() self.windowComparison.show()
def __init__(self, name=None, params={}, color='white', bEqualizeHist=False): MotionTrackedBodypartPolar.__init__(self, name, params, color, bEqualizeHist) self.name = name self.detector = EdgeDetectorByIntensityProfile() self.state = MsgState() self.windowEdges = ImageWindow(False, self.name+'Edges') self.set_params(params) # Services, for live intensities plots via live_wing_histograms.py self.service_trackerdata = rospy.Service('trackerdata_'+name, SrvTrackerdata, self.serve_trackerdata_callback)
def __init__(self, name=None, params={}, color="white", bEqualizeHist=False): MotionTrackedBodypartPolar.__init__(self, name, params, color, bEqualizeHist) self.name = name self.detector = EdgeDetectorByIntensityProfile() self.state = MsgState() self.windowEdges = ImageWindow(False, self.name + "Edges") self.set_params(params) # Services, for live intensities plots via live_wing_histograms.py self.service_trackerdata = rospy.Service("trackerdata_" + name, SrvTrackerdata, self.serve_trackerdata_callback)
def __init__(self, name=None, params={}, color='white', bEqualizeHist=False): MotionTrackedBodypartPolar.__init__(self, name, params, color, bEqualizeHist) self.name = name self.detector = TipDetector() self.state = MsgState() self.set_params(params) self.windowTip = ImageWindow(False, self.name+'Tip') self.iAngle = 0 self.iRadius = 0 # Services, for live intensities plots via live_wing_histograms.py self.service_trackerdata = rospy.Service('trackerdata_'+self.name, SrvTrackerdata, self.serve_trackerdata_callback)
def __init__(self, name=None, params={}, color='white', bEqualizeHist=False): MotionTrackedBodypartPolar.__init__(self, name, params, color, bEqualizeHist) self.name = name self.detector = EdgeDetectorByIntensityProfile() self.state = MsgState() self.windowEdges = ImageWindow(False, self.name + 'Edges') self.set_params(params)
def __init__(self, name=None, params={}, color='white', bEqualizeHist=False): MotionTrackedBodypartPolar.__init__(self, name, params, color, bEqualizeHist) self.phasecorr = imageprocessing.PhaseCorrelation() self.state = MsgState() # In the bodypart frame. self.stateOrigin_p = MsgState() # In the bodypart frame. self.stateLo_p = MsgState() # In the bodypart frame. self.stateHi_p = MsgState() # In the bodypart frame. self.imgComparison = None self.windowStabilized = ImageWindow(False, self.name+'Stable') self.windowComparison = ImageWindow(True, self.name+'Comparison') self.set_params(params)
def draw(self, image): MotionTrackedBodypartPolar.draw(self, image) if (self.params['gui'][self.name]['track']): # Draw the bodypart state position. angle = self.state.angles[0] * self.sense pt = self.R.dot([self.state.radii[0]*np.cos(angle), self.state.radii[0]*np.sin(angle)]) ptState_i = imageprocessing.clip_pt((int(pt[0]+self.params['gui'][self.name]['hinge']['x']), int(pt[1]+self.params['gui'][self.name]['hinge']['y'])), image.shape) cv2.ellipse(image, ptState_i, (2,2), 0, 0, 360, self.bgra_state, 1) # Set a pixel at the min/max state positions. try: angle = self.stateLo_p.angles[0] * self.sense pt = self.R.dot([self.state.radii[0]*np.cos(angle), self.state.radii[0]*np.sin(angle)]) ptStateLo_i = imageprocessing.clip_pt((int(pt[0]+self.params['gui'][self.name]['hinge']['x']), int(pt[1]+self.params['gui'][self.name]['hinge']['y'])), image.shape) angle = self.stateHi_p.angles[0] * self.sense pt = self.R.dot([self.state.radii[0]*np.cos(angle), self.state.radii[0]*np.sin(angle)]) ptStateHi_i = imageprocessing.clip_pt((int(pt[0]+self.params['gui'][self.name]['hinge']['x']), int(pt[1]+self.params['gui'][self.name]['hinge']['y'])), image.shape) # Set the pixels. image[ptStateLo_i[1]][ptStateLo_i[0]] = np.array([255,255,255]) - image[ptStateLo_i[1]][ptStateLo_i[0]] image[ptStateHi_i[1]][ptStateHi_i[0]] = np.array([255,255,255]) - image[ptStateHi_i[1]][ptStateHi_i[0]] except ValueError: pass # Draw line from hinge to state point. ptHinge_i = imageprocessing.clip_pt((int(self.ptHinge_i[0]), int(self.ptHinge_i[1])), image.shape) cv2.line(image, ptHinge_i, ptState_i, self.bgra_state, 1) self.windowStabilized.show() self.windowComparison.show()
def __init__(self, name=None, params={}, color='white', bEqualizeHist=False): MotionTrackedBodypartPolar.__init__(self, name, params, color, bEqualizeHist) self.name = name self.detector = TipDetector() self.state = MsgState() self.set_params(params) self.windowTip = ImageWindow(False, self.name + 'Tip') self.iAngle = 0 self.iRadius = 0
def draw(self, image): MotionTrackedBodypartPolar.draw(self, image) if self.params["gui"][self.name]["track"]: # Draw the major and minor edges alternately, until the max number has been reached. bgra = self.bgra for i in range(len(self.state.angles)): angle_b = self.transform_angle_b_from_p(self.state.angles[i]) angle_i = self.transform_angle_i_from_b(angle_b) x0 = self.ptHinge_i[0] + self.params["gui"][self.name]["radius_inner"] * np.cos(angle_i) y0 = self.ptHinge_i[1] + self.params["gui"][self.name]["radius_inner"] * np.sin(angle_i) x1 = self.ptHinge_i[0] + self.params["gui"][self.name]["radius_outer"] * np.cos(angle_i) y1 = self.ptHinge_i[1] + self.params["gui"][self.name]["radius_outer"] * np.sin(angle_i) cv2.line(image, (int(x0), int(y0)), (int(x1), int(y1)), bgra, 1) bgra = tuple(0.5 * np.array(bgra)) self.windowEdges.show()
def draw(self, image): MotionTrackedBodypartPolar.draw(self, image) if (self.params['gui'][self.name]['track']): # Draw the major and minor edges alternately, until the max number has been reached. bgra = self.bgra for i in range(len(self.state.angles)): angle_b = self.transform_angle_b_from_p(self.state.angles[i]) angle_i = self.transform_angle_i_from_b(angle_b) x0 = self.ptHinge_i[0] + self.params['gui'][self.name]['radius_inner'] * np.cos(angle_i) y0 = self.ptHinge_i[1] + self.params['gui'][self.name]['radius_inner'] * np.sin(angle_i) x1 = self.ptHinge_i[0] + self.params['gui'][self.name]['radius_outer'] * np.cos(angle_i) y1 = self.ptHinge_i[1] + self.params['gui'][self.name]['radius_outer'] * np.sin(angle_i) cv2.line(image, (int(x0),int(y0)), (int(x1),int(y1)), bgra, 1) bgra = tuple(0.5*np.array(bgra)) self.windowEdges.show()
def set_params(self, params): MotionTrackedBodypartPolar.set_params(self, params) self.imgRoiBackground = None self.iCount = 0 self.state.intensity = 0.0 self.state.angles = [] self.state.gradients = [] # Compute the 'handedness' of the head/abdomen and wing/wing axes. self.sense specifies the direction of positive angles. matAxes = np.array([[self.params['gui']['head']['hinge']['x']-self.params['gui']['abdomen']['hinge']['x'], self.params['gui']['head']['hinge']['y']-self.params['gui']['abdomen']['hinge']['y']], [self.params['gui']['right']['hinge']['x']-self.params['gui']['left']['hinge']['x'], self.params['gui']['right']['hinge']['y']-self.params['gui']['left']['hinge']['y']]]) if (self.name in ['left','right']): self.senseAxes = np.sign(np.linalg.det(matAxes)) a = -1 if (self.name=='right') else 1 self.sense = a*self.senseAxes else: self.sense = 1 self.detector.set_params(params[self.name]['threshold'], self.sense)
def set_params(self, params): MotionTrackedBodypartPolar.set_params(self, params) self.imgRoiBackground = None self.imgComparison = None self.windowComparison.set_image(self.imgComparison) self.iCount = 0 # Compute the 'handedness' of the head/abdomen and wing/wing axes. self.sense specifies the direction of positive angles. matAxes = np.array([[self.params['gui']['head']['hinge']['x']-self.params['gui']['abdomen']['hinge']['x'], self.params['gui']['head']['hinge']['y']-self.params['gui']['abdomen']['hinge']['y']], [self.params['gui']['right']['hinge']['x']-self.params['gui']['left']['hinge']['x'], self.params['gui']['right']['hinge']['y']-self.params['gui']['left']['hinge']['y']]]) if (self.name in ['left','right']): self.senseAxes = np.sign(np.linalg.det(matAxes)) a = -1 if (self.name=='right') else 1 self.sense = a*self.senseAxes else: self.sense = 1 self.stateOrigin_p.intensity = 0.0 self.stateOrigin_p.angles = [self.transform_angle_p_from_b((self.params['gui'][self.name]['angle_hi']+self.params['gui'][self.name]['angle_lo'])/2.0)] # In the bodypart frame. self.stateOrigin_p.angles[0] = ((self.stateOrigin_p.angles[0] + np.pi) % (2*np.pi)) - np.pi self.stateOrigin_p.radii = [(self.params['gui'][self.name]['radius_outer']+self.params['gui'][self.name]['radius_inner'])/2.0] self.state.intensity = 0.0 self.state.angles = [0.0] self.state.radii = [0.0] self.stateLo_p.intensity = np.inf self.stateLo_p.angles = [4.0*np.pi] self.stateLo_p.radii = [np.inf] self.stateHi_p.intensity = -np.inf self.stateHi_p.angles = [-4.0*np.pi] self.stateHi_p.radii = [-np.inf] self.windowStabilized.set_enable(self.params['gui']['windows'] and self.params['gui'][self.name]['track'] and self.params['gui'][self.name]['stabilize']) self.windowComparison.set_enable(self.params['gui']['windows'] and self.params['gui'][self.name]['track'])
def draw(self, image): MotionTrackedBodypartPolar.draw(self, image) if (self.params['gui'][self.name]['track']) and (len(self.state.angles)>0): # Draw the bodypart state position. angle = self.state.angles[0] * self.sense pt = self.R.dot([self.state.radii[0]*np.cos(angle), self.state.radii[0]*np.sin(angle)]) ptState_i = imageprocessing.clip_pt((int(pt[0]+self.params['gui'][self.name]['hinge']['x']), int(pt[1]+self.params['gui'][self.name]['hinge']['y'])), image.shape) cv2.ellipse(image, ptState_i, (2,2), 0, 0, 360, self.bgra_state, 1) # Draw line from hinge to state point. ptHinge_i = imageprocessing.clip_pt((int(self.ptHinge_i[0]), int(self.ptHinge_i[1])), image.shape) cv2.line(image, ptHinge_i, ptState_i, self.bgra_state, 1) self.windowTip.show()
def update(self, dt, image, bInvertColor): MotionTrackedBodypartPolar.update(self, dt, image, bInvertColor) if self.params["gui"][self.name]["track"]: self.update_state()
def update(self, dt, image, bInvertColor): MotionTrackedBodypartPolar.update(self, dt, image, bInvertColor) if (self.params['gui'][self.name]['track']): self.update_state() self.windowTip.set_image(self.imgRoiFgMaskedPolarCropped)
def update(self, dt, image, bInvertColor): MotionTrackedBodypartPolar.update(self, dt, image, bInvertColor) if (self.params['gui'][self.name]['track']): self.update_state()