63 lines
3.4 KiB
TeX
63 lines
3.4 KiB
TeX
|
\subsection{Points detection and matching}
|
||
|
\label{detection}
|
||
|
\subsubsection{Points detection}
|
||
|
|
||
|
As a first step the detection of keypoints was made by using SURF (Speeded-Up Robust Features) algorithm (provided by
|
||
|
OpenCV) because of its good
|
||
|
speed but this algorithm is computed in nonfree module which is not free to use in commercial
|
||
|
application. That is why we decided to choose the BRISK (Binary Robust Invariant Scalable Keypoints)
|
||
|
algorithm (also provided by OpenCV) is pretty close to the SIFT (Scale-invariant feature transform) algorithm.
|
||
|
Therefore the tests were made using SURF and BRISK algorithm but the final version is with BRISK as SURF is patented.
|
||
|
As the aera of interest in the images is the object, we provide a binary mask (computed during the segmentation) in input of
|
||
|
SURF and BRISK detectors.
|
||
|
|
||
|
|
||
|
SURF is a speed version of SIFT (see Figure \ref{siftSurf}). Indeed instead of approximate Laplacian of Gaussian (LoG) with Difference
|
||
|
of Gaussian for finding scale-space. SURF goes a little further and approximates LoG with Box Filter.
|
||
|
|
||
|
\begin{figure}[H]
|
||
|
\centering
|
||
|
\includegraphics[scale=0.45]{img/LapinSiftSurf}
|
||
|
\caption{\label{siftSurf}Points detection for SIFT and SURF algorithm}
|
||
|
\end{figure}
|
||
|
|
||
|
For BRISK (see Figure \ref{brisk3415}) points of interest are identified across both the image and scale dimensions using a saliency criterion.
|
||
|
In order to increase the speed of computation, keypoints are detected in octave layers of the image pyramid as well as
|
||
|
in layers in-between. The location and the scale of each keypoint are obtained in the continuous domain via quadratic function fitting.
|
||
|
A sampling pattern consisting of points lying on appropriately scaled concentric circles is applied at the neighborhood of each keypoint to retrieve
|
||
|
gray values. Finally, the oriented BRISK sampling pattern is used to obtain pairwise brightness comparison results which are
|
||
|
assembled into the binary BRISK descriptor. The BRISK constructor take in input three parameters which modify the results :
|
||
|
the thresh, the octave and the patternScale.
|
||
|
|
||
|
|
||
|
A detailed explanation of these algorithms can be found with the references \cite{brisk} (BRISK), \cite{surf} (SURF) and
|
||
|
\cite{sift} (SIFT).
|
||
|
|
||
|
\begin{figure}[H]
|
||
|
\centering
|
||
|
\includegraphics[scale=0.45]{img/brisk3415}
|
||
|
\caption{\label{brisk3415}Detected points with BRISK algorithm}
|
||
|
\end{figure}
|
||
|
|
||
|
|
||
|
\subsubsection{Points matching}
|
||
|
|
||
|
We did the points matching, using a brute force matcher provided by OpenCV and then applied filters to get rid of inaccurate points.
|
||
|
For each descriptor in the first set, this matcher finds the closest descriptor in the second set by trying each one.
|
||
|
The filters used are :
|
||
|
\begin{itemize}
|
||
|
\item symmetric filter : the matches found when we take the image\_1 as base need to be found when we take the image\_2 as base also.
|
||
|
\item order constraint : the position of each point is compared to each other in image\_1 and image\_2, if there is too much error these points
|
||
|
are deleted.
|
||
|
\item threshold filter : filter on the distance between the descriptors of the matching points. This filter is not used with BRISK
|
||
|
detection because the results are quite good without it.
|
||
|
\item geometric filter : filter which use epipolar geometry, and the fundamental matrix to filter strange points.
|
||
|
\end{itemize}
|
||
|
|
||
|
|
||
|
\begin{figure}[H]
|
||
|
\centering
|
||
|
\includegraphics[scale=0.45]{img/LapinSymetricGeometric}
|
||
|
\caption{Points matching obtained after symmetric and geometric filtering}
|
||
|
\end{figure}
|