IN2070 h?st 2023 - L?sningshint 1

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

  1. 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.
  2. Fra notat: y' = y*f/(s-f) = 3.08E-06 m, alts? ca 3.1mikrometer.
  3. 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.
  4. T = y' = ca 3.1 mikrometer. f_0 = 1/T_0 = ca 1/3.1 mikrometer^{-1} (alts? ca 1/3.1 per mikrometer).
  5. 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.
  6. 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).
  7. 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.
  8. 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()

 

Publisert 29. aug. 2023 08:48 - Sist endret 2. sep. 2023 14:51