diff --git a/VisuAlignWarpVec.py b/VisuAlignWarpVec.py index 9c16b2a3a294d9fc25715d76c4e2f04703aca87e..36d7789fe457f7bc5825469964a9714dc3ecd3ce 100644 --- a/VisuAlignWarpVec.py +++ b/VisuAlignWarpVec.py @@ -7,6 +7,10 @@ def triangulate(w,h,markers): [ 1.1*w,-0.1*h, 1.1*w,-0.1*h], [-0.1*w, 1.1*h,-0.1*w, 1.1*h], [ 1.1*w, 1.1*h, 1.1*w, 1.1*h]] + # vertices = [[0, 0, 0, 0], + # [w, 0, w, 0], + # [0, h, 0, h], + # [w, h, w, h]] edges=[0]*((len(markers)+4)*(len(markers)+4-1)//2) triangles=[Triangle(0,1,2,vertices,edges),Triangle(1,2,3,vertices,edges)] edges[0]=edges[1]=edges[4]=edges[5]=2 @@ -46,15 +50,17 @@ def transform(triangulation,x,y): triangle.A[1] +(triangle.B[1]-triangle.A[1])*uv1[0] +(triangle.C[1]-triangle.A[1])*uv1[1]) - +def transform_vec(triangulation,x,y): + xPrime = np.zeros(x.shape,float) + yPrime = np.zeros(y.shape,float) + for triangle in triangulation: + triangle.intriangle_vec(x,y, xPrime,yPrime) + return (xPrime,yPrime) + def forwardtransform(triangulation,x,y): for triangle in triangulation: uv1=triangle.inforward(x,y) - print('uv1',uv1) if uv1: - ans = (triangle.A[2] - +(triangle.B[2]-triangle.A[2])*uv1[0]) - print('uv1 ans',triangle.A[2],(triangle.B[2]-triangle.A[2]),uv1,ans) return (triangle.A[2] +(triangle.B[2]-triangle.A[2])*uv1[0] +(triangle.C[2]-triangle.A[2])*uv1[1], @@ -151,3 +157,10 @@ class Triangle: ok = (uv1[:,0]>=0) & (uv1[:,0]<=1) & (uv1[:,1]>=0) & (uv1[:,1]<=1) & (uv1[:,0]+uv1[:,1]<=1) xPrime[ok] = self.A[2] + (self.B[2]-self.A[2])*uv1[ok,0] + (self.C[2]-self.A[2])*uv1[ok,1] yPrime[ok] = self.A[3] + (self.B[3]-self.A[3])*uv1[ok,0] + (self.C[3]-self.A[3])*uv1[ok,1] + + def intriangle_vec(self,x,y, xPrime,yPrime): + uv1 = rowmul3_vec(x,y,self.decomp) + # also compute the next step, since it uses the parameters of this triangle + ok = (uv1[:,0]>=0) & (uv1[:,0]<=1) & (uv1[:,1]>=0) & (uv1[:,1]<=1) & (uv1[:,0]+uv1[:,1]<=1) + xPrime[ok] = self.A[0] + (self.B[0]-self.A[0])*uv1[ok,0] + (self.C[0]-self.A[0])*uv1[ok,1] + yPrime[ok] = self.A[1] + (self.B[1]-self.A[1])*uv1[ok,0] + (self.C[1]-self.A[1])*uv1[ok,1]