2017-03-02 42 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')