Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ss16:center_image
# -*- 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
ss16/center_image.txt · Zuletzt geändert: 2016/09/15 15:03 von henrikfrenzel