Geometrické transformace obrazu

Úvod

Obrázek je reprezentován spojitou funkcí $f:M\rightarrow\mathrm{I\kern-0.8mm R}$. Zde $M\nobreak\in\nobreak\mathrm{I\kern-0.8mm R}_2$ je definiční obor funkce a $\mathrm{I\kern-0.8mm R}$ je obor hodnot. Množina $M$ je obvykle parametrizována vektorem ${\bf x}$, jehož složky jsou souřadnice dvourozměrného kartézského systému. Geometrické transformace obrazu nejsou ničím jiným než změnou parametrizace nosiče $M$ a vyjádřením funkce $f$ v tomto novém souřadném systému.

Transformace je popsána funkcí $T$, která váže souřadnice ${\bf x}=\left[x_1, x_2\right]^T$ v původním obrázku a souřadnice ${\bf u}=\left[u_1, u_2\right]^T$ v novém obrázku:


\begin{displaymath}
{\bf x}=T({\bf u})\,.
\end{displaymath} (1)

Obrazovou funkci původního obrázku již máme značenou $f$. Označíme-li obrazovou funkci nového obrázku $g$, pak platí:

$\displaystyle g({\bf u})=f(T({\bf u}))\,,$     (2)
$\displaystyle g(T^{-1}({\bf x}))=f({\bf x})\,,$     (3)

kde $T^{-1}$ je inverzní zobrazení k zobrazení $T$.

Projektivní transformace

Projektivní transformace je taková, která váže souřadné systémy vztahy
$\displaystyle x_1={a_{11}u_1+a_{12}u_2+a_{13}\over a_{31}u_1+a_{32}u_2+a_{33}}\,,$     (4)
$\displaystyle x_2={a_{21}u_1+a_{22}u_2+a_{23}\over a_{31}u_1+a_{32}u_2+a_{33}}\,.$     (5)

Tyto vztahy můžeme přepsat do kompaktnějšího tvaru:

\begin{displaymath}
x_1={{\bf A}_1{\left[{\bf u}^T 1\right]}^T\over{\bf A}_3{\l...
...T 1\right]}^T\over{\bf A}_3{\left[{\bf u}^T 1\right]}^T}\,,
\end{displaymath} (6)

kde ${\bf A}_1$, ${\bf A}_2$ a ${\bf A}_3$ jsou řádky matice ${\bf A}$ tvořené koeficienty ze vztahů (4) a (5):

\begin{displaymath}
{\bf A}=\left[\begin{array}{c}{\bf A}_1\\ {\bf A}_2\\ {\bf ...
... a_{22} & a_{23}\\ a_{31} & a_{32} & a_{33}\end{array}\right]
\end{displaymath} (7)

Výpočet projektivní transformace

V této části si ukážeme, jak vypočítat matici ${\bf A}$, která reprezentuje projektivní transformaci mezi dvěma obrazy. V těchto dvou obrazech mějme tzv. lícovací body, tj. body které si v obrazech vzájemně korespondují (označeny červeným křížkem):

\includegraphics[width=5cm]{figures/let1s.ps} \includegraphics[width=7.5cm]{figures/let2s.ps}

Lícovacích dvojic nech<< je $n$. Pro každou dvojici lícovacích bodů $({\bf x}^i,{\bf u}^i)$ mají platit vztahy (6), kam za ${\bf x}$ dosadíme ${\bf x}^i$ a za ${\bf u}$ dosadíme ${\bf u}^i$. Pak hledáme matici ${\bf A}$ takovou, aby (6) byla splněna pro všechny lícovací dvojice.

Nalezení ${\bf A}$ je obzvláště jednoduché, nebo<< vztahy (6) jsou v prvcích ${\bf A}$ lineární. Úpravou vztahů totiž dostaneme:


$\displaystyle {\bf A}_3{\left[{\bf u}^T 1\right]}^T x_1-{\bf A}_1{\left[{\bf u}^T 1\right]}^T=0\,,$     (8)
$\displaystyle {\bf A}_3{\left[{\bf u}^T 1\right]}^T x_2-{\bf A}_2{\left[{\bf u}^T 1\right]}^T=0\,.$     (9)

Utvoříme z prvků matice ${\bf A}$ vektor ${\bf a}=\left[{\bf A}_1, {\bf A}_2, {\bf A}_3 \right]=\left[a_{11}, a_{12}, a_{13}, a_{21}, a_{22}, a_{23}, a_{31}, a_{32}, a_{33}\right]^T$ a zapíšeme lineární soustavu rovnic pro tento vektor:


$\displaystyle \left(%
\begin{array}{ccccccccc}
u_1^1&u_2^1&1&0&0&0& -x_1^1 u_1...
...1^n&u_2^n&1& -x_2^nu_1^n & -x_2^nu_2^n &-x_2^n
\end{array}\right){\bf a}={\bf0}$     (10)

Soustavu vyřešíme a tím dostaneme vektor ${\bf a}$, který pak jen přeskládáme do matice ${\bf A}$ a tím jsme hotovi.

Praktické poznámky

Příklad

  1. Vezměte si tento obrázek

    img_orig (36K)
  2. Dále si stahněte korespondující páry.
  3. Geometrické zkreslení modelujte projektivní transformací.Vypočtěte transformační matici A.
  4. Proveďte geometrickou transformaci uloženého obrázku. Pro interpolaci použijte funkci interp2 (vliv aliasingu zanedbejte).

Martin Barva 2005-10-14