|
|
|
|
@@ -8,82 +8,16 @@
|
|
|
|
|
'''
|
|
|
|
|
implements an image alalyser for ESB MX
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
import os
|
|
|
|
|
from scipy import fftpack, ndimage
|
|
|
|
|
import scipy.ndimage as ndi
|
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
import matplotlib as mpl
|
|
|
|
|
import numpy as np
|
|
|
|
|
#plt.ion()
|
|
|
|
|
import imgStack
|
|
|
|
|
|
|
|
|
|
def ffttest():
|
|
|
|
|
for phi in np.arange(0.,180.,10.):
|
|
|
|
|
ffttest2(phi=phi)
|
|
|
|
|
plt.show()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
def ffttest2(phi=45.,frq=4.2,amp=1.,n=256.):
|
|
|
|
|
#find the main frequency and phase in 1-D
|
|
|
|
|
#plt.ion()
|
|
|
|
|
plt.figure(1)
|
|
|
|
|
def findGrid(image,numPeak=2,minFrq=2,maxFrq=None,debug=0):
|
|
|
|
|
d2r=np.pi/180.
|
|
|
|
|
x=np.arange(n)
|
|
|
|
|
phi=phi*d2r
|
|
|
|
|
y=amp*np.cos(frq*x/n*2.*np.pi-phi)
|
|
|
|
|
plt.plot(x,y,'y')
|
|
|
|
|
#y[np.where(y<-.5)]=0
|
|
|
|
|
#y*=np.hamming(n)
|
|
|
|
|
w=np.hanning(n)
|
|
|
|
|
plt.plot(x,w,'y')
|
|
|
|
|
y*=w
|
|
|
|
|
#y*=1.-np.cos(x/(n-1.)*2.*np.pi)
|
|
|
|
|
|
|
|
|
|
#y=[1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1]
|
|
|
|
|
plt.stem(x,y)
|
|
|
|
|
|
|
|
|
|
fy=np.fft.fft(y)
|
|
|
|
|
fya=np.abs(fy)
|
|
|
|
|
plt.figure(2)
|
|
|
|
|
plt.subplot(211)
|
|
|
|
|
plt.stem(x,fya)
|
|
|
|
|
plt.subplot(212)
|
|
|
|
|
plt.stem(x,np.angle(fy)/d2r)
|
|
|
|
|
print(np.angle(fy[frq])/d2r)
|
|
|
|
|
|
|
|
|
|
fya[0]=0
|
|
|
|
|
i=(fya.reshape(2,-1)[0,:]).argmax()
|
|
|
|
|
(vn,v0,vp)=fya[i-1:i+2]
|
|
|
|
|
frq_=i+(vn-vp)/(2.*(vp+vn-2*v0))
|
|
|
|
|
print('freq: %g phase %g %g %g'%((frq_,)+tuple(np.angle(fy[i-1:i+2])/d2r)))
|
|
|
|
|
|
|
|
|
|
#PHASE CALCULATION
|
|
|
|
|
plt.figure(1)
|
|
|
|
|
y=np.zeros(x.shape)
|
|
|
|
|
z=np.zeros(x.shape)
|
|
|
|
|
for ii in (i,i-1,i+1):
|
|
|
|
|
y+=np.abs(fy[ii])/n*np.cos(ii*x/n*2.*np.pi+np.angle(fy[ii]))
|
|
|
|
|
z+=np.abs(fy[ii])/n*np.sin(ii*x/n*2.*np.pi+np.angle(fy[ii]))
|
|
|
|
|
y*=2 #double because of conjugate part
|
|
|
|
|
z*=2 #double because of conjugate part
|
|
|
|
|
plt.plot(x,y,'r')
|
|
|
|
|
amp_=fya[i-1:i+2].sum()/n*2.
|
|
|
|
|
t=int(n/2)-1
|
|
|
|
|
#->phase: find maximum or where the sin is 0
|
|
|
|
|
w=np.arccos(y[t]/amp_)
|
|
|
|
|
if(z[t]<0): w=-w
|
|
|
|
|
print('amplitude %g, value at middle (%d) cos->%g sin->%g -> acos %g deg'%(amp_,t,y[t],z[t],w/d2r))
|
|
|
|
|
#rot angle at middle x=127 =frq_*t/n*2.*np.pi-phi_=w '%(amp_,t,y[t],phi_/d2r))
|
|
|
|
|
phi_=frq_*t/n*2.*np.pi-w
|
|
|
|
|
y=amp_*np.cos(frq_*x/n*2.*np.pi-phi_)
|
|
|
|
|
print('y[%d] %g'%(t,y[t]))
|
|
|
|
|
|
|
|
|
|
plt.plot(x,y,'g')
|
|
|
|
|
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
def findGrid(image,numPeak=2,limFrq=None,debug=255):
|
|
|
|
|
d2r=np.pi/180.
|
|
|
|
|
#image = ndimage.imread('/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/images/grid_20180409_115332.png', flatten=True) # flatten=True gives a greyscale image
|
|
|
|
|
s=image.shape
|
|
|
|
|
w1=np.hamming(s[0]).reshape((-1,1))
|
|
|
|
|
w2=np.hamming(s[1]).reshape((1,-1))
|
|
|
|
|
@@ -91,8 +25,9 @@ def findGrid(image,numPeak=2,limFrq=None,debug=255):
|
|
|
|
|
#plt.figure(num='hamming window')
|
|
|
|
|
#plt.imshow(wnd, interpolation="nearest")
|
|
|
|
|
image=wnd*image
|
|
|
|
|
#plt.figure(num='hamming window*img')
|
|
|
|
|
#plt.imshow(image, interpolation="nearest")
|
|
|
|
|
if debug&1:
|
|
|
|
|
plt.figure(num='hamming window*img')
|
|
|
|
|
plt.imshow(image, interpolation="nearest")
|
|
|
|
|
|
|
|
|
|
fft2 = np.fft.fft2(image)
|
|
|
|
|
fft2=np.fft.fftshift(fft2)
|
|
|
|
|
@@ -103,11 +38,11 @@ def findGrid(image,numPeak=2,limFrq=None,debug=255):
|
|
|
|
|
#plt.xlim(s[1]/2-50, s[1]/2+50);plt.ylim(s[0]/2-50, s[0]/2+50)
|
|
|
|
|
|
|
|
|
|
ctr=np.array(image.shape,dtype=np.int16)/2
|
|
|
|
|
fa[ctr[0] - 1:ctr[0] + 2, ctr[1] - 1:ctr[1] + 2]=0 # set dc to 0
|
|
|
|
|
fa[ctr[0]-minFrq+1:ctr[0]+minFrq, ctr[1]-minFrq+1:ctr[1]+minFrq]=0 # set dc to 0
|
|
|
|
|
# limit to maximal frequency
|
|
|
|
|
if limFrq is not None:
|
|
|
|
|
fa[:ctr[0]-limFrq,:]=0;fa[ctr[0]+limFrq:,:]=0
|
|
|
|
|
fa[:,:ctr[1]-limFrq]=0;fa[:,ctr[1]+limFrq:]=0
|
|
|
|
|
if maxFrq is not None:
|
|
|
|
|
fa[:ctr[0]-maxFrq,:]=0;fa[ctr[0]+maxFrq:,:]=0
|
|
|
|
|
fa[:,:ctr[1]-maxFrq]=0;fa[:,ctr[1]+maxFrq:]=0
|
|
|
|
|
x=np.arange(s[1])/float(s[1])*2.*np.pi
|
|
|
|
|
y=np.arange(s[0])/float(s[0])*2.*np.pi
|
|
|
|
|
if debug&1:
|
|
|
|
|
@@ -232,6 +167,28 @@ def plotGrid(grid,shape):
|
|
|
|
|
plt.plot(p[:,0],p[:,1],'r+',markeredgewidth=2, markersize=10)
|
|
|
|
|
plt.axis('image')
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
def ShowImage(img,title=None,cmap='gray',vmin=None, vmax=None):
|
|
|
|
|
plt.figure(title)
|
|
|
|
|
plt.imshow(img, interpolation="nearest", cmap=cmap,vmin=vmin,vmax=vmax) # ,vmin=m-3*s, vmax=m+3*s)
|
|
|
|
|
plt.colorbar()
|
|
|
|
|
|
|
|
|
|
def imgEqualize(img,num_bins=256):
|
|
|
|
|
# get image histogram
|
|
|
|
|
hist, bins = np.histogram(image.flatten(), num_bins, normed=True)
|
|
|
|
|
cdf = hist.cumsum() # cumulative distribution function
|
|
|
|
|
cdf = 255 * cdf / cdf[-1] # normalize
|
|
|
|
|
|
|
|
|
|
# use linear interpolation of cdf to find new pixel values
|
|
|
|
|
imgEqu=np.interp(img.flatten(), bins[:-1], cdf)
|
|
|
|
|
imgEqu=np.uint8(imgEqu.reshape(img.shape))
|
|
|
|
|
|
|
|
|
|
plt.figure();plt.plot(hist)
|
|
|
|
|
h2,b2=np.histogram(imgEqu.flatten(), num_bins, normed=True)
|
|
|
|
|
plt.figure();plt.plot(h2)
|
|
|
|
|
return imgEqu.reshape(img.shape)#, cdf
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def findObj(image,objSize=150,tol=0,debug=0):
|
|
|
|
|
|
|
|
|
|
#objSiz is the rough diameter of the searched features in pixels
|
|
|
|
|
@@ -239,35 +196,51 @@ def findObj(image,objSize=150,tol=0,debug=0):
|
|
|
|
|
#tolShape = roudness tolerance in object roundness (not yet implemented)
|
|
|
|
|
|
|
|
|
|
from scipy.signal import convolve2d
|
|
|
|
|
#plt.ion()
|
|
|
|
|
plt.ion()
|
|
|
|
|
image=image[500:2500,1000:2500]
|
|
|
|
|
s=image.shape
|
|
|
|
|
#box=np.ones((1,objSize*3),dtype=np.float32)/500.
|
|
|
|
|
f=np.array([0.9595264, 0.9600567, 0.9608751, 0.9620137, 0.9634765, 0.9652363, 0.9672352, 0.9693891, 0.9715959, 0.9737464, 0.9757344, 0.9774676, 0.9788761, 0.9799176, 0.9805792, 0.9808776, 0.9808528, 0.9805624, 0.9800734, 0.9794550])
|
|
|
|
|
f=f*1000
|
|
|
|
|
f=f-f.mean()
|
|
|
|
|
|
|
|
|
|
#img2=ndi.filters.convolve1d(image,box.reshape(-1),0)
|
|
|
|
|
#img2=ndi.filters.convolve1d(img2,box.reshape(-1),1)
|
|
|
|
|
img2=ndi.filters.uniform_filter(np.float32(image),objSize*2)
|
|
|
|
|
m=image.mean();s=image.std()
|
|
|
|
|
ShowImage(image,vmin=-.85,vmax=-.99)
|
|
|
|
|
ShowImage(image,vmin=m-3*s,vmax=m+3*s)
|
|
|
|
|
ieq=imgEqualize(image)
|
|
|
|
|
ShowImage(ieq)
|
|
|
|
|
m=image.mean();s=image.std()
|
|
|
|
|
i2=(image-m)*(256./(3*s))+128.
|
|
|
|
|
i2[i2>255.]=255.
|
|
|
|
|
i2[i2<0.]=0.
|
|
|
|
|
i2=np.uint8(i2)
|
|
|
|
|
ShowImage(i2)
|
|
|
|
|
image=ndi.filters.gaussian_filter1d(image,sigma=5./3,truncate=3.,axis=0)
|
|
|
|
|
image=ndi.filters.gaussian_filter1d(image,sigma=5./3,truncate=3.,axis=1)
|
|
|
|
|
ShowImage(image,vmin=-.85,vmax=-.99)
|
|
|
|
|
|
|
|
|
|
if debug&32:
|
|
|
|
|
plt.imshow(image, interpolation="nearest", cmap='gray')
|
|
|
|
|
plt.figure()
|
|
|
|
|
plt.imshow(img2, interpolation="nearest", cmap='gray')
|
|
|
|
|
#plt.show()
|
|
|
|
|
w=np.where(img2>image)
|
|
|
|
|
img2[w]=image[w]
|
|
|
|
|
img3=image-img2
|
|
|
|
|
if debug&16:
|
|
|
|
|
plt.figure()
|
|
|
|
|
plt.imshow(img3, interpolation="nearest", cmap='gray')
|
|
|
|
|
#plt.show()
|
|
|
|
|
l=int(objSize/30)
|
|
|
|
|
if l>0:
|
|
|
|
|
img4=ndi.binary_fill_holes(img3, structure=np.ones((l,l)))
|
|
|
|
|
if debug&8:
|
|
|
|
|
plt.figure()
|
|
|
|
|
plt.imshow(img4, interpolation="nearest", cmap='gray')
|
|
|
|
|
#plt.show()
|
|
|
|
|
else:
|
|
|
|
|
img4=img3
|
|
|
|
|
img2=ndi.filters.convolve1d(image,f,0)
|
|
|
|
|
ShowImage(img2,vmin=-3,vmax=3)
|
|
|
|
|
|
|
|
|
|
img3=ndi.filters.convolve1d(image,f,1)
|
|
|
|
|
ShowImage(img3,vmin=-3,vmax=3)
|
|
|
|
|
img4=np.maximum(abs(img2),abs(img3))
|
|
|
|
|
ShowImage(img4,vmin=0,vmax=3)
|
|
|
|
|
|
|
|
|
|
m=image.mean();s=image.std()
|
|
|
|
|
img5=np.zeros(image.shape)
|
|
|
|
|
w=np.where(img4>1.5)
|
|
|
|
|
img5[w]=1
|
|
|
|
|
ShowImage(img5)
|
|
|
|
|
#imgStack.Run([image, img2,img3,img4,img5])
|
|
|
|
|
#w=np.where(img2>image*1.01)
|
|
|
|
|
#img2[:]=0
|
|
|
|
|
#img2[w]=1
|
|
|
|
|
l=int(objSize/30);l=5
|
|
|
|
|
img6=ndi.binary_fill_holes(img5, structure=np.ones((l,l)))
|
|
|
|
|
|
|
|
|
|
#img6 = ndi.binary_dilation(img5, iterations=2)
|
|
|
|
|
#img6 = ndi.binary_erosion(img5, iterations=2)
|
|
|
|
|
ShowImage(img6)
|
|
|
|
|
|
|
|
|
|
l=int(objSize/5)#=int(objSize/10)
|
|
|
|
|
if l>=3:
|
|
|
|
|
@@ -310,7 +283,7 @@ def findObj(image,objSize=150,tol=0,debug=0):
|
|
|
|
|
m00=m['m00']
|
|
|
|
|
m10=m['m10']
|
|
|
|
|
m01=m['m01']
|
|
|
|
|
print m00
|
|
|
|
|
#print m00
|
|
|
|
|
if m00>1000 and m00<7000:
|
|
|
|
|
ctr2[i,:]=(m10/m00,m01/m00)
|
|
|
|
|
i+=1
|
|
|
|
|
@@ -342,39 +315,180 @@ def genImg(shape,*args):
|
|
|
|
|
image += np.cos(freq_x * xx + freq_y * yy - phase)
|
|
|
|
|
return image
|
|
|
|
|
|
|
|
|
|
def phase_retrieval_intensity_tranport(image, mu, delta, I_in, M, pixel_size, R2):
|
|
|
|
|
'''calculates the projected thickness as in eq. 12 of Paganin et al, 2002, J. Microscopy,
|
|
|
|
|
from an image, the absoption coefficient mu (um-1), the real part of the deviation of the refractive index
|
|
|
|
|
from unity delta, the uniform intensity of the incident radiation I_in (ph/s/um2), the magnification of the
|
|
|
|
|
image from the point source illumination M, the pixel size (um), the propagation distance R2 (um).'''
|
|
|
|
|
F = np.fft.rfft2(image)
|
|
|
|
|
k_x = 1/(pixel_size*image.shape[0]) # is there a 2pi factor?
|
|
|
|
|
k_y = 1/(pixel_size*image.shape[1]) # is there a 2pi factor?
|
|
|
|
|
#print k_x,k_y
|
|
|
|
|
k_array = np.zeros((F.shape[0],F.shape[1]))
|
|
|
|
|
A = np.zeros((F.shape[0],F.shape[1]), dtype=np.complex128)
|
|
|
|
|
for i_k in range(k_array.shape[0]):
|
|
|
|
|
for j_k in range(k_array.shape[1]):
|
|
|
|
|
k_array[i_k,j_k] = np.sqrt((i_k * k_x)**2 + (j_k * k_y)**2)
|
|
|
|
|
A[i_k,j_k] = mu * F[i_k,j_k] / (I_in * (R2 * delta * k_array[i_k,j_k]**2 / M + mu))
|
|
|
|
|
Fm1 = np.fft.irfft2(A)
|
|
|
|
|
T = np.multiply(-1/mu, np.log(Fm1))
|
|
|
|
|
return T
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
#plt.ion()
|
|
|
|
|
#ffttest()
|
|
|
|
|
def testfftLoop():
|
|
|
|
|
plt.ioff()
|
|
|
|
|
for phi in np.arange(0.,180.,10.):
|
|
|
|
|
testfft(phi=phi)
|
|
|
|
|
plt.show()
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
image = ndimage.imread('/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/images/honeycomb.png')
|
|
|
|
|
image=-image
|
|
|
|
|
grid=findGrid(image,numPeak=2,limFrq=25,debug=2)
|
|
|
|
|
def testfft(phi=45.,frq=4.2,amp=1.,n=256.):
|
|
|
|
|
#find the main frequency and phase in 1-D
|
|
|
|
|
plt.figure(1)
|
|
|
|
|
d2r=np.pi/180.
|
|
|
|
|
x=np.arange(n)
|
|
|
|
|
phi=phi*d2r
|
|
|
|
|
y=amp*np.cos(frq*x/n*2.*np.pi-phi)
|
|
|
|
|
plt.plot(x,y,'y')
|
|
|
|
|
#y[np.where(y<-.5)]=0
|
|
|
|
|
#y*=np.hamming(n)
|
|
|
|
|
w=np.hanning(n)
|
|
|
|
|
plt.plot(x,w,'y')
|
|
|
|
|
y*=w
|
|
|
|
|
#y*=1.-np.cos(x/(n-1.)*2.*np.pi)
|
|
|
|
|
|
|
|
|
|
#y=[1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1]
|
|
|
|
|
plt.stem(x,y)
|
|
|
|
|
|
|
|
|
|
fy=np.fft.fft(y)
|
|
|
|
|
fya=np.abs(fy)
|
|
|
|
|
plt.figure(2)
|
|
|
|
|
plt.subplot(211)
|
|
|
|
|
plt.stem(x,fya)
|
|
|
|
|
plt.subplot(212)
|
|
|
|
|
plt.stem(x,np.angle(fy)/d2r)
|
|
|
|
|
print(np.angle(fy[frq])/d2r)
|
|
|
|
|
|
|
|
|
|
fya[0]=0
|
|
|
|
|
i=(fya.reshape(2,-1)[0,:]).argmax()
|
|
|
|
|
(vn,v0,vp)=fya[i-1:i+2]
|
|
|
|
|
frq_=i+(vn-vp)/(2.*(vp+vn-2*v0))
|
|
|
|
|
print('freq: %g phase %g %g %g'%((frq_,)+tuple(np.angle(fy[i-1:i+2])/d2r)))
|
|
|
|
|
|
|
|
|
|
#PHASE CALCULATION
|
|
|
|
|
plt.figure(1)
|
|
|
|
|
y=np.zeros(x.shape)
|
|
|
|
|
z=np.zeros(x.shape)
|
|
|
|
|
for ii in (i,i-1,i+1):
|
|
|
|
|
y+=np.abs(fy[ii])/n*np.cos(ii*x/n*2.*np.pi+np.angle(fy[ii]))
|
|
|
|
|
z+=np.abs(fy[ii])/n*np.sin(ii*x/n*2.*np.pi+np.angle(fy[ii]))
|
|
|
|
|
y*=2 #double because of conjugate part
|
|
|
|
|
z*=2 #double because of conjugate part
|
|
|
|
|
plt.plot(x,y,'r')
|
|
|
|
|
amp_=fya[i-1:i+2].sum()/n*2.
|
|
|
|
|
t=int(n/2)-1
|
|
|
|
|
#->phase: find maximum or where the sin is 0
|
|
|
|
|
w=np.arccos(y[t]/amp_)
|
|
|
|
|
if(z[t]<0): w=-w
|
|
|
|
|
print('amplitude %g, value at middle (%d) cos->%g sin->%g -> acos %g deg'%(amp_,t,y[t],z[t],w/d2r))
|
|
|
|
|
#rot angle at middle x=127 =frq_*t/n*2.*np.pi-phi_=w '%(amp_,t,y[t],phi_/d2r))
|
|
|
|
|
phi_=frq_*t/n*2.*np.pi-w
|
|
|
|
|
y=amp_*np.cos(frq_*x/n*2.*np.pi-phi_)
|
|
|
|
|
print('y[%d] %g'%(t,y[t]))
|
|
|
|
|
|
|
|
|
|
plt.plot(x,y,'g')
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
def testFindGrid():
|
|
|
|
|
plt.ioff()
|
|
|
|
|
imggrid=(
|
|
|
|
|
('grid_20180409_115332_45deg.png', 2,None),
|
|
|
|
|
('grid_20180409_115332.png', 2,None),
|
|
|
|
|
('honeycomb.png', 2,25),
|
|
|
|
|
('MS01_20180411_110544.png', 10,None),
|
|
|
|
|
('MS02_20180411_120354.png', 10,None),
|
|
|
|
|
('MS03_20180411_135524.png', 10,None),
|
|
|
|
|
('MS04_20180411_143045.png', 10,None),
|
|
|
|
|
('MS04_20180411_144239.png', 10,None),
|
|
|
|
|
)
|
|
|
|
|
for (file,minFrq,maxFrq) in imggrid:
|
|
|
|
|
image = ndimage.imread(os.path.join(basePath,file))
|
|
|
|
|
image=-image
|
|
|
|
|
grid=findGrid(image,minFrq=minFrq,maxFrq=maxFrq,numPeak=2)
|
|
|
|
|
plt.figure('grid');plt.imshow(image, interpolation="nearest", cmap='gray')
|
|
|
|
|
plotGrid(grid, image.shape)
|
|
|
|
|
plt.show()
|
|
|
|
|
|
|
|
|
|
def testFindObj():
|
|
|
|
|
plt.ioff()
|
|
|
|
|
imggrid=(
|
|
|
|
|
('grid_20180409_115332_45deg.png', 2,None),
|
|
|
|
|
)
|
|
|
|
|
for (file,p0,p1) in imggrid:
|
|
|
|
|
image = ndimage.imread(os.path.join(basePath,file))
|
|
|
|
|
image=-image
|
|
|
|
|
objPos=findObj(image,debug=0)
|
|
|
|
|
plt.figure('findObj');plt.imshow(image, interpolation="nearest", cmap='gray')
|
|
|
|
|
plt.plot(objPos[:,1],objPos[:,0],'r+',markeredgewidth=2, markersize=10)
|
|
|
|
|
plt.axis('image')
|
|
|
|
|
plt.show()
|
|
|
|
|
|
|
|
|
|
def testPhaseEnhance():
|
|
|
|
|
|
|
|
|
|
mu=0.001 # um-1, optimal value found is 0.001
|
|
|
|
|
phase_shift=-0.4 # rad/um, optimal value found is -1
|
|
|
|
|
E=18 # keV
|
|
|
|
|
wavelength=12.4/E/10000 # um
|
|
|
|
|
delta=-wavelength/(2*np.pi)*phase_shift
|
|
|
|
|
delta=4.38560287631e-06
|
|
|
|
|
M=1
|
|
|
|
|
R2=19*1e4 # um
|
|
|
|
|
pixel_size=0.325 # um
|
|
|
|
|
flux=1e12 # ph/s
|
|
|
|
|
for fn in ('lyso1_scan_18keV_190mm_MosaicJ_noblend_crop.tif',
|
|
|
|
|
'PepT2_scan_18keV_190mm_MosaicJ_noblend_crop_FFT40.tif',
|
|
|
|
|
'SiN_lysoS1_scan_18keV_190mm_MosaicJ_noblend_crop_FFT40.tif',
|
|
|
|
|
'SiN_PepT2_scan_18keV_190mm_MosaicJ_noblend_crop.tif',):
|
|
|
|
|
img = ndimage.imread(os.path.join(basePath,fn))
|
|
|
|
|
FOV_pix = img.shape
|
|
|
|
|
FOV_um = (FOV_pix[0] * pixel_size, FOV_pix[1] * pixel_size)
|
|
|
|
|
I_in = flux / (FOV_um[0] * FOV_um[1]) # ph/s/um2
|
|
|
|
|
phase_image = phase_retrieval_intensity_tranport(img, mu, delta, I_in, M, pixel_size, R2)
|
|
|
|
|
phase_image_flipped = phase_retrieval_intensity_tranport(np.fliplr(img), mu, delta, I_in, M, pixel_size, R2)
|
|
|
|
|
added_image = np.add(phase_image,np.fliplr(phase_image_flipped))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m=img.mean();s=img.std()
|
|
|
|
|
ShowImage(img, title=fn+' raw', vmin=m-3*s, vmax=m+3*s)
|
|
|
|
|
m=added_image.mean();s=added_image.std()
|
|
|
|
|
ShowImage(added_image, title=fn+' phase retrival', vmin=m-3*s, vmax=m+3*s)
|
|
|
|
|
plt.show()
|
|
|
|
|
|
|
|
|
|
basePath='/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/images/'
|
|
|
|
|
#testfftLoop()
|
|
|
|
|
testFindGrid()
|
|
|
|
|
#testFindObj()
|
|
|
|
|
#testPhaseEnhance()
|
|
|
|
|
exit(0)
|
|
|
|
|
|
|
|
|
|
plt.ion()
|
|
|
|
|
#image = ndimage.imread(os.path.join(basePath, 'lyso1_scan_18keV_190mm_MosaicJ_noblend_crop.tif'))
|
|
|
|
|
image = ndimage.imread(os.path.join(basePath, 'lyso1_scan_18keV_190mm_MosaicJ_noblend_crop.tif'))
|
|
|
|
|
#image = ndimage.imread(os.path.join(basePath, 'grid_20180409_115332.png'))
|
|
|
|
|
image = -image
|
|
|
|
|
#plt.figure('input');
|
|
|
|
|
#plt.imshow(image, interpolation="nearest", cmap='gray')
|
|
|
|
|
#sbl=ndi.sobel(image)
|
|
|
|
|
#plt.figure('sobel');
|
|
|
|
|
#plt.imshow(sbl, interpolation="nearest", cmap='gray')
|
|
|
|
|
objPos = findObj(image, objSize=50,debug=255)
|
|
|
|
|
plt.figure('findObj');
|
|
|
|
|
plt.imshow(image, interpolation="nearest", cmap='gray')
|
|
|
|
|
plotGrid(grid,image.shape)
|
|
|
|
|
plt.plot(objPos[:, 1], objPos[:, 0], 'r+', markeredgewidth=2, markersize=10)
|
|
|
|
|
plt.axis('image')
|
|
|
|
|
plt.show()
|
|
|
|
|
|
|
|
|
|
image = ndimage.imread('/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/images/grid_20180409_115332.png')
|
|
|
|
|
image=-image
|
|
|
|
|
grid=findGrid(image,numPeak=2,debug=2)
|
|
|
|
|
plt.imshow(image, interpolation="nearest", cmap='gray')
|
|
|
|
|
plotGrid(grid,image.shape)
|
|
|
|
|
plt.show()
|
|
|
|
|
|
|
|
|
|
image = ndimage.imread('/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/images/grid_20180409_115332_45deg.png')
|
|
|
|
|
image=-image
|
|
|
|
|
grid=findGrid(image,numPeak=2,debug=2)
|
|
|
|
|
plt.imshow(image, interpolation="nearest", cmap='gray')
|
|
|
|
|
plotGrid(grid,image.shape)
|
|
|
|
|
plt.show()
|
|
|
|
|
|
|
|
|
|
objPos=findObj(image,debug=1)
|
|
|
|
|
plt.show()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
d2r=np.pi/180.
|
|
|
|
|
#for phi in np.arange(0.,180.,10.):
|
|
|
|
|
# image = genImg((600, 800), (4.5, .2, phi*d2r))
|
|
|
|
|
# plt.show()
|
|
|
|
|
#d2r=np.pi/180.
|
|
|
|
|
#image=genImg((600,800),(4.,1.0,10.*d2r))
|
|
|
|
|
#image=genImg((600,800),(4.5,-3.2,70.*d2r))
|
|
|
|
|
#image=genImg((600,800),(-4.5,3.2,290.*d2r)) #same image
|
|
|
|
|
@@ -383,7 +497,10 @@ if __name__ == '__main__':
|
|
|
|
|
|
|
|
|
|
#for v in np.arange(0,2,.3):
|
|
|
|
|
# image=genImg((600,800),(8,.2+v,40.*d2r),(.4,5.2,30.*d2r))
|
|
|
|
|
# grid=findGrid(image,numPeak=2,debug=2)
|
|
|
|
|
# #image = genImg((600, 800), (.4,5.2,30.))
|
|
|
|
|
# plt.figure(10);plt.cla()
|
|
|
|
|
# plt.imshow(image)
|
|
|
|
|
# grid=findGrid(image,numPeak=2,debug=255)
|
|
|
|
|
# plt.figure(1);plt.cla()
|
|
|
|
|
# plt.imshow(image, interpolation="nearest", cmap='gray')
|
|
|
|
|
# plotGrid(grid,image.shape)
|
|
|
|
|
|