コード例 #1
0
    def collect_printer_info(self):
        pdb = PrinterModelDB(self.cls_name)
        database = []
        modeldb = LineModModelDB()
        for k in range(pdb.image_num):
            data = {}
            data['rgb_pth'] = pdb.image_pattern.format(k + 1)
            data['dpt_pth'] = pdb.mask_pattern.format(k + 1)
            data['RT'] = pdb.aligned_poses[k]
            data['K'] = pdb.K[self.cls_name]
            data['cls_typ'] = self.cls_name
            data['rnd_typ'] = 'printer'
            data['corners'] = Projector.project_K(
                modeldb.get_corners_3d(self.cls_name), data['RT'],
                pdb.K[self.cls_name])
            data['farthest'] = Projector.project_K(
                modeldb.get_farthest_3d(self.cls_name), data['RT'],
                pdb.K[self.cls_name])
            for num in [4, 12, 16, 20]:
                data['farthest{}'.format(num)] = Projector.project_K(
                    modeldb.get_farthest_3d(self.cls_name, num), data['RT'],
                    pdb.K[self.cls_name])
            data['center'] = Projector.project_K(
                modeldb.get_centers_3d(self.cls_name)[None, :], data['RT'],
                pdb.K[self.cls_name])
            database.append(data)

        save_pickle(database, self.printer_pkl)
        return database
コード例 #2
0
    def collect_truncated_set_info(self):
        database=[]
        projector=Projector()
        modeldb=LineModModelDB()

        img_num=len(os.listdir(os.path.join(self.linemod_dir,self.cls_name,'JPEGImages')))
        for k in range(img_num):
            data={}
            data['rgb_pth']=os.path.join('truncated',self.cls_name,'{:06}_rgb.jpg'.format(k))
            data['dpt_pth']=os.path.join('truncated',self.cls_name,'{:04}_msk.png'.format(k))

            pose,K=read_pickle(os.path.join(self.linemod_dir,'truncated',self.cls_name,'{:06}_info.pkl'.format(k)))
            data['RT']=pose
            data['cls_typ']=self.cls_name
            data['rnd_typ']='truncated'
            data['corners']=projector.project_K(modeldb.get_corners_3d(self.cls_name),data['RT'],K)
            data['farthest']=projector.project_K(modeldb.get_farthest_3d(self.cls_name),data['RT'],K)
            for num in [4,12,16,20]:
                data['farthest{}'.format(num)]=projector.project_K(modeldb.get_farthest_3d(self.cls_name,num),data['RT'],K)
            data['small_bbox'] = projector.project_K(modeldb.get_small_bbox(self.cls_name), data['RT'], K)
            data['center']=projector.project_K(modeldb.get_centers_3d(self.cls_name)[None,:],data['RT'],K)
            # axis_direct=np.concatenate([np.identity(3), np.zeros([3, 1])], 1).astype(np.float32)
            # data['van_pts']=projector.project_h(axis_direct, data['RT'], K)
            data['K']=K
            database.append(data)

        save_pickle(database,self.pkl)
        return database
コード例 #3
0
    def collect_fuse_info(self):
        database=[]
        modeldb=LineModModelDB()
        projector=Projector()
        for k in range(self.fuse_num):
            data=dict()
            data['rgb_pth']=os.path.join(self.fuse_dir, '{}_rgb.jpg'.format(k))
            data['dpt_pth']=os.path.join(self.fuse_dir, '{}_mask.png'.format(k))

            # if too few foreground pts then continue
            mask=imread(os.path.join(self.linemod_dir,data['dpt_pth']))
            if np.sum(mask==(cfg.linemod_cls_names.index(self.cls_name)+1))<400: continue

            data['cls_typ']=self.cls_name
            data['rnd_typ']='fuse'
            begins,poses=read_pickle(os.path.join(self.linemod_dir,self.fuse_dir,'{}_info.pkl'.format(k)))
            data['RT'] = poses[self.cls_idx]
            K=projector.intrinsic_matrix['linemod'].copy()
            K[0,2]+=begins[self.cls_idx,1]
            K[1,2]+=begins[self.cls_idx,0]
            data['K']=K
            data['corners']=projector.project_K(modeldb.get_corners_3d(self.cls_name),data['RT'],K)
            data['center']=projector.project_K(modeldb.get_centers_3d(self.cls_name),data['RT'],K)
            data['farthest']=projector.project_K(modeldb.get_farthest_3d(self.cls_name),data['RT'],K)
            for num in [4,12,16,20]:
                data['farthest{}'.format(num)]=projector.project_K(modeldb.get_farthest_3d(self.cls_name,num),data['RT'],K)
            data['small_bbox'] = projector.project_K(modeldb.get_small_bbox(self.cls_name), data['RT'], K)
            database.append(data)

        save_pickle(database,self.fuse_pkl)
        return database
コード例 #4
0
 def generate_mask_image(self):
     from lib.utils.draw_utils import img_pts_to_pts_img
     for k in range(0, self.image_num):
         img_pts = Projector.project_K(self.printer_model_pts.copy(),
                                       self.poses[k], self.K['cat'])
         pts_img = img_pts_to_pts_img(img_pts, 484, 648)
         imsave(self.mask_pattern.format(k + 1), pts_img.astype(np.uint8))
コード例 #5
0
    def validate_original_poses(self):
        for k in range(0,self.image_num,20):

            rgb=imread(self.image_pattern.format(k+1))
            img_pts=Projector.project_K(self.printer_model_pts.copy(), self.poses[k], self.K['cat'])
            pts_img=img_pts_to_pts_img(img_pts,484,648)
            print(self.poses[k])
            rgb[pts_img>0]//=2
            rgb[pts_img>0]+=np.asarray([127,0,0],np.uint8)

            plt.imshow(rgb)
            plt.show()
コード例 #6
0
    def validate_aligned_poses(self):
        aligner=ModelAligner()
        for k in range(0,self.image_num,20):

            rgb=imread(self.image_pattern.format(k+1))
            pose_aligned=aligner.pose_p2w(self.poses[k])
            img_pts=Projector.project_K(self.model_pts.copy(), pose_aligned, self.K['cat'])
            pts_img=img_pts_to_pts_img(img_pts,484,648)
            rgb[pts_img>0]//=2
            rgb[pts_img>0]+=np.asarray([127,0,0],np.uint8)

            plt.imshow(rgb)
            plt.show()