BMSTU/04-videostream-object-param...

265 lines
17 KiB
TeX
Raw Normal View History

2023-02-13 13:59:23 +03:00
\documentclass{article}
\input{settings/common-preamble}
\input{settings/bmstu-preamble}
\input{settings/fancy-listings-preamble}
\author{Локтев Даниил Алексеевич}
\title{Алгоритмы (методы)определения параметров объектов в видеопотоке}
\date{2023-02-08}
\begin{document}
\fontsize{14}{18}\selectfont
\maketitle
\tableofcontents
\newpage
\section{Введение}
\subsection{Основные понятия}
РК 15.03 и 10.04
\textbf{Алгоритм} -- это определённая строгая последовательность дискретных действий, которая приводит к конечному результату
\textbf{Метод} -- менее конкретный, чем алгоритм, основан на законах окружающей среды. Метод может быть реализован большим числом алгоритмов.
\textbf{Подход} -- это совокупность методов.
\subsection{Основные этапы работы с изображением}
\begin{enumerate}
\item Получение изображения (регистрация);
\item улучшение изображения (фильтрация, деформация);
\item детектирование объектов;
\item отслеживание объектов;
\item определение параметров объектов (геометрические, кинетические, ...);
\item обработка информации (стат. анализ);
\item разпознавание объектов;
\item сжатие данных об объекте.
\end{enumerate}
Методы выявления расстояния до объекта:
\begin{itemize}
\item времяпролётные PMD-камеры
\item ToF-устройства (работают по принципу эхолокации, но со светом)
\item Обычные камеры (стереозрение, расфокусировка).
\end{itemize}
\subsection{Основные этапы функционирования системы мониторинга}
\begin{enumerate}
\item Активация внешних модулей (получение первоначальных данных);
\item сбор информации об исследуемом объекте;
\item мониторинг процесса получения первоначальных данных и общего состояния системы;
\item отслеживание и контроль параметров качества;
\item обеспечение персонала и оборудования необходимой информацией;
\item установление взаимодействия между персоналом и оборудованием (также между различными модулями системы);
\item изменение параметров фото- и видеофиксации объекта контроля, в зависимости от параметров внешней среды (например, освещённость) или характеристик состояния и поведения самого объекта контроля.
\end{enumerate}
\begin{figure}[H]
\centering
\fontsize{11}{1}\selectfont
\includesvg[scale=.9]{pics/04-vora-00-image-taking-device.svg}
\caption{Регистрация цифрового изображения в устройстве}
\end{figure}
\subsection{Основные характеристики камеры}
Есть камеры, хранящие набор пикселей, но есть и «векторные» которые могут менять свою точку фокусировки и хранить набор пикселей для каждого из фокусов. Удобно менять точку фокусировки уже после создания снимка.
\begin{itemize}
\item Характеристики оптической системы.
\begin{enumerate}
\item Основная характеристика -- фокусное расстояние (способность собирать в одну точку лучи света, параллельных оптической оси)
\begin{figure}[H]
\centering
\fontsize{14}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vora-00-focusing.svg}
\end{figure}
\item угол поля зрения (обратная зависимость от фокусного расстояния) -- угол между двумя лучами, пороходящими через центр входного зрачка объектива к наиболее удалённым точкам попадающим на изображения.
\item апертура объектива -- это диаметр светового пучка на входе в объектив, полностью проходящего через диафрагму (есть входная и выходная, чаще всего считают одинаковыми). от этого будет сильно зависеть характеристики изображения.
\item разрешающая сила объектива (характеристики, отображающие его возможность передачи изображения, зависит от предыдущих параметров).
\[\frac{1}{K} = \frac{1}{N} + \frac{1}{M} \]
где $K$ -- это общая разрешающая сила, $N$ - разрешающая сила оптической системы, $M$ - разрешающая сила системы преобразования
\[ K = \frac{NM}{N+M} \]
\end{enumerate}
\item характеристики светочувствительной матрицы
\begin{enumerate}
\item отношение сигнал/шум (часто рассматривается вместе с усилителем) физическая величина, определяющая средние колебания в определённых пределах;
\item физический размер пикселя светочувствительной матрицы;
\item физический размер всей светочувствительной матрицы (ширина на высоту);
\item выдержка -- интервал времении, в течение которого свет попадает на участок светочувствительной матрицы;
\item глубина резкости (глубина резкозти изображаемого пространства) - расстояние вдоль оптической оси линзы.
\end{enumerate}
\end{itemize}
Зная характеристики камеры мы можем по размытому изображению определить расстояние.
2023-02-17 12:10:11 +03:00
\section{Определение параметров объекта}
Удалённость от камеры, размеры объекта, кинематические характеристики (скорость, направление движения).
2023-02-17 17:21:56 +03:00
\subsection{Метод пропорций}
должны быть априорные данные об объекте, для которого мы хотим определять характеристики. Если нет данных об объекте -- должны быть размеры объектов в сцене (дорожные знаки, разметка, и так далее), на основе данных о сцене и изображения объекта на сцене можем вычислить нужные параметры.
2023-02-17 12:10:11 +03:00
Исходные данные:
\begin{itemize}
2023-02-17 17:21:56 +03:00
\item $H_{o}$ -- высота объекта в пикселях $h$ -- априорная высота (в физическом мире);
\item $\alpha_{k}, \beta_{k}$ -- характеристики камеры -- углы обзора кадра по вертикали и горизонтали, соответственно.
\item $H_{k}$, $W_{k}$ -- высота и ширина кадра
2023-02-17 12:10:11 +03:00
\end{itemize}
найти $l$ -- расстояние до объекта, $v$ -- скорость.
2023-02-17 17:21:56 +03:00
\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}
2023-02-17 12:10:11 +03:00
$v_x$ тоже касательный считается по аналогии
2023-02-17 17:21:56 +03:00
\[ v_x = \frac{\beta_k\cdot\Delta_o\cdot l}{W_k \cdot N\tau} \]
Для $v_z$ формула отличается, так как движение радиальное и мы фактически считаем расстояние до объекта
\[ 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) \]
Основной недостаток метода в том, что нам нужны априорные знания об объектах.
\subsection{Метод pinhole}
\begin{figure}[H]
\centering
\fontsize{14}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vora-00-pinhole.svg}
\end{figure}
Мы знаем, что все лучи проходят через одну точку, тогда стоит задача по координатам $(X, Y, Z)$ получить двумерные координаты $(u, v)$.
2023-02-17 12:10:11 +03:00
2023-02-17 17:21:56 +03:00
\begin{figure}[H]
\centering
\fontsize{14}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vora-00-pinhole-iso.svg}
\end{figure}
2023-02-17 12:10:11 +03:00
2023-02-17 17:21:56 +03:00
\[ \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)$.
2023-02-17 12:10:11 +03:00
2023-02-17 17:21:56 +03:00
\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*}
2023-02-17 12:10:11 +03:00
2023-02-17 17:21:56 +03:00
\[ \begin{pmatrix} u \\ v \end{pmatrix} = P \cdot \begin{pmatrix} x \\ y \\ z \end{pmatrix} \]
2023-02-17 12:10:11 +03:00
2023-02-17 17:21:56 +03:00
где $P$ -- проекционная матрица.
2023-02-17 12:10:11 +03:00
2023-02-17 17:21:56 +03:00
\[ P = \begin{pmatrix} f(x) & 0 & c(x) \\ 0 & f(y) & c(y) \\ 0 & 0 & 1 \end{pmatrix} \]
2023-02-17 12:10:11 +03:00
В данной задаче возникает проблема искажений (аберрации, дисторсия).
\[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\]
2023-02-17 17:21:56 +03:00
аналошгично $y'$
2023-02-17 12:10:11 +03:00
\[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$. Коэффициенты находятся путём калибровки камеры. И используются для обратного вычисления координат.
2023-02-17 17:21:56 +03:00
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vora-00-blurring.svg}
\end{figure}
$A$ -- не чёткое изображение, на рисунке -- границы размытия $\sigma$. Цель минимизировать ошибку, в идеале, получить ошибку, равную нулю.
\[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)\]
В иделаьном случае матрицы будут равны, а их разность равняться нулю.Ошибка возводится в квадрат для увеличения чувствительности и удобства распознавания.
\[ \begin{pmatrix} u_i^A\\v_i^A \end{pmatrix} = P \begin{pmatrix} x_i\\y_i\\z_i \end{pmatrix} \]
2023-02-17 12:10:11 +03:00
2023-02-17 17:21:56 +03:00
Зная, что матрица $P$ -- это проекционная матрица, мы можем варьировать матрицы поворота и сдвига $(R, T)$, которые входят в её состав. \textbf{Perspective Points Problem} -- проблема того что реальная точка может восстановиться в две и нужно понять у какой коэффициент ошибки меньше.
2023-02-17 12:10:11 +03:00
2023-02-17 17:21:56 +03:00
\subsection{Определение на изображении планарных (плоских) объектов}
Гомография.
2023-02-17 12:10:11 +03:00
2023-02-17 17:21:56 +03:00
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vora-00-homographia.svg}
\end{figure}
2023-02-17 12:10:11 +03:00
2023-02-17 17:21:56 +03:00
Как понять, что объект плоский? Все точки объекта связаны определёнными геометрическими преобразованиями и возможно построить между ними зависимостями. Координаты объекта -- $u,v$; координаты объекта на изображении -- $\tilde{u}, \tilde{v}$
2023-02-17 12:10:11 +03:00
2023-02-17 17:21:56 +03:00
\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} \]
2023-02-17 12:10:11 +03:00
2023-02-17 17:21:56 +03:00
Основная задача -- поиск точек, подверженных гомографии. Такой поиск называется схема RANSAC.
2023-02-27 17:37:31 +03:00
\section{Стереозрение}
2023-02-27 19:21:27 +03:00
Основано на разделе под названием эпиполярная геометрия.
2023-02-27 17:37:31 +03:00
2023-02-27 19:21:27 +03:00
берём две камеры, замеряем их углы обзора.
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vora-00-stereobase.svg}
\end{figure}
d -- стереобаза (расстояние между двумя камерами)
2023-02-27 17:37:31 +03:00
\[ r = \frac{f(x_1-x_2)}{d} \]
2023-02-27 19:21:27 +03:00
Преимущество в лёгкости, недостаток в сложности настройки подобной системы (две абсолютно идентичные камеры будут всё равно иметь свои искажения, углы зрения и так далее). Частоты камер могут не совпадать. Оси камер должны быть строго параллельны друг другу (соосны).
2023-02-27 17:37:31 +03:00
2023-02-27 19:21:27 +03:00
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vora-00-stereoimg.svg}
\end{figure}
2023-02-27 17:37:31 +03:00
В результате получаем стереопару. Библиотека \code{calib3d}. Получив стереопару возможно строить карту глубин изображения (depth map). \code{cvStereoBMState} block matching. ищем пиксель с одной камеры в полосе другой камеры. Есть другой вид функций -- \code{...GC...} -- graph cut, вычислительно более сложны, остаются только ветки с наименьшими ошибками сопоставления. \footnote{Bradski - Learning OpenCV, Multiple View Geometry in Computer Vision - Hartley, Zisserman}
\subsection{Ректификация}
2023-02-27 19:21:27 +03:00
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vora-00-stereorectif.svg}
\end{figure}
2023-02-27 17:37:31 +03:00
Для определения объекта далее берутся характерные точки и признаки на одном изображении и ищутся на другом изображении.
\section{Анализ размытия изображения}
2023-02-13 13:59:23 +03:00
\end{document}