Beispiel #1
0
    def compute_rog(self, im, is_real=False):
        if (self.sigma_small >= self.sigma_big) or (self.sigma_small == 0):
            return im
        if self.frustum['height'] != np.shape(im)[0]:
            im = cv2.resize(im,
                            (self.frustum['width'], self.frustum['height']))
        if (len(im.shape) == 3): im = np.mean(im, axis=2)
        im = np.asarray(im, np.float64) / 255.

        visibility = super(self.__class__, self).visibility_image
        im[visibility == 4294967295] = np.nan

        ksize = self.sigma_small * 4
        if ksize % 2 == 0: ksize += 1
        smblur = cv2.GaussianBlur(im, (ksize, ksize), self.sigma_small)

        ksize = self.sigma_big * 4
        if ksize % 2 == 0: ksize += 1
        bgblur = cv2.GaussianBlur(im, (ksize, ksize), self.sigma_big)

        # FIXME? zero values
        im = smblur / bgblur

        if is_real:
            self.bckground_mask = np.ones_like(im)
            self.bckground_mask[np.isnan(im)] = np.nan

        im.ravel()[np.isnan(im.ravel())] = 0
        if hasattr(self, 'bckground_mask'):
            im.ravel()[np.isnan(self.bckground_mask.ravel())] = 0

        return im
Beispiel #2
0
    def compute_rog(self, im, is_real=False):
        if (self.sigma_small>=self.sigma_big) or (self.sigma_small==0): return im        
        if self.frustum['height'] != np.shape(im)[0]:
            im = cv2.resize(im, (self.frustum['width'], self.frustum['height'] ))
        if (len(im.shape)==3): im = np.mean(im, axis=2)
        im = np.asarray(im, np.float64)/255. 

        visibility = super(self.__class__, self).visibility_image
        im[visibility == 4294967295] = np.nan
             
        ksize = self.sigma_small*4
        if ksize % 2 == 0: ksize += 1
        smblur = cv2.GaussianBlur(im, (ksize, ksize), self.sigma_small)
        
        ksize = self.sigma_big*4
        if ksize % 2 == 0: ksize += 1
        bgblur = cv2.GaussianBlur(im, (ksize, ksize), self.sigma_big)
        
        # FIXME? zero values
        im = smblur / bgblur        
        
        if is_real:
            self.bckground_mask = np.ones_like(im); self.bckground_mask[np.isnan(im)] = np.nan

        im.ravel()[np.isnan(im.ravel())] = 0
        if hasattr(self, 'bckground_mask'): im.ravel()[np.isnan(self.bckground_mask.ravel())] = 0

        return im
Beispiel #3
0
def read_obj(filename):

    obj_directory = split(filename)[0]
    lines = open(filename).read().split('\n')

    d = {'v': [], 'vn': [], 'f': [], 'vt': [], 'ft': []}

    mtls = {}
    for line in lines:
        line = line.split()
        if len(line) < 2:
            continue

        key = line[0]
        values = line[1:]

        if key == 'v':
            d['v'].append([np.array([float(v) for v in values[:3]])])
        elif key == 'f':
            spl = [l.split('/') for l in values]
            d['f'].append(
                [np.array([int(l[0]) - 1 for l in spl[:3]], dtype=np.uint32)])
            if len(spl[0]) > 1 and spl[1] and 'ft' in d:
                d['ft'].append([np.array([int(l[1]) - 1 for l in spl[:3]])])

            # TOO: redirect to actual vert normals?
            #if len(line[0]) > 2 and line[0][2]:
            #    d['fn'].append([np.concatenate([l[2] for l in spl[:3]])])
        elif key == 'vn':
            d['vn'].append([np.array([float(v) for v in values])])
        elif key == 'vt':
            d['vt'].append([np.array([float(v) for v in values])])
        elif key == 'mtllib':
            fname = join(obj_directory, values[0])
            if not exists(fname):
                fname = values[0]
            if not exists(fname):
                raise Exception("Can't find path %s" % (values[0]))
            _update_mtl(mtls, fname)
        elif key == 'usemtl':
            cur_mtl = mtls[values[0]]

            if 'map_Kd' in cur_mtl:
                src_fname = cur_mtl['map_Kd'][0]
                dst_fname = join(split(cur_mtl['filename'])[0], src_fname)
                if not exists(dst_fname):
                    dst_fname = join(obj_directory, src_fname)
                if not exists(dst_fname):
                    dst_fname = src_fname
                if not exists(dst_fname):
                    raise Exception(
                        "Unable to find referenced texture map %s" %
                        (src_fname, ))
                else:
                    d['texture_filepath'] = normpath(dst_fname)
                    im = cv2.imread(dst_fname)
                    sz = np.sqrt(np.prod(im.shape[:2]))
                    sz = int(np.round(2**np.ceil(np.log(sz) / np.log(2))))
                    d['texture_image'] = cv2.resize(im, (sz, sz)).astype(
                        np.float64) / 255.

    # fix for python3
    for k, v in list(d.items()):
        if k in ['v', 'vn', 'f', 'vt', 'ft']:
            if v:
                d[k] = np.vstack(v)
            else:
                del d[k]
        else:
            d[k] = v

    result = Minimal(**d)

    return result
Beispiel #4
0
def read_obj(filename):

    obj_directory = split(filename)[0]
    lines = open(filename).read().split('\n')

    d = {'v': [], 'vn': [], 'f': [], 'vt': [], 'ft': []}

    mtls = {}
    for line in lines:
        line = line.split()
        if len(line) < 2:
            continue

        key = line[0]
        values = line[1:]

        if key == 'v':
            d['v'].append([np.array([float(v) for v in values[:3]])])
        elif key == 'f':
            spl = [l.split('/') for l in values]
            d['f'].append([np.array([int(l[0])-1 for l in spl[:3]], dtype=np.uint32)])
            if len(spl[0]) > 1 and spl[1] and 'ft' in d:
                d['ft'].append([np.array([int(l[1])-1 for l in spl[:3]])])

            # TOO: redirect to actual vert normals?
            #if len(line[0]) > 2 and line[0][2]:
            #    d['fn'].append([np.concatenate([l[2] for l in spl[:3]])])
        elif key == 'vn':
            d['vn'].append([np.array([float(v) for v in values])])
        elif key == 'vt':
            d['vt'].append([np.array([float(v) for v in values])])
        elif key == 'mtllib':
            fname = join(obj_directory, values[0])
            if not exists(fname):
                fname = values[0]
            if not exists(fname):
                raise Exception("Can't find path %s" % (values[0]))
            _update_mtl(mtls, fname)
        elif key == 'usemtl':
            cur_mtl = mtls[values[0]]

            if 'map_Kd' in cur_mtl:
                src_fname = cur_mtl['map_Kd'][0]
                dst_fname = join(split(cur_mtl['filename'])[0], src_fname)
                if not exists(dst_fname):
                    dst_fname = join(obj_directory, src_fname)
                if not exists(dst_fname):
                    dst_fname = src_fname
                if not exists(dst_fname):
                    raise Exception("Unable to find referenced texture map %s" % (src_fname,))
                else:
                    d['texture_filepath'] = normpath(dst_fname)
                    im = cv2.imread(dst_fname)
                    sz = np.sqrt(np.prod(im.shape[:2]))
                    sz = int(np.round(2 ** np.ceil(np.log(sz) / np.log(2))))
                    d['texture_image'] = cv2.resize(im, (sz, sz)).astype(np.float64)/255.

    for k, v in d.items():
        if k in ['v','vn','f','vt','ft']:
            if v:
                d[k] = np.vstack(v)
            else:
                del d[k]
        else:
            d[k] = v

    result = Minimal(**d)

    return result