Example #1
0
  def remap_extrinsics(self):
    X = [self.camera_plate.point.x, self.camera_plate.point.x + self.checker_size]
    Y = [self.camera_plate.point.y, self.camera_plate.point.y]
    Z = [1,1]
    camera_points = numpy.array([X,Y,Z])
    plate_points = numpy.dot(self.H,camera_points)
    x0 = plate_points[0,0]
    x1 = plate_points[0,1]
    y0 = plate_points[1,0]
    y1 = plate_points[1,1]
    rot_angle = numpy.arctan2((y1-y0),(x1-x0))

    # rospy.logwarn("plate_points = %s", str(plate_points))
    checkerboard_plate_vector = plate_points[:,0]
    checkerboard_plate_vector[2] = 0
    self.tf_broadcaster.sendTransform(checkerboard_plate_vector,
                                      tf.transformations.quaternion_from_euler(0, 0, rot_angle),
                                      rospy.Time.now(),
                                      "Plate",
                                      "Checkerboard")
    try:
      # self.image_plate_origin = self.tf_listener.transformPoint("Image",self.plate_origin)
      (trans,rot_quat) = self.tf_listener.lookupTransform('Image', 'Plate', rospy.Time(0))
      # rospy.logwarn("trans = %s", str(trans))
      # rospy.logwarn("rot = %s", str(rot))

      rot_array = tf.transformations.quaternion_matrix(rot_quat)
      rot_array = rot_array[0:3,0:3]
      rot_array = rot_array.astype('float32')
      rot_mat = cvNumpy.array_to_mat(rot_array)
      cv.Rodrigues2(rot_mat,self.rvec)
      rvec_array_new = cvNumpy.mat_to_array(self.rvec).squeeze()
      # tvec_array_new = numpy.array([self.image_plate_origin.point.x,
      #                               self.image_plate_origin.point.y,
      #                               self.image_plate_origin.point.z])
      tvec_array_new = numpy.array(trans)
      self.rvec_array = rvec_array_new
      self.tvec_array = tvec_array_new
      self.rvec = cvNumpy.array_to_mat(self.rvec_array)
      self.tvec = cvNumpy.array_to_mat(self.tvec_array)
      display_text = "rvec = [%0.3f, %0.3f, %0.3f]" % (self.rvec_array[0],self.rvec_array[1],self.rvec_array[2])
      cv.PutText(self.im_display,display_text,(25,420),self.font,self.font_color)
      display_text = "tvec = [%0.3f, %0.3f, %0.3f]" % (self.tvec_array[0],self.tvec_array[1],self.tvec_array[2])
      cv.PutText(self.im_display,display_text,(25,440),self.font,self.font_color)
      # self.image_plate_origin_found = True
      self.draw_origin(self.im_display)

    except (tf.LookupException, tf.ConnectivityException):
      pass
Example #2
0
  def remap_extrinsics(self):
    # self.find_H_image_to_plate()
    # display_text = "undistorted_plate.point = " + str(int(self.undistorted_plate.point.x)) + "," + str(int(self.undistorted_plate.point.y))
    # cv.PutText(self.im_display,display_text,(25,300),self.font,self.font_color)
    # Ximage = [self.undistorted_plate.point.x.tolist()]
    # Yimage = [self.undistorted_plate.point.y.tolist()]
    # Xplate,Yplate = self.image_to_plate(Ximage,Yimage)
    # display_text = "new origin point = " + str(int(Xplate)) + "," + str(int(Yplate))
    # cv.PutText(self.im_display,display_text,(25,320),self.font,self.font_color)
    # cv.SetZero(self.distortion_coeffs)
    # rotation_matrix = cv.CreateMat(3,3,cv.CV_32FC1)
    # cv.Rodrigues2(self.rvec, rotation_matrix)
    # R = cvNumpy.mat_to_array(rotation_matrix)
    # T = cvNumpy.mat_to_array(self.tvec).transpose()
    # W = numpy.concatenate((R,numpy.zeros((1,3))),0)
    # T = numpy.append(T,1)
    # T = numpy.array([T]).transpose()
    # rospy.logwarn("R = %s", str(R))
    # rospy.logwarn("T = %s", str(T))
    # W = numpy.concatenate((W,T),1)
    # rospy.logwarn("W = %s", str(W))

    # T2 = numpy.array([36.1,55.3,0,1])
    # T2 = numpy.array([10,0,0,1])
    # T2 = numpy.array([T2]).transpose()
    # ang = 1.086
    # ang = -1.086
    # R2 = numpy.array([[math.cos(ang), math.sin(ang), 0],
    #                   [-math.sin(ang), math.cos(ang), 0],
    #                   [0,0,1]])
    # rospy.logwarn("R2 = %s", str(R2))
    # rospy.logwarn("T2 = %s", str(T2))
    # W2 = numpy.concatenate((R2,numpy.zeros((1,3))),0)
    # W2 = numpy.concatenate((W2,T2),1)
    # rospy.logwarn("W2 = %s", str(W2))

    # W3 = numpy.dot(W,W2)
    # W3 = numpy.dot(W2,W)
    # rospy.logwarn("W3 = %s", str(W3))
    # tvec_new = W3[:-1,-1]
    # R_new = W3[:-1,:-1]
    # R_new = R_new.astype('float32')
    # rvec_new = cv.CreateMat(1,3,cv.CV_32FC1)
    # R_new = cvNumpy.array_to_mat(R_new)
    # cv.Rodrigues2(R_new,rvec_new)

    X = [self.camera_plate.point.x, self.camera_plate.point.x + self.checker_size]
    Y = [self.camera_plate.point.y, self.camera_plate.point.y]
    Z = [1,1]
    camera_points = numpy.array([X,Y,Z])
    plate_points = numpy.dot(self.H,camera_points)
    x0 = plate_points[0,0]
    x1 = plate_points[0,1]
    y0 = plate_points[1,0]
    y1 = plate_points[1,1]
    rot_angle = numpy.arctan2((y1-y0),(x1-x0))

    # rospy.logwarn("plate_points = %s", str(plate_points))
    checkerboard_plate_vector = plate_points[:,0]
    checkerboard_plate_vector[2] = 0
    self.tf_broadcaster.sendTransform(checkerboard_plate_vector,
                                      tf.transformations.quaternion_from_euler(0, 0, rot_angle),
                                      rospy.Time.now(),
                                      "Plate",
                                      "Checkerboard")
    try:
      # self.image_plate_origin = self.tf_listener.transformPoint("Image",self.plate_origin)
      (trans,rot_quat) = self.tf_listener.lookupTransform('Image', 'Plate', rospy.Time(0))
      # rospy.logwarn("trans = %s", str(trans))
      # rospy.logwarn("rot = %s", str(rot))

      rot_array = tf.transformations.quaternion_matrix(rot_quat)
      rot_array = rot_array[0:3,0:3]
      rot_array = rot_array.astype('float32')
      rot_mat = cvNumpy.array_to_mat(rot_array)
      cv.Rodrigues2(rot_mat,self.rvec)
      rvec_array_new = cvNumpy.mat_to_array(self.rvec).squeeze()
      # tvec_array_new = numpy.array([self.image_plate_origin.point.x,
      #                               self.image_plate_origin.point.y,
      #                               self.image_plate_origin.point.z])
      tvec_array_new = numpy.array(trans)
      self.rvec_array = rvec_array_new
      self.tvec_array = tvec_array_new
      self.rvec = cvNumpy.array_to_mat(self.rvec_array)
      self.tvec = cvNumpy.array_to_mat(self.tvec_array)
      display_text = "rvec = [%0.3f, %0.3f, %0.3f]" % (self.rvec_array[0],self.rvec_array[1],self.rvec_array[2])
      cv.PutText(self.im_display,display_text,(25,420),self.font,self.font_color)
      display_text = "tvec = [%0.3f, %0.3f, %0.3f]" % (self.tvec_array[0],self.tvec_array[1],self.tvec_array[2])
      cv.PutText(self.im_display,display_text,(25,440),self.font,self.font_color)
      # self.image_plate_origin_found = True
      self.draw_origin(self.im_display)

    except (tf.LookupException, tf.ConnectivityException):
      pass
Example #3
0
  def draw_grid(self,im_color):
    points_range = (numpy.array(range(self.num_grid_lines)) - (self.num_grid_lines-1)/2) * self.checker_size
    points_zeros = numpy.zeros(points_range.shape)
    points_ones = numpy.ones(points_range.shape) * self.checker_size * (self.num_grid_lines - 1)/2

    x_start_points_array = numpy.array([-points_ones,points_range,points_zeros]).astype('float32')
    x_end_points_array = numpy.array([points_ones,points_range,points_zeros]).astype('float32')
    y_start_points_array = numpy.array([points_range,-points_ones,points_zeros]).astype('float32')
    y_end_points_array = numpy.array([points_range,points_ones,points_zeros]).astype('float32')

    if self.rotate_grid:
      x_start_points_array = self.from_homo(numpy.dot(self.T_stage_plate,self.to_homo(x_start_points_array)))
      x_end_points_array = self.from_homo(numpy.dot(self.T_stage_plate,self.to_homo(x_end_points_array)))
      y_start_points_array = self.from_homo(numpy.dot(self.T_stage_plate,self.to_homo(y_start_points_array)))
      y_end_points_array = self.from_homo(numpy.dot(self.T_stage_plate,self.to_homo(y_end_points_array)))
      self.rotate_grid = False

    x_start_points = cvNumpy.array_to_mat(x_start_points_array.transpose())
    x_end_points = cvNumpy.array_to_mat(x_end_points_array.transpose())
    y_start_points = cvNumpy.array_to_mat(y_start_points_array.transpose())
    y_end_points = cvNumpy.array_to_mat(y_end_points_array.transpose())

    axis_line_width = 1

    cv.ProjectPoints2(x_start_points,
                      self.rvec,
                      self.tvec,
                      self.intrinsic_matrix,
                      self.distortion_coeffs,
                      self.start_points_projected)
    cv.ProjectPoints2(x_end_points,
                      self.rvec,
                      self.tvec,
                      self.intrinsic_matrix,
                      self.distortion_coeffs,
                      self.end_points_projected)

    start_points = cvNumpy.mat_to_array(self.start_points_projected)
    end_points = cvNumpy.mat_to_array(self.end_points_projected)

    for line_n in range(self.num_grid_lines):
      cv.Line(im_color,tuple(start_points[line_n,:]),tuple(end_points[line_n,:]),cv.CV_RGB(self.color_max,0,0),axis_line_width)

    cv.ProjectPoints2(y_start_points,
                      self.rvec,
                      self.tvec,
                      self.intrinsic_matrix,
                      self.distortion_coeffs,
                      self.start_points_projected)
    cv.ProjectPoints2(y_end_points,
                      self.rvec,
                      self.tvec,
                      self.intrinsic_matrix,
                      self.distortion_coeffs,
                      self.end_points_projected)

    start_points = cvNumpy.mat_to_array(self.start_points_projected)
    end_points = cvNumpy.mat_to_array(self.end_points_projected)

    for line_n in range(self.num_grid_lines):
      cv.Line(im_color,tuple(start_points[line_n,:]),tuple(end_points[line_n,:]),cv.CV_RGB(0,self.color_max,0),axis_line_width)
Example #4
0
 def draw_grid(self, im_color):
     if self.camerainfo is not None:
         points_range = (N.array(range(self.num_grid_lines)) - (self.num_grid_lines-1)/2) * self.checker_size
         points_zeros = N.zeros(points_range.shape)
         points_ones = N.ones(points_range.shape) * self.checker_size * (self.num_grid_lines - 1)/2
         
         x_start_points_array = N.array([-points_ones, points_range, points_zeros]).astype('float32')
         x_end_points_array = N.array([points_ones, points_range, points_zeros]).astype('float32')
         
         y_start_points_array = N.array([points_range, -points_ones, points_zeros]).astype('float32')
         y_end_points_array = N.array([points_range, points_ones, points_zeros]).astype('float32')
         
         
         if self.rotate_grid:
             x_start_points_array = self.from_homo(N.dot(self.T_stage_plate,self.to_homo(x_start_points_array)))
             x_end_points_array = self.from_homo(N.dot(self.T_stage_plate,self.to_homo(x_end_points_array)))
             y_start_points_array = self.from_homo(N.dot(self.T_stage_plate,self.to_homo(y_start_points_array)))
             y_end_points_array = self.from_homo(N.dot(self.T_stage_plate,self.to_homo(y_end_points_array)))
             self.rotate_grid = False
         
         x_start_points = cvNumpy.array_to_mat(x_start_points_array.transpose())
         x_end_points = cvNumpy.array_to_mat(x_end_points_array.transpose())
         y_start_points = cvNumpy.array_to_mat(y_start_points_array.transpose())
         y_end_points = cvNumpy.array_to_mat(y_end_points_array.transpose())
         
         axis_line_width = 1
         
         cvmatK = cv.fromarray(N.reshape(self.camerainfo.K,[3,3]))
         cvmatD = cv.fromarray(N.reshape(self.camerainfo.D,[5,1]))
         cv.ProjectPoints2(x_start_points,
                           self.rvec,
                           self.tvec,
                           cvmatK,
                           cvmatD,
                           self.start_points_projected)
         cv.ProjectPoints2(x_end_points,
                           self.rvec,
                           self.tvec,
                           cvmatK,
                           cvmatD,
                           self.end_points_projected)
         
         start_points = cvNumpy.mat_to_array(self.start_points_projected)
         end_points = cvNumpy.mat_to_array(self.end_points_projected)
         
         for line_n in range(self.num_grid_lines):
             cv.Line(im_color, tuple(start_points[line_n,:]), tuple(end_points[line_n,:]), cv.CV_RGB(self.color_max,0,0), axis_line_width)
         
         cv.ProjectPoints2(y_start_points,
                           self.rvec,
                           self.tvec,
                           cvmatK,
                           cvmatD,
                           self.start_points_projected)
         cv.ProjectPoints2(y_end_points,
                           self.rvec,
                           self.tvec,
                           cvmatK,
                           cvmatD,
                           self.end_points_projected)
         
         start_points = cvNumpy.mat_to_array(self.start_points_projected)
         end_points = cvNumpy.mat_to_array(self.end_points_projected)
         
         for line_n in range(self.num_grid_lines):
             cv.Line(im_color, tuple(start_points[line_n,:]), tuple(end_points[line_n,:]), cv.CV_RGB(0,self.color_max,0), axis_line_width)
Example #5
0
    def remap_extrinsics(self, now):
        X = [self.originPlate.point.x, self.originPlate.point.x + self.checker_size]
        Y = [self.originPlate.point.y, self.originPlate.point.y]
        Z = [1,                         1]
        
        camera_points = N.array([X,Y,Z])
        plate_points = N.dot(self.H, camera_points)
        x0 = plate_points[0,0]
        x1 = plate_points[0,1]
        y0 = plate_points[1,0]
        y1 = plate_points[1,1]
        angleRot = N.arctan2((y1-y0),(x1-x0))
        
        # rospy.logwarn("plate_points = %s", str(plate_points))
        checkerboard_plate_vector = plate_points[:,0]
        checkerboard_plate_vector[2] = 0
        
        self.tfbx.sendTransform(checkerboard_plate_vector,
                                  tf.transformations.quaternion_from_euler(0, 0, angleRot),
                                  now,
                                  FRAME_PLATE,
                                  FRAME_CHECKERBOARD)
        
        try:
            # self.image_plate_origin = self.tfrx.transformPoint("Image",self.plate_origin)
            self.tfrx.waitForTransform(FRAME_IMAGERECT, FRAME_PLATE, now, rospy.Duration(1.0))
            (trans, quat) = self.tfrx.lookupTransform(FRAME_IMAGERECT, FRAME_PLATE, now)
            # rospy.logwarn("trans = %s", str(trans))
            # rospy.logwarn("rot = %s", str(rot))

            rot_array = tf.transformations.quaternion_matrix(quat)
            rot_array = rot_array[0:3,0:3]
            rot_array = rot_array.astype('float32')
            rot_mat = cvNumpy.array_to_mat(rot_array)
            cv.Rodrigues2(rot_mat, self.rvec)
            self.rvec_array = cvNumpy.mat_to_array(self.rvec).squeeze()
    
            self.tvec_array = N.array(trans)
            self.rvec = cvNumpy.array_to_mat(self.rvec_array)
            self.tvec = cvNumpy.array_to_mat(self.tvec_array)
            
            display_text = "rvec = [%0.3f, %0.3f, %0.3f]" % (self.rvec_array[0],
                                                             self.rvec_array[1],
                                                             self.rvec_array[2])
            cv.PutText(self.im_display,
                       display_text,
                       (25,420),
                       self.font,
                       self.font_color)
            display_text = "tvec = [%0.3f, %0.3f, %0.3f]" % (self.tvec_array[0],
                                                             self.tvec_array[1],
                                                             self.tvec_array[2])
            cv.PutText(self.im_display,
                       display_text,
                       (25,440),
                       self.font,
                       self.font_color)
            # self.image_plate_origin_found = True
            self.draw_origin(self.im_display)
        except (tf.Exception):
            pass