def getoverlapz(self,angle,spacingx,spacingz): ''' shift 2nd order data ''' dx = self.dx / 2 dz = self.dz / 2 kx = dx*np.cos(angle)/(spacingx*2) ky = dx*np.sin(angle)/(spacingx*2) kz = dz/spacingz ysh = np.exp(2j*np.pi*(kx*self.xv+ky*self.yv+kz*self.zv)) otf = fftn((self.psf*ysh)) yshf = np.abs(fftn(ysh)) nxh = self.nx nyh = self.ny sz, sx, sy = np.unravel_index(yshf.argmax(), yshf.shape) if (sx<nxh): sx = sx else: sx = sx-2*nxh if (sy<nyh): sy = sy else: sy = sy-2*nyh zsp = self.zerosuppression( sz, sx, sy) otf = otf * zsp ysh = self.shiftmat(0.,kx,ky).astype(np.complex64) imgf = self.img_1_0.astype(np.complex64) imgf = fftn((imgf*ysh)) temp = (np.abs(imgf*otf)**2).sum() return temp
def shift0(self,plot=False): nxh = self.nx nyh = self.ny nzh = self.nz self.otf0 = np.zeros((2*nzh,2*nxh,2*nyh),dtype=np.complex64) zsp = self.zerosuppression( 0., 0., 0.) self.otf0[:] = fftn(self.psf) * zsp self.imgf0 = np.zeros((2*nzh,2*nxh,2*nyh),dtype=np.complex64) self.imgf0 = fftn(self.img_0) self.imgf0 = self.imgf0 tf.imsave(join('otf_0.tif'),self.otf0) tf.imsave(join('imgf_0.tif'),self.imgf0) if plot==True: tf.imshow(np.abs(fftshift(self.otf0)), photometric='minisblack',title='Angle %d _ 0 order OTF'%self.nangle) tf.imshow(np.abs(fftshift(self.imgf0)), photometric='minisblack',title='Angle %d _ 0 order frequency spectrum'%self.nangle)
def interp(self,arr): nz,nx,ny = arr.shape outarr = np.zeros((2*nz,2*nx,2*ny), dtype=arr.dtype) arrf = fftn(arr) arro = self.pad(arrf) outarr = ifftn(arro) return outarr
def getoverlap1(self,angle,spacingx,spacingz,plot=False): ''' shift 2nd order data ''' dx = self.dx / 2 dz = self.dz / 2 kx = dx*np.cos(angle)/(spacingx*2) ky = dx*np.sin(angle)/(spacingx*2) kz = dz/spacingz nxh = self.nx nyh = self.ny ysh = np.exp(2j*np.pi*(kx*self.xv+ky*self.yv+kz*self.zv)) otf = fftn((self.psf*ysh)) yshf = np.abs(fftn(ysh)) sz, sx, sy = np.unravel_index(yshf.argmax(), yshf.shape) if (sx<nxh): sx = sx else: sx = sx-2*nxh if (sy<nyh): sy = sy else: sy = sy-2*nyh zsp = self.zerosuppression( sz, sx, sy) otf = otf * zsp ysh = np.exp(2j*np.pi*(kx*self.xv+ky*self.yv+0.*self.zv)) imgf = self.img_1_0.astype(np.complex64) imgf = fftn((imgf*ysh)) cutoff = self.cutoff imgf0 = self.imgf0 otf0 = self.otf0 wimgf0 = otf*imgf0 wimgf1 = otf0*imgf msk = (np.abs(otf0*otf)>cutoff).astype(np.complex64) if plot==True: tf.imshow(np.abs((msk*wimgf1*wimgf0.conj())/(msk*wimgf0*wimgf0.conj()))) tf.imshow(np.angle((msk*wimgf1*wimgf0.conj())/(msk*wimgf0*wimgf0.conj()))) a = np.sum(msk*wimgf1*wimgf0.conj())/np.sum(msk*wimgf0*wimgf0.conj()) mag = np.abs(a) phase = np.angle(a) return mag, phase
def shift2(self,angle,spacingx,plot=False): ''' shift 2nd order data ''' dx = self.dx / 2 nxh = self.nx nyh = self.ny nzh = self.nz kx = dx*np.cos(angle)/spacingx ky = dx*np.sin(angle)/spacingx kz = 0 ysh = np.zeros((2,2*nzh,2*nxh,2*nyh),dtype=np.complex64) ysh[0,:,:,:] = self.shiftmat(kz,kx,ky).astype(np.complex64) ysh[1,:,:,:] = self.shiftmat(kz,-kx,-ky).astype(np.complex64) otf = np.zeros((2*nzh,2*nxh,2*nyh),dtype=np.complex64) otf[:,:,:] = fftn(self.psf*ysh[0]) yshf = np.abs(fftn(ysh[0])) sz, sx, sy = np.unravel_index(yshf.argmax(), yshf.shape) if (sx<nxh): sx = sx else: sx = sx-2*nxh if (sy<nyh): sy = sy else: sy = sy-2*nyh zsp = self.zerosuppression( sz, sx, sy) otf = otf * zsp tf.imsave(join('otf_2_0.tif'),otf) if plot==True: tf.imshow(np.abs(fftshift(otf)),photometric='minisblack',title='Angle %d _ 2nd order +1 OTF'%self.nangle) otf = np.zeros((2*nzh,2*nxh,2*nyh),dtype=np.complex64) otf[:,:,:] = fftn(self.psf*ysh[1]) yshf = np.abs(fftn(ysh[1])) sz, sx, sy = np.unravel_index(yshf.argmax(), yshf.shape) if (sx<nxh): sx = sx else: sx = sx-2*nxh if (sy<nyh): sy = sy else: sy = sy-2*nyh zsp = self.zerosuppression( sz, sx, sy) otf = otf * zsp tf.imsave(join('otf_2_1.tif'),otf) if plot==True: tf.imshow(np.abs(fftshift(otf)),photometric='minisblack',title='Angle %d _ 2nd order -1 OTF'%self.nangle) imgf = np.zeros((2*nzh,2*nxh,2*nyh),dtype=np.complex64) imgf[:,:,:] = self.img_2_0 imgf[:,:,:] = fftn(imgf*ysh[0]) tf.imsave(join('imgf_2_0.tif'),imgf) if plot==True: tf.imshow(np.abs(fftshift(imgf)),photometric='minisblack',title='Angle %d _ 2nd order +1 frequency spectrum'%self.nangle) imgf = np.zeros((2*nzh,2*nxh,2*nyh),dtype=np.complex64) imgf[:,:,:] = self.img_2_1 imgf[:,:,:] = fftn(imgf*ysh[1]) tf.imsave(join('imgf_2_1.tif'),imgf) if plot==True: tf.imshow(np.abs(fftshift(imgf)),photometric='minisblack',title='Angle %d _ 2nd order -1 frequency spectrum'%self.nangle)