Exemple #1
0
    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)