Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ss16:center_image

Dies ist eine alte Version des Dokuments!


</code> # -*- 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("C:\\Users\\vic\\Documents\\geany-dateien\\Python\\scikit_learn_data\\mldata\datensaetze-zsm-daten-center.p.npy")
  #daten=misc.imread('testbild1.png', 'F')
  #mat=scipy.io.loadmat('C:\\Users\\vic\\Documents\\geany-dateien\\Python\\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

<code python>

ss16/center_image.1473944451.txt.gz · Zuletzt geändert: 2016/09/15 15:00 von henrikfrenzel