2017-03-02 10 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

探しています: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を使用することです:あなたは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')