예제 #1
0
    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
예제 #2
0
 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)
예제 #3
0
 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
예제 #4
0
 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
예제 #5
0
 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)