def rendTri(T, imageBounds, pixelSize, c=None, im=None): from PYME.Analysis.SoftRend import drawTriang, drawTriangles xs = T.x[T.triangle_nodes] ys = T.y[T.triangle_nodes] a = numpy.vstack((xs[:,0] - xs[:,1], ys[:,0] - ys[:,1])).T b = numpy.vstack((xs[:,0] - xs[:,2], ys[:,0] - ys[:,2])).T b2 = numpy.vstack((xs[:,1] - xs[:,2], ys[:,1] - ys[:,2])).T #area of triangle #c = 0.5*numpy.sqrt((b*b).sum(1) - ((a*b).sum(1)**2)/(a*a).sum(1))*numpy.sqrt((a*a).sum(1)) #c = 0.5*numpy.sqrt((b*b).sum(1)*(a*a).sum(1) - ((a*b).sum(1)**2)) #c = numpy.maximum(((b*b).sum(1)),((a*a).sum(1))) if c == None: if numpy.version.version > '1.2': c = numpy.median([(b * b).sum(1), (a * a).sum(1), (b2 * b2).sum(1)], 0) else: c = numpy.median([(b * b).sum(1), (a * a).sum(1), (b2 * b2).sum(1)]) a_ = ((a*a).sum(1)) b_ = ((b*b).sum(1)) b2_ = ((b2*b2).sum(1)) #c_neighbours = c[T.triangle_neighbors].sum(1) #c = 1.0/(c + c_neighbours + 1) #c = numpy.maximum(c, self.pixelsize**2) c = 1.0/(c + 1) sizeX = (imageBounds.x1 - imageBounds.x0)/pixelSize sizeY = (imageBounds.y1 - imageBounds.y0)/pixelSize xs = (xs - imageBounds.x0)/pixelSize ys = (ys - imageBounds.y0)/pixelSize if im == None: im = numpy.zeros((sizeX, sizeY)) # for i in range(xs.shape[0]): # xi = xs[i, :] # yi = ys[i, :] # # #if (xi > 0).all() and (xi< (sizeX - 1)).all() and (yi > 0).all() and (yi< (sizeY-1)).all(): # drawTriang(im, xi[0], yi[0], xi[1], yi[1], xi[2], yi[2], c[i]) # import threading # N = xs.shape[0] # t1 = threading.Thread(target=drawTriangles, args = (im, xs[:(N/2),:], ys[:(N/2),:], c[:(N/2)])) # t2 = threading.Thread(target=drawTriangles, args = (im, xs[(N/2):,:], ys[(N/2):,:], c[(N/2):])) # # t1.start() # t2.start() # # t1.join() # t2.join() drawTriangles(im, xs, ys, c) return im
def rendTri(T, imageBounds, pixelSize, c=None, im=None): from PYME.Analysis.SoftRend import drawTriang, drawTriangles xs = T.x[T.triangle_nodes] ys = T.y[T.triangle_nodes] a = numpy.vstack((xs[:, 0] - xs[:, 1], ys[:, 0] - ys[:, 1])).T b = numpy.vstack((xs[:, 0] - xs[:, 2], ys[:, 0] - ys[:, 2])).T b2 = numpy.vstack((xs[:, 1] - xs[:, 2], ys[:, 1] - ys[:, 2])).T #area of triangle #c = 0.5*numpy.sqrt((b*b).sum(1) - ((a*b).sum(1)**2)/(a*a).sum(1))*numpy.sqrt((a*a).sum(1)) #c = 0.5*numpy.sqrt((b*b).sum(1)*(a*a).sum(1) - ((a*b).sum(1)**2)) #c = numpy.maximum(((b*b).sum(1)),((a*a).sum(1))) if c == None: if numpy.version.version > '1.2': c = numpy.median([(b * b).sum(1), (a * a).sum(1), (b2 * b2).sum(1)], 0) else: c = numpy.median([(b * b).sum(1), (a * a).sum(1), (b2 * b2).sum(1)]) #a_ = ((a*a).sum(1)) #b_ = ((b*b).sum(1)) #b2_ = ((b2*b2).sum(1)) #c_neighbours = c[T.triangle_neighbors].sum(1) #c = 1.0/(c + c_neighbours + 1) #c = numpy.maximum(c, self.pixelsize**2) c = 1.0 / (c + 1) sizeX = (imageBounds.x1 - imageBounds.x0) / pixelSize sizeY = (imageBounds.y1 - imageBounds.y0) / pixelSize xs = (xs - imageBounds.x0) / pixelSize ys = (ys - imageBounds.y0) / pixelSize if im == None: im = numpy.zeros((sizeX, sizeY)) drawTriangles(im, xs, ys, c) return im
def rendTri(T, imageBounds, pixelSize, c=None, im=None): from PYME.Analysis.SoftRend import drawTriang, drawTriangles xs = T.x[T.triangle_nodes] ys = T.y[T.triangle_nodes] a = numpy.vstack((xs[:,0] - xs[:,1], ys[:,0] - ys[:,1])).T b = numpy.vstack((xs[:,0] - xs[:,2], ys[:,0] - ys[:,2])).T b2 = numpy.vstack((xs[:,1] - xs[:,2], ys[:,1] - ys[:,2])).T #area of triangle #c = 0.5*numpy.sqrt((b*b).sum(1) - ((a*b).sum(1)**2)/(a*a).sum(1))*numpy.sqrt((a*a).sum(1)) #c = 0.5*numpy.sqrt((b*b).sum(1)*(a*a).sum(1) - ((a*b).sum(1)**2)) #c = numpy.maximum(((b*b).sum(1)),((a*a).sum(1))) if c == None: if numpy.version.version > '1.2': c = numpy.median([(b * b).sum(1), (a * a).sum(1), (b2 * b2).sum(1)], 0) else: c = numpy.median([(b * b).sum(1), (a * a).sum(1), (b2 * b2).sum(1)]) #a_ = ((a*a).sum(1)) #b_ = ((b*b).sum(1)) #b2_ = ((b2*b2).sum(1)) #c_neighbours = c[T.triangle_neighbors].sum(1) #c = 1.0/(c + c_neighbours + 1) #c = numpy.maximum(c, self.pixelsize**2) c = 1.0/(c + 1) sizeX = (imageBounds.x1 - imageBounds.x0)/pixelSize sizeY = (imageBounds.y1 - imageBounds.y0)/pixelSize xs = (xs - imageBounds.x0)/pixelSize ys = (ys - imageBounds.y0)/pixelSize if im == None: im = numpy.zeros((sizeX, sizeY)) drawTriangles(im, xs, ys, c) return im