<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>The development of point cloud registration algorithm using geometrical features of the multi-sensor 3D scanner</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Vladimir Gromov</string-name>
          <email>gromov@vladimir.one</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Pavel Kustarev</string-name>
          <email>kustarev@corp.ifmo.ru</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>ITMO University, Faculty of Software Engineering and Computer Systems</institution>
          ,
          <addr-line>Saint-Petersburg</addr-line>
          ,
          <country>Russia ifmo.ru</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>The aim of the research is a 3D point matching which uses models from di erent sources to union them in the general coordinate system to create a high-accuracy scene from the 3D scanner. There are several images from the stereo camera (dual optical camera) at the device output to construct a 3D high-resolution model with 360 degrees horizontal eld of view. There is a high-accuracy point cloud from the LIDAR module (laser range nder) to correct the full eld view from the stereo camera. The research process is called point cloud registration and will help to create an output 3D representation with advantages of both sources. The presented algorithm has low computational complexity and,in the future, will be implemented on the scanner embedded system. The results of the data processing are presented in this paper.</p>
      </abstract>
      <kwd-group>
        <kwd>Point cloud registration</kwd>
        <kwd>Data fusion</kwd>
        <kwd>3d scanner</kwd>
        <kwd>Stereo camera</kwd>
        <kwd>LIDAR</kwd>
        <kwd>OpenCV</kwd>
        <kwd>SteroBM</kwd>
        <kwd>StereoSGBM</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        The object of the research is the multi-sensor mobile 3D scanner with 360 degrees
range, which uses the stereo camera and LIDAR module. Calculations are made
on the embedded heterogeneous computing system with GPU NVidia Tegra TK1
and FPGA Xilinx Zynq-7000 soc [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Figure 1 shows the target 3D scanner.
      </p>
      <p>The resolution of a 360 degrees model from the stereo camera is up to 10
millions colored points on the target system. However, the representation has low
accuracy and includes unrecognized parts of the scene with solid-color objects
without shadows.</p>
      <p>
        The point cloud from the laser range nder Sweep V1 has high accuracy up
to 1 centimeter for 40 meters distance [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. However, there are few numbers of
points which approximately equals 10 thousand from the system. Figure 2 shows
the scene object which has been recognized by stereo camera and LIDAR.
      </p>
      <p>
        Both of clouds in the Cartesian coordinate system are turned versus each
other, they have di erent angles of view and shifted origin points.
Point cloud registration is used to build a new representation, which contains
source models from the stereo camera and LIDAR and will be used to correct
the output scene. The general approach to the point cloud registration is using
key points for shifting and rotating input models to the scene construction. It
uses geometric features of source clouds and makes a high-quality matching with
data that has not any distortions [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ].
      </p>
      <p>
        In practice, there are many distortions in the stereo camera model, and we
cannot use this method without signi cant modi cations [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
      </p>
      <p>Therefore, we chose an approach, which uses some scanner geometry features
in lieu model key points. We decided to divide the data fusion task into two
subtasks.</p>
      <p>The rst task is the 3D scene construction from the scanner with 360 degrees
range. The second one is the data fusion of combined stereo camera model with
LIDAR point cloud. Both of subtasks could be solved by key point and geometric
approaches. The decomposition allows to understand the task clearly and to get
the estimated result, which could help to evaluate the matching quality.
2
2.1</p>
    </sec>
    <sec id="sec-2">
      <title>Materials and methods</title>
      <sec id="sec-2-1">
        <title>Stereo camera model</title>
        <p>
          The stereo camera is consisted of two calibrated coaxial oriented camera modules,
which give a couple of calibrated images for disparity map calculation to create
the 3D scene. We use StereoBM and StereoSGBM methods for disparity map
calculation with the use the default calibration module from OpenCV library
[
          <xref ref-type="bibr" rid="ref6">6</xref>
          ]. Each of calibrated images for disparity map calculation are shown on g. 3.
The disparity map is a two-dimensional array, which keeps the distance between
two horizontal identical points in both pictures. We use the equation below for
disparity map conversion to 3D model [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ].
        </p>
        <p>&gt;8y
&lt;</p>
        <p>x
&gt;:z
= f
= xl
= yl
b=disp
y=f
y=f
(1)</p>
        <sec id="sec-2-1-1">
          <title>Where</title>
          <p>x, y, z - point coordinates in the 3D model in mm.
xl, yl - point coordinates in the disparity map in pixels.
f - focal length of the camera in mm.
disp - disparity value in pixels.
b - baseline, the distance between two camera modules in mm.
Laser range nder Sweep V1 creates a 2D scanning in the horizontal axis of
rotation. This module has been installed on the scanner rotating part and does
vertical scanning. After nishing, the 2D vertical scanner part is turned for a
few degrees to perform the next 2D scanning. Figure 5 shows the point cloud
from LIDAR.
2.3</p>
        </sec>
      </sec>
      <sec id="sec-2-2">
        <title>Horizontal angle view calculation</title>
        <p>Stereo camera has been installed on the horizontal rotated part of the scanner
to create a 360-degrees range model. The scanner turns by view angle from
the previous state to take a couple of photos. Figure 6 shows the top view of the
scanner which makes new a couple of images every angle.</p>
        <p>We use equation 2 to calculate view angle in degrees.</p>
        <p>=
binning
dispRes=maxRes
(2)</p>
        <sec id="sec-2-2-1">
          <title>Where</title>
          <p>
            - camera horizontal view angle in degrees.
dispres - horizontal resolution of the disparity map.
maxRes - maximum horizontal resolution of the camera matrix.
binning - camera binning factor, which depends on the camera operation mode.
Values , maxRes and binning are got from camera speci cations [
            <xref ref-type="bibr" rid="ref8">8</xref>
            ] [
            <xref ref-type="bibr" rid="ref10">10</xref>
            ], value
dispRes is got from the OpenCV function getValidDisparityROI [
            <xref ref-type="bibr" rid="ref11">11</xref>
            ].
          </p>
          <p>The equation 3 presents the calculation of degrees for the system.</p>
          <p>
            360-degree model construction from the stereo camera
For 360-degrees scene construction we turn every model by degrees from the
previous state. For rotation, we obtain spherical coordinates from the cartesian
coordinate system using the ordinary equation [
            <xref ref-type="bibr" rid="ref11">11</xref>
            ] and then add angle to
every spherical coordinates.
          </p>
          <p>The rotation equation 4 in the spherical coordinate system is used to
construct the scene.
(4)
(5)
8&gt;r
&lt;
&gt;
:
= rnModel
= nModel
=
nModel + (n
1)
Where n 2 [1...N], N is the quantity of sources models, which equals (5)
360=42; 5 = 8; 4 = 9:
This approach with using some geometric features (view angle and rotation
angle) has advantages over the key points method.</p>
          <p>Firstly, the deformation of input models does not a ect to 360 degrees model
construction. Secondly, fewer models are used for construction because it is not
necessary to cross them with each other. Finally, there is a simple
implementation, which does not require high-performance hardware resources. The method
also has a disadvantage. Angle errors and vibrations in the mechanical part of
the device will in uence on the 360 degrees range stereo model and won't be
founded using this method.
2.5</p>
        </sec>
      </sec>
      <sec id="sec-2-3">
        <title>Stereo camera model</title>
        <p>Steps below provide matching of LIDAR and stereo camera point clouds.
1. O set the laser range nder model down in the Cartesian coordinate system(6).
2. Convert the shifted scene to the spherical coordinate system.
3. Rotate the model in spherical coordinates system (7).</p>
        <p>&gt;8xshift
&lt;</p>
        <p>yshift
&gt;:zshift
= xlidar
= ylidar
= zlidar
&gt;8r
&lt;
&gt;
:
= rshift
= shift
= shift
n
=2
(6)
(7)
For improving calculation performance we shift LIDAR cloud because there are
fewer points than in the stereo camera model.
3
3.1</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Results</title>
      <sec id="sec-3-1">
        <title>Developed software</title>
        <p>We developed the software in C++ which creates a union point cloud from the
stereo camera and laser range nder using geometrical method described above.
Both representations are kept in di erent organized structures to implement fast
calculations. Figure 8 shows the LIDAR point cloud structure.
The main feature of the LIDAR model is that every point of the 2D range in
a plane has equal coordinate. There are one-dimensional arrays with point
structure which consists of angle and radius. We can get an array through
indexing. This structure is used to keep fewer values and to get simple indexation.
In addition, for rotating we change only the index value of the array. So, there
is no need to change every point.</p>
        <p>
          The stereo camera model has other features. Unfortunately, we cannot
assume that every point in a line has equal in column case and in row space.
Equation [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ] means that and also depend on disparity value in every cell,
so both of coordinates are not equal in the same line. However, at every point,
we can get all neighbors from left, right, top and down parts like on 2D-image
because disparity map is a matrix structure. Therefore, we decided to save the
matrix indexation, but we kept radius, and values in each cell as well. Figure
9 shows the data structure of points array for models from the stereo camera.
The array height size is equal to the disparity map array height. The array width
size is equal to width of the disparity map array, which is multiplicated by the
number of source models to make a 360-degrees view scene. Both of structures
will help us to correct output model in the future because there is a simple
indexation to get the neighbor point from each sell.
3.2
        </p>
      </sec>
      <sec id="sec-3-2">
        <title>Experiment</title>
        <p>We scanned the next scene to evaluate the quality of the model combination:
9 colored clouds from the stereo camera with 42 degrees view angle;
LIDAR point cloud where every 3 degrees a 500 points plane has been built.
As a result of this research, the algorithm and software have been developed and
tested with a real data from the 3D scanner. The future work is the construction
of a laboratory scene with some metrical objects to evaluate algorithm accuracy.
The other way is a developing a method for point cloud correcting using
presented data structures and scanner characteristics. In the future, we are going
to improve the application performance using a multi-threaded implementation.</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Bikovsky</surname>
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kustarev</surname>
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Didin</surname>
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gromov</surname>
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dranitsa</surname>
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Mobile systems for mediumrange 3D</article-title>
          .
          <source>Control Engineering</source>
          , Russia, P
          <volume>34</volume>
          {37 (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Scanse</surname>
          </string-name>
          ,
          <article-title>Sweep V1</article-title>
          .
          <article-title>User manual and technical speci cations</article-title>
          ,
          <source>P</source>
          <volume>1</volume>
          (
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Pomerleau</surname>
            <given-names>F</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Colas</surname>
            <given-names>F</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Siegwart</surname>
            <given-names>R. :</given-names>
          </string-name>
          <article-title>A Review of Point Cloud Registration Algorithms for Mobile Robotics</article-title>
          , (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>The PCL Registration</surname>
            <given-names>API</given-names>
          </string-name>
          , http://pointclouds.org/documentation/ tutorials/registration_api.php
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Rusu</surname>
            <given-names>R.</given-names>
          </string-name>
          :
          <article-title>Semantic 3D Object Maps for Everyday Manipulation in Human Living Environments</article-title>
          . Dissertation, P
          <volume>199</volume>
          (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>Camera</given-names>
            <surname>Calibration</surname>
          </string-name>
          and 3D Reconstruction, https://docs.opencv.
          <source>org/2</source>
          .4/ modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Scharstein</surname>
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>View synthesis using stereo vision</article-title>
          , P
          <volume>10</volume>
          (
          <year>1999</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <article-title>Camera speci cation , Raspberry pi o cal site</article-title>
          , https://www.raspberrypi.org/ documentation/hardware/camera
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>API</given-names>
            <surname>Camera</surname>
          </string-name>
          <article-title>Calibration and 3D Reconstruction, OpenCV, o cial site</article-title>
          , https: //docs.opencv.
          <source>org/3</source>
          .4/d9/d0c/group__calib3d.html
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>10. Camera hardware, ReadTheDocs, https://picamera.readthedocs.io/en/ release-1.13/fov.html</mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <article-title>Spherical coordinate system</article-title>
          , Wikipedia, https://en.wikipedia.org/wiki/ Spherical_coordinate_system
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>