2017-03-02 1 views
0

Bonjour J'essaye d'adapter un psf à une image. L'arrière-plan devrait être aproximated par des polynômes d'ordre inférieur. Si je prends juste une constante, il fonctionne très bien:Mise en place de l'ajustement

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') 

Maintenant, j'ai la question de savoir comment définir les x et y est pour mes polynômes:

#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 et y sont obviuosly les indices i, j de ma matrice d'image, mais comment puis-je dire que ma routine d'ajustement?

+1

Vous cherchez quelque chose comme 'np.ogrid [: image.Forme [0],: image.shape [1]] '? –

+0

np.ogrid se sent bien .... Ce que j'ai fait: '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])) '. Est-ce correctement implémenté? Le code compile mais maintenant mon installateur ne trouve pas de solution (ce qui peut être une difficulté numérique mais je veux exclure que quelque chose ne va pas avec ma fonction.) Le modèle que je veux ressemble à: 'image - (A * psf + c1 * x + c2 * y + c0) ' – Sebastiano1991

+0

Je suis maintenant assez sûr que np.ogrid a fait l'affaire.Merci de la fonction très utile! – Sebastiano1991

Répondre

0

Comme Paul Panzer mentionné dans les commentaires, une façon de résoudre c'est à l'aide 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')