Ajout de la partie Skeleton split et branches matching dans le rapport

de test.
This commit is contained in:
terry-dango 2015-03-12 12:10:30 +01:00
parent 730f5534a4
commit 81a343e96b
4 changed files with 82 additions and 30 deletions

View File

@ -2,6 +2,7 @@
\usepackage[utf8]{inputenc}
\usepackage[top=2cm,bottom=2cm,left=2cm,right=2cm]{geometry}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{array}
\usepackage{float}
@ -35,12 +36,12 @@ We tried three differents algorithm to find points of interest :
\item brisk algorithm
\end{itemize}
The results were similar with the three algorithms.
We kept the surf algorithm for detection as it is the fatest one but finally we decided to use brisk algorithm because surf and sift
are patented algorithm and cannot be used for commercial use. In the following results you can see the differences between surf
We kept the surf algorithm for detection as it is the fatest one but finally we decided to use brisk algorithm because surf and sift
are patented algorithm and cannot be used for commercial use. In the following results you can see the differences between surf
and brisk.
With the surf algorithm there is a parameter named minHessian which can be modified, influencing the number of detected points.
The higher the minHessian, the fewer keypoints you will obtain, on the other hand, the lower the minHessian, the more keypoints you get, but they may be more noisy.
With the brisk algorithm some parameters can be changed like the FAST/AGAST detection threshold score (thresh), the detection octaves (octaves) and
With the brisk algorithm some parameters can be changed like the FAST/AGAST detection threshold score (thresh), the detection octaves (octaves) and
the scale to the pattern used for sampling the neighbourhood of a keypoint (patternScale).
\subsection{Test lapin}
@ -155,7 +156,7 @@ Different kinds of filters :
\caption{\label{fig2} Number of points per filter}
\end{center}
\end{table}
With the geometric constraint we obtain more points when limiting to the symmetric points.
With the geometric constraint we obtain more points when limiting to the symmetric points.
This probably comes from the calculation of the fundamental matrix with the Ransac algorithm, which is less accurate when using wrong points as input.
\begin{figure}[H]
@ -239,8 +240,8 @@ This probably comes from the calculation of the fundamental matrix with the Rans
\subsection{Test using BRISK algorithm}
We changed the parameters of brisk algorithm and of the filters to find the best
values in order to find the best matching points. The different results are
summarise in the table \ref{briskTest}.
values in order to find the best matching points. The different results are
summarise in the table \ref{briskTest}.
\begin{table}[H]
\begin{center}
@ -268,12 +269,12 @@ Figure & Thresh & Octaves & PatternScales & Proportion & RANS
\end{table}
\paragraph{Analyses} When we raise the thresh parameter over 3 the number of matches decrease, the same thing
happened when we decrease it below 3. That is why we kept the value 3 for thresh parameter. Then, the value of
happened when we decrease it below 3. That is why we kept the value 3 for thresh parameter. Then, the value of
PatternScales parameter is important to adjust the number of keypoints detected and so the number of matches,
the optimal value is 1.5. Using the order constraint filter allow us to find more and better matches because
the fundamental matrix is computed from all the keypoints so if there are a lot of errors this matrix is not
well approximated and there are less good matches at the end. Finally when we change the value of RANSAC parameter
around 3 there are more errors. The final values kept for the parameters are
around 3 there are more errors. The final values kept for the parameters are
those corresponding to the figure \ref{B7}.
@ -322,10 +323,30 @@ those corresponding to the figure \ref{B7}.
\chapter{Skeletonization}
\section{Cutting skeleton into pieces}
Skeleton extraction tests:
To test the cutting skeleton part, we use different files ".skl". We count ourselves the number of branches which has to be found. Then, we apply the algorithm and verify that the number of branches is the same as expected. We plotted the branches with different colors: it gives an easy way to verify that there is no error with branches. To be sure of the results, numerical verifications have been made concerning the indexes of the edges composing each branch.
We took several pictures of each plushes.
Then, we applied segmentation to each.
The following figure shows two skeletons just before branches identification. The skeletons that we used are untitled "skullTest1.skl" and "skullTest2.skl". There are very simple as they are composed of about twenty points. We build these skeletons ourselves to be able to make unitary tests. In addition, we will see in the matching branches section that these skeletons were the only ones on which we could execute the matching algorithm.
\begin{figure}[H]
\centering
\includegraphics[scale=0.24]{images/branchesExtraction/unbranchedSkelsTest.png}
\caption{No color has been associated before the identification of the branches. We clearly see that six branches have to be found on each skeleton.}
\end{figure}
Then, we identify the branches starting from each junction point and going on until we find an extremity point or another junction point. It delimitates a branch.
We used the six same colors for the two skeletons to highlight the fact that the branches are not matched yet. It will be the next step.
\begin{figure}[H]
\centering
\includegraphics[scale=0.32]{images/branchesExtraction/branchedSkelsTest.png}
\caption{The skeletons have been splitted into branches. A color has been associated to each branch.}
\end{figure}
\section{Matching pieces of skeleton by pairs}
The matching part revealed unexpected issues. In particular, skeletons rarely have the same number of branches on two different views. Several ways of improvement to address this issue are provided in the report.
After we took several pictures of each plushes and applied segmentation to each, we extracted the skeletons and splitted them into branches.
Results are quite unexpected: for a same plush photographed in the same conditions and with the same angles, the results can be different.
@ -337,12 +358,10 @@ Branches extraction reveals 30 branches on the first picture, 31 on the second p
\begin{figure}[H]
\centering
\includegraphics[scale=0.55]{images/skeletonsExtraction/TestSkel00.png}
\includegraphics[scale=0.38]{images/skeletonsExtraction/TestSkel00.png}
\caption{Front rabbit pictures and skeletons}
\end{figure}
\newpage
With the same plush and an other angle, the same kind of issue occur: the plush skeleton is different on each picture. Even when there seems to be the same number of branches, for example the first and the second skeletons, these branches can be different, for example on the first skeleton, the foreleg branch continues until the outline, whereas it ends earlier on the second skeleton. Third and fourth skeletons show one more time the differences near the extremities with an extra branch on the ear or a single branch foreleg.
Having different number of branches between different pictures of the same plush with the same angle is a first problem. It leads naturally to another problem: the number of branches is different between two different pictures of the same object with different angles. Even when, by chance, there is the same amount of branches of both, these branches do not really match together because there is probably an extra branch on a limb of the first picture, and an extra branch on another limb on the second picture.
@ -351,44 +370,77 @@ Branches extraction reveals 16 branches on the first picture, 15 on the second p
\begin{figure}[H]
\centering
\includegraphics[scale=0.55]{images/skeletonsExtraction/TestSkel01.png}
\includegraphics[scale=0.37]{images/skeletonsExtraction/TestSkel01.png}
\caption{Side rabbit pictures and skeletons}
\end{figure}
\newpage
We tried two other plushes. These tests confirm how different skeletons are. The first picture never match with the other angles. The only correct matching is between the third and the forth pictures of the red doll, but they were taken with the same angle.rt{Second part : meshing and animation}
For the teddybear, branches extraction reveals 17 branches on the first picture, 14 on the second, 15 on the third and 18 on the fourth.
We tried two other plushes. For the teddybear, branches extraction reveals 17 branches on the first picture, 14 on the second, 15 on the third and 18 on the fourth.
\begin{figure}[H]
\centering
\includegraphics[scale=0.5]{images/skeletonsExtraction/TestSkel02.png}
\includegraphics[scale=0.37]{images/skeletonsExtraction/TestSkel02.png}
\caption{Teddy bear pictures and skeletons}
\end{figure}
For the red doll, branches extraction reveals 15 branches on the first and the second pictures, and 10 branches on the third and the fourth pictures. Even so, the first and the second skeletons cannot be matched at all.
These tests confirm how different skeletons are. The first picture never match with the other angles. The only correct matching is between the third and the forth pictures of the red doll, but they were taken with the same angle.
\begin{figure}[H]
\centering
\includegraphics[scale=0.65]{images/skeletonsExtraction/TestSkel03.png}
\includegraphics[scale=0.42]{images/skeletonsExtraction/TestSkel03.png}
\caption{Side rabbit pictures and skeletons}
\end{figure}
\newpage
As the two skeletons do not have the same number of branches, the tests do not succeed. However, we used the same two skeletons as in the cutting skeleton part to verify that the matching branches algorithm works when it is used on two corresponding skeletons which have the same number of branches. These skeletons have been imaginated, so there is no associated picture. That is why we defined keypoints ourselves. To test the robustness of the matching branches algorithm, one of the keypoint has been designed to give a vote to a branch match between branches.
In particular, the matching matrix between the branches of the first skeleton and the branches of the second skeleton is the expected following one:
$$
\begin{pmatrix}
0 & 5 & 0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 & 0 & 5 \\
0 & 0 & 0 & 3 & 0 & 0 \\
0 & 0 & 3 & 0 & 0 & 0 \\
1 & 0 & 0 & 0 & 3 & 0 \\
4 & 0 & 0 & 0 & 0 & 0
\end{pmatrix}
$$
For the tests, the branches of the two skeletons have not been written in the same order. In the other case, we would have had a diagonal matching matrix. The first line can be read as "five pairs of matching keypoints vote for a match between the first branch of the first skeleton and the second branch of the second skeleton". The "1" in the matrix is the outlier we put to test the robustness of the algorithm.
Finally, the test revealed the following matches between the indexes of the branches in the first skeleton and the indexes of the branches in the second skeleton:
$$
\begin{pmatrix}
0 & 1 \\
1 & 5 \\
2 & 4 \\
3 & 2 \\
4 & 3 \\
5 & 0
\end{pmatrix}
$$
\begin{figure}[H]
\centering
\includegraphics[scale=0.3]{images/branchesExtraction/pairedSkelsTest.png}
\caption{The two sets of branches have been matched together: the colors of corresponding branches are the same.}
\end{figure}
\section{Matching pieces of skeleton by pairs}
\chapter{Meshing}
\section{Meshing the extremities}
\paragraph{} In our mesh the extremities refer to the extrem points of splines which are not part of a junction.
Meshing the extremities consists in two steps : build the extremity and subdivise. In order to build the extremity
we choosed to link the existing meshing points along the extrem circles of each extremity with the projection of the
circle's center on the corresponding sphere. Then the subdivision are made by project the middle of the previous segments (links)
\paragraph{} In our mesh the extremities refer to the extrem points of splines which are not part of a junction.
Meshing the extremities consists in two steps : build each extremity and subdivise it. In order to build the extremities,
we chose to link the existing meshing points along the extrem circles of each extremity with the projection of the
circle's center on the corresponding sphere. Then the subdivisions are made by projecting the middle of the previous segments (links)
on the sphere.
\paragraph{} Some results can be seen in the following Figures (All of these extremities were built on dino.skl). Deeper the subdivision
is, smoother the extremity's surface is. We can easily choose the depth of the subdivision to adapt it according to the skeleton
\paragraph{} Some results can be seen in the following Figures (All of these extremities were built on dino.skl). The deeper the subdivision
is, the smoother the extremity's surface is. We can easily choose the depth of the subdivision to adapt it according to the skeleton
in input.
\begin{table}[H]

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB