2017-04-23 23 views
0

https://fsix.github.io/mnist/Deskewing.htmlに見つかりました。MNISTデータセットの画像をデスキューする方法。それは動作するようです。私の問題は、各ピクセルを傾き補正する前に、0と1の間の値があることです。しかし、画像を傾き補正した後では、値は0と1の間ではありません。それらは負数で、1よりも大きくなる可能性があります。これをどのように修正できますか?ここデスキューMNIST画像

コードである:

def moments(image): 
    c0,c1 = np.mgrid[:image.shape[0],:image.shape[1]] # A trick in numPy to create a mesh grid 
    totalImage = np.sum(image) #sum of pixels 
    m0 = np.sum(c0*image)/totalImage #mu_x 
    m1 = np.sum(c1*image)/totalImage #mu_y 
    m00 = np.sum((c0-m0)**2*image)/totalImage #var(x) 
    m11 = np.sum((c1-m1)**2*image)/totalImage #var(y) 
    m01 = np.sum((c0-m0)*(c1-m1)*image)/totalImage #covariance(x,y) 
    mu_vector = np.array([m0,m1]) # Notice that these are \mu_x, \mu_y respectively 
    covariance_matrix = np.array([[m00,m01],[m01,m11]]) # Do you see a similarity between the covariance matrix 
    return mu_vector, covariance_matrix 

def deskew(image): 
    c,v = moments(image) 
    alpha = v[0,1]/v[0,0] 
    affine = np.array([[1,0],[alpha,1]]) 
    ocenter = np.array(image.shape)/2.0 
    offset = c-np.dot(affine,ocenter) 
    return interpolation.affine_transform(image,affine,offset=offset) 

答えて

1

ちょうどスキュー処理後0と1の間の範囲に画像を正規化することができます。

img = deskew(img) 
img = (img - img.min())/(img.max() - img.min()) 

this questionを参照してください。

deskew機能でこれを組み込むには、あなたはこのようにそれを書き換えることができます:

def deskew(image): 
    c,v = moments(image) 
    alpha = v[0,1]/v[0,0] 
    affine = np.array([[1,0],[alpha,1]]) 
    ocenter = np.array(image.shape)/2.0 
    offset = c-np.dot(affine,ocenter) 
    img = interpolation.affine_transform(image,affine,offset=offset) 
    return (img - img.min())/(img.max() - img.min()) 
関連する問題