Kode i ukeoppgavene oversatt til Python

Table of contents

Oppgave 1 - Komme i gang med pikselmanipulasjon i Python
Oppgave 4 - Kvantisering
(Ekstraoppgave) Oppgave 8 - Dithering

Oppgave 1 - Komme i gang med pikselmanipulasjon i Python

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

# Første del:
filename = 'lena.png'
f = imread(filename,flatten=True)
plt.imshow(f,cmap='gray')

# Andre del:
N,M = f.shape
f_out = np.zeros((N,M))
for i in range(N):
    for j in range(M):
        f_out[i,j] = 0.5*f[i,j]

plt.figure()
plt.imshow(f_out,cmap='gray',vmin=0,vmax=255,aspect='auto')
plt.title('f_out')

# Alternativ andre del med litt mindre kodelinjer som gjør akkurat det samme:
f_out_alt = 0.5*f

plt.figure()
plt.imshow(f_out_alt,cmap='gray',vmin=0,vmax=255,aspect='auto')
plt.title('f_out_alt')

plt.show()

Programmet kan lastes ned her (høyreklikk og trykk "lagre lenke som"/"save link as")


Merk at også det er også beskrevet flere metoder her

Oppgave 4 - Kvantisering

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

f = imread('lena.png',flatten=True)

bit = 8 # bit heltall mellom 1 og 8

quantized = f//2**(8-bit)

plt.imshow(quantized,cmap='gray',vmin=0,vmax=2**bit)
plt.show()

Programmet kan lastes ned her (høyreklikk og trykk "lagre lenke som"/"save link as")

Her er det nyttig å bruke heltallsdivisjon // siden innleste bilder fra scipy.misc er i utgangspunktet av typen float - i motsetning til matlab der innleste bilder er av typen uint8. Siden vi antar bildet er 8-bit (som er ganske vanlig for bilder), vil verdiene til bildet være mellom 0 og 2**(8)-1. Ved å finne f//2**(8-bit), får en at utbildet vil ha verdier mellom 0 og 2**(8)/2**(8-bit) = 2**(bit).

(Ekstraoppgave) Oppgave 8 - Dithering

noiseFactor = 10
N,M = f.shape
fNoisy = f + noiseFactor*np.random.randn(N,M)

Made with DocOnce