def endOfIteration(self): #print self.obj0 self.iter += 1 if (self.iter % self.saveRate) == 0: print 'saving...' (obj1, self.ct, self.St, self.grt, self.Jt) = self.objectiveFunDef(self.at, self.Afft, withTrajectory=True) dim2 = self.dim**2 A = [np.zeros([self.Tsize, self.dim, self.dim]), np.zeros([self.Tsize, self.dim])] if self.affineDim > 0: for t in range(self.Tsize): AB = np.dot(self.affineBasis, Afft[t]) A[0][t] = AB[0:dim2].reshape([self.dim, self.dim]) A[1][t] = AB[dim2:dim2+self.dim] (ct, St, grt) = evol.gaussianDiffeonsEvolutionEuler(self.c0, self.S0, self.at, self.param.sigmaKernel, affine=A, withPointSet= self.gr0Fine) # (ct, St, grt, Jt) = evol.gaussianDiffeonsEvolutionEuler(self.c0, self.S0, self.at, self.param.sigmaKernel, affine=A, # withPointSet = self.fv0Fine.vertices, withJacobian=True) imDef = diffeo.gridScalars(grid = self.im1) for kk in range(self.Tsize+1): imDef.data = diffeo.multilinInterp(self.im1.data, grt[kk, ...].transpose(range(-1, self.grt.ndim-2))) imDef.saveImg(self.outputDir +'/'+ self.saveFile+str(kk)+'.png', normalize=True) if self.dim==3: gd.saveDiffeons(self.outputDir +'/'+ self.saveFile+'Diffeons'+str(kk)+'.vtk', self.ct[kk,...], self.St[kk,...]) elif self.dim==2: (R, detR) = gd.multiMatInverse1(self.St[kk,...], isSym=True) diffx = self.gr1[..., np.newaxis, :] - self.ct[kk, ...] betax = (R*diffx[..., np.newaxis, :]).sum(axis=-1) dst = (betax * diffx).sum(axis=-1) diffIm = np.minimum((255*(1-dst)*(dst < 1)).astype(float).sum(axis=-1), 255) out = Image.fromarray(diffIm.astype(np.uint8)) out.save(self.outputDir +'/'+ self.saveFile+'Diffeons'+str(kk)+'.png') else: (obj1, self.ct, self.St, self.grt, self.Jt) = self.objectiveFunDef(self.at, self.Afft, withTrajectory=True)
def endOfIteration(self): #print self.obj0 self.iter += 1 if (self.iter % self.saveRate == 0) : if self.dcurr: print 'saving...' (obj1, self.ct, self.St, self.bt, self.xt, self.xSt, Jt) = self.objectiveFunDef(self.at, self.Afft, withTrajectory=True, withJacobian=True) dim2 = self.dim**2 A = [np.zeros([self.Tsize, self.dim, self.dim]), np.zeros([self.Tsize, self.dim])] if self.affineDim > 0: for t in range(self.Tsize): AB = np.dot(self.affineBasis, Afft[t]) A[0][t] = AB[0:dim2].reshape([self.dim, self.dim]) A[1][t] = AB[dim2:dim2+self.dim] (ct, St, xt, Jt) = evol.gaussianDiffeonsEvolutionEuler(self.c0, self.S0, self.at, self.param.sigmaKernel, affine=A, withPointSet = self.fv0Fine.vertices, withJacobian=True) fvDef = surfaces.Surface(surf=self.fv0Fine) for kk in range(self.Tsize+1): self.fvDef.updateVertices(np.squeeze(self.xt[kk, :, :])) fvDef.updateVertices(np.squeeze(xt[kk, :, :])) # foo = (gd.diffeonCurrentNormDef(self.xt[kk], self.xSt[kk], self.bt[kk], self.fvDef, self.param.KparDist.sigma) # + gd.diffeonCurrentNorm0(self.fvDef, self.param.KparDist))/ (self.param.sigmaError**2) # print foo fvDef.saveVTK(self.outputDir +'/'+ self.saveFile+str(kk)+'.vtk', scalars = Jt[kk, :], scal_name='Jacobian') gd.saveDiffeons(self.outputDir +'/'+ self.saveFile+'Diffeons'+str(kk)+'.vtk', self.ct[kk,:,:], self.St[kk,:,:,:]) self.saveB(self.outputDir +'/'+ self.saveFile+'Bt'+str(kk)+'.vtk', self.xt[kk,:,:], self.bt[kk,:,:]) else: (obj1, self.ct, self.St, self.xt) = self.objectiveFunDef(self.at, self.Afft, withTrajectory=True) self.fvDef.updateVertices(np.squeeze(self.xt[-1, :, :])) dim2 = self.dim**2 A = [np.zeros([self.Tsize, self.dim, self.dim]), np.zeros([self.Tsize, self.dim])] if self.affineDim > 0: for t in range(self.Tsize): AB = np.dot(self.affineBasis, Afft[t]) A[0][t] = AB[0:dim2].reshape([self.dim, self.dim]) A[1][t] = AB[dim2:dim2+self.dim] (ct, St, xt, Jt) = evol.gaussianDiffeonsEvolutionEuler(self.c0, self.S0, self.at, self.param.sigmaKernel, affine=A, withPointSet = self.fv0Fine.vertices, withJacobian=True) fvDef = surfaces.Surface(surf=self.fv0Fine) for kk in range(self.Tsize+1): fvDef.updateVertices(np.squeeze(xt[kk, :, :])) fvDef.saveVTK(self.outputDir +'/'+ self.saveFile+str(kk)+'.vtk', scalars = Jt[kk, :], scal_name='Jacobian') #self.fvDef.saveVTK(self.outputDir +'/'+ self.saveFile+str(kk)+'.vtk', scalars = self.idx, scal_name='Labels') gd.saveDiffeons(self.outputDir +'/'+ self.saveFile+'Diffeons'+str(kk)+'.vtk', self.ct[kk,:,:], self.St[kk,:,:,:]) #print self.bt else: if self.dcurr: (obj1, self.ct, self.St, self.bt, self.xt, self.xSt) = self.objectiveFunDef(self.at, self.Afft, withTrajectory=True) else: (obj1, self.ct, self.St, self.xt) = self.objectiveFunDef(self.at, self.Afft, withTrajectory=True) self.fvDef.updateVertices(np.squeeze(self.xt[-1, :, :]))