From c6289b95b2c6ada3de19c8a8e377ce83181f9862 Mon Sep 17 00:00:00 2001 From: "Ivan I. Ovchinnikov" Date: Fri, 17 Feb 2023 17:21:56 +0300 Subject: [PATCH] vopra lecture02 --- ...bject-parameter-recognition-algorithms.tex | 139 ++++++-- pics/04-vora-00-blurring.svg | 223 ++++++++++++ pics/04-vora-00-homographia.svg | 119 +++++++ pics/04-vora-00-obj-height.svg | 154 ++++++++ pics/04-vora-00-obj-moving.svg | 333 ++++++++++++++++++ pics/04-vora-00-pinhole-iso.svg | 268 ++++++++++++++ pics/04-vora-00-pinhole.svg | 209 +++++++++++ 7 files changed, 1410 insertions(+), 35 deletions(-) create mode 100644 pics/04-vora-00-blurring.svg create mode 100644 pics/04-vora-00-homographia.svg create mode 100644 pics/04-vora-00-obj-height.svg create mode 100644 pics/04-vora-00-obj-moving.svg create mode 100644 pics/04-vora-00-pinhole-iso.svg create mode 100644 pics/04-vora-00-pinhole.svg diff --git a/04-videostream-object-parameter-recognition-algorithms.tex b/04-videostream-object-parameter-recognition-algorithms.tex index 23233b2..e5553db 100644 --- a/04-videostream-object-parameter-recognition-algorithms.tex +++ b/04-videostream-object-parameter-recognition-algorithms.tex @@ -92,68 +92,137 @@ \section{Определение параметров объекта} Удалённость от камеры, размеры объекта, кинематические характеристики (скорость, направление движения). -Метод пропорций -- должны быть априорные данные об объекте, для которого мы хотим определять характеристики. Если нет данных об объекте -- должны быть размеры объектов в сцене (дорожные знаки, разметка, и так далее), на основе данных о сцене и изображения объекта на сцене можем вычислить нужные параметры. +\subsection{Метод пропорций} +должны быть априорные данные об объекте, для которого мы хотим определять характеристики. Если нет данных об объекте -- должны быть размеры объектов в сцене (дорожные знаки, разметка, и так далее), на основе данных о сцене и изображения объекта на сцене можем вычислить нужные параметры. Исходные данные: \begin{itemize} -\item $H_{\text{объекта}}$ -- например, высота объекта в пикселях $h$ -- априорная высота; -\item $\alpha_{\text{кадр}}, \beta_{\text{кадр}}$ -- характеристики камеры -- углы обзора по вертикали и горизонтали, соответственно. -\item $H_{\text{кадр}}$, $W_{\text{кадр}}$ -- высота и ширина кадра +\item $H_{o}$ -- высота объекта в пикселях $h$ -- априорная высота (в физическом мире); +\item $\alpha_{k}, \beta_{k}$ -- характеристики камеры -- углы обзора кадра по вертикали и горизонтали, соответственно. +\item $H_{k}$, $W_{k}$ -- высота и ширина кадра \end{itemize} найти $l$ -- расстояние до объекта, $v$ -- скорость. -(1) -для вычисления скорости нужно взять два кадра с известным временем между ними. -(2) + +\begin{figure}[H] + \centering + \fontsize{14}{1}\selectfont + \includesvg[scale=1.01]{pics/04-vora-00-obj-height.svg} +\end{figure} +Высота объекта находится по формулам +\begin{equation*} + \begin{gathered} + \tg(\alpha) = \frac{h}{l} \approx \alpha_{o}\\ + \frac{\alpha_o}{\alpha_k} = \frac{H_o}{H_k}\Rightarrow \alpha_o = \frac{\alpha_k \cdot H_o}{H_k}\\ + l = \frac{h \cdot H_k}{\alpha_k \cdot H_o} + \end{gathered} +\end{equation*} + +Для вычисления скорости нужно взять два кадра с известным временем между ними. +\begin{equation*} + \begin{gathered} + v=\sqrt{v_x^2, v_y^2, v_z^2}\\ + \frac{\Delta\alpha_o}{\alpha_k} = \frac{\Delta Y_o}{H_k}\Rightarrow \Delta\alpha_o = \frac{\alpha_k \cdot \Delta Y_o}{H_k}\\ + \tg\Delta\alpha_o = \frac{\Delta y}{l} \approx \Delta\alpha_o\\ + \Delta y = \frac{\alpha_k\cdot\Delta Y_o\dot l}{H_k}\\ + v_y = \frac{\Delta y}{N\cdot\tau} = \frac{\alpha_k\cdot\Delta y_o\cdot l}{H_k\cdot N\tau} + \end{gathered} +\end{equation*} +где $N$ -- число кадров между замерами, а $\tau$ -- длительность одного кадра (из информации о кадре (fps, frames pre second, кадров в секунду)). + +\begin{figure}[H] + \centering + \fontsize{12}{1}\selectfont + \includesvg[scale=1.01]{pics/04-vora-00-obj-moving.svg} +\end{figure} + $v_x$ тоже касательный считается по аналогии -\[ v_x = \frac{\beta_k * \Delta_o * l}{W_k * N \tau} \] -(3) -Недостаток в том, что нам нужны априорные знания об объектах. +\[ v_x = \frac{\beta_k\cdot\Delta_o\cdot l}{W_k \cdot N\tau} \] -Метод pinhole -(4) -мы знаем, что все лучи проходят через одну точку, тогда стоит задача по координатам $(X,Y,Z)$ получить двумерные координаты $(u, v)$. -(5) +Для $v_z$ формула отличается, так как движение радиальное и мы фактически считаем расстояние до объекта -(6) - матрица поворота +\[ v_z = \frac{\Delta z}{N\tau} = \frac{\Delta l(t)}{N\tau} = \frac{h\cdot H_k}{N\tau\alpha_k}\cdot\left(\frac{1}{H_o(t+N\tau)} - \frac{1}{H_o(t)}\right) \] -вектор $T$ отвечает за центр масс объекта. -Координаты $(X, Y, Z)$ приводятся к двумерным $x', y'$, масштабируются $f(x)$ и делаем сдвиг $c(x)$. +Основной недостаток метода в том, что нам нужны априорные знания об объектах. -\[x' = x/Z; y' = y/Z\] +\subsection{Метод pinhole} -\[u = f_x*x' + c_x; v = f_y*y'+c_y\] -(7) +\begin{figure}[H] + \centering + \fontsize{14}{1}\selectfont + \includesvg[scale=1.01]{pics/04-vora-00-pinhole.svg} +\end{figure} -$P$ -- проекционная матрица. +Мы знаем, что все лучи проходят через одну точку, тогда стоит задача по координатам $(X, Y, Z)$ получить двумерные координаты $(u, v)$. + +\begin{figure}[H] + \centering + \fontsize{14}{1}\selectfont + \includesvg[scale=1.01]{pics/04-vora-00-pinhole-iso.svg} +\end{figure} + +\[ \begin{pmatrix} X\\Y\\Z \end{pmatrix} = R \begin{pmatrix} X_0\\Y_0\\Z_0 \end{pmatrix} + T \] +Матрица поворота, вектор $T$ отвечает за центр масс объекта. Координаты $(X, Y, Z)$ приводятся к двумерным $x', y'$, масштабируются $f(x)$ и сдвигаются $c(x)$. + +\begin{equation*} + \begin{gathered} +x' = \frac{x}{Z}; y' = \frac{y}{Z} \\ +u = f_x\cdot x' + c_x\\ +v = f_y\cdot y' + c_y\\ + \end{gathered} +\end{equation*} + +\[ \begin{pmatrix} u \\ v \end{pmatrix} = P \cdot \begin{pmatrix} x \\ y \\ z \end{pmatrix} \] + +где $P$ -- проекционная матрица. + +\[ P = \begin{pmatrix} f(x) & 0 & c(x) \\ 0 & f(y) & c(y) \\ 0 & 0 & 1 \end{pmatrix} \] В данной задаче возникает проблема искажений (аберрации, дисторсия). \[x'' = x'(1+k_1*r^2 + k_2*r^4 + k_3*r^6) + 2p_1x'y' + p_2(r^2+2x'^2)\] \[r^2 = x'^2 + y'^2\] -аналошгично y' +аналошгично $y'$ \[y'' = y'(1+k_1*r^2 + k_2*r^4 + k_3*r^6) + p_1(r^2+2y'^2) + 2p_2x'y'\] По изображению можем получить все коэффициенты и посчитать координаты $u, v$. Коэффициенты находятся путём калибровки камеры. И используются для обратного вычисления координат. -(8) цель минимизировать ошибку, видеале = 0 -(uia via) = P(xi,yi,zi) +\begin{figure}[H] + \centering + \fontsize{12}{1}\selectfont + \includesvg[scale=1.01]{pics/04-vora-00-blurring.svg} +\end{figure} +$A$ -- не чёткое изображение, на рисунке -- границы размытия $\sigma$. Цель минимизировать ошибку, в идеале, получить ошибку, равную нулю. -Зная, что матрица P - это проекционная матрица мы можем варьировать матрицы поворота и сдвига(R, T), которые входят в её состав. Perspective Points Problem - проблема того что реальная точка может восстановиться в две и нужно понять у какой коэффициент ошибки меньше. +\[error(A) = \sum_i\left( \begin{pmatrix} u_i\\v_i \end{pmatrix} - \begin{pmatrix} u_i^A\\v_i^A \end{pmatrix} \right)^2 \to \min(R, T)\] -Определение на изображении планарных (плоских) объектов -- гомография. +В иделаьном случае матрицы будут равны, а их разность равняться нулю.Ошибка возводится в квадрат для увеличения чувствительности и удобства распознавания. -(9) -Как понять, что объект плоский. Все точки объекта связаны определёнными геометрическими преобразованиями и возможно построить между ними зависимостями. +\[ \begin{pmatrix} u_i^A\\v_i^A \end{pmatrix} = P \begin{pmatrix} x_i\\y_i\\z_i \end{pmatrix} \] -объект = u,v -изображение = \tilde{u}, \tilde{v} +Зная, что матрица $P$ -- это проекционная матрица, мы можем варьировать матрицы поворота и сдвига $(R, T)$, которые входят в её состав. \textbf{Perspective Points Problem} -- проблема того что реальная точка может восстановиться в две и нужно понять у какой коэффициент ошибки меньше. -\tu = h_11u+h_12v+h13/h31u+h32v+h_33 -\tv = h_21u+h_22v+h13/h31u+h32v+h_33 -H = h11 h12 h13\\h21 h22 h23\\h31 h32 h33 - матрица гомографии -(tu tv 1) = H(u v 1) +\subsection{Определение на изображении планарных (плоских) объектов} +Гомография. -задача - поиск точек, подверженных гомографии. Такой поиск называется схема RANSAC. +\begin{figure}[H] + \centering + \fontsize{12}{1}\selectfont + \includesvg[scale=1.01]{pics/04-vora-00-homographia.svg} +\end{figure} + +Как понять, что объект плоский? Все точки объекта связаны определёнными геометрическими преобразованиями и возможно построить между ними зависимостями. Координаты объекта -- $u,v$; координаты объекта на изображении -- $\tilde{u}, \tilde{v}$ + +\begin{equation*} + \begin{gathered} +\tilde{u} = \frac{h_{11}u + h_{12}v + h_{13}}{h_{31}u + h_{32}v + h_{33}}\\ +\tilde{v} = \frac{h_{21}u + h_{22}v + h_{13}}{h_{31}u + h_{32}v + h_{33}}\\ +\begin{pmatrix} \tilde{u}\\\tilde{v}\\1 \end{pmatrix} = H \cdot \begin{pmatrix} u\\ v\\ 1 \end{pmatrix} + \end{gathered} +\end{equation*} +Матрица гомографии +\[ H = \begin{pmatrix} h_{11}&h_{12}&h_{13}\\h_{21}&h_{22}&h_{23}\\h_{31}&h_{32}&h_{33} \end{pmatrix} \] + +Основная задача -- поиск точек, подверженных гомографии. Такой поиск называется схема RANSAC. \end{document} diff --git a/pics/04-vora-00-blurring.svg b/pics/04-vora-00-blurring.svg new file mode 100644 index 0000000..95ebaf7 --- /dev/null +++ b/pics/04-vora-00-blurring.svg @@ -0,0 +1,223 @@ + + + + + + + + + + image/svg+xml + + + + + + + + camera + image + плоскостьреальногообъекта + + + + + + + + + $A_i(u_i,v_i)$ + $\sigma$ + $\Delta$ + $A_0(u_0,v_0)$ + $A$ + $A'$ + + diff --git a/pics/04-vora-00-homographia.svg b/pics/04-vora-00-homographia.svg new file mode 100644 index 0000000..d3d6e4e --- /dev/null +++ b/pics/04-vora-00-homographia.svg @@ -0,0 +1,119 @@ + + + + + + + + + + image/svg+xml + + + + + + + Книга + Изображение + поворот и маштаб + + + + + + diff --git a/pics/04-vora-00-obj-height.svg b/pics/04-vora-00-obj-height.svg new file mode 100644 index 0000000..49d1ae7 --- /dev/null +++ b/pics/04-vora-00-obj-height.svg @@ -0,0 +1,154 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + Камера + Объект + + + + + h + l + + $\alpha$ + + diff --git a/pics/04-vora-00-obj-moving.svg b/pics/04-vora-00-obj-moving.svg new file mode 100644 index 0000000..40dad57 --- /dev/null +++ b/pics/04-vora-00-obj-moving.svg @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + $x$ + $y$ + $z$ + + + + $V_z$ (радиальное) + $V_x$ (касательное) + $V_z$ (касательное) + + diff --git a/pics/04-vora-00-pinhole-iso.svg b/pics/04-vora-00-pinhole-iso.svg new file mode 100644 index 0000000..74da5c1 --- /dev/null +++ b/pics/04-vora-00-pinhole-iso.svg @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + проекция наплоскость $x$ + $y$ + $z$ + $x$ + $p(x,y,z)$ + 0 + + + + + + $Q(u,v)$ + + + + $0'$ + + diff --git a/pics/04-vora-00-pinhole.svg b/pics/04-vora-00-pinhole.svg new file mode 100644 index 0000000..49e4891 --- /dev/null +++ b/pics/04-vora-00-pinhole.svg @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + плоскостьизображения + pinhole + + + + + + + + + + + + + +