IN2070 høst 2023 - Løsningshint 2

Oppgave 1 - Rotasjon og translasjon som én operasjon

Hvis vi skal rotere rundt et bestemt punkt, (x,y), kan vi først forskyve (translatere) bildet slik at det nye origo ligger i (x,y), rotere, for så å translatere tilbake. Som vi vet kan disse affine transformene trekkes sammen til én transform, så ved "enkel" matriseregning:

Oppgave 2 - Interpolasjon

Nærmeste nabo-interpolasjon: f(221.3,396.7) ->  f(round(221.3), f(round(396.7)) = f(221,397) = 45.

Bilineær interpolasjon: Fra lysark s. 20, med dx=0.3 og dy=0.7, får vi 38.07. Under er en figur som viser hvordan flaten mellom de fire punktene blir ved bilineær interpolasjon.

Oppgave 5 - Affin transform fra tre punktpar

For x-koordinaten:

x1' = a0*x1 + a1*y1 + a2
x2' = a0*x2 + a1*y2 + a2
x3' = a0*x3 + a1*y3 + a2

Tilsvarende blir det for y-koordinaten. Vi kan altså løse (a0,a1,a2) og (b0,b1,b2) hver for seg.

import numpy as np

x = np.array([10, 100, 200])
y = np.array([10, 100, 100])
xr = np.array([30, 120, 220])
yr = np.array([10, 100, 100])

# Ved bruk av no.linalg.solve-kommandoen:

A = np.vstack([x, y, np.ones(3)]).T
a = np.linalg.solve(A, xr)
b = np.linalg.solve(A, yr)

# Alternativ basert på forelesningsnotat:

G = np.vstack([x, y, np.ones(3)]).T
M = np.dot( np.linalg.inv( np.dot(G.T, G) ), G.T )
a_ = np.dot(M, xr)
b_ = np.dot(M, yr)

Oppgave 6 - Samplingsrate ved resampling

Transformen gir en nedskalering av bildet.  En resampling plukker i praksis halvparten av pikslene langs hver akse. Vi får en fordobling av avstanden mellom hvert sample. Det vil si, den effektive samplingsperioden fordobles, altså at den effektive samplingsraten blir halvert. Vi vil kunne få aliasing-problemer om ikke den nye samplingsraten tilfredstiller kravet gitt i samplingsteoremet.

Publisert 2. sep. 2023 14:49