2017-07-07 3 views
0

J'essaie de déplacer un noyau autour d'un tableau d'une image pour créer un filtre gaussien. Je reçois un IndexError, et Idk pourquoi. C'est le code: erreur à la ligne 34Index hors limites/IndexError

import numpy as np 
import scipy 
from scipy import misc 
import matplotlib.pyplot as plt 

imagen_nueva = np.empty((1931, 1282)) 

imagen = scipy.misc.imread("C:\\Users\\Reymi\\Downloads\\imagen.png") 

imagen_real = scipy.pad(array=imagen, pad_width=[1, 1], mode='constant', 
constant_values=0) 

(dim_x,dim_y)=np.shape(imagen_real) 
print((dim_x,dim_y)) 

ker1 = np.array([[1/16, 1/8, 1/16], 
      [1/8, 1/4, 1/8], 
      [1/16, 1/8, 1/16]]) 

def multiplicar_entero(): 
    global imagen_nueva 
    for i in range(1,dim_x+1): 
    for j in range(1,dim_y+1): 
     matriz_elemento = np.array([[imagen_real[i + 1, j - 1], 
imagen_real[i + 1, j], imagen_real[i + 1, j - 1]], 
         [imagen_real[i, j - 1], imagen_real[i, j], 
imagen_real[i, j + 1]], 
         [imagen_real[i - 1, j - 1], imagen_real[i - 1, j], 
imagen_real[i - 1, j + 1]]]) 
     valor = np.sum(matriz_elemento*ker1) 
     imagen_real[i, j] = valor 
     imagen_nueva = np.append(imagen[i, j], (1931, 1282)) 

Comme pour la matrice confuse avec is, et js. C'est la matrice 3x3 de chaque élément du tableau. Je sais que ce n'est peut-être pas la meilleure façon de le faire

+2

Vos lignes ne sont pas numérotées et nous ne savons pas l'erreur ... vous pouvez modifier cette erreur dans? –

+1

python 2 ou python 3? –

+1

Dans 'multiplicar_entero()', l'indentation de la deuxième boucle 'for' n'est pas correcte et je me demande si c'est correct par la suite ... –

Répondre

1

Avec quelques modifications mineures à votre code, telles que la correction de l'indentation et l'utilisation d'une image open source, je n'obtiens aucune erreur. Donc, cela ressemble à une erreur d'indentation.

Voir le code de travail ci-dessous:

import numpy as np 
import scipy 
from scipy import misc 
import matplotlib.pyplot as plt 

imagen_nueva = np.empty((1931, 1282)) 

imagen = scipy.resize(misc.ascent(), (1931, 1282)) 

imagen_real = scipy.pad(array=imagen, pad_width=[1, 1], mode='constant', 
         constant_values=0) 

(dim_x, dim_y) = np.shape(imagen_real) 
print((dim_x, dim_y)) 

ker1 = np.array([[1/16, 1/8, 1/16], 
       [1/8, 1/4, 1/8], 
       [1/16, 1/8, 1/16]]) 


def multiplicar_entero(): 
    global imagen_nueva 
    for i in range(1, dim_x + 1): 
     for j in range(1, dim_y + 1): 
      matriz_elemento = np.array([[imagen_real[i + 1, j - 1], imagen_real[i + 1, j], imagen_real[i + 1, j - 1]], 
             [imagen_real[i, j - 1], imagen_real[i, j], imagen_real[i, j + 1]], 
             [imagen_real[i - 1, j - 1], imagen_real[i - 1, j], imagen_real[i - 1, j + 1]]]) 

      valor = np.sum(matriz_elemento*ker1) 
      imagen_real[i, j] = valor 
      imagen_nueva = np.append(imagen[i, j], (1931, 1282))