Ejemplo n.º 1
0
 def imageFromFill2D(self, slice):
     (_, nx) = slice.shape
     ny = self.fill_size
     fill_slice = N.zeros((ny,nx), N.complex128)
     embedIm(slice, fill_slice, self.fill_rows, 0)
     fill_slice[:] = ifft2d(fill_slice)
     return fill_slice
Ejemplo n.º 2
0
    def cookImage2D(self, volData):
        out = sys.stdout
        (ns, _, nx) = volData.shape
        ny = self.fill_size
        cooked3D = N.zeros((ns,ny,nx), N.complex128)
        for s, slice in enumerate(volData):
            out.write("filling slice %d: "%(s,))
            theta = self.phaseMap2D(slice)
            mag = abs(self.imageFromFill2D(slice))
            cooked = N.zeros((ny, nx), N.complex128)
            prev_power = 0.
            c = self.criterion[1]=="converge" and 100000. or self.iterations
            while c > self.criterion[0]:
                prev_image = cooked.copy()
                cooked = mag*N.exp(1.j*N.angle(theta))
                cooked[:] = fft2d(cooked)
                cooked[self.fill_rows:,:] = slice[:]                
                cooked[:] = ifft2d(cooked)
                diff = abs(cooked-prev_image).sum()
                mag = abs(cooked)

                c = self.criterion[1]=="converge" and diff or c-1
            cooked = mag*N.exp(1.j*N.angle(theta))
            cooked[:] = fft2d(cooked)
            self.mergeFill2D(cooked, slice, winsize=self.win_size)
            cooked3D[s][:] = cooked[:]
            out.write("absolute difference=%f\n"%(diff))
        return cooked3D.astype(volData.dtype)
Ejemplo n.º 3
0
 def phaseMap2D(self, slice):
     (_, nx) = slice.shape
     ny = self.fill_size
     y0 = self.fill_size/2
     fill_slice = N.zeros((ny,nx), N.complex128)
     fill_slice[y0-self.over_fill:y0+self.over_fill,:] = \
                slice[0:self.over_fill*2,:]
     
     phase_map = ifft2d(fill_slice)
     return phase_map