def zeroPaddData(self,desiredLength,paddmode='zero',where='end'): #zero padds the time domain data, it is possible to padd at the beginning, #or at the end, and further gaussian or real zero padding is possible #might not work for gaussian mode! desiredLength=int(desiredLength) #escape the function if desiredLength<0: return 0 #calculate the paddvectors if paddmode=='gaussian': paddvec=py.normal(0,py.std(self.getPreceedingNoise())*0.05,desiredLength) else: paddvec=py.ones((desiredLength,self.tdData.shape[1]-1)) paddvec*=py.mean(self.tdData[-20:,1:]) timevec=self.getTimes() if where=='end': #timeaxis: newtimes=py.linspace(timevec[-1],timevec[-1]+desiredLength*self.dt,desiredLength) paddvec=py.column_stack((newtimes,paddvec)) longvec=py.row_stack((self.tdData,paddvec)) else: newtimes=py.linspace(timevec[0]-(desiredLength+1)*self.dt,timevec[0],desiredLength) paddvec=py.column_stack((newtimes,paddvec)) longvec=py.row_stack((paddvec,self.tdData)) self.setTDData(longvec)
def homog2D(xPrime, x): """ Compute the 3x3 homography matrix mapping a set of N 2D homogeneous points (3xN) to another set (3xN) """ numPoints = xPrime.shape[1] assert numPoints >= 4 A = None for i in range(0, numPoints): xiPrime = xPrime[:, i] xi = x[:, i] Ai_row0 = pl.concatenate((pl.zeros(3), -xiPrime[2] * xi, xiPrime[1] * xi)) Ai_row1 = pl.concatenate((xiPrime[2] * xi, pl.zeros(3), -xiPrime[0] * xi)) Ai = pl.row_stack((Ai_row0, Ai_row1)) if A is None: A = Ai else: A = pl.vstack((A, Ai)) U, S, V = pl.svd(A) V = V.T h = V[:, -1] H = pl.reshape(h, (3, 3)) return H
def homog2D (xPrime, x): """ Compute the 3x3 homography matrix mapping a set of N 2D homogeneous points (3xN) to another set (3xN) """ numPoints = xPrime.shape[1] assert (numPoints >= 4) A = None for i in range (0, numPoints): xiPrime = xPrime[:,i] xi = x[:,i] Ai_row0 = pl.concatenate ((pl.zeros (3,), -xiPrime[2]*xi, xiPrime[1]*xi)) Ai_row1 = pl.concatenate ((xiPrime[2]*xi, pl.zeros (3,), -xiPrime[0]*xi)) Ai = pl.row_stack ((Ai_row0, Ai_row1)) if A is None: A = Ai else: A = pl.vstack ((A, Ai)) U, S, V = pl.svd (A) V = V.T h = V[:,-1] H = pl.reshape (h, (3, 3)) return H
def homog3D(points2d, points3d): """ Compute a matrix relating homogeneous 3D points (4xN) to homogeneous 2D points (3xN) Not sure why anyone would do this. Note that the returned transformation *NOT* an isometry. But it's here... so deal with it. """ numPoints = points2d.shape[1] assert numPoints >= 4 A = None for i in range(0, numPoints): xiPrime = points2d[:, i] xi = points3d[:, i] Ai_row0 = pl.concatenate((pl.zeros(4), -xiPrime[2] * xi, xiPrime[1] * xi)) Ai_row1 = pl.concatenate((xiPrime[2] * xi, pl.zeros(4), -xiPrime[0] * xi)) Ai = pl.row_stack((Ai_row0, Ai_row1)) if A is None: A = Ai else: A = pl.vstack((A, Ai)) U, S, V = pl.svd(A) V = V.T h = V[:, -1] P = pl.reshape(h, (3, 4)) return P
def homog3D (points2d, points3d): """ Compute a matrix relating homogeneous 3D points (4xN) to homogeneous 2D points (3xN) Not sure why anyone would do this. Note that the returned transformation *NOT* an isometry. But it's here... so deal with it. """ numPoints = points2d.shape[1] assert (numPoints >= 4) A = None for i in range (0, numPoints): xiPrime = points2d[:,i] xi = points3d[:,i] Ai_row0 = pl.concatenate ((pl.zeros (4,), -xiPrime[2]*xi, xiPrime[1]*xi)) Ai_row1 = pl.concatenate ((xiPrime[2]*xi, pl.zeros (4,), -xiPrime[0]*xi)) Ai = pl.row_stack ((Ai_row0, Ai_row1)) if A is None: A = Ai else: A = pl.vstack ((A, Ai)) U, S, V = pl.svd (A) V = V.T h = V[:,-1] P = pl.reshape (h, (3, 4)) return P