Example #1
0
 def __init__ (self, w=1024*20, h=1024*20):
     self.w = w
     self.h = h
     self.Q_views = quadtree.quadtree()
     self.Q_back = quadtree.quadtree()
     self.Q_obs = quadtree.quadtree()
     self.generate_random_field()
Example #2
0
 def __init__(self, w=1024 * 20, h=1024 * 20):
     self.w = w
     self.h = h
     self.Q_views = quadtree.quadtree()
     self.Q_back = quadtree.quadtree()
     self.Q_obs = quadtree.quadtree()
     self.generate_random_field()
Example #3
0
def main():
    xp = [(0.2, 0.2, 0.3), (0.4, 0.1, 0.2)]
    yp = [(0.2, 0.3, 0.3), (0.9, 0.3, 0.9), (0.2, 0.4, 0.4)]
    ps = xp + yp
    dimensions = 3
    bbox = [[0, 0, 0], [1, 1, 1]]  # You can randomly translate bbox
    depth = 8
    vs = []
    us = []
    cost = []
    coordinate_map = {}
    ind = [0]
    quadtree(ps, dimensions, bbox, depth, vs, us, cost, coordinate_map, ind)
    xs = [0.0 for i in range(ind[0])]
    for x, y, z in xp:
        xs[coordinate_map[(x, y, z)]] += 1
    ys = [0.0 for i in range(ind[0])]
    for x, y, z in yp:
        ys[coordinate_map[(x, y, z)]] += 1
    creation = [0.2] * ind[0]
    deletion = [0.3] * ind[0]
    print(treegkr(vs, us, cost, creation, deletion, xs, ys))
#! /usr/bin/env python

import numpy as np
import quadtree

data = np.fromfile('test_model',dtype=np.float32).reshape(1024,1024)
temp_level,temp_center_x,temp_center_y,data_big = quadtree.quadtree(data,0.2,8)
quadtree.plot_QDT(temp_level,temp_center_x,temp_center_y,data_big)

#! /usr/bin/env python

import numpy as np
import quadtree

data = np.fromfile('test_model', dtype=np.float32).reshape(1024, 1024)
temp_level, temp_center_x, temp_center_y, data_big = quadtree.quadtree(
    data, 0.2, 8)
quadtree.plot_QDT(temp_level, temp_center_x, temp_center_y, data_big)
Example #6
0
def makeRaster(partNum, sides, pAxis, sAxis, cog, fullRender, num, outputName, wid):
    #vision axis is perpendicular to both basis vectors
    vAxis = np.cross(pAxis, sAxis)
    #origin at some distance along vAxis from cog of object, f = further distance to camera
    #w, h must be integers (dimensions of output image)
    #w, h, unitsperpixel should be 1 / a power of 2 (for quadtree); w * unitsperpixel = 256
    originD, f, w, h, unitsPerPixel = -100, -40, wid, wid, 256.0/wid
    origin = cog + originD * vAxis
    camera = origin + f * vAxis
    im = Image.new("RGB", (w, h), "white")
    mInv = np.linalg.inv(np.array([pAxis, sAxis, vAxis]).T)
    #Each side consists of three triplets specifying the vertexes of a triangle in R3
    #sides = centeredMesh.points
    #Convert sides to faces in camera reference frame
    faces = []
    minZ, maxZ = 100000, -1
    for s in sides:
        face = []
        for i in range(3):
            points = np.array(s[i * 3: i * 3 + 3])
            transformed = np.dot(mInv, points - origin)
            vertex = [transformed[i] for i in range(3)]
            z = transformed[2]
            if (z < minZ):
                minZ = z
            if (z > maxZ):
                maxZ = z
            face.append(vertex)
        faces.append(face)
    #puts z from part into range 0 to 255
    def fitZ(z):
        return (z - minZ)/(maxZ - minZ) * 255
    #create quadtree with dim = width of screen in units, min width = width of pixel in units
    qtree = quadtree(w * unitsPerPixel, unitsPerPixel)
    #add faces to quadtree
    for f in faces:
        qtree.addTriangle(f)
    for xp in range(int(-w/2), int(w/2)):
        for yp in range(int(-h/2), int(h/2)):
            #each pixel corresponds to some number of units
            x, y = xp * unitsPerPixel, yp * unitsPerPixel
            #find all triangles in quadtree node that x is in
            closeTriangles = qtree.getTrianglesOfPoint([x, y])
            validTriangles = []
            for tri in closeTriangles:
                if isInside(tri, (x, y)):
                    validTriangles.append(tri)
            #default white if no triangles contained point
            col = (255, 255, 255)
            if (len(validTriangles) != 0):
                if (not fullRender):
                    col = (255, 0, 0)
                else:
                    #if there are multiple valid triangles, choose smallest average z
                    minTri = None
                    for tri in validTriangles:
                        if (minTri == None or avgD(minTri, 2) > avgD(tri, 2)):
                            minTri = tri
                    #maps to range 55 to 200
                    zVal = fitZ(getZ(minTri, (x, y)))
                    #improve by making dist = dist to camera, not just z value
                    c = int(max(min(255, 255 - zVal), 0))
                    col = (c, 0, 0)
            im.putpixel((xp + int(w/2), yp + int(h/2)), col)
    def makeBinary(img, n):
        img = img.resize((128, 128))
        back = Image.new("RGB", (420, 420), "white")
        st = int((420 - 128)/2)
        back.paste(img, (st, st))
        back.save(str(outputName) + "-" + str(n + 1) + ".png")

    if (fullRender):
        im.save(str(outputName) + "-" + str(num) + ".png")
        #create binary version if not already created
        bim = Image.new("RGB", (w, h), "white")
        for xp in range(w):
            for yp in range(h):
                oldC = im.getpixel((xp, yp))
                if (oldC == (255, 255, 255)):
                    bim.putpixel((xp, yp), oldC)
                else:
                    bim.putpixel((xp, yp), (255, 0, 0))
        makeBinary(bim, num)
    else:
        makeBinary(im, num)
Example #7
0

if __name__ == '__main__':

    dataset = initialize()
    xsize = dataset.RasterXSize
    ysize = dataset.RasterYSize
    print 'Size: ', xsize, '/', ysize
    print 'Driver: ', dataset.GetDriver().ShortName

    datagrid = readImage(dataset,xsize,ysize)
    saveGrid(datagrid)
    datagrid = reclassify(datagrid)
    createImage(dataset, datagrid, 'testimg1.img')

    xxx = quadtree.quadtree()

    dataset = None
    """
    dataset = gdal.Open(filename, GA_ReadOnly)
    if dataset is None:
        print("error opening file")
    print 'Driver: ', dataset.GetDriver().ShortName,'/', \
          dataset.GetDriver().LongName
    print 'Size is ',dataset.RasterXSize,'x',dataset.RasterYSize, \
          'x',dataset.RasterCount
    print 'Projection is ',dataset.GetProjection()

    geotransform = dataset.GetGeoTransform()
    if not geotransform is None:
        print 'Origin = (',geotransform[0], ',',geotransform[3],')'