# -*- coding: utf8 -*- from __future__ import division from sklearn.neighbors import NearestNeighbors import numpy as np import scipy.io import random import time from sklearn import neighbors, svm from skimage.transform import rescale from scipy import misc import bildeinlesen as bl def calc_center(bild): '''berechnet Schwerpunkt des Bilds''' h,w=bild.shape rc, cc = 0, 0 for i in range(h): for j in range(w): rc += i*bild[i,j] cc += j*bild[i,j] summe=np.sum(bild) return rc/summe, cc/summe def center_image(bild, eps=0.01, image_size=28, box_size=20): '''verschiebt das Bild so, dass der Schwerpunkt in der Mitte liegt. Anschließend wird reskaliert, so dass das sichtbare Bild (Grauwert > eps) in eine size x size Box passt. ''' r_indices,c_indices = np.where(bild>eps) # row, column indices of # interesting points r_dist = max(r_indices)-min(r_indices)+1 c_dist = max(c_indices) - min(c_indices)+1 bild = rescale(bild,min(box_size/r_dist,box_size/c_dist)) h,w=bild.shape neu=np.zeros((3*image_size,3*image_size)) rc, cc = calc_center(bild) # row, column of center of mass rc = int(round(rc)) cc = int(round(cc)) neu[image_size+image_size//2-rc:image_size+image_size//2-rc+h, image_size+image_size//2-cc:image_size+image_size//2-cc+w] = bild return neu[image_size:2*image_size, image_size:2*image_size] if __name__=="__main__": import matplotlib.pyplot as plt #daten=np.load("/[…]/[…]/scikit_learn_data/mldata/datensaetze-zsm-daten-center.p.npy") #daten=misc.imread('testbild1.png', 'F') #mat=scipy.io.loadmat('/[…]/[…]/scikit_learn_data/mldata/mnist-original-norm.mat') #daten=mat['data'].T daten1=bl.bildlesen() daten1= daten1.daten daten= np.zeros(shape=(2,784)) daten[0]=daten1 daten[1]=daten1 print daten.shape rcs=[] ccs=[] for bild in daten: print bild.shape bild=bild.reshape((28,28)) rc,cc=calc_center(bild) print rc,cc bild_neu = center_image(bild) plt.subplot(1,2,1) plt.imshow(bild) plt.subplot(1,2,2) plt.imshow(bild_neu) plt.show() rc,cc=calc_center(bild_neu) print rc,cc