Está en la página 1de 4

In [57]:

#Nombre: Edison Stalin Salinas Nalvay


#Curso: 6to "A"
import numpy as np
Matriz=np.random.randint(256, size=(12,12)) # genera una matriz de 12*12

In [58]:

print(Matriz)

[[ 60 103 122 182 164 15 167 32 15 139 18 225]


[111 235 104 230 27 248 52 246 55 62 170 15]
[159 169 224 63 76 154 142 115 249 178 124 109]
[211 180 121 244 5 252 48 86 154 235 189 31]
[130 172 6 89 18 185 67 133 45 144 142 48]
[159 251 19 163 47 81 5 13 117 131 239 177]
[221 10 243 23 163 115 12 0 126 171 236 212]
[ 66 191 111 62 254 228 87 174 198 74 242 235]
[116 237 21 96 81 64 10 189 213 59 216 16]
[201 215 127 11 77 101 160 244 48 204 0 246]
[ 98 199 248 202 31 168 190 44 226 250 129 73]
[ 60 168 226 72 20 183 233 51 133 214 87 1]]

In [59]:
#Compresion
contador = 0
contador1 = 0
promedios=[]
while contador < Matriz.shape[0]:
while contador1 < Matriz.shape[1]:
sub_array = Matriz[contador:contador+2,contador1: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)
contador1+=2
contador1=0
contador+=2
proms=(np.asarray(promedios).reshape(6,6))
proms

Out[59]:

array([[116, 114, 103, 99, 87, 107],


[146, 139, 134, 138, 158, 113],
[107, 93, 99, 105, 130, 151],
[143, 148, 157, 147, 186, 231],
[123, 109, 120, 133, 125, 119],
[137, 139, 127, 135, 139, 72]])

In [60]:
#Descompresion
cant = 0 # es el contador de filas
cant1 = 0 # es el contador de los elements por fila
recons = [] #matriz 1
reconstr = [] #matriz 2
while cant < proms.shape[0]: #iteracin entre filas de la matriz comprimida
while cant1 < proms.shape[1]: #iteracion de los elementos de las filas de la matri
s comprimida
sub = proms[cant,cant1] #toma un valor de la fila
recons.append(sub) #agrega el valor a la matriz 1
recons.append(sub) #repite el valor en la matriz 1
cant1+=1 #siguiente elemento de la matriz comprimida
cant1=0 #reinicia el numero de elementos de fila
cant+=1 #siguiente fila
cant+=1 #siguiente fila
reconst = (np.asarray(recons).reshape(6,12)) #la matriz (MM1) con filas con elementos repetidos 2
veces cada una
for i in range(reconst.shape[0]): #para cada una de las filas de la matriz creada (MM1)
a=reconst[i] #toma una fila
reconstr.append(a) #la agrega a la matriz 2
reconstr.append(a) #repite ;a fila anterior en la matriz 2
i+=1 # siguiente fila de (MM1)
reconstruccion = (np.asarray(reconstr).reshape(12,12))#Matriz Reconstruida
print('\nReconstruccion de la imagen :\n')
print(reconstruccion)

Reconstruccion de la imagen :

[[116 116 114 114 103 103 99 99 87 87 107 107]


[116 116 114 114 103 103 99 99 87 87 107 107]
[146 146 139 139 134 134 138 138 158 158 113 113]
[146 146 139 139 134 134 138 138 158 158 113 113]
[107 107 93 93 99 99 105 105 130 130 151 151]
[107 107 93 93 99 99 105 105 130 130 151 151]
[143 143 148 148 157 157 147 147 186 186 231 231]
[143 143 148 148 157 157 147 147 186 186 231 231]
[123 123 109 109 120 120 133 133 125 125 119 119]
[123 123 109 109 120 120 133 133 125 125 119 119]
[137 137 139 139 127 127 135 135 139 139 72 72]
[137 137 139 139 127 127 135 135 139 139 72 72]]

In [61]:
print('\nimagen Original\n')
print(Matriz)

imagen Original

[[ 60 103 122 182 164 15 167 32 15 139 18 225]


[111 235 104 230 27 248 52 246 55 62 170 15]
[159 169 224 63 76 154 142 115 249 178 124 109]
[211 180 121 244 5 252 48 86 154 235 189 31]
[130 172 6 89 18 185 67 133 45 144 142 48]
[159 251 19 163 47 81 5 13 117 131 239 177]
[221 10 243 23 163 115 12 0 126 171 236 212]
[ 66 191 111 62 254 228 87 174 198 74 242 235]
[116 237 21 96 81 64 10 189 213 59 216 16]
[201 215 127 11 77 101 160 244 48 204 0 246]
[ 98 199 248 202 31 168 190 44 226 250 129 73]
[ 60 168 226 72 20 183 233 51 133 214 87 1]]

In [62]:

# MSE & RMSE


a=0
b=0
for i in range(Matriz.shape[1]): #cada fila de la Matriz Original
for j in range(Matriz.shape[0]):
c=Matriz[i,j] # es la iteracion para cada valor de M. Original Y Recon
struccion
d=reconstruccion[i,j]
e=c-d
a=e**2
b+=a #Sumatoria
j+=1
j=0
i=+1
MSE=b/(Matriz.shape[0]*Matriz.shape[1]) #calculo MSE

print("El MSE es :")


print(MSE)
RMSE=MSE**(0.5) #calculo de RMSE
print("El RMSE es:")
print(RMSE)

El MSE es :
5509.666666666667
El RMSE es:
El RMSE es:
74.22712891299695

In [63]:
# PSNR
import math
maximfilas=[]
for j in range(Matriz.shape[0]): # para cada fila
qa=np.asarray(Matriz[j])
qqa=max(qa) #maximo valor de fila
j+=1
maximfilas.append(qqa) #vector con los maximos valores
maxi=max(maximfilas) #maximo de valor total
PSNR=20*(math.log10(maxi/RMSE)) #calculo PSNR
print('El PSNR es:')
print(PSNR)

El PSNR es:
10.685421082912361

In [64]:
#SNR

a=0
for i in range(Matriz.shape[1]): #Para cada fila
for j in range(Matriz.shape[0]):
c=Matriz[i,j]
d=reconstruccion[i,j]
e=c**2
a+=e #Sumatoria
j+=1
j=0
i=+1
b=a/(Matriz.shape[0]*Matriz.shape[1]) #calculo SNR
SNR=20*(math.log10((b**0.5/RMSE)))

print("SNR:")
print(SNR)

SNR:
6.20525925821072

In [65]:
# Calcula la diferencia y la imagen diferencia con a=1
i=0
j=0
D=[]
d1=[]
for i in range(Matriz.shape[1]):
for j in range(Matriz.shape[0]):
pi =Matriz[i,j]
qi=reconstruccion[i,j]
e=pi-qi
diff=e #diferencia entre Matriz Original y Reconstruida
b=128 #mitad dle valor maximo de un pixel
ee=e+b
a=1 #Parametro de mag
D.append(ee*a)
d1.append(diff)
j+=1
j=0
i=+1
imgdif=(np.asarray(D).reshape(12,12)) #Imagen de Diferencia
d2=(np.asarray(d1).reshape(12,12)) # Resta entre ambas imagenes
print('la imagen diferente con a=1')
print(imgdif)
print('La difeencia entre ambas:')
print(d2)

la imagen diferente con a=1


la imagen diferente con a=1
[[ 72 115 136 196 189 40 196 61 56 180 39 246]
[123 247 118 244 52 273 81 275 96 103 191 36]
[141 151 213 52 70 148 132 105 219 148 139 124]
[193 162 110 233 -1 246 38 76 124 205 204 46]
[151 193 41 124 47 214 90 156 43 142 119 25]
[180 272 54 198 76 110 28 36 115 129 216 154]
[206 -5 223 3 134 86 -7 -19 68 113 133 109]
[ 51 176 91 42 225 199 68 155 140 16 139 132]
[121 242 40 115 89 72 5 184 216 62 225 25]
[206 220 146 30 85 109 155 239 51 207 9 255]
[ 89 190 237 191 32 169 183 37 215 239 185 129]
[ 51 159 215 61 21 184 226 44 122 203 143 57]]
La difeencia entre ambas:
[[ -56 -13 8 68 61 -88 68 -67 -72 52 -89 118]
[ -5 119 -10 116 -76 145 -47 147 -32 -25 63 -92]
[ 13 23 85 -76 -58 20 4 -23 91 20 11 -4]
[ 65 34 -18 105 -129 118 -90 -52 -4 77 76 -82]
[ 23 65 -87 -4 -81 86 -38 28 -85 14 -9 -103]
[ 52 144 -74 70 -52 -18 -100 -92 -13 1 88 26]
[ 78 -133 95 -125 6 -42 -135 -147 -60 -15 5 -19]
[ -77 48 -37 -86 97 71 -60 27 12 -112 11 4]
[ -7 114 -88 -13 -39 -56 -123 56 88 -66 97 -103]
[ 78 92 18 -98 -43 -19 27 111 -77 79 -119 127]
[ -39 62 109 63 -96 41 55 -91 87 111 57 1]
[ -77 31 87 -67 -107 56 98 -84 -6 75 15 -71]]

In [ ]:

También podría gustarte