543 lines
39 KiB
TeX
543 lines
39 KiB
TeX
\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{Детектирование характерных точек объекта}
|
||
В первую очередь это контраст. то есть характерная точка это переход от контрастной к неконтрастной области, угловые, на рёбрах
|
||
\begin{figure}[H]
|
||
\centering
|
||
\fontsize{12}{1}\selectfont
|
||
\includesvg[scale=1.01]{pics/04-vorpa-00-1-aperture.svg}
|
||
\end{figure}
|
||
|
||
Если объект сливается с фоном в видимом спектре его обнаружить не удастся.
|
||
|
||
\textbf{Детекторы} -- обнаружение. \textbf{Дескрипторы} -- обнаружение и описание. Мы всё будем называть детекторами. Хороший алгоритм должен быть инвариантен к шумам и деформациям.
|
||
|
||
\subsection{Характеристики хорошего детектора}
|
||
\begin{itemize}
|
||
\item инвариантность относительно преобразования изображения
|
||
\begin{enumerate}
|
||
\item смещения
|
||
\item поворота
|
||
\item к изменению масштаба (харрис-, харрис-лаплас+)
|
||
\item изменению яркости (моравец-, харрис+)
|
||
\item изменению точки положения камеры
|
||
\end{enumerate}
|
||
\item повторяемость (при изменении условийсъёмки)
|
||
\item локальность (при перекрытии объекта часть признаков должна остаться видимой, например если взять контур и его часть перекроется -- он перестанет детектироваться)
|
||
\item репрезентативность (кол-во признаков должно быть достаточным для детектировании даже на небольшом масштабе)
|
||
\item Точность
|
||
\item Эффективность (не требовательны к вычислительным ресурсам и времени)
|
||
\end{itemize}
|
||
|
||
\subsection{Детектор Моравеца}
|
||
Самый простой детектор углов на изображении.
|
||
\begin{figure}[H]
|
||
\centering
|
||
\fontsize{12}{1}\selectfont
|
||
\includesvg[scale=1.01]{pics/04-vorpa-00-1-moravets.svg}
|
||
\end{figure}
|
||
|
||
Чтобы найти объект проходим окном (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\]
|
||
|
||
Если интенсивность одинаковая -- получим значение около нуля. Чем больше эта функция, тем характернее точка.
|
||
\begin{figure}[H]
|
||
\centering
|
||
\fontsize{12}{1}\selectfont
|
||
\includesvg[scale=1.01]{pics/04-vorpa-00-1-corners.svg}
|
||
\end{figure}
|
||
Самое максимальное изменение мы увидим на углу объекта.
|
||
|
||
\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}\]
|
||
Сумма квадратов разностей и остаётся только часть со смещениями в векторном (транспонируемый вектор) виде
|
||
\[ \left[\frac{dI}{dx} \frac{dI}{dy}\right] \cdot \begin{bmatrix} u\\v \end{bmatrix} \]
|
||
|
||
(формула ляма)
|
||
\begin{equation*}
|
||
\begin{gathered}
|
||
V_{u,v}(x,y) = \sum_{\forall a,b}\left(\left[\frac{dI}{dx} \frac{dI}{dy}\right] \cdot
|
||
\begin{bmatrix} u\\v \end{bmatrix} \right)^2 =\\
|
||
= \sum_{\forall a,b}[u v] \begin{bmatrix} \frac{dI}{dx}\\\frac{dI}{dy} \end{bmatrix}
|
||
\cdot \left[\frac{dI}{dx} \frac{dI}{dy}\right] \begin{bmatrix} u\\v \end{bmatrix} =\\
|
||
= [u v]\left(\sum \begin{bmatrix} \frac{dI}{dx}\\\frac{dI}{dy} \end{bmatrix}
|
||
\cdot\left[\frac{dI}{dx} \frac{dI}{dy}\right]\right)\cdot \begin{bmatrix} u\\v \end{bmatrix}
|
||
\end{gathered}
|
||
\end{equation*}
|
||
|
||
получаем автокорреляционную матрицу $A_{u,v}(x,y)$. глядя на числа из неё можно понять характерны ли числа. Если числа большие -- пиксель можно характеризовать как угол. Если число $\lambda_1 \gg \lambda_2$ то это пиксель ребра. Если оба близки к нулю -- это не характерная точка.
|
||
\begin{itemize}
|
||
\item [+] инвариантен к поворотам.
|
||
\item [-] более сложный по отношению к моравецу, восприимчив к шумам, не инвариантен к масштабированию
|
||
\end{itemize}
|
||
|
||
Модификация -- детектор Харриса-Лапласа -- инвариантен к масштабированию (из-за вторых производных).
|
||
|
||
\subsection{Детектор FAST}
|
||
Features from Accelerated Test
|
||
\begin{figure}[H]
|
||
\centering
|
||
\fontsize{12}{1}\selectfont
|
||
\includesvg[scale=1.01]{pics/04-vorpa-00-1-FAST.svg}
|
||
\end{figure}
|
||
Рассматривается точка и окружность, а не прямоугольник. Окружность вписана в квадрат 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}
|
||
Maximally stable extremal regions
|
||
|
||
не будут исчезать при изменении порогового значения. То есть превращаем изображение не в градации серого, а в ч/б (бинаризация). Варьируем порог и в итоге смотрим какие участки исчезают, а те что остались -- наиболее устойчивые.
|
||
$$ I_g(x,y) =
|
||
\begin{cases}
|
||
255, I(x,y)>g\\
|
||
0, I(x,y)\leq g
|
||
\end{cases}, g \in [0,255]
|
||
$$
|
||
g -- порог бинаризации. варьируем, строим дерево
|
||
(1)
|
||
светлая буква на тёмном фоне. Можем это изображение масштабировать. Если мы делаем маленький порог ($g=50$) всё изображение светлое, иногда только точки будут тёмные, увеличивая порог видим разное поведение характерных точек. Если точки совсем пропали - нет смысла ни масштабировать ни менять пороги. Плохо выраженные точки при изменённых порогах не попадут в стабильные характерные точки.
|
||
|
||
Применяется чаще всего для градаций серого, хотя цветные тоже иногда делят на компоненты и применяют этот метод.
|
||
|
||
\subsection{Дескрипторы}
|
||
\subsubsection{SIFT}
|
||
Scale Invariant Feature Transform. Размываем начальное изображение гауссовым ядром
|
||
$$\mathbb{G}(x, y, \sigma) = \frac{1}{2\pi\sigma^2}e^{\frac{-(x^2+y^2)}{2\pi^2}}$$
|
||
|
||
$$\mathbb{L}(x,y,\sigma) = I(x, y)*\mathbb{G}(x,y,\sigma)$$
|
||
|
||
размываем не всё изображение, а, например, окрестность 16х16 пикселей. Для каждого из пикселей определяем магнитуды и направление, задаём веса (чтобы какие-то учитывались больше, а какие-то меньше).
|
||
(2)
|
||
по каждому из пикселей таких квадратов вычисляем амплитуду градиента и направление, строим гистограммы по каждому квадрату. ориентация ключевой точки
|
||
$$m(x,y)=\sqrt{(L(x+1, y)-L(x-1, y))^2+(L(x, y+1)-L(x, y-1))^2}$$
|
||
направление ориентации можно вычислить как
|
||
$$\theta(x,y)=\arctan\left(\frac{L(x, y+1)-L(x, y-1)}{L(x+1, y)-L(x-1, y)}\right)$$
|
||
(3)
|
||
Выбираем порог, который отсеит маленькие значения (обычно берут 80\%) Всё что выше будет потенциальными характерными точками изображения. на основе гистаграммы можем построить некий усреднённый дескриптор квадратов 8х8 (можно отсортировать для ускорения). Квадраты 8х8 можем представить как набор градиентов
|
||
(4)
|
||
|
||
\begin{itemize}
|
||
\item [+] инвариантность относительно масштаба, поворота, смещения
|
||
\item [+] устойчивость к шуму
|
||
\item [+] вычислительная эффективность
|
||
\end{itemize}
|
||
\subsubsection{SURF}
|
||
speeded-up robust features
|
||
Также как и в предыдущем -- инвариантен к поворотам и масштабированию. Используется матрица гёссе - гессиан (вторые производные).
|
||
(5)
|
||
сигма - это не размытие, а масштаб. Использование гессиана позволяет определять характерные точки инвариантные к повороту и масштабированию, вычисляем точки, которые не будут меняться. Детерминант будет достигать экстремумов в точках с максимальным изменением яркости.
|
||
|
||
Делим изображение на квадраты (например, 8х8)
|
||
(6)
|
||
вычисляем для каждого квадрата градиент, можно использовать свёртку с примитивами Хаара и строим функцию различия (где наибольшее и где наименьшее). где меньше там примитив хаара хуже описывает объект. в итоге описываем отдельные части изображения.
|
||
|
||
\subsubsection{GLOH}
|
||
Gradient location orientation histogram -- модификация SIFT, но здесь окрестности не квадратные, а рассматриваются разные сектора.
|
||
(7)
|
||
и для каждого сектора делаем тоже самое про градиент как в СИФТ. радиусы 6, 11, 15 пикселей. В каждом таком секторе строим свой набор (карту) градиентов. Получается 17 шт. строим и определяем наибольшие с порогом 0,8 и суммируем те, которые прошли порог.
|
||
|
||
В отличие от сифт учитывает характерные точки, попавшие на границы разделения квадратами
|
||
|
||
\subsubsection{DAISY}
|
||
модификация SIFT рассматриваем окрестности в виде окружностей (не секторов как гло)
|
||
(8)
|
||
окрестности внахлёст и в некоторых задачах лучше подходит, но будет гораздо хуже по вычислительной сложности.
|
||
|
||
$$I(x,y)$$
|
||
\end{document}
|
||
|