68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
|
import numpy as np
|
||
|
import pyfits
|
||
|
import matplotlib.pyplot as plt
|
||
|
import skimage
|
||
|
from skimage.feature import blob_dog, blob_doh, blob_log, canny
|
||
|
from skimage.color import rgb2gray
|
||
|
from skimage.feature import corner_harris, corner_subpix, corner_peaks
|
||
|
from skimage.segmentation import slic
|
||
|
from skimage.filters import sobel
|
||
|
from scipy.signal import convolve2d
|
||
|
|
||
|
from scipy.ndimage import gaussian_filter
|
||
|
from skimage import measure
|
||
|
from scipy.optimize import curve_fit
|
||
|
import matplotlib.ticker as mtick
|
||
|
from scipy.signal import savgol_filter
|
||
|
|
||
|
import scipy
|
||
|
from scipy import signal
|
||
|
from scipy.signal import argrelextrema
|
||
|
|
||
|
|
||
|
import cv2
|
||
|
|
||
|
## this function will get the values along each circle. We start by defining a range of angles, computing the
|
||
|
#coordinates and then finding the values at the nearest pixel position.
|
||
|
def get_line(star,theta,radius,x_c,y_c):
|
||
|
#theta = np.linspace(0,2*np.pi,N_theta)
|
||
|
x = x_c + radius*np.cos(theta)
|
||
|
y = y_c + radius*np.sin(theta)
|
||
|
x = np.round(x)
|
||
|
y = np.round(y)
|
||
|
x = x.astype(int)
|
||
|
y = y.astype(int)
|
||
|
I = star[y,x]
|
||
|
|
||
|
return I,x,y
|
||
|
|
||
|
## a function to compute the frequecy for a certain radius
|
||
|
def get_radius(freq):
|
||
|
N_p = 36
|
||
|
r = N_p/(2*np.pi*freq)
|
||
|
return r
|
||
|
|
||
|
## a function to compute the radius for a certain frequency
|
||
|
def get_freq(radius):
|
||
|
N_p = 36
|
||
|
freq = N_p/(2*np.pi*radius)
|
||
|
return freq
|
||
|
|
||
|
def sinusoidal(theta,a,b,c):
|
||
|
N_p = 36
|
||
|
y = a + b*np.sin(N_p*theta) + c*np.cos(N_p*theta)
|
||
|
return y
|
||
|
|
||
|
def fit_sinusoid(I,theta,p0):
|
||
|
popt, pcov = curve_fit(sinusoidal,theta,I,p0)
|
||
|
a = popt[0]
|
||
|
b = popt[1]
|
||
|
c = popt[2]
|
||
|
modulation = np.sqrt(b**2 + c**2)/a
|
||
|
return modulation, popt
|
||
|
|
||
|
def Gaussian(x,a,x0,sigma):
|
||
|
y = a*(1/(np.sqrt(2*np.pi)*sigma))*np.exp(-(x-x0)**2/(2*sigma**2))
|
||
|
#y = np.exp(-2*(np.pi**2)*((x-x0)**2)*sigma**2)
|
||
|
return y
|