середа, 28 квітня 2021 р.

Афінні перетворення

Mathedemo Геометричним перетворенням зображення $f(x,y)$ називається таке перетворення дискретної площини, при якому піксель з координатами $(x,y)$ переміщується у позицію з новими координатами $(x', y')$. Нові координати визначаються двома функціями для кожної координати: \begin{gather*} x'=T_x(x,y),\\ y'=T_y(x,y). \end{gather*} На відміну від градаційних перетворень, геометричні перетворення не змінюють значення пікселів, а лише змінюють положення пікселів на зображенні. Ми розглянемо два типи геометричних перетворень які зберігають об'єкти сцени на перетворених зображеннях -- афінні та проективні.

Афінні перетворення

Афінними називаються лінійні перетворення вигляду \begin{align*} &x'=T_x(x,y)=a_{11} x+ a_{21}y+b_1,\\ &y'=T_y(x,y)=a_{21}x+a_{22}y+b_2, \end{align*} або у матричному записі $$ \begin{pmatrix} x' \\ y' \end{pmatrix}=\begin{pmatrix} a_{11} & a_{21} \\ a_{21} & a_{22} \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix}+\begin{pmatrix} b_x \\ b_y \end{pmatrix}, $$ де матриця $A=\begin{pmatrix} a_{11} & a_{21} \\ a_{21} & a_{22} \end{pmatrix}$ є невиродженою. Матриця $A$ називається матрицею повороту, а вектор $\begin{pmatrix} b_1 \\ b_2 \end{pmatrix}$ називається вектором паралельного перенесення.

Афінні перетворення переводять паралельні лінії у паралельні, проте можуть не зберігати відстані і кути. Якщо матриця $A$ ортогональна, тобто $A^{\top} \cdot A=E$, то відповідне афінне перетворення називається ортогональним. Ортогональні перетворення зберігають відстані та кути.

Афінне перетворення також задається в однорідних координатах $$ \begin{pmatrix} x' \\ y'\\ 1 \end{pmatrix}=\begin{pmatrix} a_{11} & a_{21} & b_x \\ a_{21} & a_{22} & b_y,\\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} x \\ y\\ 1 \end{pmatrix}. $$ Важливою характеристикою афінного перетворення є те, що воно має обернене. Якщо відомі матриця повороту та вектор паралельного перенесення, то із перетвореного (деформованого) зображення можна відновити оригінальне зображення.

Всі афінні перетворення зводяться до таких базових перетворень: паралельне перенесення, масштабування - стиснення та розширення, зсув, поворот, центральна та осьова симетрії та їхніх композицій.

Паралельне перенесення має вигляд $$ \begin{pmatrix} x' \\ y' \end{pmatrix}= \begin{pmatrix} x \\ y \end{pmatrix}+\begin{pmatrix} b_1 \\ b_2 \end{pmatrix}. $$ Розтягнення та стиснення вздовж осей $Ox$ та $Oy$ з коефіцієнтами $s_x$ i $s_y$ (масштaбне перетворення, scaling): $$ \begin{pmatrix} x' \\ y' \end{pmatrix}=\begin{pmatrix} s_x & 0 \\ 0 & s_y \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix}. $$ (гомотетія з центром в початку координат) При $s_x=s_y$ отримуємо рівномірне розтягнення та стиснення (uniform scaling).

Зсув (shear) вздовж осей $x$ та $y$ з коефіцієнтами $b_x$ i $b_y$ $$ \begin{pmatrix} x' \\ y' \end{pmatrix}=\begin{pmatrix} 1 & b_x \\ b_y & 1 \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix}. $$ Поворот навколо центру координат на кут $\theta:$ $$ \begin{pmatrix} x' \\ y' \end{pmatrix}=\begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix}. $$ Поворот може бути представлений як композиція трьох скосів $$ \begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix}=\begin{pmatrix}0 & -\tan\frac{\theta}{2} \\ 0 & 1 \end{pmatrix} \cdot \begin{pmatrix} 1 & 0 \\ \sin\theta & 1 \end{pmatrix} \cdot \begin{pmatrix}0 & -\tan\frac{\theta}{2} \\ 0 & 1 \end{pmatrix}. $$ Поворот навколо довільної точки площини з координатами $(x_c,y_c)$ на кут $\theta$: $$ \begin{pmatrix} x' \\ y' \end{pmatrix}=\begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix} \begin{pmatrix} x-x_c \\ y-y_c \end{pmatrix}+\begin{pmatrix} x_c \\ y_c \end{pmatrix}. $$ Симетрії відносно початку координат, осі $Ox$, $Oy$ і прямої $y=x$ мають такі матриці $$ \begin{pmatrix} 1 & 0\\ 0 & -1 \end{pmatrix}, \begin{pmatrix} -1 & 0\\ 0 & 1 \end{pmatrix}, \begin{pmatrix} -1 & 0\\ 0 & -1 \end{pmatrix}. $$ Якщо матриця афінного перетворення невідома, то її можна відновити, вказавши три відповідні точки на зображеннях, які мають перейти одна в одну при цьому перетворенні.

Немає коментарів:

Дописати коментар