X33ZS1 – 1. Cvičení: Teoretické úlohy
Předpokládáme základní zkušenosti s Matlabem a s manipulací
s obrazy v něm z dříve absolvovaných předmětů. Pokud jste se s tím
nikdy nesetkali, projděte si
první cvičení obrazové části 383ZS.
V tomto cvičení se budeme zabývat
zejména početním řešením jednoduchých úloh z partie digitálního zpracování
obrazů, se kterými jste se setkali v první přednášce. V druhé části hodiny si
osvěžíme základní znalosti programového prostředí Matlab, ve kterém si početně
řešené úlohy naprogramujeme.
Úkoly
- Afinní transformace.
Uvažujte následující situaci: Jsou dány body x1 =
(10, 20), x2 = (15, 15) a x3 = (32,
0); po afinní transformaci souřadnic těchto bodů mají souřadnice
x1' = (60, 145), x2' = (55, 135) a
x3' = (42, 111). Vaším úkolem je:
- Vypočítat parametry této transformace A: xi' = A xi .
- Nalézt obraz bodu x4 = (20, 35);
- Nalézt vzor bodu x5' = (10, 25).
- Nalezení nejlepší rovinné translace.
V této úloze budeme hledat vektor t, určující nejlepší
rovinnou translaci ve smyslu nejmenších čtverců Euklidovské
vzdálenosti. Mějme tedy body x1 = (12, 20),
x2 = (25, 10) a x3 = (65, 50) a
jejich obrazy po rovinném posunutí: x1' = (30, 26),
x2' = (40, 17) a x3' = (86, 55).
Naším úkolem je nalézt již zmíněný vektor t.
- Implementace předcházejících úloh.
Pro osvěžení a procvičení
Matlabu je vaším úkolem naprogramovat řešení předcházejících úloh. Váš kód
by pro jednotlivé úlohy měl splňovat následující specifika:
- Implementujte funkci A
= findAffineTransform(x, x_transformed),
kde vstupem x = (x1
; x2 ; ... ; xn) je matice (2, n)
bodů před transformací, x_transformed
= (x1 ; x2 ; ... ; xn)
je matice (2, n) bodů po transformaci a výstupem je
matice A, určující parametry použité afinní transformace.
- Implementujte funkci x_out
= affineTransform(A, x_in,
{'inverse'}), kde vstupem je A afinní transformační matice, bod x_in
= (x1 x2), jehož
souřadnice chceme transformovat a volitelný flag 'inverse', který pokud
je zadán, tak na vstupní bod x_in buda
aplikována inverzní afinní transformace (bude se
hledat vzor bodu před transformací), v opačném případě se bude
hledat obraz vstupního bodu. Výstupem funkce má být bod x_out
= (x1 x2), odpovídající
souřadnicím bodu x_in po
(inverzní) afinní transformaci.
- Implementujte funkci t = findTranslation(x, x_translated), kde
vstupem x = (x1
; x2 ; ... ; xn) je matice (2, n)
bodů před translací, x_translated
= (x1 ; x2 ; ... ; xn)
je matice (2, n) bodů po translaci a výstupem je vektor určující
nejlepší rovinnou translaci ve smyslu nejmenších čtverců Euklidovské
vzdálenosti.
Pozn.: Snažte o optimální implementaci využívající specifik
programového prostředí Matlab.