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

543 lines
39 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
Для определения объекта далее берутся характерные точки и признаки на одном изображении и ищутся на другом изображении.
2023-03-06 09:07:56 +03:00
\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}
2023-02-27 17:37:31 +03:00
\section{Анализ размытия изображения}
2023-03-06 09:07:56 +03:00
Зная точку фокусировки возможно определить, на каком расстоянии находится объект. Получается, не нужна стереопара.
2023-03-07 09:10:21 +03:00
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vorpa-00-1-focus-point.svg}
\end{figure}
2023-03-06 09:07:56 +03:00
$\sigma$ -- пиксели, размытие, $r$ -- расстояние, метры.
2023-03-07 09:10:21 +03:00
В отмеченных областях не можем мерить этим методом -- чувствительность метода будет невысокая (расстояние меняется незначительно, а размытие значительно, или наоборот). Возможно менять точку фокусировки. Есть неоднозначность -- одно и тоже размытие возможно на разных расстояниях. Но из-за разницы отношений возможно изменить расстояние до камеры и понять, к какой точке ближе.
2023-03-06 09:07:56 +03:00
2023-03-07 09:10:21 +03:00
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vorpa-00-2-blurring.svg}
\end{figure}
2023-03-06 09:07:56 +03:00
2023-03-07 09:10:21 +03:00
плоскость фокусировки -- это место, где объект чёткий. $D_{o}$ -- расстояние до объекта, $D_{f}$ -- расстояние от объектива до сфокусированного изображения, $D_{r}$ -- расстояние до размытого.
2023-03-06 09:07:56 +03:00
\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}}\]
2023-03-07 09:10:21 +03:00
Размытие зависит не только от расстояния, но может возникать/изменяться и из-за других факторов, таких как качество изображения, света, свойств объекта и цветов. Разница размытий в разных цветах $F$ -- фокусное расстояние.
2023-03-06 09:07:56 +03:00
\[D_o = \frac{\sigma_r F_r F_g}{\sigma_rF_r+(F_g-F_r)B}\]
Размытие от движения. Формула будет как в стереозрении, но только не две камеры, а одна камера в разные моменты времени
2023-03-07 09:10:21 +03:00
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vorpa-00-3-move-blur.svg}
\end{figure}
2023-03-06 09:07:56 +03:00
$f$ -- фокусное расстояние, $m$ - расстояние движения камеры, $d$ -- расстояние до объекта
\[ \sigma = \frac{fm}{d}; d = \frac{fm}{\sigma} \]
Размытие будет зависеть от угла движения и других факторов, которые должны попадать в формулу. Формулы отдельные и для расфокусировки и для движения объекта. Все размытия нужно перевести из пикселей в метры
\[\sigma = \sigma_{pix}S_x\]
2023-03-07 09:10:21 +03:00
$S_x$ -- размер одного пикселя светочувствительной матрицы -- известная характеристика (например, $7*10^{-6}$).
2023-03-06 09:07:56 +03:00
\subsection{Оценка размытия}
2023-03-07 09:10:21 +03:00
Как автоматизировать расчёт размытия? Возможно только получить некоторую оценку, то есть не точное вычисление.
2023-03-06 09:07:56 +03:00
\begin{itemize}
\item Метод Elder-Zucker. Есть изображение, берём размытый объект.
2023-03-07 09:10:21 +03:00
\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}
2023-03-06 09:07:56 +03:00
Необходимо найти границы перехода и его центр. Предлагается найти первую производную ($b'(x)$ -- зависимость изменения интенсивности от координаты). Вторая производная ($b''(x) = 0$, $c$ -- центр размытия). Третья производная -- находим точки перехода (перепада) $b'''(x)$. Для каждого вычисления нужно выставить пороги, при которых мы точку считаем нулём.
\item Метод Hu-Haan. Аналогично есть изображение и рассматриваем сигнал, зависящий от одной координаты.
2023-03-07 09:10:21 +03:00
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vorpa-00-6-blurring-method.svg}
\end{figure}
2023-03-06 09:07:56 +03:00
2023-03-07 09:10:21 +03:00
Взяли исходный сигнал и добавили дополнительное размытие с известным коэффициентом $\sigma_a$. Получаем сигнал. Взяли исходный сигнал и добавили дополнительное размытие с известным коэффициентом $\sigma_b$. Получаем сигнал. Находим разницу между переразмытыми сигналами ($ba(x) - bb(x)$) разницу между исходным и первично размытым. Находим отношение
2023-03-06 09:07:56 +03:00
\[ratio(x) = \frac{b(x) - ba(x)}{ba(x) - bb(x)}\]
Если отношение маленькое - размытие исходного близко к $ba$. Если отношение максимальное - изначальное изображение близко к максимальному. Строим график и определяем $r_{max}$.
2023-03-07 09:10:21 +03:00
\[\sigma \approx \frac{\sigma_a\sigma_b}{(\sigma_b - \sigma_a)r_{max}(x) + \sigma_b}\]
2023-03-06 09:07:56 +03:00
\item Метод Акимова-Ватолина-Смирнова. Представляет собой совокупность двух предыдущих. Получаем сигнал от одной координаты.
2023-03-07 09:10:21 +03:00
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vorpa-00-7-combine.svg}
\end{figure}
идеальный случай, размытия нет, резкий переход.
Если размытие есть (предполагаем что размытие подвержено гауссову закону распределения)
2023-03-06 09:07:56 +03:00
\[i(x) = f(x) \otimes g(x, \sigma) \]
2023-03-07 09:10:21 +03:00
и тогда переход - это и есть размытие. Что сделать, чтобы найти сигма-размытие -- переразмываем один раз и получаем известное $\sigma_1 \Rightarrow i_1(x)$ находим первую производную для обоих изображений. Берём отношение производных и получаем некоторый график ($\Omega$-образный), по нему можем определить точки, где график будет около нуля и расстояние между ними это и будет размытие.
2023-03-06 09:07:56 +03:00
\end{itemize}
2023-02-27 17:37:31 +03:00
2023-03-23 11:20:22 +03:00
\section{Детектирование характерных точек объекта}
В первую очередь это контраст. то есть характерная точка это переход от контрастной к неконтрастной области, угловые, на рёбрах
2023-03-23 19:01:15 +03:00
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vorpa-00-1-aperture.svg}
\end{figure}
2023-03-23 11:20:22 +03:00
Если объект сливается с фоном в видимом спектре его обнаружить не удастся.
\textbf{Детекторы} -- обнаружение. \textbf{Дескрипторы} -- обнаружение и описание. Мы всё будем называть детекторами. Хороший алгоритм должен быть инвариантен к шумам и деформациям.
2023-04-04 09:56:51 +03:00
\subsection{Характеристики хорошего детектора}
\begin{itemize}
\item инвариантность относительно преобразования изображения
\begin{enumerate}
\item смещения
\item поворота
\item к изменению масштаба (харрис-, харрис-лаплас+)
\item изменению яркости (моравец-, харрис+)
\item изменению точки положения камеры
\end{enumerate}
\item повторяемость (при изменении условийсъёмки)
\item локальность (при перекрытии объекта часть признаков должна остаться видимой, например если взять контур и его часть перекроется -- он перестанет детектироваться)
\item репрезентативность (кол-во признаков должно быть достаточным для детектировании даже на небольшом масштабе)
\item Точность
\item Эффективность (не требовательны к вычислительным ресурсам и времени)
\end{itemize}
2023-03-23 11:20:22 +03:00
\subsection{Детектор Моравеца}
Самый простой детектор углов на изображении.
2023-03-23 19:01:15 +03:00
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vorpa-00-1-moravets.svg}
\end{figure}
2023-03-23 11:20:22 +03:00
Чтобы найти объект проходим окном (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\]
Если интенсивность одинаковая -- получим значение около нуля. Чем больше эта функция, тем характернее точка.
2023-03-23 19:01:15 +03:00
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vorpa-00-1-corners.svg}
\end{figure}
2023-03-23 11:20:22 +03:00
Самое максимальное изменение мы увидим на углу объекта.
\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}\]
Сумма квадратов разностей и остаётся только часть со смещениями в векторном (транспонируемый вектор) виде
2023-03-23 19:01:15 +03:00
\[ \left[\frac{dI}{dx} \frac{dI}{dy}\right] \cdot \begin{bmatrix} u\\v \end{bmatrix} \]
2023-03-23 11:20:22 +03:00
(формула ляма)
2023-03-23 19:01:15 +03:00
\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*}
2023-03-23 11:20:22 +03:00
получаем автокорреляционную матрицу $A_{u,v}(x,y)$. глядя на числа из неё можно понять характерны ли числа. Если числа большие -- пиксель можно характеризовать как угол. Если число $\lambda_1 \gg \lambda_2$ то это пиксель ребра. Если оба близки к нулю -- это не характерная точка.
\begin{itemize}
\item [+] инвариантен к поворотам.
\item [-] более сложный по отношению к моравецу, восприимчив к шумам, не инвариантен к масштабированию
\end{itemize}
Модификация -- детектор Харриса-Лапласа -- инвариантен к масштабированию (из-за вторых производных).
\subsection{Детектор FAST}
Features from Accelerated Test
2023-03-23 19:01:15 +03:00
\begin{figure}[H]
\centering
\fontsize{12}{1}\selectfont
\includesvg[scale=1.01]{pics/04-vorpa-00-1-FAST.svg}
\end{figure}
2023-03-23 11:20:22 +03:00
Рассматривается точка и окружность, а не прямоугольник. Окружность вписана в квадрат 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}
2023-04-04 09:56:51 +03:00
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)$$
2023-02-13 13:59:23 +03:00
\end{document}