def external_update(self, u, f, uf, f0, u0): # overload the update function CsSolver.checkmax(self.st['sensemap']) tmpuf = u * self.st['sensemap'] tmpuf = numpy.transpose(tmpuf, (1, 2, 3, 0)) tmp_shape = tmpuf.shape tmpuf = numpy.reshape(tmpuf, tmp_shape[0:2] + (numpy.prod(tmp_shape[2:4]), ), order='F') tmpuf = self.CsTransform.forwardbackward(tmpuf) tmpuf = numpy.reshape(tmpuf, tmp_shape, order='F') tmpuf = numpy.transpose(tmpuf, (3, 0, 1, 2)) tmpuf = tmpuf * self.st['sensemap'].conj() # tmpuf=self.st['sensemap'].conj()*( # self.CsTransform.forwardbackward( # u*self.st['sensemap'])) if self.st['senseflag'] == 1: tmpuf = CsSolver.CombineMulti(tmpuf, -1) print('start of ext_update') # checkmax(u) # checkmax(tmpuf) # checkmax(self.u0) # checkmax(uf) fact = numpy.sum((self.u0 - tmpuf)**2) / numpy.sum((u0)**2) fact = numpy.abs(fact.real) fact = numpy.sqrt(fact) print('fact', fact) # fact=1.0/(1.0+numpy.exp(-(fact-0.5)*self.thresh_scale)) tmpuf = CsSolver.Normalize(tmpuf) * numpy.max(numpy.abs(u0[:])) uf = uf + (u0 - tmpuf) * 1.0 #*fact uf = CsSolver.Normalize(uf) * numpy.max(numpy.abs(u0[:])) CsSolver.checkmax(tmpuf) CsSolver.checkmax(u0) CsSolver.checkmax(uf) # for jj in range(0,u.shape[-1]): # u[...,jj] = u[...,jj]*self.st['sn']# rescale the final image intensity print('end of ext_update') murf = uf return (f, uf, murf, u)
def external_update(self, u, f, uf, f0, u0): # overload the update function CsSolver.checkmax(self.st["sensemap"]) tmpuf = u * self.st["sensemap"] tmpuf = numpy.transpose(tmpuf, (1, 2, 3, 0)) tmp_shape = tmpuf.shape tmpuf = numpy.reshape(tmpuf, tmp_shape[0:2] + (numpy.prod(tmp_shape[2:4]),), order="F") tmpuf = self.CsTransform.forwardbackward(tmpuf) tmpuf = numpy.reshape(tmpuf, tmp_shape, order="F") tmpuf = numpy.transpose(tmpuf, (3, 0, 1, 2)) tmpuf = tmpuf * self.st["sensemap"].conj() # tmpuf=self.st['sensemap'].conj()*( # self.CsTransform.forwardbackward( # u*self.st['sensemap'])) if self.st["senseflag"] == 1: tmpuf = CsSolver.CombineMulti(tmpuf, -1) print("start of ext_update") # checkmax(u) # checkmax(tmpuf) # checkmax(self.u0) # checkmax(uf) fact = numpy.sum((self.u0 - tmpuf) ** 2) / numpy.sum((u0) ** 2) fact = numpy.abs(fact.real) fact = numpy.sqrt(fact) print("fact", fact) # fact=1.0/(1.0+numpy.exp(-(fact-0.5)*self.thresh_scale)) tmpuf = CsSolver.Normalize(tmpuf) * numpy.max(numpy.abs(u0[:])) uf = uf + (u0 - tmpuf) * 1.0 # *fact uf = CsSolver.Normalize(uf) * numpy.max(numpy.abs(u0[:])) CsSolver.checkmax(tmpuf) CsSolver.checkmax(u0) CsSolver.checkmax(uf) # for jj in range(0,u.shape[-1]): # u[...,jj] = u[...,jj]*self.st['sn']# rescale the final image intensity print("end of ext_update") murf = uf return (f, uf, murf, u)