Calculo de Error

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 7

In [1]:  # Universidad Nacional de Loja

#Descompresión de Métodos Intuitivos


# Nombre : Diego Iñiguez
# Ciclo: 6to 'A'

In [2]:  import numpy as np


matriz_original = np.random.randint(256 , size=(10,10))

In [3]:  print(matriz_original)

[[220 158 119 174 51 191 197 229 63 73]


[ 51 78 209 95 108 64 31 104 173 24]
[243 65 75 153 32 52 56 104 239 161]
[211 191 90 54 20 25 17 84 42 127]
[193 83 87 204 180 58 28 22 231 61]
[167 134 193 50 150 83 238 18 172 193]
[117 238 193 146 170 32 16 124 90 9]
[ 9 146 101 117 77 57 56 44 52 26]
[ 83 14 100 122 223 72 214 42 122 130]
[112 70 33 51 242 52 252 58 209 37]]
In [4]:  #Comprension
cont = 0
cont1 = 0
promedios =[]
while cont < matriz_original.shape[0]:
while cont1 < matriz_original.shape[1]:
sub_array = matriz_original[cont:cont+2,cont1:cont1+2]
prom =0
for fila in sub_array:
for elemento in fila:
prom+=elemento
prom = int(prom/(sub_array.shape[0]*sub_array.shape[1]))
promedios.append(prom)
cont1+=2
cont1 = 0
cont+=2
promedios_mat_orig=(np.asarray(promedios).reshape(5,5))
promedios_mat_orig

Out[4]: array([[126, 149, 103, 140, 83],


[177, 93, 32, 65, 142],
[144, 133, 117, 76, 164],
[127, 139, 84, 60, 44],
[ 69, 76, 147, 141, 124]])
In [5]:  # Descomprension
cant=0 # Contador de filas
cant1=0 # Contador de elementos
recons=[] # Matriz_original
reconstr=[] # Matriz 2
while cant<promedios_mat_orig.shape[0]: # Iteracion de la matriz comprimida
while cant1< promedios_mat_orig.shape[1]: # Iteracion de elemntos de la matriz comprimida
sub = promedios_mat_orig[cant,cant1] # Toma valor de fila
recons.append(sub) # Agrega un valor en la matriz 1
recons.append(sub) # Repite el valor de la matriz 1
cant1+=1
cant1=0
cant+=1
reconst=(np.asarray(recons).reshape(5,10)) # Matriz con elementos repetidos dos veces
for i in range (reconst.shape[0]): # Cada elemento de la matriz creada
a=reconst[i] # Selecciona una fila
reconstr.append(a) # le agrega a la matriz 2
reconstr.append(a) # Se repite la fila anterior en la matriz
i+=1
reconstruccion=(np.asarray(reconstr).reshape(10,10)) # Matriz reconstruida
print(reconstruccion)

[[126 126 149 149 103 103 140 140 83 83]


[126 126 149 149 103 103 140 140 83 83]
[177 177 93 93 32 32 65 65 142 142]
[177 177 93 93 32 32 65 65 142 142]
[144 144 133 133 117 117 76 76 164 164]
[144 144 133 133 117 117 76 76 164 164]
[127 127 139 139 84 84 60 60 44 44]
[127 127 139 139 84 84 60 60 44 44]
[ 69 69 76 76 147 147 141 141 124 124]
[ 69 69 76 76 147 147 141 141 124 124]]
In [6]:  # Calculo de error MSE & RMSE
c=0
d=0
for i in range (matriz_original.shape[1]): # fila de la matriz original
#print(matriz_original.shape[0])
for j in range(matriz_original.shape[0]): # iteracion para la matriz original y de la reconstruccion
h = matriz_original[i,j]
f = reconstruccion[i,j]
#print(f)
e = h-f
c = e**2
d+= c
j+=1
j=0
i=+1
MSE = d/(matriz_original.shape[0]*matriz_original.shape[1]) # Calculo MSE
print('El valor del error MSE es' ,MSE)
RMSE = MSE**(0.5) # Calculo de RMSE
print('El valor del error RMSE es' ,RMSE)

El valor del error MSE es 3491.08


El valor del error RMSE es 59.08536197739674
In [7]:  #Calculo de error PSNR
import math
maximfilas=[]
for j in range (matriz_original.shape[0]):
qa=np.asarray(matriz_original[j])
qqa=max(qa) # escoje el maximo valor de la filas
#print(qqa)
j+=1
maximfilas.append(qqa) # se genera un vector con los maximo valores
maxi=max(maximfilas)
#print(maxi)
PSNR = 20*(math.log10(maxi/RMSE)) # se calcula el error PSNR
print('El valor del error PSNR es' ,PSNR)

El valor del error PSNR es 12.598412805402397

In [8]:  #Calculo de error SNR


a=0
for i in range (matriz_original.shape[1]):
for j in range(matriz_original.shape[0]):
c= matriz_original[i,j]
e=c**2
a+=e
j+=a
j=0
i=+1
b=a/(matriz_original.shape[0]*matriz_original.shape[1])
SNR = 20*(math.log10((b **0.5/RMSE))) # Calculo del error RMSE
print('El valor del error SNR es' ,SNR)

El valor del error SNR es 6.926933613909822


In [9]:  # Calculo de la diferencia y la imagen diferencia con a=1
i= 0
j= 0
X=[]
x1=[]
for i in range (matriz_original.shape[1]):
for j in range(matriz_original.shape[0]):
pi=matriz_original[i,j]
qi=reconstruccion[i,j]
e=pi-qi
#print(e)
diff=e # Diferencia entre la matriz original y la reconstruida
b=128 # valor medio de un pixel
ee=e+b
#print(ee)
a=1
X.append(ee*a)
x1.append(diff)
j+=1
j=0
i=+1
imgdif=(np.asarray(X).reshape(10,10))
x2=((np.asarray(x1).reshape(10,10)))
print('Imagene diferente con a=1 es ',imgdif)
print('Diferencia entre ambas imagenes',x2)

Imagene diferente con a=1 es [[222 160 98 153 76 216 185 217 108 118]
[ 53 80 188 74 133 89 19 92 218 69]
[194 16 110 188 128 148 119 167 225 147]
[162 142 125 89 116 121 80 147 28 113]
[177 67 82 199 191 69 80 74 195 25]
[151 118 188 45 161 94 290 70 136 157]
[118 239 182 135 214 76 84 192 174 93]
[ 10 147 90 106 121 101 124 112 136 110]
[142 73 152 174 204 53 201 29 126 134]
[171 129 85 103 223 33 239 45 213 41]]
Diferencia entre ambas imagenes [[ 94 32 -30 25 -52 88 57 89 -20 -10]
[ -75 -48 60 -54 5 -39 -109 -36 90 -59]
[ 66 -112 -18 60 0 20 -9 39 97 19]
[ 34 14 -3 -39 -12 -7 -48 19 -100 -15]
[ 49 -61 -46 71 63 -59 -48 -54 67 -103]
[ 23 -10 60 -83 33 -34 162 -58 8 29]
[ -10 111 54 7 86 -52 -44 64 46 -35]
[-118 19 -38 -22 -7 -27 -4 -16 8 -18]
[ 14 -55 24 46 76 -75 73 -99 -2 6]
[ 43 1 -43 -25 95 -95 111 -83 85 -87]]

In [ ]: 

También podría gustarte