MTF的Python脚本

MTF的Python脚本,python,image-processing,computer-vision,Python,Image Processing,Computer Vision,我想用python实现一个MTF(调制传递函数)脚本。对于这个脚本,我希望传递一个图像作为参数,并获得MTF值作为结果 此MTF值将用于量化项目中图像的清晰度。 下面是我用来作为开发脚本参考的一些链接- [目前我正在使用此链接开发纸条] MTF的定义:MTF定义为线扩展函数的FFT 线扩展函数定义为边扩展函数的导数。边缘扩展函数是沿边缘的值,理想情况下是刀口测试目标 def ESF(path): img=cv2.imread(path) img=cv2.cvtColor(img

我想用python实现一个MTF(调制传递函数)脚本。对于这个脚本,我希望传递一个图像作为参数,并获得MTF值作为结果

此MTF值将用于量化项目中图像的清晰度。 下面是我用来作为开发脚本参考的一些链接- [目前我正在使用此链接开发纸条]

MTF的定义:MTF定义为线扩展函数的FFT

线扩展函数定义为边扩展函数的导数。边缘扩展函数是沿边缘的值,理想情况下是刀口测试目标

def ESF(path):
    img=cv2.imread(path)
    img=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    #m_out=0.299*img[:,:,0]+0.589*img[:,:,1]+0.114*img[:,:,2]
    #x=m_out[100,:]
    x=img
    mu=np.sum(x)/(x.shape[0])
    tmp=(x[:]-mu)**2
    sigma=np.sqrt(np.sum(tmp)/(x.shape[0]))
    edge_function=(x[:]-mu)/sigma
    #print(edge_function)
    edge_function=edge_function[::3]
    #lsf=edge_function[:-2]-edge_function[2:]
    lsf=np.abs(np.diff(edge_function))
    mtf=abs(np.fft.fft(lsf))
    print(mtf)
    #print(np.max(mtf))
    mtf=mtf[:]/np.max(mtf)
    mtf=mtf[:len(mtf)//2]
    mtf=np.arange(mtf.shape[0]*mtf.shape[1]).reshape(mtf.shape[0],mtf.shape[1])
    ix=np.arange(mtf.shape[0])/(mtf.shape[0])
    mtf_poly=np.polyfit(ix, mtf,6)
    #print(mtf_poly)
    #mtf_poly=np.squeeze(mtf_poly)
    #print(mtf.shape[0])
    #print(mtf.shape[1])
    #poly=np.poly1d(mtf_poly)
    #print(poly)
    plt.figure()
    plt.title("MTF")
    plt.xlabel(r'Frecuency $[cycles/pixel]$') ; plt.ylabel('mtf')
    p= plt.plot(mtf,'-or')
    #ll = plt.plot(poly(ix))
    #plt.legend([p,ll],["MTF values","polynomial fit"])
    plt.grid()
    #plt.show()
目前我在评估线路时出错

poly=np.poly1d(mtf_poly)
对我做错的事有任何帮助。另外,如果我正朝着正确的方向寻找MTF,请有人告诉我


TIA

你好。有答案吗???嗨。有答案吗???