def bessel_rotate(image_org, theta, mask = False, smooth = False, mode = 1): image = image_org.copy() if(mask): image = circle_mask(image, smooth, mode) Ib = np.zeros(image.shape) theta = to_radian(theta) s = (image.shape[0]-1)/2. x = np.linspace(-s, s, image.shape[1]) y = np.linspace(-s, s, image.shape[0]) xx, yy = np.meshgrid(x,y) rM = np.array([[np.cos(theta), -np.sin(theta)],[np.sin(theta), np.cos(theta)]]) for i in np.arange(-s,s+1): for j in np.arange(-s,s+1): new_x = np.dot(rM, np.array([i,j])) if(np.sum(abs(np.round(new_x,5))>s)): Ib[i+s,j+s] = 0 else: R = np.sqrt((xx-new_x[1])**2 + (yy-new_x[0])**2) mask_R = (R == 0) Bess = np.zeros(R.shape) Bess[~mask_R] = scipy.special.j1(np.pi*R[~mask_R])*hann(R[~mask_R],image.shape[0]*mode)/(np.pi*R[~mask_R]) Bess[mask_R] = 0.5 Bess = Bess/np.sum(Bess) tmp = image*Bess Ib[i+s,j+s] = np.sum(tmp) #np.round(np.sum(tmp),10) return Ib
def bessel_rotate_halton(image, theta, x1, y1): Ib = [] theta = to_radian(theta) s = (image.shape[0]-1)/2. rM = np.array([[np.cos(theta), -np.sin(theta)],[np.sin(theta), np.cos(theta)]]) x = [] for i in np.arange(-s,s+1): for j in np.arange(-s,s+1): x.append(np.dot(rM, np.array([i,j]))) x = np.array(x) for idx in xrange(len(x1)): R = np.sqrt((x[:,1]-x1[idx])**2 + (x[:,0]-y1[idx])**2) mask_R = (R == 0) Bess = np.zeros(R.shape) Bess[~mask_R] = scipy.special.j1(np.pi*R[~mask_R])*hann(R[~mask_R],image.shape[0])/(np.pi*R[~mask_R]) #Bess[~mask_R] = scipy.special.j1(np.pi*R[~mask_R])/(np.pi*R[~mask_R]) Bess[mask_R] = 0.5 Bess = Bess/np.sum(Bess) tmp = image.ravel()*Bess Ib.append(np.sum(tmp)) return np.array(Ib)