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
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)
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