Oppgave 1 - Komme i gang med pikselmanipulasjon i Matlab/Phyton
Dette Matlab-skriptet leser inn et gr?tonebilde og viser det p? skjermen:
filename = 'lena.png';
f = imread(filename);
colormap(gray(256)); % Vis bilder i gr?toner
imagesc(f, [0 255]); % La 0 vises som sort, og 255 som hvitt
F?lgende kodebit g?r igjennom hvert piksel i bildet og halverer gr?toneverdiene:
[N M] = size(f);
f_out = zeros(N,M);
for i=1:N
for j=1:M
f_out(i,j) = 0.5 * f(i,j);
end
end
(Se nederst p? denne siden for eksempelet over i python.)
Skriv et program som leser inn bildet mona.png, regner ut differansen mellom nabo-piksler, og viser resultatet som et bilde p? skjermen. Alts? vil resultat-bildet v?re:
f_out(i,j) = f(i,j) - f(i-1,j)
image()-kommandoen viser negative verdier som sort, s? pr?v ? vise bildet med en bias p? feks. 128. (Legg 128 til hver piksel).
Pr?v ? multiplisere f_out med en faktor st?rre enn 1, hva skjer med kontrasten i resultatbildet da?
Oppgave 2 - Oppl?sning og samplingsteoremet (*)
Anta at vi bruker en ("perfekt") linse med aperturediameter D = 10 mm og fokallengde ("brennvidde") f = 50 mm. La avstanden fra linsen til det vi avbilder v?re s = 5 meter. Benytt b?lgelengde (lambda) p? 500 nanometer.
(Det kan v?re en ide ? se p? side 8 i forelesningsnotatene for 2022.)
- Hva er den minste avstanden y, i f?lge Rayleigh-kriteriet, mellom to punkter som kan adskilles?
- Hva er denne avstanden i bildeplanet (y' i forelesningsnotatene)?
- Skisser punktspredningsfunksjonen (PSF-en) til dette avbildningssystemet.
- Hva er grensene for minste periode og h?yeste frekvens i et slikt bilde (T og f i forelesningsnotatene s. 9)?
- Hva er minste avstanden man m? ha mellom to samplings-elementer i bildeplanet for ? kunne gjenskape detalj-niv?et fra det digitale bildet? (Anta her at st?rrelsen p? pikselen kun er et punkt).
- Hvis st?rrelsen p? CCD-brikken (den hvor de fotosensitive samplings-elementene ligger) er 16 mm x 24 mm og elementene er uniformt fordelt, hvor mange piksel-elementer ville den m?tte ha for ? n? kravet fra oppg. d?
- La oss anta at aberasjoner (feks. sf?riske) og fokuseringsproblemer gir en punktspredningsfunksjonen (PSF) dobbelt s? stor/bred som den vi til n? har regnet med. Hva blir svarene p? oppg b,d, e og f da?
- Om aparturediameteren dobles, ville den romlige oppl?sningen bli bedre eller d?rligere?
* Hint fra oven; gj?r og forst? denne oppgaven! Dere er n?rmest garantert ? f? igjen for dette under eksamen.
Oppgave 3 - Pikselst?rrelse og anti-aliasing
La det vi avbilder best? av punktspredere jevnt fordelt utover objektplanet, og med en avstand mellom dem ned mot grensen til hva Rayleigh-kriteriet for v?rt avbildningssystem krever. Avstanden mellom punktsprederne ved avbildningsflaten for v?rt oppsett er 10 mikrometer. Hvis vi har en avstand mellom v?re digitale sampler p? 50 mikrometer, og en "pikselst?rrelse", alts? det omr?det vi integrerer/samler opp lyset i fra, lik 50x50 mikrometer, hvordan vil det digitale bildet se ut? Hva om pikselst?rrelsen kun var 1x1mikrometer?
Oppgave 4 - Kvantisering og visuell kvalitet
Matlab-skriptet under fremviser et bilde med et gitt antall bit. Eksperimenter med ? endre antall bit ved hjelp av bit-variabelen p? f.eks. mona.png og lena.png.
bit = 8; % Velg antall bit mellom 1 OG 8
f = imread('lena.png');
colormap(gray(256)); % Vis bilder i gr?toner
f_requantized = floor(double(f)/(2^(8-bit))); % Ny, uniform kvantisering
imagesc(f_requantized, [0 2^bit-1]); % Vis bildet med 0 som sort og 2^bit-1 som hvitt
colorbar; % Vis fargekart
Hvor langt ned i antall kvantiseringsniv?er kan du g? f?r den visuelle kvaliteten p? bildene forringes betydelig?
Som en tilleggsresurs: Eksperimenter gjerne ogs? med den interaktive pikselkvantiserings-appleten under http://www.imageprocessingbasics.com/image-pixel-quantization/
(se kommentarer under oppgave 9).
Oppgave 5 - Lagringsbehov
Anta et HD (high definition) videokamera som genererer bilder med 1080 linjer som hver best?r av 1920 sampler. Det tar 50 bilder i sekundet. Hvert piksel i fargebildene har 24 bits oppl?sning; 8 bit for hver av fargene r?d, gr?nn og bl?. Hvor mange byte trengs da for ? lagre en 2-timers video hvis bildene lagres uten kompresjon?
Oppgave 6 - Rekvantisering
Et 8 bits bilde av en scene med ca like mange bakgrunnspiksler som forgrunnspiksler skal rekvantiseres til 1 bit. Hovedvekten av bakgrunnspikslene har verdi omkring 50, mens hovedvekten av forgrunnspikslene har verdi omkring 200. For ? minimere kvantiseringsfeilen, hvor ville du valgt kvantiseringsniv?et (terskelen) og hvilke verdier for 0 og 1 ville du benyttet for rekonstruksjon til 8 bit?
Oppgave 7 - Antialiasing
Diskuter p?standen: Med tilstrekkelig antall kvantiseringsniv?er kan antialiasing likes?godt utf?res etter samplingsprosessen.
Oppgave 8 (Ekstraoppgave) - Dithering
Som dere sikkert la merke til i Oppgave 4, s? vil man ved lavt antall gr?toner ofte f? tydelige falske konturer i bildet. En m?te ? begrense denne u?nskede effekten p? er ? legge til litt (hvit) st?y f?r man foretar kvantiseringen. Kodebiten under legger til litt slik (hvit, normalfordelt) st?y p? bildematrisen. Benytt det st?yfylte bildet i kodebiten fra Oppgave 4 og se om dette hjelper mot de falske konturene i bildet.
noiseFactor = 10;
[N M] = size(f);
fNoisy = double(f) + noiseFactor * randn(N,M);
Eksperimenter med forskjellig mengde st?y (noiseFactor-variabelen).
Oppgave 9 (St?tteoppgave) - Sampling, aliasing og antialiasing
Eksperimenter med den interaktive samplings-appleten under http://www.imageprocessingbasics.com/image-sampling-and-aliasing/. Appleten resampler gitte bilder ned til f?rre samplingspunkter. Den indikerer hvor den henter ut de nye samplene (med r?de prikker), og viser/tegner s? disse nye pikslene som (store) firkanter.
Legg merke til at ved antialiasing skrudd p?, vil man glatte ut (gj?re bildet mer diffust), alts? fjerne/dempe de h?yfrekvente bidragene man ikke kan representere, f?r sampling.
Beklageligvis s? har ikke imagprocessingbasics.com f?tt fullf?rt migrasjonen bort fra den "utd?dde" java-applet-platformen. Det betyr at du trolig ikke f?r startet appleten i nettleseren din. For ? kj?re appletene m? dere benytte programmet appletviewer. Dette programmet skal v?re ferdig installert p? UiO-maskinene (Linux, i hvert fall). Om det ikke er det, f?r man tak i programmet ved ? installere Java Development Kit (JDK) 8. For ? starte appleter, start appletviewer fra kommandolinjen med en URL til hvor appleten befinner seg, feks:
>> appletviewer http://www.imageprocessingbasics.com/image-sampling-and-aliasing/
NB: Man kan logge seg p? en UiO-linux-maskin igjennom nettleseren. G? til view.uio.no, logg inn med UiO-brukernavnet og start opp "Ifi Workstation".
F?rste kodesnutt 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()