Oppgave 1 - Komme i gang med pikselmanipulasjon i Python
from scipy.misc import imread import matplotlib.pyplot as plt import numpy as np filename = 'mona.png' f = imread(filename, flatten=True) # N: antall rader i bildet (matrise), M: antall kolonner i bildet N, M = f.shape f_out = np.zeros((N,M)) for i in range(1, N): # La i starte p? 1 (og ikke 0) for j in range(M): f_out[i,j] = f[i,j] - f[i-1,j] bias = 128 # brukt bare for fremvising av bildet plt.figure() plt.title("f_out + %d" % bias) plt.imshow(f_out + bias,cmap='gray',vmin=0,vmax=255) plt.colorbar() # La imshow automatisk sette minste verdi til sort, og st?rste verdi til hvitt plt.figure() plt.title("uten bias, men endret hva som vises som sort og hva som vises som hvitt") plt.imshow(f_out, cmap='gray') plt.colorbar() plt.figure() plt.title("endring av kontrast") plt.imshow(f*1.5, cmap='gray',vmin=0,vmax=255) plt.colorbar() plt.show()
Oppgave 2 - Oppl?sning og samplingsteoremet
- Rayleigh-kriteriet: sin(t) = 1.22*lambda/D gir ca. 6.1*E-5. Siden sin(t) = tan(t) = t for sm? t, s? er y = s*tan(t) = 0.305 mm.
- Fra notat: y' = y*f/(s-f) = 3.08E-06 m, alts? ca 3.1mikrometer.
- Den generelle formen vil v?re som eksempelet s. 5 i forelesningsnotatene. Avstanden p? fra sentrum til f?rste sorte ring vil v?re y' fra forrige oppgave.
- T = y' = ca 3.1 mikrometer. f_0 = 1/T_0 = ca 1/3.1 mikrometer^{-1} (alts? ca 1/3.1 per mikrometer).
- Samplingsteoremet sier at man m? ha mer enn 2 sampler per periode. Alts? m? vi ha mer enn 2 sampler per 3.1mikrometer. => Ts < 1.54 mikrometer.
- 16 mm / 1.54 mikrometer er ca. 10400, og 24 mm / 1.54 mikrometer er ca. 15600, s? vi m? ha 10400x15600 sampler (ca. 162 megasampler).
- Vi ville ha halve oppl?sningen, alts? 3.1 x 2 = 6.2 mikrometer mellom hvert punkt, mindre enn 3.1mikrometer mellom samplene, og 1/4 av alle samplene i oppgave f.
- Fra Rayleigh-kriteriet ser vi at en ?kning av D vil gi mindre minste avstand mellom punktspredere som kan skilles. Alts? bedre oppl?sning.
Oppgave 3 - Pikselst?rrelse og anti-aliasing
Hver piksel ville best?tt av middelverdien til 5x5 = 25 punkter, s? resultatbildet ville blitt flatt (gr?tt). Om samplene var kun 1x1 mikrometer ville bildet fortsatt v?rt flatt, men intensiteten ville v?rt avhengig av hvor p? bildeflaten pikslene starter. Legg merke til at ved en liten endring i avstanden mellom samplene ville vi sett st?rre, falske strukturer (aliasingeffekter).
Oppgave 5 - Lagringsbehov
Vi multipliserer og f?r
linjer x sampler per linje x bytes per pixel x bilder per sek x antall sekunder i 2 timer
alts?
1080 x 1920 x 3 x 50 x 60x60x2 = 2.239.488.000.000
Dette er rundt 2086 gigabytes, eller rundt 2 terabytes. Kompresjon vil v?re av vesentlig betydning.
Oppgave 6 - Rekvantisering
Siden like mange forgrunns- som bakgrunnspiksler, ville kvantiseringsterskelen bli lagt midt mellom 50 og 200, (50+200)/2 = 125. Rekonstruksjon hvor 0 ble gjort om til 50 og 1 til 200.
Oppgave 7 - Antialiasing
Hvis man g?r til den ene ytterkanten og ser fullstendig bort fra kvantiseringsun?yaktigheter, alts? at vi har en uendelig presisjon per sample, s? er dette egentlig utgangspunktet v?rt for v?r diskusjon i forelesningen om sampling og aliasing. Alts?, kravene til samlingsrate gjelder allerede for dette ekstreme, tenkte tilfellet.
Oppgave 8
from scipy.misc import imread import matplotlib.pyplot as plt import numpy as np f = imread('mona.png', flatten=True) noisefactor = 10 N,M = f.shape fNoisy = f + noisefactor*np.random.randn(N,M) for ii in range(1, 8, 2): bit = ii f_requantized = f//2**(8-bit) plt.figure() plt.title("#bit = %d" % bit) plt.imshow(f_requantized, cmap='gray', vmin=0, vmax=(2**bit-1)) # Vis bildet med 0 som sort og 2^bit-1 som hvitt plt.show()