diff --git a/.gitattributes b/.gitattributes index ac9d64ab0de..cd4ead2bdce 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2712,8 +2712,10 @@ Partition_2/doc_tex/Partition_2/Trier_opt_cvx.ps -text svneol=unset#application/ Partition_2/doc_tex/Partition_2/teaser-small.png -text svneol=unset#image/png Partition_2/doc_tex/Partition_2/teaser.png -text svneol=unset#image/png Point_set_2/doc_tex/Point_set_2/point_set.png -text +Point_set_processing_3/doc_tex/Point_set_processing_3/analysis.tex -text Point_set_processing_3/doc_tex/Point_set_processing_3/fig/point_set_processing.jpg -text svneol=unset#image/jpeg Point_set_processing_3/doc_tex/Point_set_processing_3/fig/point_set_processing_detail.png -text svneol=unset#image/png +Point_set_processing_3/doc_tex/Point_set_processing_3/input.tex -text Point_set_processing_3/doc_tex/Point_set_processing_3/introduction.eps -text svneol=unset#application/postscript Point_set_processing_3/doc_tex/Point_set_processing_3/introduction.jpg -text svneol=unset#image/jpeg Point_set_processing_3/doc_tex/Point_set_processing_3/jet_smoothing.eps -text svneol=unset#application/postscript @@ -2722,6 +2724,8 @@ Point_set_processing_3/doc_tex/Point_set_processing_3/merge_simplification.eps - Point_set_processing_3/doc_tex/Point_set_processing_3/merge_simplification.jpg -text svneol=unset#image/jpeg Point_set_processing_3/doc_tex/Point_set_processing_3/mst_orient_normals.eps -text svneol=unset#application/postscript Point_set_processing_3/doc_tex/Point_set_processing_3/mst_orient_normals.jpg -text svneol=unset#image/jpeg +Point_set_processing_3/doc_tex/Point_set_processing_3/outliers.tex -text +Point_set_processing_3/doc_tex/Point_set_processing_3/output.tex -text Point_set_processing_3/doc_tex/Point_set_processing_3/pca_estimate_normals.eps -text svneol=unset#application/postscript Point_set_processing_3/doc_tex/Point_set_processing_3/pca_estimate_normals.jpg -text svneol=unset#image/jpeg Point_set_processing_3/doc_tex/Point_set_processing_3/pipeline.eps -text svneol=unset#application/postscript @@ -2730,6 +2734,8 @@ Point_set_processing_3/doc_tex/Point_set_processing_3/random_simplification.eps Point_set_processing_3/doc_tex/Point_set_processing_3/random_simplification.jpg -text svneol=unset#image/jpeg Point_set_processing_3/doc_tex/Point_set_processing_3/remove_outliers.eps -text svneol=unset#application/postscript Point_set_processing_3/doc_tex/Point_set_processing_3/remove_outliers.jpg -text svneol=unset#image/jpeg +Point_set_processing_3/doc_tex/Point_set_processing_3/simplification.tex -text +Point_set_processing_3/doc_tex/Point_set_processing_3/smoothing.tex -text Point_set_processing_3/examples/Point_set_processing_3/data/ChineseDragon-10kv.off -text svneol=unset#application/octet-stream Point_set_processing_3/examples/Point_set_processing_3/data/camel.off -text svneol=unset#application/octet-stream Point_set_processing_3/examples/Point_set_processing_3/data/oni.xyz -text diff --git a/Point_set_processing_3/doc_tex/Point_set_processing_3/PkgDescription.tex b/Point_set_processing_3/doc_tex/Point_set_processing_3/PkgDescription.tex index f77047c7ad4..9a38a0dadee 100644 --- a/Point_set_processing_3/doc_tex/Point_set_processing_3/PkgDescription.tex +++ b/Point_set_processing_3/doc_tex/Point_set_processing_3/PkgDescription.tex @@ -1,15 +1,6 @@ \begin{ccPkgDescription}{Point Set Processing\label{Pkg:PointSetProcessing}} \ccPkgHowToCiteCgal{cgal:sal-pptsm2-08} -\ccPkgSummary{ -This \cgal\ component implements methods to analyze and process unorganized point sets. - -The input is an unorganized point set, possibly with attributes such as unoriented or oriented normals. - -This point set can be analyzed to measure common statistics quantities and bounding volumes such as average spacing, centroid, bounding box and bounding sphere. -We can furthermore process the point set with functions devoted to simplification, outlier removal, smoothing, normal estimation and normal orientation. - -The output is a point set with normals. -} +\ccPkgSummary{This \cgal\ component implements methods to analyze and process unorganized point sets. The input is an unorganized point set, possibly with attributes such as unoriented or oriented normals. This point set can be analyzed to measure certain properties such as average spacing. We can furthermore process the point set with functions devoted to the simplification, outlier removal, smoothing, normal estimation and normal orientation.} \ccPkgDependsOn{\ccThirdPartyLapack} \ccPkgIntroducedInCGAL{3.5} diff --git a/Point_set_processing_3/doc_tex/Point_set_processing_3/analysis.tex b/Point_set_processing_3/doc_tex/Point_set_processing_3/analysis.tex new file mode 100644 index 00000000000..acf59b5731c --- /dev/null +++ b/Point_set_processing_3/doc_tex/Point_set_processing_3/analysis.tex @@ -0,0 +1,19 @@ +\section{Analysis} + +The purpose of the analysis stage is to measure common statistics and bounding volumes over the input points so as to automatically determine parameters for subsequent stages: +\begin{itemize} + \item Point set barycenter, bounding box, + bounding sphere (provided by other \cgal\ components). + \item Average spacing to the $k$ nearest neighbors. +\end{itemize} + +\ccc{CGAL::compute_average_spacing()} computes the average spacing of all input points to their $k$ nearest neighbors. + +\ccRefIdfierPage{CGAL::centroid} \\ +\ccRefIdfierPage{CGAL::bounding_box} \\ +\ccRefIdfierPage{CGAL::bounding_sphere} \\ +\ccRefIdfierPage{CGAL::compute_average_spacing} \\ + +Example: + +\ccIncludeExampleCode{Point_set_processing_3/average_spacing_example.cpp} diff --git a/Point_set_processing_3/doc_tex/Point_set_processing_3/fig/point_set_processing.jpg b/Point_set_processing_3/doc_tex/Point_set_processing_3/fig/point_set_processing.jpg index b2988fc0354..415a6dbbd8c 100644 Binary files a/Point_set_processing_3/doc_tex/Point_set_processing_3/fig/point_set_processing.jpg and b/Point_set_processing_3/doc_tex/Point_set_processing_3/fig/point_set_processing.jpg differ diff --git a/Point_set_processing_3/doc_tex/Point_set_processing_3/fig/point_set_processing_detail.png b/Point_set_processing_3/doc_tex/Point_set_processing_3/fig/point_set_processing_detail.png index b273d1341ec..23265873d68 100644 Binary files a/Point_set_processing_3/doc_tex/Point_set_processing_3/fig/point_set_processing_detail.png and b/Point_set_processing_3/doc_tex/Point_set_processing_3/fig/point_set_processing_detail.png differ diff --git a/Point_set_processing_3/doc_tex/Point_set_processing_3/input.tex b/Point_set_processing_3/doc_tex/Point_set_processing_3/input.tex new file mode 100644 index 00000000000..8a32207688b --- /dev/null +++ b/Point_set_processing_3/doc_tex/Point_set_processing_3/input.tex @@ -0,0 +1,36 @@ +\section{Input} + +The algorithms of this component expect as input parameters range iterators over: + +\begin{itemize} +\item 3D points +\item Normals (orientable 3D vectors) +\item 3D points with unoriented normals +\item 3D points with oriented normals +\end{itemize} + +These types are described as concepts. +\cgal\ provides the next classes to implement points and normals: + +\begin{itemize} +\item \ccRefIdfierPage{CGAL::Point_3} \\ +\cgal\ 3D position. +\item \ccRefIdfierPage{CGAL::Vector_3} \\ +\cgal\ 3D vector. +\item \ccRefIdfierPage{CGAL::Point_with_normal_3} \\ +3D point location plus normal. +\end{itemize} + +We provide convenient functions to read point sets from standard file formats: + +\begin{itemize} +\item XYZ +\item OFF +\end{itemize} + +\ccRefIdfierPage{CGAL::read_xyz_point_set} \\ +\ccRefIdfierPage{CGAL::read_off_point_set} \\ + +Example: + +\ccIncludeExampleCode{Point_set_processing_3/read_write_xyz_point_set_example.cpp} \ No newline at end of file diff --git a/Point_set_processing_3/doc_tex/Point_set_processing_3/introduction.tex b/Point_set_processing_3/doc_tex/Point_set_processing_3/introduction.tex index 6d37fe6dc69..be3cc5dbb31 100644 --- a/Point_set_processing_3/doc_tex/Point_set_processing_3/introduction.tex +++ b/Point_set_processing_3/doc_tex/Point_set_processing_3/introduction.tex @@ -13,15 +13,52 @@ % Title \begin{figure}[h] \caption{Point set processing. - Left: 275k points sampled on an elephant with a Minolta laser scanner. - Right: point set cleaned and simplified to 17k points.} + Left: 275K points sampled on an elephant with + a Minolta laser scanner. + Right: point set after clean-up and + simplification to 17K points.} \end{figure} \end{center} -This \cgal\ component implements methods to analyze and process unorganized point sets. -The input is an unorganized point set, possibly with attributes such as unoriented or oriented normals. -This point set can be analyzed to measure common statistics quantities and bounding volumes such as average spacing, centroid, bounding box and bounding sphere. -We can furthermore process the point set with functions devoted to simplification, outlier removal, smoothing, normal estimation and normal orientation. -The output is a point set with normals. +This \cgal\ component implements methods to analyze and process unorganized 3D point sets. The input is an unorganized 3D point set, possibly with attributes such as unoriented or oriented normals. This point set can be analyzed to measure certain geometric properties such as average spacing between the points and their $K$ nearest neighbors. We can furthermore process the point set with functions devoted to the simplification, outlier removal, smoothing, normal estimation and normal orientation. The output is either a point set or a point set with normals. + + +A typical usage of this package is to pre-process a point set before calling a reconstruction method. +Surface Reconstruction from Point Sets is a sequential process: + +\begin{itemize} +\item Scanning and scan alignment produce a set of points + or points with normals. Alignment is not yet + covered by \cgal. +\item Outlier removal for reconstruction methods which + are not resilient to outliers. +\item Simplification to reduce the number of input points. +\item Smoothing to reduce noise in the input data. +\item Normal estimation and orientation when the normals + are not already provided by the acquisition device. +\item Surface reconstruction. +\end{itemize} + +\cgal\ provides algorithms for all steps listed above except alignment.\\ +This package provides outlier removal, simplification, smoothing, +normal estimation and orientation.\\ +Chapter \ccc{Surface_reconstruction_points_3} \ref{chap:surface_reconstruction_points_3} +describes surface reconstruction using \cgal\ Surface Mesh Generator. + +% Insert image pipeline.jpg/eps +\begin{center} + \label{Point_set_processing_3-fig-pipeline} + % Image + \begin{ccTexOnly} + \includegraphics[width=0.8\textwidth]{Point_set_processing_3/pipeline} % omit .eps suffix + \end{ccTexOnly} + \begin{ccHtmlOnly} +

+ \end{ccHtmlOnly} + % Title + \begin{figure}[h] + \caption{Point Set Processing pipeline.} + \end{figure} +\end{center} diff --git a/Point_set_processing_3/doc_tex/Point_set_processing_3/main.tex b/Point_set_processing_3/doc_tex/Point_set_processing_3/main.tex index ad134b462f8..2a3fa0a2ecd 100644 --- a/Point_set_processing_3/doc_tex/Point_set_processing_3/main.tex +++ b/Point_set_processing_3/doc_tex/Point_set_processing_3/main.tex @@ -8,4 +8,10 @@ \minitoc \input{Point_set_processing_3/introduction} -\input{Point_set_processing_3/pipeline} +\input{Point_set_processing_3/input} +\input{Point_set_processing_3/analysis} +\input{Point_set_processing_3/outliers} +\input{Point_set_processing_3/simplification} +\input{Point_set_processing_3/smoothing} +\input{Point_set_processing_3/normals} +\input{Point_set_processing_3/output} diff --git a/Point_set_processing_3/doc_tex/Point_set_processing_3/normals.tex b/Point_set_processing_3/doc_tex/Point_set_processing_3/normals.tex new file mode 100644 index 00000000000..f941f27e7c4 --- /dev/null +++ b/Point_set_processing_3/doc_tex/Point_set_processing_3/normals.tex @@ -0,0 +1,59 @@ +\section{Normal Estimation} + +Two functions are provided to estimate the normal direction of the inferred surface at each point from the input point set. In both cases, the result is an unoriented normal vector for each input point. + +Function \ccc{CGAL::jet_estimate_normals()} estimates the normal direction at each point from the set by fitting a jet surface over its $k$ nearest neighbors. The default jet is a quadric surface.\\ +This algorithm is well suited to point sets scattered over curved surfaces. + +Function \ccc{CGAL::pca_estimate_normals()} estimates the normal direction at each point from the set by linear least squares fitting of a plane over its $k$ nearest neighbors.\\ +This algorithm is well suited to point sets scattered over plane surfaces. It is much faster than \ccc{CGAL::jet_estimate_normals()}. + +\ccRefIdfierPage{CGAL::pca_estimate_normals} \\ +\ccRefIdfierPage{CGAL::jet_estimate_normals} \\ + +% % Insert image pca_estimate_normals.jpg/eps +% \begin{center} +% \label{Point_set_processing_3-fig-pca_estimate_normals} +% % Image +% \begin{ccTexOnly} +% \includegraphics[width=0.9\textwidth]{Point_set_processing_3/pca_estimate_normals} % omit .eps suffix +% \end{ccTexOnly} +% \begin{ccHtmlOnly} +%

+% \end{ccHtmlOnly} +% % Title +% \begin{figure}[h] +% \caption{Normal estimation by Principal Components Analysis} +% \end{figure} +% \end{center} + +Example: + +\ccIncludeExampleCode{Point_set_processing_3/pca_estimate_normals_example.cpp} + + +\section{Normal Orientation} + +Function \ccc{CGAL::mst_orient_normals()} orients the normals of a set of points with (unoriented) normals using the method described by Hoppe et al. in {\em Surface reconstruction from unorganized points} \cite{cgal:hddms-srup-92}. More specifically, this method constructs a Riemannian graph over the input points and propagates a seed normal orientation within a minimum spanning tree computed over the graph with the Boost graph library. The result is an oriented normal vector for each input point/normal. + +\ccRefIdfierPage{CGAL::mst_orient_normals} \\ + +% Insert image mst_orient_normals.jpg/eps +\begin{center} + \label{Point_set_processing_3-fig-mst_orient_normals} + % Image + \begin{ccTexOnly} + \includegraphics[width=1.0\textwidth]{Point_set_processing_3/mst_orient_normals} % omit .eps suffix + \end{ccTexOnly} + \begin{ccHtmlOnly} +

+ \end{ccHtmlOnly} + % Title + \begin{figure}[h] + \caption{Normal orientation of a cube's normals. Notice the left and bottom normals orientation.} + \end{figure} +\end{center} + +Example: see \ccc{pca_estimate_normals_example.cpp} example above. + + diff --git a/Point_set_processing_3/doc_tex/Point_set_processing_3/outliers.tex b/Point_set_processing_3/doc_tex/Point_set_processing_3/outliers.tex new file mode 100644 index 00000000000..0663bac9001 --- /dev/null +++ b/Point_set_processing_3/doc_tex/Point_set_processing_3/outliers.tex @@ -0,0 +1,27 @@ +\section{Outlier Removal} + +Function \ccc{CGAL::remove_outliers()} deletes a user-specified fraction of outliers from the input point set. More specifically, it sorts the input points in increasing order of average squared distances to the $k$ nearest neighbors and deletes the points with largest value. + +\emph{Note to the reviewers: we will add a function in the analysis section which displays in the console the distribution of such average squared distance so as to help the user picking an appropriate fraction value.} + +\ccRefIdfierPage{CGAL::remove_outliers} \\ + +% % Insert image remove_outliers.jpg/eps +% \begin{center} +% \label{Point_set_processing_3-fig-remove_outliers} +% % Image +% \begin{ccTexOnly} +% \includegraphics[width=0.9\textwidth]{Point_set_processing_3/remove_outliers} % omit .eps suffix +% \end{ccTexOnly} +% \begin{ccHtmlOnly} +%

+% \end{ccHtmlOnly} +% % Title +% \begin{figure}[h] +% \caption{Outlier removal} +% \end{figure} +% \end{center} + +Example: + +\ccIncludeExampleCode{Point_set_processing_3/remove_outliers_example.cpp} diff --git a/Point_set_processing_3/doc_tex/Point_set_processing_3/output.tex b/Point_set_processing_3/doc_tex/Point_set_processing_3/output.tex new file mode 100644 index 00000000000..eaccab6443e --- /dev/null +++ b/Point_set_processing_3/doc_tex/Point_set_processing_3/output.tex @@ -0,0 +1,16 @@ +\section{Output} + +The output of the processing stage is a point set with normals. +For convenience, we provide functions to write point sets to standard file formats: +\begin{itemize} +\item XYZ +\item OFF +\end{itemize} + +\ccRefIdfierPage{CGAL::write_off_point_set} \\ +\ccRefIdfierPage{CGAL::write_xyz_point_set} \\ + +Example: + +See \ccc{read_write_xyz_point_set_example.cpp} example above. + diff --git a/Point_set_processing_3/doc_tex/Point_set_processing_3/pipeline.tex b/Point_set_processing_3/doc_tex/Point_set_processing_3/pipeline.tex deleted file mode 100644 index 6d91273148b..00000000000 --- a/Point_set_processing_3/doc_tex/Point_set_processing_3/pipeline.tex +++ /dev/null @@ -1,265 +0,0 @@ -\section{Example} - -A typical usage of this package is to pre-process a point set before calling a reconstruction method. -Surface Reconstruction from Point Sets is a sequential process: - -\begin{itemize} -\item Scanning and scan alignment produce a set of points - or points with normals. Alignment is not yet - covered by \cgal. -\item Outlier removal for reconstruction methods which - are not resilient to outliers. -\item Simplification to reduce the number of input points. -\item Smoothing to reduce noise in the input data. -\item Normal estimation and orientation when the normals - are not already provided by the acquisition device. -\item Surface reconstruction. -\end{itemize} - -\cgal\ provides algorithms for all steps listed above except alignment.\\ -This package provides outlier removal, simplification, smoothing, -normal estimation and orientation.\\ -Chapter \ccc{Surface_reconstruction_points_3} \ref{chap:surface_reconstruction_points_3} -describes surface reconstruction using \cgal\ Surface Mesh Generator. - -% Insert image pipeline.jpg/eps -\begin{center} - \label{Point_set_processing_3-fig-pipeline} - % Image - \begin{ccTexOnly} - \includegraphics[width=0.8\textwidth]{Point_set_processing_3/pipeline} % omit .eps suffix - \end{ccTexOnly} - \begin{ccHtmlOnly} -

- \end{ccHtmlOnly} - % Title - \begin{figure}[h] - \caption{Point Set Processing pipeline.} - \end{figure} -\end{center} - - -\section{Input} - -The algorithms of this component expect as input parameters range iterators over: - -\begin{itemize} -\item 3D points -\item Normals (orientable 3D vectors) -\item 3D points with unoriented normals -\item 3D points with oriented normals -\end{itemize} - -These types are described as concepts. -\cgal\ provides the next classes to implement points and normals: - -\begin{itemize} -\item \ccRefIdfierPage{CGAL::Point_3} \\ -\cgal\ 3D position. -\item \ccRefIdfierPage{CGAL::Vector_3} \\ -\cgal\ 3D vector. -\item \ccRefIdfierPage{CGAL::Point_with_normal_3} \\ -3D point location plus normal. -\end{itemize} - -We provide convenient functions to read point sets from standard file formats: - -\begin{itemize} -\item XYZ -\item OFF -\end{itemize} - -\ccRefIdfierPage{CGAL::read_xyz_point_set} \\ -\ccRefIdfierPage{CGAL::read_off_point_set} \\ - -Example: - -\ccIncludeExampleCode{Point_set_processing_3/read_write_xyz_point_set_example.cpp} - - -\section{Analysis} - -The purpose of the analysis stage is to measure common statistics and bounding volumes over the input points so as to automatically determine parameters for subsequent stages: -\begin{itemize} - \item Point set barycenter, bounding box, - bounding sphere (provided by other \cgal\ components). - \item Average spacing to the $k$ nearest neighbors. -\end{itemize} - -\ccc{CGAL::compute_average_spacing()} computes the average spacing of all input points to their $k$ nearest neighbors. - -\ccRefIdfierPage{CGAL::centroid} \\ -\ccRefIdfierPage{CGAL::bounding_box} \\ -\ccRefIdfierPage{CGAL::bounding_sphere} \\ -\ccRefIdfierPage{CGAL::compute_average_spacing} \\ - -Example: - -\ccIncludeExampleCode{Point_set_processing_3/average_spacing_example.cpp} - - -\section{Outlier Removal} - -Function \ccc{CGAL::remove_outliers()} deletes a user-specified fraction of outliers from the input point set. More specifically, it sorts the input points in increasing order of average squared distances to the $k$ nearest neighbors and deletes the points with largest value. - -\emph{Note to the reviewers: we will add a function in the analysis section which displays in the console the distribution of such average squared distance so as to help the user picking an appropriate fraction value.} - -\ccRefIdfierPage{CGAL::remove_outliers} \\ - -% % Insert image remove_outliers.jpg/eps -% \begin{center} -% \label{Point_set_processing_3-fig-remove_outliers} -% % Image -% \begin{ccTexOnly} -% \includegraphics[width=0.9\textwidth]{Point_set_processing_3/remove_outliers} % omit .eps suffix -% \end{ccTexOnly} -% \begin{ccHtmlOnly} -%

-% \end{ccHtmlOnly} -% % Title -% \begin{figure}[h] -% \caption{Outlier removal} -% \end{figure} -% \end{center} - -Example: - -\ccIncludeExampleCode{Point_set_processing_3/remove_outliers_example.cpp} - - -\section{Simplification} - -Two functions are provided to simplify the input point set. - -\ccc{CGAL::merge_simplify_point_set()} iteratively merges pairs of points which are epsilon-closed.\\ -This algorithm is precise but slower than \ccc{CGAL::random_simplify_point_set()}. - -\ccc{CGAL::random_simplify_point_set()} randomly deletes a user-specified fraction of points from the input point set.\\ -This algorithm is very fast. - -\ccRefIdfierPage{CGAL::merge_simplify_point_set} \\ -\ccRefIdfierPage{CGAL::random_simplify_point_set} \\ - -% Insert image merge_simplification.jpg/eps -\begin{center} - \label{Point_set_processing_3-fig-merge_simplification} - % Image - \begin{ccTexOnly} - \includegraphics[width=1.0\textwidth]{Point_set_processing_3/merge_simplification} % omit .eps suffix - \end{ccTexOnly} - \begin{ccHtmlOnly} -

- \end{ccHtmlOnly} - % Title - \begin{figure}[h] - \caption{Point set simplification by merging. - Left: input point set. - Right: removed points are depicted in red.} - \end{figure} -\end{center} - -Example: - -\ccIncludeExampleCode{Point_set_processing_3/random_simplification_example.cpp} - - -\section{Smoothing} - -Function \ccRefIdfierPage{CGAL::jet_smooth_point_set} smooths the input point set by projecting each point onto a smooth parametric surface patch (so-called jet surface) fitted over the $k$ nearest neighbors. \\ - -% % Insert image jet_smoothing.jpg/eps -% \begin{center} -% \label{Point_set_processing_3-fig-jet_smoothing} -% % Image -% \begin{ccTexOnly} -% \includegraphics[width=1.0\textwidth]{Point_set_processing_3/jet_smoothing} % omit .eps suffix -% \end{ccTexOnly} -% \begin{ccHtmlOnly} -%

-% \end{ccHtmlOnly} -% % Title -% \begin{figure}[h] -% \caption{Point set smoothing} -% \end{figure} -% \end{center} - -Example: - -\ccIncludeExampleCode{Point_set_processing_3/jet_smoothing_example.cpp} - - -\section{Normal Estimation} - -Two functions are provided to estimate the normal direction of the inferred surface at each point from the input point set. In both cases, the result is an unoriented normal vector for each input point. - -Function \ccc{CGAL::jet_estimate_normals()} estimates the normal direction at each point from the set by fitting a jet surface over its $k$ nearest neighbors. The default jet is a quadric surface.\\ -This algorithm is well suited to point sets scattered over curved surfaces. - -Function \ccc{CGAL::pca_estimate_normals()} estimates the normal direction at each point from the set by linear least squares fitting of a plane over its $k$ nearest neighbors.\\ -This algorithm is well suited to point sets scattered over plane surfaces. It is much faster than \ccc{CGAL::jet_estimate_normals()}. - -\ccRefIdfierPage{CGAL::pca_estimate_normals} \\ -\ccRefIdfierPage{CGAL::jet_estimate_normals} \\ - -% % Insert image pca_estimate_normals.jpg/eps -% \begin{center} -% \label{Point_set_processing_3-fig-pca_estimate_normals} -% % Image -% \begin{ccTexOnly} -% \includegraphics[width=0.9\textwidth]{Point_set_processing_3/pca_estimate_normals} % omit .eps suffix -% \end{ccTexOnly} -% \begin{ccHtmlOnly} -%

-% \end{ccHtmlOnly} -% % Title -% \begin{figure}[h] -% \caption{Normal estimation by Principal Components Analysis} -% \end{figure} -% \end{center} - -Example: - -\ccIncludeExampleCode{Point_set_processing_3/pca_estimate_normals_example.cpp} - - -\section{Normal Orientation} - -Function \ccc{CGAL::mst_orient_normals()} orients the normals of a set of points with (unoriented) normals using the method described by Hoppe et al. in {\em Surface reconstruction from unorganized points} \cite{cgal:hddms-srup-92}. More specifically, this method constructs a Riemannian graph over the input points and propagates a seed normal orientation within a minimum spanning tree computed over the graph with the Boost graph library. The result is an oriented normal vector for each input point/normal. - -\ccRefIdfierPage{CGAL::mst_orient_normals} \\ - -% Insert image mst_orient_normals.jpg/eps -\begin{center} - \label{Point_set_processing_3-fig-mst_orient_normals} - % Image - \begin{ccTexOnly} - \includegraphics[width=1.0\textwidth]{Point_set_processing_3/mst_orient_normals} % omit .eps suffix - \end{ccTexOnly} - \begin{ccHtmlOnly} -

- \end{ccHtmlOnly} - % Title - \begin{figure}[h] - \caption{Normal orientation of a cube's normals. Notice the left and bottom normals orientation.} - \end{figure} -\end{center} - -Example: see \ccc{pca_estimate_normals_example.cpp} example above. - - -\section{Output} - -The output of the processing stage is a point set with normals. -For convenience, we provide functions to write point sets to standard file formats: -\begin{itemize} -\item XYZ -\item OFF -\end{itemize} - -\ccRefIdfierPage{CGAL::write_off_point_set} \\ -\ccRefIdfierPage{CGAL::write_xyz_point_set} \\ - -Example: - -See \ccc{read_write_xyz_point_set_example.cpp} example above. - diff --git a/Point_set_processing_3/doc_tex/Point_set_processing_3/simplification.tex b/Point_set_processing_3/doc_tex/Point_set_processing_3/simplification.tex new file mode 100644 index 00000000000..1d857ae9682 --- /dev/null +++ b/Point_set_processing_3/doc_tex/Point_set_processing_3/simplification.tex @@ -0,0 +1,34 @@ +\section{Simplification} + +Two functions are provided to simplify the input point set. + +\ccc{CGAL::merge_simplify_point_set()} iteratively merges pairs of points which are epsilon-closed.\\ +This algorithm is precise but slower than \ccc{CGAL::random_simplify_point_set()}. + +\ccc{CGAL::random_simplify_point_set()} randomly deletes a user-specified fraction of points from the input point set.\\ +This algorithm is very fast. + +\ccRefIdfierPage{CGAL::merge_simplify_point_set} \\ +\ccRefIdfierPage{CGAL::random_simplify_point_set} \\ + +% Insert image merge_simplification.jpg/eps +\begin{center} + \label{Point_set_processing_3-fig-merge_simplification} + % Image + \begin{ccTexOnly} + \includegraphics[width=1.0\textwidth]{Point_set_processing_3/merge_simplification} % omit .eps suffix + \end{ccTexOnly} + \begin{ccHtmlOnly} +

+ \end{ccHtmlOnly} + % Title + \begin{figure}[h] + \caption{Point set simplification by merging. + Left: input point set. + Right: removed points are depicted in red.} + \end{figure} +\end{center} + +Example: + +\ccIncludeExampleCode{Point_set_processing_3/random_simplification_example.cpp} \ No newline at end of file diff --git a/Point_set_processing_3/doc_tex/Point_set_processing_3/smoothing.tex b/Point_set_processing_3/doc_tex/Point_set_processing_3/smoothing.tex new file mode 100644 index 00000000000..c0675af4a58 --- /dev/null +++ b/Point_set_processing_3/doc_tex/Point_set_processing_3/smoothing.tex @@ -0,0 +1,23 @@ +\section{Smoothing} + +Function \ccRefIdfierPage{CGAL::jet_smooth_point_set} smooths the input point set by projecting each point onto a smooth parametric surface patch (so-called jet surface) fitted over the $k$ nearest neighbors. \\ + +% % Insert image jet_smoothing.jpg/eps +% \begin{center} +% \label{Point_set_processing_3-fig-jet_smoothing} +% % Image +% \begin{ccTexOnly} +% \includegraphics[width=1.0\textwidth]{Point_set_processing_3/jet_smoothing} % omit .eps suffix +% \end{ccTexOnly} +% \begin{ccHtmlOnly} +%

+% \end{ccHtmlOnly} +% % Title +% \begin{figure}[h] +% \caption{Point set smoothing} +% \end{figure} +% \end{center} + +Example: + +\ccIncludeExampleCode{Point_set_processing_3/jet_smoothing_example.cpp}