2017-03-02 39 views
0

你好,我正在試圖適合一個圖像的psf。背景應該用低階多項式來近似。如果我只是把一個常數,它工作正常:適合執行

def fitter(image, trueImage,psf,intensity): 
    p0 = [intensity]    
    p0.append(np.amin(trueImage)*4**2) 
    meritFun = lambda p: np.ravel(image-(p[0]*psf+p[1])) 
    p = least_squares(meritFun,p0,method='trf') 

現在我有一個如何來改變x的問題和y對我的多項式:

#Does not work! 
def fitter(image, trueImage,psf,intensity): 
    p0 = [intensity]    
    p0.append(np.amin(trueImage)*4**2) 
    p0.append(1) 
    p0.append(1) #some clever initial guess 
    meritFun = lambda p: np.ravel(image-(p[0]*psf+p[1]+p[2]*x+p[3]*y)) 
    p = least_squares(meritFun,p0,method='trf') 

x和y是obviuosly指數,j我的圖像陣列,但我怎麼知道我的適合的例程?

+1

您是否在尋找像'np.ogrid [:image.shape [0]: image.shape [1]]'? –

+0

np.ogrid感覺不錯....我做的:'meritFun = lambda p:np.ravel(image - (p [0] * psf + p [1] * np.ogrid [:image.shape [0] ] + p [2] * np.ogrid [:image.shape [1]] + p [3]))'。這是否正確實施?代碼編譯,但現在我的鉗工沒有找到解決方案(這可能是一個數值難題,但我想排除我的函數有什麼問題。再次我想要的模型看起來像:'image - (A * psf + c1 * x + c2 * y + c0)' – Sebastiano1991

+0

我現在很確定np.ogrid做了這個把戲,謝謝你非常有用的功能! – Sebastiano1991

回答

0

正如保羅裝甲在評論中提到的,解決這個的一個方法是通過使用np.ogrid:

def fitter(image, trueImage,psf,intensity): 
    x = np.ogrid[:image.shape[0]] 
    y = np.ogrid[:image.shape[1]] 
    p0 = [intensity]    
    p0.append(np.amin(trueImage)*4**2) 
    p0.append(0) 
    p0.append(0) 
    meritFun = lambda p: np.ravel(image-(p[0]*psf+p[1]+p[2]*x+p[3]*y)) 
    p = least_squares(meritFun,p0,method='trf')