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

439 lines
31 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\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}
Зная характеристики камеры мы можем по размытому изображению определить расстояние.
\section{Определение параметров объекта}
Удалённость от камеры, размеры объекта, кинематические характеристики (скорость, направление движения).
\subsection{Метод пропорций}
должны быть априорные данные об объекте, для которого мы хотим определять характеристики. Если нет данных об объекте -- должны быть размеры объектов в сцене (дорожные знаки, разметка, и так далее), на основе данных о сцене и изображения объекта на сцене можем вычислить нужные параметры.
Исходные данные:
\begin{itemize}
\item $H_{o}$ -- высота объекта в пикселях $h$ -- априорная высота (в физическом мире);
\item $\alpha_{k}, \beta_{k}$ -- характеристики камеры -- углы обзора кадра по вертикали и горизонтали, соответственно.
\item $H_{k}$, $W_{k}$ -- высота и ширина кадра
\end{itemize}
найти $l$ -- расстояние до объекта, $v$ -- скорость.
\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\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)$.
\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'(1+k_1*r^2 + k_2*r^4 + k_3*r^6) + p_1(r^2+2y'^2) + 2p_2x'y'\]
По изображению можем получить все коэффициенты и посчитать координаты $u, v$. Коэффициенты находятся путём калибровки камеры. И используются для обратного вычисления координат.
\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} \]
Зная, что матрица $P$ -- это проекционная матрица, мы можем варьировать матрицы поворота и сдвига $(R, T)$, которые входят в её состав. \textbf{Perspective Points Problem} -- проблема того что реальная точка может восстановиться в две и нужно понять у какой коэффициент ошибки меньше.
\subsection{Определение на изображении планарных (плоских) объектов}
Гомография.
\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.
\section{Стереозрение}
Основано на разделе под названием эпиполярная геометрия.
берём две камеры, замеряем их углы обзора.
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vora-00-stereobase.svg}
\end{figure}
d -- стереобаза (расстояние между двумя камерами)
\[ r = \frac{f(x_1-x_2)}{d} \]
Преимущество в лёгкости, недостаток в сложности настройки подобной системы (две абсолютно идентичные камеры будут всё равно иметь свои искажения, углы зрения и так далее). Частоты камер могут не совпадать. Оси камер должны быть строго параллельны друг другу (соосны).
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vora-00-stereoimg.svg}
\end{figure}
В результате получаем стереопару. Библиотека \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{Ректификация}
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vora-00-stereorectif.svg}
\end{figure}
Для определения объекта далее берутся характерные точки и признаки на одном изображении и ищутся на другом изображении.
\section{Вопросы к РК}
\begin{enumerate}
\item Этапы работы с изображениями
\item Характеристики камеры
\item Метод пропорции
\item Стереозрение
\item Pinhole-камера
\item Гомография
\item Учёт искажения линз (дисторсии)
\item Метод определения расстояния до объекта, анализа размытия изображения
\begin{itemize}
\item из-за расфокусировки
\item из-за движения камеры или объекта
\end{itemize}
\item Методы оценки размытия:
\begin{itemize}
\item Elder-Zucker,
\item Hu-Haan,
\item Akimov-Vatolin
\end{itemize}
\end{enumerate}
\section{Анализ размытия изображения}
Зная точку фокусировки возможно определить, на каком расстоянии находится объект. Получается, не нужна стереопара.
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vorpa-00-1-focus-point.svg}
\end{figure}
$\sigma$ -- пиксели, размытие, $r$ -- расстояние, метры.
В отмеченных областях не можем мерить этим методом -- чувствительность метода будет невысокая (расстояние меняется незначительно, а размытие значительно, или наоборот). Возможно менять точку фокусировки. Есть неоднозначность -- одно и тоже размытие возможно на разных расстояниях. Но из-за разницы отношений возможно изменить расстояние до камеры и понять, к какой точке ближе.
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vorpa-00-2-blurring.svg}
\end{figure}
плоскость фокусировки -- это место, где объект чёткий. $D_{o}$ -- расстояние до объекта, $D_{f}$ -- расстояние от объектива до сфокусированного изображения, $D_{r}$ -- расстояние до размытого.
\begin{equation*}
\begin{gathered}
\frac{1}{f} = \frac{1}{D_o} + \frac{1}{D_f} \\
\sigma = \frac{B D_r-D_f}{d_f}; D_r = D_f\pm\frac{D_f*\sigma}{B}
\end{gathered}
\end{equation*}
цель найти $D_o$.
Если объект в точке фокусировки $D_f = d_r, \sigma=0$. $D_f = \frac{f D_o}{d_o - f}$ и это не расстояние до объекта, а расстояние до сфокусированного объекта $D_{of}$.
\[D_o = \frac{B D_{of} f}{(B+\sigma)f - \sigma D_{of}}\]
Размытие зависит не только от расстояния, но может возникать/изменяться и из-за других факторов, таких как качество изображения, света, свойств объекта и цветов. Разница размытий в разных цветах $F$ -- фокусное расстояние.
\[D_o = \frac{\sigma_r F_r F_g}{\sigma_rF_r+(F_g-F_r)B}\]
Размытие от движения. Формула будет как в стереозрении, но только не две камеры, а одна камера в разные моменты времени
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vorpa-00-3-move-blur.svg}
\end{figure}
$f$ -- фокусное расстояние, $m$ - расстояние движения камеры, $d$ -- расстояние до объекта
\[ \sigma = \frac{fm}{d}; d = \frac{fm}{\sigma} \]
Размытие будет зависеть от угла движения и других факторов, которые должны попадать в формулу. Формулы отдельные и для расфокусировки и для движения объекта. Все размытия нужно перевести из пикселей в метры
\[\sigma = \sigma_{pix}S_x\]
$S_x$ -- размер одного пикселя светочувствительной матрицы -- известная характеристика (например, $7*10^{-6}$).
\subsection{Оценка размытия}
Как автоматизировать расчёт размытия? Возможно только получить некоторую оценку, то есть не точное вычисление.
\begin{itemize}
\item Метод Elder-Zucker. Есть изображение, берём размытый объект.
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vorpa-00-4-blurred-object.svg}
\end{figure}
объект 1 находится перед размытым -- более чёткий, чем 2. в данном случае удобнее взять координату $y$. Берём изображение и преобразовываем в сигнал.
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vorpa-00-5-integrated-method.svg}
\caption{изменение расстояния относительно изменения интенсивности пикселя}
\end{figure}
Необходимо найти границы перехода и его центр. Предлагается найти первую производную ($b'(x)$ -- зависимость изменения интенсивности от координаты). Вторая производная ($b''(x) = 0$, $c$ -- центр размытия). Третья производная -- находим точки перехода (перепада) $b'''(x)$. Для каждого вычисления нужно выставить пороги, при которых мы точку считаем нулём.
\item Метод Hu-Haan. Аналогично есть изображение и рассматриваем сигнал, зависящий от одной координаты.
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vorpa-00-6-blurring-method.svg}
\end{figure}
Взяли исходный сигнал и добавили дополнительное размытие с известным коэффициентом $\sigma_a$. Получаем сигнал. Взяли исходный сигнал и добавили дополнительное размытие с известным коэффициентом $\sigma_b$. Получаем сигнал. Находим разницу между переразмытыми сигналами ($ba(x) - bb(x)$) разницу между исходным и первично размытым. Находим отношение
\[ratio(x) = \frac{b(x) - ba(x)}{ba(x) - bb(x)}\]
Если отношение маленькое - размытие исходного близко к $ba$. Если отношение максимальное - изначальное изображение близко к максимальному. Строим график и определяем $r_{max}$.
\[\sigma \approx \frac{\sigma_a\sigma_b}{(\sigma_b - \sigma_a)r_{max}(x) + \sigma_b}\]
\item Метод Акимова-Ватолина-Смирнова. Представляет собой совокупность двух предыдущих. Получаем сигнал от одной координаты.
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vorpa-00-7-combine.svg}
\end{figure}
идеальный случай, размытия нет, резкий переход.
Если размытие есть (предполагаем что размытие подвержено гауссову закону распределения)
\[i(x) = f(x) \otimes g(x, \sigma) \]
и тогда переход - это и есть размытие. Что сделать, чтобы найти сигма-размытие -- переразмываем один раз и получаем известное $\sigma_1 \Rightarrow i_1(x)$ находим первую производную для обоих изображений. Берём отношение производных и получаем некоторый график ($\Omega$-образный), по нему можем определить точки, где график будет около нуля и расстояние между ними это и будет размытие.
\end{itemize}
\section{Детектирование характерных точек объекта}
В первую очередь это контраст. то есть характерная точка это переход от контрастной к неконтрастной области, угловые, на рёбрах
(1)
Если объект сливается с фоном в видимом спектре его обнаружить не удастся.
\textbf{Детекторы} -- обнаружение. \textbf{Дескрипторы} -- обнаружение и описание. Мы всё будем называть детекторами. Хороший алгоритм должен быть инвариантен к шумам и деформациям.
\subsection{Детектор Моравеца}
Самый простой детектор углов на изображении.
(2)
Чтобы найти объект проходим окном (3х3,5х5,9х9) по изображению и смотрим на изменение интенсивности центрального пикселя и окружающих. Пиксель характеризуется координатами $x$, $y$. Получаем 8 направлений смещения относительно пикселя ($u$, $v$).
\[(u, v) \in \{(-1,0), (-1,-1), (0,-1), (1,-1), (1,0), (1,1), (0,1), (-1,1) \}\]
\[V_{u,v}(x,y) = \sum_{\forall a,b}(I(x+u+a, y+v+b)-I(x+a, y+b))^2\]
Если интенсивность одинаковая -- получим значение около нуля. Чем больше эта функция, тем характернее точка.
(3)
Самое максимальное изменение мы увидим на углу объекта.
\begin{itemize}
\item [+] самый простой для интерпретации, программной реализации.
\item [-] не инвариантен к поворотам, если у объекта есть большое количество диагональных рёбер.
\end{itemize}
\subsection{Детектор Харриса}
улучшение моравеца, инвариантен к поворотам. Рассматриваем первые производные от детектора моравеца. Ряд тейлора
\[ I(x+y+a, y+v+b)\approx I(x+a, y+b) + u\frac{dI}{dx}+v\frac{dI}{dy}\]
Сумма квадратов разностей и остаётся только часть со смещениями в векторном (транспонируемый вектор) виде
\[ [\frac{dI}{dx} \frac{dI}{dy}] \cdot [u v] \]
(формула ляма)
\[V_{u,v}(x,y) = \sum_{\forall a,b}([\frac{dI}{dx} \frac{dI}{dy}] \cdot [u v])^2 = \sum[u v][u\frac{dI}{dx} v\frac{dI}{dy}]\cdot [\frac{dI}{dx} \frac{dI}{dy}][uv] = [uv](\sum[\frac{dI}{dx} \frac{dI}{dy}]\cdot[\frac{dI}{dx} \frac{dI}{dy}])\cdot [u v]\]
получаем автокорреляционную матрицу $A_{u,v}(x,y)$. глядя на числа из неё можно понять характерны ли числа. Если числа большие -- пиксель можно характеризовать как угол. Если число $\lambda_1 \gg \lambda_2$ то это пиксель ребра. Если оба близки к нулю -- это не характерная точка.
\begin{itemize}
\item [+] инвариантен к поворотам.
\item [-] более сложный по отношению к моравецу, восприимчив к шумам, не инвариантен к масштабированию
\end{itemize}
Модификация -- детектор Харриса-Лапласа -- инвариантен к масштабированию (из-за вторых производных).
\subsection{Детектор FAST}
Features from Accelerated Test
(4)
Рассматривается точка и окружность, а не прямоугольник. Окружность вписана в квадрат 7х7. Каждый пиксель тестовой выборки изображений $X\in[1...16]$ ищем три состояния -- темнее(D) светлее(B) и такой же(S), раскидываем в три множества.
\[S =
\begin{cases}
d, I_x\leq I_p -t\\
s, I_p-t < I_x < I_p+t\\
b, I_p+t \leq I_x\\
\end{cases}
\]
Строим дерево решений. Множество которое соответствует узлу дерева разбивается на подмножества и на основе этих деревьев не рассматриваем всё, а проходим по дереву и находим характерные точки.
\subsection{Детектор MSER}
\end{document}