<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xml:lang="en" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="nlm-ta">Sensors</journal-id>
<journal-title>Sensors</journal-title>
<issn pub-type="epub">1424-8220</issn>
<publisher>
<publisher-name>Molecular Diversity Preservation International (MDPI)</publisher-name></publisher></journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.3390/s121012940</article-id>
<article-id pub-id-type="publisher-id">sensors-12-12940</article-id>
<article-categories>
<subj-group>
<subject>Article</subject></subj-group></article-categories>
<title-group>
<article-title>Long Baseline Stereovision for Automatic Detection and Ranging of Moving Objects in the Night Sky</article-title></title-group>
<contrib-group>
<contrib contrib-type="author">
<name><surname>Danescu</surname><given-names>Radu</given-names></name><xref ref-type="aff" rid="af1-sensors-12-12940"><sup>1</sup></xref><xref ref-type="corresp" rid="c1-sensors-12-12940"><sup>*</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Oniga</surname><given-names>Florin</given-names></name><xref ref-type="aff" rid="af1-sensors-12-12940"><sup>1</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Turcu</surname><given-names>Vlad</given-names></name><xref ref-type="aff" rid="af2-sensors-12-12940"><sup>2</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Cristea</surname><given-names>Octavian</given-names></name><xref ref-type="aff" rid="af3-sensors-12-12940"><sup>3</sup></xref></contrib></contrib-group>
<aff id="af1-sensors-12-12940">
<label>1</label> Technical University of Cluj-Napoca, Memorandumului 28, 400114 Cluj-Napoca, Romania; E-Mail: <email>florin.oniga@cs.utcluj.ro</email></aff>
<aff id="af2-sensors-12-12940">
<label>2</label> Astronomical Observatory Cluj-Napoca, Astronomical Institute of the Romanian Academy, Cireşilor 19, 400487 Cluj-Napoca, Romania; E-Mail: <email>vladturcu@yahoo.com</email></aff>
<aff id="af3-sensors-12-12940">
<label>3</label> BITNET CCSS, Madach 6, 400464 Cluj-Napoca, Romania; E-Mail: <email>octavian.cristea@bitnet.info</email></aff>
<author-notes>
<corresp id="c1-sensors-12-12940">
<label>*</label> Author to whom correspondence should be addressed; E-Mail: <email>radu.danescu@cs.utcluj.ro</email>; Tel.: +40-264-401-457; Fax: +40-264-594-491.</corresp></author-notes>
<pub-date pub-type="collection">
<year>2012</year></pub-date>
<pub-date pub-type="epub">
<day>25</day>
<month>09</month>
<year>2012</year></pub-date>
<volume>12</volume>
<issue>10</issue>
<fpage>12940</fpage>
<lpage>12963</lpage>
<history>
<date date-type="received">
<day>13</day>
<month>08</month>
<year>2012</year></date>
<date date-type="rev-recd">
<day>20</day>
<month>09</month>
<year>2012</year></date>
<date date-type="accepted">
<day>24</day>
<month>09</month>
<year>2012</year></date></history>
<permissions>
<copyright-statement>© 2012 by the authors; licensee MDPI, Basel, Switzerland.</copyright-statement>
<copyright-year>2012</copyright-year>
<license>
<p>This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution license (http://creativecommons.org/licenses/by/3.0/).</p></license></permissions>
<abstract>
<p>As the number of objects in Earth's atmosphere and in low Earth orbit is continuously increasing; accurate surveillance of these objects has become important. This paper presents a generic, low cost sky surveillance system based on stereovision. Two cameras are placed 37 km apart and synchronized by a GPS-controlled external signal. The intrinsic camera parameters are calibrated before setup in the observation position, the translation vectors are determined from the GPS coordinates and the rotation matrices are continuously estimated using an original automatic calibration methodology based on following known stars. The moving objects in the sky are recognized as line segments in the long exposure images, using an automatic detection and classification algorithm based on image processing. The stereo correspondence is based on the epipolar geometry and is performed automatically using the image detection results. The resulting experimental system is able to automatically detect moving objects such as planes, meteors and Low Earth Orbit satellites, and measure their 3D position in an Earth-bound coordinate system.</p></abstract>
<kwd-group>
<kwd>space surveillance</kwd>
<kwd>stereo vision</kwd>
<kwd>automatic calibration</kwd>
<kwd>object recognition</kwd></kwd-group></article-meta></front>
<body>
<sec sec-type="intro">
<label>1.</label>
<title>Introduction</title>
<p>Either due to human activity or to Nature, the night sky is filled with moving objects. Planes, meteors, satellites, or even passing asteroids can be observed from Earth, and for many such objects knowing their position is of significant interest. For example, in the context of a permanently increasing number of artificial satellites in the Earth's orbit, continuous monitoring of their position becomes more and more important, so that collisions may be avoided, orbits may be maintained, and de-orbiting events may be accurately predicted. A detailed presentation of the problem of space debris and existing solutions for their observation is found in [<xref ref-type="bibr" rid="b1-sensors-12-12940">1</xref>]. In that study we find that RADAR is the preferred technique for observing objects close to the Earth, up to Low Earth Orbit (LEO), but farther away the optical sensors tend to be the best choice, especially when cost effectiveness is taken into consideration.</p>
<p>The easiest and cheapest way to observe the sky is by means of optical systems, cameras and telescopes. The visual data captured by these optical systems can be analyzed through image processing algorithms, in order to automatically detect objects of interest. When two or more optical systems, located in different places on the Earth's surface, are synchronized, and their images are processed together, one can achieve stereovision, a process that relies on the parallax effect to retrieve 3D information of the observed targets directly, without any assumptions on the behavior of the object. Measuring long distances, of hundreds or even thousands of kilometers, requires the use of long distances between the cameras, so that the parallax effect can be significant. We can find many uses of long baseline stereovision, uses that imply accurate long distance measurements, such as cloud height estimation [<xref ref-type="bibr" rid="b2-sensors-12-12940">2</xref>] or terrain mapping [<xref ref-type="bibr" rid="b3-sensors-12-12940">3</xref>]. Maybe the most impressive deployment of a long baseline stereovision system is NASA's STEREO project, which uses two observation platforms orbiting the Sun at the same distance as the Earth, one station leading and one station trailing our planet, at similar distances. One of the objectives of this project is to study the 3D structure of the Sun's corona, especially the origin of Coronal Mass Ejections. An early presentation of the challenges of this project is found [<xref ref-type="bibr" rid="b4-sensors-12-12940">4</xref>]. An overview of the mission is detailed in [<xref ref-type="bibr" rid="b5-sensors-12-12940">5</xref>]. Details about the cameras that form the helioscopic imagers, and also about specific challenges regarding calibration and verification of the system are presented in [<xref ref-type="bibr" rid="b6-sensors-12-12940">6</xref>].</p>
<p>The most affordable devices for sky observation are off-the-shelf cameras and lenses. These systems can be easily deployed, and what they lack in accuracy is compensated by the ease of setting up and operation. This paper describes a large baseline stereovision system built with low cost components, which can measure with reasonable accuracy the position of objects ranging from 100 to 1,500 km above the ground surface, a range which includes meteors and LEO satellites. This range is conditioned by the baseline, which does not permit a smaller distance, as the large disparity prevents objects such as planes to be observed simultaneously in both images (but they are still detected in a single image), and by the sensitivity of the CCD off-the-shelf camera which does not permit far, faint objects to be observed. Both these problems could easily be overcome with a different geographical setup and a different choice of imaging hardware.</p>
<p>In the first step of our proposed method, the moving objects are detected in each digital image, based on their unique appearance. A defining characteristic of these objects is the linear nature of their image trace, which discriminates them from the point-like stars. The line segment trajectory is caused by the speed of the object, combined with the high exposure time of the imaging device. The night sky images contain a multitude of objects like stars, clouds, condensation trails, outliers that might make it harder to observe the relevant objects' streaks, as well as to distinguish between different types of objects. To perform these tasks accurately, a proper approach would be to detect and classify all the above mentioned objects into their corresponding classes.</p>
<p>A related approach for detection of satellites' streaks in astronomical images is found in [<xref ref-type="bibr" rid="b7-sensors-12-12940">7</xref>]. First, image-plane artifacts and large scale background objects are removed. A noise threshold is determined for each image pixel, and objects above this threshold are identified. The detected objects are finally classified as point-like or streak-like, based on image moments. Another relevant approach for moving object detection as image streaks is presented in [<xref ref-type="bibr" rid="b8-sensors-12-12940">8</xref>]. The approach is based on a series of steps, the most important ones being background light estimation and removal, star detection and removal, followed by an iterative matched filter used to detect streaks.</p>
<p>Our approach for image streak detection is based on background estimation and removal from continuous image sequences. The features that do not conform to the background are labeled and classified, and the image objects that look line segments are selected for further processing. The stereo matching is performed using the epipolar constraint, which greatly reduces the search space, and which also provides a fast and robust solution for the sub-pixel correspondence. The enforcement of the epipolar constraint and the triangulation process that leads to the 3D coordinates of the detected objects are possible due to an original solution of automatic re-calibration of the extrinsic camera parameters.</p>
<p>This paper will highlight the following contributions:
<list list-type="simple">
<list-item>
<label>-</label>
<p>A cost effective solution for large baseline stereo image acquisition,</p></list-item>
<list-item>
<label>-</label>
<p>An original method for automatic calibration of the rotation matrices, based on tracking known star positions in the image sequence,</p></list-item>
<list-item>
<label>-</label>
<p>An original method for detection and classification of the moving objects in the image sequence,</p></list-item>
<list-item>
<label>-</label>
<p>An original, computationally efficient method for stereo matching based on the epipolar geometry and the linear trajectory of the moving object.</p></list-item></list></p></sec>
<sec>
<label>2.</label>
<title>Setting up the Large Baseline Stereoscope</title>
<sec>
<label>2.1.</label>
<title>The Stereo Image Acquisition System</title>
<p>The large baseline stereovision system is composed of two identical observation stations, each station having the following components (see <xref ref-type="fig" rid="f1-sensors-12-12940">Figure 1</xref>):
<list list-type="simple">
<list-item>
<label>-</label>
<p>“Wide-angle” objective with a focal distance of 20 mm, sigma EX 20 mm F1.8 DG RF aspherical type [<xref ref-type="bibr" rid="b9-sensors-12-12940">9</xref>].</p></list-item>
<list-item>
<label>-</label>
<p>CCD camera, DSLR type (Canon EOS 50D) with a CCD CMOS APS-C chip (22.3 mm × 14.9 mm, 4,572 × 3,168 pixels, in color) [<xref ref-type="bibr" rid="b10-sensors-12-12940">10</xref>].</p></list-item>
<list-item>
<label>-</label>
<p>Equatorial tracking mount, type Celestron CG5 [<xref ref-type="bibr" rid="b11-sensors-12-12940">11</xref>].</p></list-item>
<list-item>
<label>-</label>
<p>Laptop computer equipped with a custom USB to TTL interface for camera triggering. The triggering is done using the remote cable interface of the camera.</p></list-item>
<list-item>
<label>-</label>
<p>GPS Time Receiver (20 channels) for time synchronization and also for the measurement of the observer's location.</p></list-item></list></p>
<p>Each camera captures images of the night sky and sends captured images to a local computer. The stereoscope's base-line (the distance between the camera systems) is 37 km, a compromise between simultaneous detection of low altitude objects from two locations and triangulation accuracy.</p>
<p>The theoretical visual FOV covered by this system configuration has a diagonal of 68 degrees. We have tested different exposure times for maximum sensibility and maximum aperture of the objective (ISO 3200, F1.8), and we found that the optimum exposure time was 5 s. The acquisition cycle is comprised of: the exposure time, the analog/digital conversion time and the transfer/storage time (computer and/or camera memory card). The analog/digital converter afferent to the DSLR camera works on 14 bits. To satisfy the resolution and speed requirements previously mentioned we have worked in binning mode—“sRAW2” (2,376 × 1,584 pixels) or “small JPEG” (2,352 × 1,568 pixels). The acquisition cycle for small resolution mode took a minimum of 7 seconds (5 seconds exposure time), and in the case of direct transfer to the computer it reached 8–9 s. Consequently, this method allowed us to obtain an average of 10 images for a complete passing of a LEO satellite.</p>
<p>For the small JPEG image size, the intrinsic calibration process has computed a focal distance, measured in pixels, of 2,187. For this focal distance, and the baseline of 37 km, the expected stereo measurement accuracy can be computed if we assume the equivalent rectified (canonical) stereoscope having the same parameters. The actual stereo performance, for an epipolar geometry system such as the one described in this paper, depends on multiple factors, such as the orientation of the observed object with respect to the epipolar line, but the canonical equivalent error estimation is still a good predictor. For the canonical case, the distance <italic>Z</italic>, the baseline <italic>b</italic>, the focal distance <italic>f</italic> and the disparity <italic>d</italic> are related as Z = bf/d. For our baseline and our focal length, if we assume plus or minus one pixel of error in disparity estimation, we get error values ranging from 4 km at 400 km of distance (1% error), to 55 km at 1,500 km (3.7%), that is, from less than 1% to 4% for the whole LEO range. The error decreases linearly with the baseline. A double baseline would mean half the error, but it can also mean that we get less overlapping field of view between the cameras. A double focal length would mean a similar halving of the error, but with the cost of decreasing the field of view.</p></sec>
<sec>
<label>2.2.</label>
<title>Camera Synchronization</title>
<p>Stereovision requires synchronized image acquisition from the two cameras. In a classical stereo system the synchronization is achieved by triggering the cameras by a common signal. However, this solution cannot be applied when the cameras are 37 km apart. Thus, we need two independent units that can generate triggering signals at the same time, without a physical connection between them (see <xref ref-type="fig" rid="f2-sensors-12-12940">Figure 2</xref>). Each unit has a schedule list of triggering times, and if the units have a common schedule, the triggering signals will be simultaneous. Unfortunately, working with a schedule means assuming that the two synchronization units have a precise internal time, which is an assumption that for a common laptop PC is not true. Even if the internal clocks are precisely synchronized, they will quickly fall out of sync.</p>
<p>In the absence of a precise time base, we needed some external signal to keep the two units in sync. This signal is the GPS radio signal, which is received simultaneously, once a second, all over the world. Each unit receives this signal with the help of a GPS receiver, connected to the PC. The following algorithm shows the operation of a unit, based on GPS reception.</p>
<array>
<tbody>
<tr>
<td align="left" valign="top"><bold>While</bold> (<bold>NotEmpty</bold> <italic>ScheduleList</italic>)</td></tr>
<tr>
<td align="left" valign="top"><italic>TriggerTime</italic> = <italic>ScheduleList</italic>.CurrentTime()</td></tr>
<tr>
<td align="left" valign="top"><italic>GPSTime</italic> = <italic>GPSReceiver</italic>.GetTimeNonBlocking()</td></tr>
<tr>
<td align="left" valign="top"><bold>If</bold> (<italic>TriggerTime-GPSTime</italic> &lt; 2 s)</td></tr>
<tr>
<td align="left" valign="top"> <bold>While</bold> (GPSTime &lt; TriggerTime)</td></tr>
<tr>
<td align="left" valign="top">  GPSTime=<italic>GPSReceiver</italic>.GetTimeBlocking()</td></tr>
<tr>
<td align="left" valign="top"> <bold>End While</bold></td></tr>
<tr>
<td align="left" valign="top"> <italic>Camera</italic>.Trigger()</td></tr>
<tr>
<td align="left" valign="top"> <italic>ScheduleList</italic>.NextTime()</td></tr>
<tr>
<td align="left" valign="top"><bold>End If</bold></td></tr>
<tr>
<td align="left" valign="top"><bold>End While</bold></td></tr></tbody></array>
<p>The unit reads the current triggering time from the <italic>ScheduleList</italic>. The current global time is polled through the method <italic>GPSReceiver</italic>.GetTimeNonBlocking(), which will deliver the most recent timestamp of a GPS reception, without blocking the execution of the program. If the global time is close to the triggering time, the program goes in the blocking mode. The GPS receiver is queried by <italic>GPSReceiver</italic>.GetTimeBlocking(), a function that will exit only when a fresh signal is received. In this way, there will be a minimum delay between the reception of the signal and the triggering of the camera, if the received time is the one matching the schedule list.</p></sec>
<sec>
<label>2.3.</label>
<title>The Coordinate Systems</title>
<p>In order to represent the position of the detected objects, we have chosen a coordinate system whose origin is located in the centre of the Earth, and its coordinate axes are fixed in relation to our planet. Such a coordinate system is the Earth Centered, Earth Fixed (ECEF) one, whose <italic>OZ</italic> axis is the Earth's axis of rotation, pointing to the North Pole, the <italic>OX</italic> axis joins the centre of the Earth with the point on the surface that has zero latitude and longitude, and <italic>OY</italic> is perpendicular to the <italic>XOZ</italic> plane. The equatorial plane is identical to plane <italic>XOY</italic>, and the zero meridian plane is <italic>XOZ</italic> (see <xref ref-type="fig" rid="f3-sensors-12-12940">Figure 3</xref>).</p>
<p>In stereovision terms, we shall refer to the ECEF coordinate system as World Coordinate System, <italic>W<sub>C</sub></italic>. The two cameras that will observe the sky will have their own coordinate systems, the left camera system centered in <italic>C<sub>L</sub></italic> and having the axes <italic>X<sub>L</sub>Y<sub>L</sub>Z<sub>L</sub></italic>, and the right camera system centered in <italic>C<sub>R</sub></italic>, and having the axes <italic>X<sub>R</sub>Y<sub>R</sub>Z<sub>R</sub></italic>. The left image plane will be parallel to the plane <italic>X<sub>L</sub>C<sub>L</sub>Y<sub>L</sub></italic>, and the right image plane will be parallel to <italic>X<sub>R</sub>C<sub>R</sub>Y<sub>R</sub></italic>.</p></sec>
<sec>
<label>2.4.</label>
<title>Camera Parameters</title>
<p>The stereovision process relies on accurate triangulation of corresponding features from the left and right camera images. For this reason, the correspondence between the pixel position and the 3D world must be accurately described by the cameras' parameters. There are two types of parameters, intrinsic and extrinsic.</p>
<p>The extrinsic parameters describe the relation between the coordinate systems of the cameras and the world coordinate system. For each camera, we have a <italic>translation vector</italic>, which describes the position of the camera's optical center in the world coordinate system. We shall denote these vectors by <bold>T<sub>CL</sub></bold> and <bold>T<sub>CR</sub></bold>. Conversely, one can express the position of the world coordinate system's origin in the cameras' coordinate systems. These translation vectors are denoted <bold>T<sub>WL</sub></bold> for the left camera, and <bold>T<sub>WR</sub></bold> for the right camera.</p>
<p>The orientations of the camera coordinate systems with respect to the world coordinate system are described by the <italic>rotation matrices</italic> of the two cameras, <bold>R<sub>CL</sub></bold> and <bold>R<sub>CR</sub></bold>.</p>
<p>Using the translation vectors and the rotation matrices, one can perform coordinate transformations between the world and camera coordinate systems, for any 3D point.</p>
<p>The specific characteristics of a camera plus lens optical system are described by the intrinsic camera parameters (in what follows, we'll denote by the word “camera” the whole camera-lens assembly). For each camera, we'll have the following intrinsic parameters:
<list list-type="simple">
<list-item>
<label>-</label>
<p><italic>Focal length</italic>, measured in pixels, which is the distance from the optical centre to the image plane. Each camera has its own focal length: <italic>f<sub>L</sub></italic> for the left camera, and <italic>f<sub>R</sub></italic> for the right camera.</p></list-item>
<list-item>
<label>-</label>
<p><italic>Position of the principal point</italic>, measured in pixels, represents the intersection of the optical axis of the camera and the image plane. For the left camera, we have 
<inline-formula>
<mml:math id="mm1" display="inline">
<mml:semantics id="sm1">
<mml:mrow>
<mml:msubsup>
<mml:mtext>C</mml:mtext>
<mml:mtext>L</mml:mtext>
<mml:mo>′</mml:mo></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>, and for the right camera we have 
<inline-formula>
<mml:math id="mm2" display="inline">
<mml:semantics id="sm2">
<mml:mrow>
<mml:msubsup>
<mml:mtext>C</mml:mtext>
<mml:mtext>R</mml:mtext>
<mml:mo>′</mml:mo></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mtext mathvariant="italic">CR</mml:mtext></mml:msub>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mtext mathvariant="italic">CR</mml:mtext></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula>.</p></list-item>
<list-item>
<label>-</label>
<p>The <italic>distortion coefficients</italic> are also included in the intrinsic parameter set. The image distortions are caused by the difference between the ideal pinhole camera model and the real camera and lens assembly. These distortions can be usually modeled by a radial component and a tangential component. The radial distortion of a point in the image, having the coordinates relative to the optical centre <italic>x</italic> and <italic>y</italic>, is the displacement of the point by the following offsets [<xref ref-type="bibr" rid="b12-sensors-12-12940">12</xref>]:
<disp-formula id="FD1">
<label>(1)</label>
<mml:math id="mm3" display="block">
<mml:semantics id="sm3">
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>r</mml:mi></mml:msup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>r</mml:mi></mml:msup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:mtext>(</mml:mtext>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msup>
<mml:mi>r</mml:mi>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msup>
<mml:mi>r</mml:mi>
<mml:mn>4</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msup>
<mml:mi>r</mml:mi>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msup>
<mml:mi>r</mml:mi>
<mml:mn>4</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>where
<disp-formula id="FD2">
<label>(2)</label>
<mml:math id="mm4" display="block">
<mml:semantics id="sm4">
<mml:mrow>
<mml:msup>
<mml:mi>r</mml:mi>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mi>y</mml:mi>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:semantics></mml:math></disp-formula>and <italic>k<sub>1</sub>, k<sub>2</sub></italic>, … are the <italic>radial distortion coefficients</italic> (an infinite set, in theory, but in practice one or two are enough to describe the distortion process).</p></list-item></list></p>
<p>Another type of distortion appears when the curvature centers of the lenses that are assembled in the optical system are not collinear. This distortion has, besides the radial component, a tangential one [<xref ref-type="bibr" rid="b13-sensors-12-12940">13</xref>]. The <italic>tangential distortion</italic> is modeled by the following equation:
<disp-formula id="FD3">
<label>(3)</label>
<mml:math id="mm5" display="block">
<mml:semantics id="sm5">
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi></mml:msup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mi>t</mml:mi></mml:msup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:mi>x</mml:mi>
<mml:mi>y</mml:mi>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msup>
<mml:mi>r</mml:mi>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msup>
<mml:mi>r</mml:mi>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:msup>
<mml:mi>y</mml:mi>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:mi>x</mml:mi>
<mml:mi>y</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>where <italic>p<sub>1</sub></italic>, <italic>p<sub>2</sub></italic> are the tangential distortion parameters.</p>
<p>In order to apply the stereovision process, we have to know all the parameters described in this section, for both cameras. The process of computing these parameters is the process of camera calibration, which has two major steps: intrinsic calibration and extrinsic calibration.</p></sec>
<sec>
<label>2.5.</label>
<title>Calibration of the Intrinsic Camera Parameters</title>
<p>The intrinsic calibration is performed once, before the cameras are set up in their working positions. The calibration process is a time consuming one, requiring that multiple images containing a chess-like pattern be acquired. The pattern must cover all image regions, and must be photographed from multiple angles and multiple distances from the camera.</p>
<p>The intrinsic calibration is performed using the Bouguet method, available through the Caltech Camera Calibration Toolbox [<xref ref-type="bibr" rid="b14-sensors-12-12940">14</xref>]. The method is semi-automatic, relying on the user for selecting the rectangle containing the relevant corners in the image, the individual corners of the chess squares being detected automatically afterwards. The intrinsic calibration process provides the position of the principal point, the focal length, and the distortion coefficients for each camera.</p></sec></sec>
<sec>
<label>3.</label>
<title>Online Extrinsic Parameter Calibration</title>
<sec>
<label>3.1.</label>
<title>Removal of Distortions</title>
<p>Once the intrinsic calibration process is completed, we know the distortion coefficients that affect the way a scene is represented in the image space. These coefficients cannot be ignored, because a wide angle lens, such as the one used for our night sky observation system, presents considerable distortion towards the image's margins. For this reason, we have to apply a distortion removal algorithm for each image we acquire.</p>
<p>The distortion removal process is applied before extrinsic calibration, and before the process of satellite detection can begin. This way, we can assume that in the next processing steps the images are acquired by an ideal perspective camera (pinhole camera).</p>
<p>The distortion removal algorithm is the following:</p>
<p>For each pixel (<italic>x,y</italic>) from the corrected image <bold>D</bold> (destination):
<list list-type="simple">
<list-item>
<label>-</label>
<p>Compute the distorted coordinates (<italic>x</italic>′, <italic>y</italic>′) using <xref rid="FD1" ref-type="disp-formula">Equations (1)</xref> and <xref rid="FD3" ref-type="disp-formula">(3)</xref>.</p></list-item>
<list-item>
<label>-</label>
<p>Assign to the intensity value of image <bold>D</bold> at position (<italic>x,y</italic>) an interpolated value from the distorted source image <bold>S</bold>. We shall use the linear interpolation, which will compute a weighted average between the intensity values located at the neighboring four integer coordinates bounding the real (floating point) position (<italic>x</italic>′, <italic>y</italic>′).</p></list-item></list></p>
<p>In the next sections, we'll assume that all the images are corrected for distortions.</p></sec>
<sec>
<label>3.2.</label>
<title>Computation of the Extrinsic Parameters</title>
<p>The classical extrinsic calibration methodology relies on the following assumptions:
<list list-type="simple">
<list-item>
<label>-</label>
<p>The intrinsic parameters are known.</p></list-item>
<list-item>
<label>-</label>
<p>We have a calibration scene, with objects whose 3D coordinates in a World Coordinate System are known. The objects must be easily identifiable, and therefore they are usually special patterns such as targets.</p></list-item>
<list-item>
<label>-</label>
<p>For each 3D point of known coordinates in the calibration scene, we know its position in the image space.</p></list-item></list></p>
<p>The calibration process relies on the projection equations, which map a 3D point in the World Coordinate System with its 2D correspondent in the image space. The unknowns of this relation are the extrinsic parameters of the camera: the translation vector and the rotation matrix. Having enough points, an iterative optimization process can extract the unknown values. The precision of the calibration process depends on the number of calibration points, on the accuracy of the measurement of their 3D coordinates with respect to the World Coordinate System, and on the precision of localization of their image correspondents.</p>
<p>The extrinsic calibration must be performed with the cameras in their final position for stereovision-based measurements, and the size of the calibration scene has to be comparable with the distances that we want to measure. In our case, the cameras will be positioned roughly 37 km apart, pointed towards the sky, while the distances we want to measure are in the range of hundreds of kilometers. In these conditions, finding a good calibration scene for a classical calibration approach is very difficult.</p>
<p>To further complicate the matter, the cameras are fixed on equatorial mounts with star tracking capabilities. This mount simplifies the detection process, by making the stars appear static in the image sequence, but in the same time it complicates the calibration process, as it constantly changes the orientation of the cameras with respect to the World Coordinate System.</p>
<p>In this situation, the only calibration objects that we can rely on are the stars, whose position in the World Coordinate System is predictable. Unfortunately, the stars cannot be considered to be objects of known 3D coordinates <italic>X</italic>, <italic>Y</italic> and <italic>Z</italic>, as they are so far away that for all practical purposes their distance from the World Coordinate System's origin can be considered infinite. The only reliable information about the stars is composed of their angular coordinates, and thus they can be used only for computing the camera orientation angles, not for computing the translation vectors.</p>
<p>However, the translation vectors can be determined from the GPS coordinates of the camera's locations. Even if the commercial GPS devices have a low precision, with errors in the range of meters, this error is not critical for our situation, as the distance between cameras (the baseline) is several orders of magnitude greater.</p>
<p>The GPS coordinates of the two observation locations are the following:
<array>
<tbody>
<tr>
<td align="left" valign="top" rowspan="3"><italic>Feleacu</italic></td>
<td align="left" valign="top">Latitude:</td>
<td align="left" valign="top">46°42′36.50″N</td></tr>
<tr>
<td align="left" valign="top">Longitude:</td>
<td align="left" valign="top">23°35′36.74″E</td></tr>
<tr>
<td align="left" valign="top">Elevation:</td>
<td align="left" valign="top">743 m</td></tr>
<tr>
<td align="left" valign="top" rowspan="3"><italic>Marisel</italic></td>
<td align="left" valign="top">Latitude:</td>
<td align="left" valign="top">46°40′34.362″N</td></tr>
<tr>
<td align="left" valign="top">Longitude:</td>
<td align="left" valign="top">23°07′8.904″E</td></tr>
<tr>
<td align="left" valign="top">Elevation:</td>
<td align="left" valign="top">1,130 m</td></tr></tbody></array></p>
<p>In order to extract the translation vectors (in the ECEF coordinate system) from the GPS parameters, we'll use the World Geodetic System standard, in its latest revision, WGS 84 [<xref ref-type="bibr" rid="b15-sensors-12-12940">15</xref>]. This standard defines the Earth's surface as an ellipsoid with the major radius (equatorial radius) <italic>a</italic> = 6,378,137 m and a flattening factor <italic>f</italic> = 1/298.257223563. The minor (polar) radius can thus be computed as <italic>b</italic> = <italic>a(</italic>1 − <italic>f)</italic>, being approximately 6,356,752.3142 m.</p>
<p>Knowing the latitude <italic>φ</italic>, the longitude <italic>λ</italic> and the elevation <italic>h</italic>, we can extract the translation vector's components <italic>X</italic>, <italic>Y</italic> and <italic>Z</italic> using the following equations (the latitude and longitude angles are converted to radians):
<disp-formula id="FD4">
<label>(4)</label>
<mml:math id="mm6" display="block">
<mml:semantics id="sm6">
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mo>cos</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mi>φ</mml:mi>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:mi>f</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:msup>
<mml:mrow>
<mml:mo>sin</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mi>φ</mml:mi></mml:mrow></mml:msqrt></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD5">
<label>(5)</label>
<mml:math id="mm7" display="block">
<mml:semantics id="sm7">
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:mi>f</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mi>c</mml:mi></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD6">
<label>(6)</label>
<mml:math id="mm8" display="block">
<mml:semantics id="sm8">
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mo>=</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>a</mml:mi>
<mml:mi>c</mml:mi>
<mml:mo>+</mml:mo>
<mml:mi>h</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>cos</mml:mo>
<mml:mi>φ</mml:mi></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD7">
<label>(7)</label>
<mml:math id="mm9" display="block">
<mml:semantics id="sm9">
<mml:mrow>
<mml:mi>X</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi>r</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD8">
<label>(8)</label>
<mml:math id="mm10" display="block">
<mml:semantics id="sm10">
<mml:mrow>
<mml:mi>Y</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi>r</mml:mi>
<mml:mo>sin</mml:mo>
<mml:mi>λ</mml:mi></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD9">
<label>(9)</label>
<mml:math id="mm11" display="block">
<mml:semantics id="sm11">
<mml:mrow>
<mml:mi>Z</mml:mi>
<mml:mo>=</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="italic">as</mml:mtext>
<mml:mo>+</mml:mo>
<mml:mi>h</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mi>φ</mml:mi></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>At this point, we know the translation vectors <bold>T</bold><sub>CL</sub> and <bold>T</bold><sub>CR</sub>, and the intrinsic parameters of the cameras. All these parameters are fixed, as the camera properties do not change, and the positions of observation remain fixed. The parameters that are still unknown are the rotation matrices <bold>R</bold><sub>CL</sub> and <bold>R</bold><sub>CR</sub>, and these parameters change for each pair of acquired images, as the star tracking system continuously re-orients the cameras. Fortunately, for rotation matrix computation we can use the stars as calibration targets. For a precise calibration, we have chosen 18 stars of high brightness, easily identifiable in the images, which cover as much image surface as possible (see <xref ref-type="fig" rid="f4-sensors-12-12940">Figure 4</xref>).</p>
<p><xref ref-type="table" rid="t1-sensors-12-12940">Table 1</xref> shows the equatorial coordinates [<xref ref-type="bibr" rid="b16-sensors-12-12940">16</xref>], for the stars used in calibration process (shown in <xref ref-type="fig" rid="f4-sensors-12-12940">Figure 4</xref>). The Right Ascension (RA) and Declination (DEC) are updated (precession, nutation and proper motion) for the epoch of the observations, 9 July 2011 [<xref ref-type="bibr" rid="b17-sensors-12-12940">17</xref>].</p>
<p>As our World Coordinate System is fixed with respect to the Earth, we cannot use, in the process of calibration, the Right Ascension and the Declination directly. We need stellar coordinates that depict the instantaneous positions of the stars, in a specific time instant, with respect to the Earth. The declination angle is related to the equatorial plane, and therefore it remains the same as the Earth rotates, but the Right Ascension is relative to a fixed point in space, and this point changes its position with respect to the World Coordinate System constantly.</p>
<p>The equivalent of longitude for the celestial sphere is the Hour Angle. This angle is formed by the local meridian plane of a place on Earth with the plane passing through the Earth's axis and the sky object to be observed. The Hour Angle is positive towards the West, and is traditionally expressed in time units. The Hour Angle of a star is computed as the difference between the Local Sidereal Time (<italic>LST</italic>) of the place and the Right Ascension (<italic>RA</italic>) of the star. The local sidereal time can be computed from the local time [<xref ref-type="bibr" rid="b16-sensors-12-12940">16</xref>].</p>
<disp-formula id="FD10">
<label>(10)</label>
<mml:math id="mm12" display="block">
<mml:semantics id="sm12">
<mml:mrow>
<mml:mi>H</mml:mi>
<mml:mi>A</mml:mi>
<mml:mo>=</mml:mo>
<mml:mtext mathvariant="italic">LST</mml:mtext>
<mml:mo>−</mml:mo>
<mml:mi>R</mml:mi>
<mml:mi>A</mml:mi></mml:mrow></mml:semantics></mml:math></disp-formula>
<p>As the World Coordinate System relates to the Equator and to the Zero Meridian, we find convenient to relate the Hour Angle depicting the instantaneous position of a star to the same Zero Meridian, instead of relating it to the meridian of the place of observation (see <xref ref-type="fig" rid="f5-sensors-12-12940">Figure 5</xref>). In order to find the Hour Angle relative to meridian zero, <italic>HA<sub>0</sub></italic>, the following steps must be executed:
<list list-type="simple">
<list-item>
<label>-</label>
<p>Conversion of the local time of frame acquisition to GMT</p></list-item>
<list-item>
<label>-</label>
<p>Conversion of the GMT time to sidereal time <italic>LST<sub>0</sub></italic></p></list-item>
<list-item>
<label>-</label>
<p>Computation of <italic>HA<sub>0</sub></italic> as the difference between <italic>LST<sub>0</sub></italic> and the star's right ascension <italic>RA</italic>.</p></list-item></list></p>
<p>For a distance R, the polar coordinates can be converted into Cartesian coordinates. The X, Y and Z coordinates of the calibration stars will be computed using the following equations:
<disp-formula id="FD11">
<label>(11)</label>
<mml:math id="mm13" display="block">
<mml:semantics id="sm13">
<mml:mrow>
<mml:mi>X</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi>R</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="italic">DEC</mml:mtext>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>cos</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>H</mml:mi>
<mml:msub>
<mml:mi>A</mml:mi>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD12">
<label>(12)</label>
<mml:math id="mm14" display="block">
<mml:semantics id="sm14">
<mml:mrow>
<mml:mi>Y</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi>R</mml:mi>
<mml:mo>cos</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="italic">DEC</mml:mtext>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>H</mml:mi>
<mml:msub>
<mml:mi>A</mml:mi>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD13">
<label>(13)</label>
<mml:math id="mm15" display="block">
<mml:semantics id="sm15">
<mml:mrow>
<mml:mi>Z</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi>R</mml:mi>
<mml:mo>sin</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="italic">DEC</mml:mtext>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>At this point we have the 3D position of the stars in the World Coordinate System. In order to apply the rotation matrix calibration, we need to know the position of these stars in the acquired images (after the distortion has been removed from these images).</p>
<p>Initially, the position of the reference stars is set manually, for a reference frame for the left (<italic>Feleacu</italic>) and for the right (<italic>Marisel</italic>) observation sources. Ideally, the star tracking system will compensate the Earth's motion and the position of the calibration stars should remain constant for all the image sequence. Unfortunately we have found that small errors may appear and sometimes significant changes are visible, as shown in <xref ref-type="fig" rid="f6-sensors-12-12940">Figure 6</xref>.</p>
<p>As the calibration is very sensitive to the input data, it is crucial that the position of the reference stars is corrected for each frame. The correction process is automatic, using a stereovision-specific correlation technique for finding the correspondent position of the stars across the frames.</p>
<p>For each newly acquired frame, we compare image windows in a neighborhood of the reference star position to an original image window of the reference frame, centered in the reference point. A distance between the original window and each of the candidate windows is computed, and the centre of the minimum distance candidate is the new calibration star position. Several window comparison metrics are presented in [<xref ref-type="bibr" rid="b18-sensors-12-12940">18</xref>]. The simplest and fastest one is the Sum of Absolute Differences (SAD), applied to a squared neighborhood (5 × 5, 7 × 7, …). For this function, the ideal matching distance is zero, when the corresponding regions are identical. In practice, we'll settle for the minimum in a given search range. The SAD matching function is described by the following equation:
<disp-formula id="FD14">
<label>(14)</label>
<mml:math id="mm16" display="block">
<mml:semantics id="sm16">
<mml:mrow>
<mml:mtext mathvariant="italic">SAD</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>N</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>N</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mi>w</mml:mi>
<mml:mn>2</mml:mn></mml:mfrac></mml:mrow>
<mml:mrow>
<mml:mfrac>
<mml:mi>w</mml:mi>
<mml:mn>2</mml:mn></mml:mfrac></mml:mrow></mml:munderover>
<mml:mrow>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mi>w</mml:mi>
<mml:mn>2</mml:mn></mml:mfrac></mml:mrow>
<mml:mrow>
<mml:mfrac>
<mml:mi>w</mml:mi>
<mml:mn>2</mml:mn></mml:mfrac></mml:mrow></mml:munderover>
<mml:mrow>
<mml:mrow>
<mml:mo>|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>R</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>R</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>R</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:mi>j</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>I</mml:mi>
<mml:mi>N</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>N</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>N</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:mi>j</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>|</mml:mo></mml:mrow></mml:mrow></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>where (<italic>x<sub>R</sub></italic>, <italic>y<sub>R</sub></italic>) is a point in the reference frame, <italic>I<sub>R</sub></italic> is the reference frame as a matrix of intensity values, (<italic>x<sub>R</sub></italic>, <italic>y<sub>R</sub></italic>) is a point in the newly acquired image, <italic>I<sub>N</sub></italic> is the intensity matrix of the new image, and <italic>w</italic> is the size of the correlation window. For our calibration methodology we have chosen <italic>w</italic> = 11, as the processing time is not critical while the correctness of the correspondence is. The new position is searched in a neighborhood of 41 × 41 pixels around the reference position (see <xref ref-type="fig" rid="f7-sensors-12-12940">Figure 7</xref>).</p>
<p>The automatic adjustment of the calibration points has a success rate of 100% for all frames that we have processed, which means that the calibration of the rotation matrices can be applied automatically, without any supervision, for the whole observation sequence.</p>
<p>The calibration process starts from the equations that project the known 3D reference points to known reference image points. For each point (star) <italic>i</italic> we have a system of two equations:
<disp-formula id="FD15">
<label>(15)</label>
<mml:math id="mm17" display="block">
<mml:semantics id="sm17">
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>c</mml:mi></mml:msub></mml:mrow>
<mml:mi>f</mml:mi></mml:mfrac>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>13</mml:mn></mml:mrow></mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>w</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>23</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>w</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>33</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>w</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>11</mml:mn></mml:mrow></mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>w</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>21</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>w</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>31</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>w</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>c</mml:mi></mml:msub></mml:mrow>
<mml:mi>f</mml:mi></mml:mfrac>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>13</mml:mn></mml:mrow></mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>w</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>23</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>w</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>33</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>w</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>12</mml:mn></mml:mrow></mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>w</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>22</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>w</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>32</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>w</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>where <italic>X<sub>i</sub></italic>, <italic>Y<sub>i</sub></italic>, <italic>Z<sub>i</sub></italic> are the reference point's 3D coordinates, <italic>x<sub>i</sub></italic> and <italic>y<sub>i</sub></italic> are the reference point's image coordinates, <italic>x<sub>c</sub></italic> and <italic>y<sub>c</sub></italic> are the coordinates of the principal point of the camera, <italic>X<sub>CW</sub></italic>, <italic>Y<sub>CW</sub></italic>, <italic>Z<sub>CW</sub></italic> are the components of the translation vector, and <italic>f</italic> is the camera's focal distance. The unknowns are the rotation matrix <bold>R</bold>'s components, <bold>R</bold> = (<italic>r<sub>kl</sub></italic>), for <italic>k, l</italic> = 1,2,3.</p>
<p>Due to the fact that the <italic>X<sub>i</sub></italic>, <italic>Y<sub>i</sub></italic> and <italic>Z<sub>i</sub></italic> coordinates of the stars are proportional to their distance from Earth (Equations (11–13)), which is many orders of magnitude higher than the values of the translation vector of the cameras, the coordinates of the cameras in the World Coordinate System <italic>X<sub>CW</sub></italic>, <italic>Y<sub>CW</sub></italic> and <italic>Z<sub>CW</sub></italic> can be removed from <xref rid="FD15" ref-type="disp-formula">Equation (15)</xref>. Doing this, and using <xref rid="FD11" ref-type="disp-formula">Equations (11</xref>–<xref rid="FD13" ref-type="disp-formula">13)</xref>, we can rewrite <xref rid="FD15" ref-type="disp-formula">Equation (15)</xref> such that no assumption about the distance of the stars is needed:
<disp-formula id="FD16">
<label>(16)</label>
<mml:math id="mm18" display="block">
<mml:semantics id="sm18">
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>c</mml:mi></mml:msub></mml:mrow>
<mml:mi>f</mml:mi></mml:mfrac>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>13</mml:mn></mml:mrow></mml:msub>
<mml:mo>cos</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">DEC</mml:mtext>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>cos</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">H</mml:mtext>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mn>23</mml:mn></mml:msub>
<mml:mo>cos</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">DEC</mml:mtext>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>sin</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">HA</mml:mtext>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>33</mml:mn></mml:mrow></mml:msub>
<mml:mo>sin</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">DEC</mml:mtext>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>11</mml:mn></mml:mrow></mml:msub>
<mml:mo>cos</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">DEC</mml:mtext>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>cos</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">HA</mml:mtext>
<mml:mrow>
<mml:mi>A</mml:mi>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>21</mml:mn></mml:mrow></mml:msub>
<mml:mo>cos</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">DEC</mml:mtext>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>sin</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">HA</mml:mtext>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mn>31</mml:mn></mml:msub>
<mml:mo>sin</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">DEC</mml:mtext>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>c</mml:mi></mml:msub></mml:mrow>
<mml:mi>f</mml:mi></mml:mfrac>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mn>13</mml:mn></mml:msub>
<mml:mo>cos</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">DEC</mml:mtext>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>cos</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">HA</mml:mtext>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mn>23</mml:mn></mml:msub>
<mml:mo>cos</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">DEC</mml:mtext>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>sin</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">HA</mml:mtext>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mn>33</mml:mn></mml:msub>
<mml:mo>sin</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">DEC</mml:mtext>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mn>12</mml:mn></mml:msub>
<mml:mo>cos</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">DEC</mml:mtext>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>cos</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">HA</mml:mtext>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mn>22</mml:mn></mml:msub>
<mml:mo>cos</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">DEC</mml:mtext>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>sin</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">HA</mml:mtext>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mn>32</mml:mn></mml:msub>
<mml:mo>sin</mml:mo>
<mml:msub>
<mml:mtext mathvariant="italic">DEC</mml:mtext>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>For each star we have two equations, with nine unknowns. The unknowns have only three degrees of freedom, represented by the rotation angles around the coordinate axes, and therefore we can add constraints to model the dependencies between the unknowns. Such constraints can be derived from the fact that the rotation matrix is orthogonal:
<disp-formula id="FD17">
<label>(17)</label>
<mml:math id="mm19" display="block">
<mml:semantics id="sm19">
<mml:mrow>
<mml:mi mathvariant="bold">R</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:msup>
<mml:mi mathvariant="bold">R</mml:mi>
<mml:mi>T</mml:mi></mml:msup>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="bold">I</mml:mi></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>From this constraint we derive six equations:
<disp-formula id="FD18">
<label>(18)</label>
<mml:math id="mm20" display="block">
<mml:semantics id="sm20">
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtable columnalign="left">
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>11</mml:mn></mml:mrow></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>11</mml:mn></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>12</mml:mn></mml:mrow></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>12</mml:mn></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>13</mml:mn></mml:mrow></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>13</mml:mn></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>21</mml:mn></mml:mrow></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>21</mml:mn></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>22</mml:mn></mml:mrow></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>22</mml:mn></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>23</mml:mn></mml:mrow></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>23</mml:mn></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>31</mml:mn></mml:mrow></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>31</mml:mn></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>32</mml:mn></mml:mrow></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>32</mml:mn></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>33</mml:mn></mml:mrow></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>33</mml:mn></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>11</mml:mn></mml:mrow></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>21</mml:mn></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>12</mml:mn></mml:mrow></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>22</mml:mn></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>13</mml:mn></mml:mrow></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>23</mml:mn></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>11</mml:mn></mml:mrow></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>31</mml:mn></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>12</mml:mn></mml:mrow></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>32</mml:mn></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>13</mml:mn></mml:mrow></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>33</mml:mn></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>21</mml:mn></mml:mrow></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>31</mml:mn></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>22</mml:mn></mml:mrow></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>32</mml:mn></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>23</mml:mn></mml:mrow></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>23</mml:mn></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>In order to have a number of equations greater or equal to the number of unknowns, we need at least two reference points. For better results, multiple reference points can be used, and for this reason we rely on the known positions of 18 stars. For a set of n ≥ 2 points, we have a linear system of 2n + 6 equations, the first 2n being obtained from system (16) for each point, and the last six equations being the system (18). In order to solve this system, we use the Gauss-Newton iterative method. Starting from an initial guess, which for a rotation matrix can be the identity matrix, gradual corrections are applied until the estimation converges to the right solution [<xref ref-type="bibr" rid="b19-sensors-12-12940">19</xref>].</p>
<p>The rotation matrix calibration process is applied independently for both cameras. At the end of this process, the stereoscope is ready to identify and measure the parameters of the moving objects from the image pair.</p></sec></sec>
<sec>
<label>4.</label>
<title>Detection of the Moving Objects from Image Sequences</title>
<p>The LEO objects are identified independently in the two images that make up the stereo pair. For each image of the pair we execute the following steps:
<list list-type="simple">
<list-item>
<label>-</label>
<p>Background removal</p></list-item>
<list-item>
<label>-</label>
<p>Object candidates detection in the image space</p></list-item>
<list-item>
<label>-</label>
<p>Object classification</p></list-item></list></p>
<p>The image pixels that form the possible object are identified as pixels that change in time, with respect to a background. As we use a star tracking system, the only changing pixels that we expect are those caused by a moving object. A simple difference between the frames may be the first solution of choice, but a better choice still is to estimate the background image with a moving average technique, which has a smoothing effect. The value of the averaged background is subtracted from the current frame, and the difference is thresholded using a small enough threshold that the faint contrast objects are still preserved.</p>
<p>Individual image pixel groups are identified by applying a labeling algorithm [<xref ref-type="bibr" rid="b20-sensors-12-12940">20</xref>] to the binary image resulted in step 1 (see <xref ref-type="fig" rid="f8-sensors-12-12940">Figure 8</xref>). After that, the labeled binary objects must be classified, so that we can decide whether they are satellite streaks, planes or other objects. In order to perform that classification, we will approximate every binary object by an ellipse, and we'll compute the geometrical properties of this ellipse.</p>
<p>The properties for the image object classification process are: Area, Major Axis Length (<italic>L<sub>MAX</sub></italic>), Minor Axis Length (<italic>L<sub>MIN</sub></italic>) and Eccentricity (<italic>e</italic>). These can be computed using the following equations:
<disp-formula id="FD19">
<label>(19)</label>
<mml:math id="mm21" display="block">
<mml:semantics id="sm21">
<mml:mrow>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mi>x</mml:mi></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>N</mml:mi></mml:mfrac>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>N</mml:mi></mml:munderover>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD20">
<label>(20)</label>
<mml:math id="mm22" display="block">
<mml:semantics id="sm22">
<mml:mrow>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mi>y</mml:mi></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>N</mml:mi></mml:mfrac>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>N</mml:mi></mml:munderover>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD21">
<label>(21)</label>
<mml:math id="mm23" display="block">
<mml:semantics id="sm23">
<mml:mrow>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mi>y</mml:mi></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>N</mml:mi></mml:mfrac>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>N</mml:mi></mml:munderover>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD22">
<label>(22)</label>
<mml:math id="mm24" display="block">
<mml:semantics id="sm24">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:msub>
<mml:mi>L</mml:mi>
<mml:mrow>
<mml:mtext mathvariant="italic">MAX</mml:mtext></mml:mrow></mml:msub></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>=</mml:mo>
<mml:mn>8</mml:mn>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mi>x</mml:mi></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mi>y</mml:mi></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD23">
<label>(23)</label>
<mml:math id="mm25" display="block">
<mml:semantics id="sm25">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:msub>
<mml:mi>L</mml:mi>
<mml:mrow>
<mml:mtext mathvariant="italic">MIN</mml:mtext></mml:mrow></mml:msub></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>=</mml:mo>
<mml:mn>8</mml:mn>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mi>x</mml:mi></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mi>y</mml:mi></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD24">
<label>(24)</label>
<mml:math id="mm26" display="block">
<mml:semantics id="sm26">
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mo>=</mml:mo>
<mml:msqrt>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:msub>
<mml:mi>L</mml:mi>
<mml:mrow>
<mml:mtext mathvariant="italic">MIN</mml:mtext></mml:mrow></mml:msub></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:msub>
<mml:mi>L</mml:mi>
<mml:mrow>
<mml:mtext mathvariant="italic">MAX</mml:mtext></mml:mrow></mml:msub></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mfrac></mml:mrow></mml:msqrt></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD25">
<label>(25)</label>
<mml:math id="mm27" display="block">
<mml:semantics id="sm27">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>=</mml:mo>
<mml:msqrt>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mi>x</mml:mi></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mi>y</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mn>4</mml:mn>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:msqrt></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>In the above equations, N stands for the number of points of an object (object area in pixels), <italic>x<sub>i</sub></italic> and <italic>y<sub>i</sub></italic> are the row and column coordinates of the object's points, and <italic>x̄</italic> and <italic>ȳ</italic> are the coordinates of the center of mass.</p>
<p>In order to build a decision tree, a database for training and testing database was created by manually labeling each object. The result is a database containing all the relevant objects and their classes. Using this database, a decision tree classifier was automatically using Weka [<xref ref-type="bibr" rid="b21-sensors-12-12940">21</xref>]:
<array>
<tbody>
<tr>
<td align="left" valign="top">Area ≤ 85: other</td></tr>
<tr>
<td align="left" valign="top">Area &gt; 85</td></tr>
<tr>
<td align="left" valign="top">| Eccentricity ≤ 0.99</td></tr>
<tr>
<td align="left" valign="top">| | Eccentricity ≤ 0.935: other</td></tr>
<tr>
<td align="left" valign="top">| | Eccentricity &gt; 0.935</td></tr>
<tr>
<td align="left" valign="top">| | | MajorAxisLength ≤ 47.543: other</td></tr>
<tr>
<td align="left" valign="top">| | | MajorAxisLength &gt; 47.543: satellite</td></tr>
<tr>
<td align="left" valign="top">| Eccentricity &gt; 0.99</td></tr>
<tr>
<td align="left" valign="top">| | MajorAxisLength ≤ 200.337: satellite</td></tr>
<tr>
<td align="left" valign="top">| | MajorAxisLength &gt; 200.337</td></tr>
<tr>
<td align="left" valign="top">| | | Eccentricity ≤ 0.998: plane</td></tr>
<tr>
<td align="left" valign="top">| | | Eccentricity &gt; 0.998</td></tr>
<tr>
<td align="left" valign="top">| | | | MajorAxisLength ≤ 294.676: satellite</td></tr>
<tr>
<td align="left" valign="top">| | | | MajorAxisLength &gt; 294.676: plane</td></tr></tbody></array></p>
<p>The decision tree is able to discriminate between three classes of sky objects: satellite (or generic LEO object), plane, and other (which means any image artifact). A more detailed description of the automatic recognition in the image space is presented in [<xref ref-type="bibr" rid="b22-sensors-12-12940">22</xref>].</p></sec>
<sec>
<label>5.</label>
<title>Computing the 3D Position of the Detected Objects Using Stereovision</title>
<sec>
<label>5.1.</label>
<title>Establishing the Correspondence</title>
<p>Stereovision-based 3D reconstruction relies on matching features from the left and right images, followed by triangulation. If the sky objects were point-like in the image space, the correspondence search process would be straightforward. However, we have already seen that this is not the case, and the image signature of these objects is a line segment, having a length proportional to the speed of the object, and to the exposure time of the camera.</p>
<p>If the conditions were ideal, the moving object would become visible at the same time in both images of the stereo pair, and it will also disappear at the same time. If this were the case, the easiest way to find the corresponding points is to look at the ends of the line segments. Unfortunately, there are several causes that make this approach a bad idea. First, the two observation sites have different background illumination conditions, a condition that affects the thresholding of the object's features and may cause different length of segments in the two images. Second, the line segment's length may be influenced by the Gaussian noise of the image, or by the background stars that happen to be near the object, and these conditions may be slightly different for the two cameras. Third, due to the low cost equipment used for camera triggering (off the shelf GPS receivers connected to PC's) there may be some errors in the camera synchronization process, errors that may influence the start of the exposure period (which influences the position of the first end of the linear segment) or the duration of the exposure (which influences the segment length). All these conditions make a compelling argument against using the ends or the middle of the segment for matching. Fortunately, there is a more reliable property of the moving object related line segment, which will accurately allow us to perform accurate, sub-pixel based matching between the images: <italic>the trajectory line itself</italic>.</p>
<p>While the trajectory line is unbounded, and therefore the correspondence points are difficult to find, there is another restriction that drastically limits the search space: the epipolar constraints. The epipolar constraint says that for each point <bold>P<sub>L</sub></bold> of the left image, the possible correspondences in the right image are located on a line called the epipolar line. This constraint is shown in <xref ref-type="fig" rid="f9-sensors-12-12940">Figure 9</xref>: the optical centers of the two cameras form, together with the unknown 3D point <bold>X</bold> that needs to be measured, a plane that intersects the two image planes forming the epipolar lines. One can see that the plane is completely determined by one projection ray (caused by one point in one of the images) and the line joining the cameras optical centers. This means that knowing a point in the left image and the camera parameters (intrinsic and extrinsic), we can compute the epipolar line that will contain the corresponding right point <bold>P<sub>R</sub></bold>.</p>
<p>According to [<xref ref-type="bibr" rid="b23-sensors-12-12940">23</xref>], the coefficients of the epipolar line <italic>ax</italic> + <italic>by</italic> + <italic>c</italic> = 0 from the right image can be computed using the coordinates of the left image point <bold>P</bold><sub>L</sub> = [<italic>x<sub>L</sub> y<sub>L</sub></italic> 1] and the 3x3 fundamental matrix <bold>F</bold>:
<disp-formula id="FD26">
<label>(26)</label>
<mml:math id="mm28" display="block">
<mml:semantics id="sm28">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>a</mml:mi></mml:mtd>
<mml:mtd>
<mml:mi>b</mml:mi></mml:mtd>
<mml:mtd>
<mml:mi>c</mml:mi></mml:mtd></mml:mtr></mml:mtable>
<mml:mo stretchy="false">]</mml:mo></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">FP</mml:mtext>
<mml:mi>L</mml:mi></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The fundamental matrix is computed from the intrinsic and extrinsic parameters of the two cameras [<xref ref-type="bibr" rid="b23-sensors-12-12940">23</xref>]:
<disp-formula id="FD27">
<label>(27)</label>
<mml:math id="mm29" display="block">
<mml:semantics id="sm29">
<mml:mrow>
<mml:mtext mathvariant="bold">F</mml:mtext>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mtext mathvariant="bold">M</mml:mtext>
<mml:mi>R</mml:mi>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mi>T</mml:mi></mml:mrow></mml:msubsup>
<mml:msubsup>
<mml:mtext mathvariant="bold">EM</mml:mtext>
<mml:mi>L</mml:mi>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:semantics></mml:math></disp-formula>where:
<disp-formula id="FD28">
<label>(28)</label>
<mml:math id="mm30" display="block">
<mml:semantics id="sm30">
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">M</mml:mtext>
<mml:mi>L</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>L</mml:mi></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>L</mml:mi></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">M</mml:mtext>
<mml:mi>R</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>R</mml:mi></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mtext mathvariant="italic">CR</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mi>f</mml:mi></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mtext mathvariant="italic">CR</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:semantics></mml:math></disp-formula>are the intrinsic matrices of the two cameras, and <bold>E</bold> is the essential matrix, which can be computed as:
<disp-formula id="FD29">
<label>(29)</label>
<mml:math id="mm31" display="block">
<mml:semantics id="sm31">
<mml:mrow>
<mml:mtext mathvariant="bold">E</mml:mtext>
<mml:mo>=</mml:mo>
<mml:mtext mathvariant="bold">RS</mml:mtext></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p><bold>R</bold> is the relative rotation matrix between the cameras:
<disp-formula id="FD30">
<label>(30)</label>
<mml:math id="mm32" display="block">
<mml:semantics id="sm32">
<mml:mrow>
<mml:mtext mathvariant="bold">R</mml:mtext>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mtext mathvariant="bold">R</mml:mtext>
<mml:mtext mathvariant="italic">CR</mml:mtext>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:msub>
<mml:mtext mathvariant="bold">R</mml:mtext>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p><bold>S</bold> is determined by the relative translation vector <bold>T</bold>:
<disp-formula id="FD31">
<label>(31)</label>
<mml:math id="mm33" display="block">
<mml:semantics id="sm33">
<mml:mrow>
<mml:mtext mathvariant="bold">S</mml:mtext>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mtext mathvariant="bold">T</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mtext mathvariant="bold">T</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mtext mathvariant="bold">T</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mtext mathvariant="bold">T</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mtext mathvariant="bold">T</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mtext mathvariant="bold">T</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The relative translation vector is the difference between the absolute translation vectors of the cameras in the world coordinate system:
<disp-formula id="FD32">
<label>(32)</label>
<mml:math id="mm34" display="block">
<mml:semantics id="sm34">
<mml:mrow>
<mml:mtext mathvariant="bold">T</mml:mtext>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">T</mml:mtext>
<mml:mtext mathvariant="italic">CR</mml:mtext></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">T</mml:mtext>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>As the epipolar lines are easily computed, we can design a simple algorithm for extracting the correspondences between the objects of the left and of the right image. The algorithm will be based on the following steps:
<list list-type="order">
<list-item>
<p>Extraction of the center of mass from the objects in the left image. The center of mass will be <bold>P<sub>L</sub></bold>.</p></list-item>
<list-item>
<p>Extraction of the axis of elongation (axis of minimum inertia) for the objects detected in the right image. We assume that the moving object will move along this linear trajectory, so that we can safely assume that any error in synchronization will just move the object's position along this line. The axis of elongation passes also through the center of mass of the right image object.</p></list-item>
<list-item>
<p>Computation of the epipolar line in the right image, by applying <xref rid="FD26" ref-type="disp-formula">Equation (26)</xref> to the left image point <bold>P</bold><sub>L</sub>.</p></list-item>
<list-item>
<p>Computation of the intersection between the axis of elongation of the right object and the epipolar line caused by the left point. The right correspondent of <bold>P<sub>L</sub></bold> is constrained to be found on the epipolar line, but it is also constrained to be located on the trajectory of the moving object. Thus, by intersecting the epipolar line computed in step 3 with the trajectory computed in step 2, we find the correspondent point that we are looking for <bold>P<sub>R</sub></bold> (see <xref ref-type="fig" rid="f10-sensors-12-12940">Figure 10</xref>).</p></list-item></list></p></sec>
<sec>
<label>5.2.</label>
<title>Computation of the 3D Coordinates</title>
<p>The corresponding points in the left and right images are now available, and thus the triangulation process can be applied. This triangulation will transform the image point pair (<bold>P</bold><sub>L</sub>, <bold>P</bold><sub>R</sub>) into a single 3D point <bold>P</bold><sub>W</sub>. This 3D point lies at the intersection of the projection rays passing through <bold>P</bold><sub>L</sub> and <bold>P</bold><sub>R</sub> (the lines passing through the image points and the optical centers).</p>
<p>Because the camera parameters are known, we can write the equation of the line passing through the 3D point <bold>P</bold><sub>W</sub> and the optical center of the left camera <bold>C</bold><sub>L</sub> [<xref ref-type="bibr" rid="b24-sensors-12-12940">24</xref>]. The perspective projection leads to the following relation:
<disp-formula id="FD33">
<label>(33)</label>
<mml:math id="mm35" display="block">
<mml:semantics id="sm35">
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>W</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>W</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>W</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mi>μ</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold">R</mml:mi>
<mml:mi>L</mml:mi></mml:msub>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>L</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>L</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>L</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>where <italic>μ</italic> is a scaling factor depending on the distance <italic>Z<sub>W</sub></italic>. Multiplying with 
<inline-formula>
<mml:math id="mm36" display="inline">
<mml:semantics id="sm36">
<mml:mrow>
<mml:msubsup>
<mml:mtext mathvariant="bold">R</mml:mtext>
<mml:mi>L</mml:mi>
<mml:mi>T</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> we obtain:
<disp-formula id="FD34">
<label>(34)</label>
<mml:math id="mm37" display="block">
<mml:semantics id="sm37">
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>L</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>L</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>L</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mi>μ</mml:mi>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msup>
<mml:msubsup>
<mml:mi mathvariant="bold">R</mml:mi>
<mml:mi>L</mml:mi>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>which can be detailed as:
<disp-formula id="FD35">
<label>(35)</label>
<mml:math id="mm38" display="block">
<mml:semantics id="sm38">
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>L</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>L</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>L</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mi>μ</mml:mi>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msup>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>11</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>21</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>31</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>12</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>22</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>32</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>13</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>23</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>33</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mspace width="0.2em"/>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The above equation is a system of three equations with four unknowns. The third equation can be used to write <italic>μ</italic><sup>−1</sup> as a function of the other unknowns:
<disp-formula id="FD36">
<label>(36)</label>
<mml:math id="mm39" display="block">
<mml:semantics id="sm39">
<mml:mrow>
<mml:msup>
<mml:mi>μ</mml:mi>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msup>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>L</mml:mi></mml:msub></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>13</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>23</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>33</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Replacing <italic>μ</italic><sup>−1</sup> in the first two equations, one obtains the following system:
<disp-formula id="FD37">
<label>(37)</label>
<mml:math id="mm40" display="block">
<mml:semantics id="sm40">
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>L</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub>
<mml:mo>=</mml:mo>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>L</mml:mi></mml:msub>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>11</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>21</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>31</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>13</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>23</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>33</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mfrac></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>L</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub>
<mml:mo>=</mml:mo>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>L</mml:mi></mml:msub>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>12</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>22</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>32</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>13</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>23</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>33</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mi>W</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>Z</mml:mi>
<mml:mtext mathvariant="italic">CL</mml:mtext></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mfrac></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>This system has two equations and three unknowns. Writing the same equations for the right camera system, we have a total of four equations with three unknowns, a supra-determined system that can be solved by a least squares approach. From a geometrical point of view, the least squares solution will find the 3D point that has a minimum distance from the two projection lines, even if small calibration or matching errors will prevent these lines from intersecting [<xref ref-type="bibr" rid="b23-sensors-12-12940">23</xref>].</p></sec></sec>
<sec sec-type="results">
<label>6.</label>
<title>Tests and Results</title>
<p>The experimental system is able to acquire (quasi)synchronized images from the two observation locations set 37 km apart, working autonomously for multiple hours. The acquired images are then processed offline, using an automatic batch processing tool which automatically computes the extrinsic parameters of the cameras for each observation, automatically detects the objects in the two images, performs automatic matching and 3D computation.</p>
<p>The testing process was aimed at assessing two qualities of the system: the capability of detection and recognition of moving objects in a single image, and the performance of the 3D stereo reconstruction.</p>
<p>For testing the quality of the object classification algorithm, we have used a set of 229 images, each one containing an average of five objects (this includes any blob of image features perceived as moving across frames). The classification results are shown in <xref ref-type="table" rid="t2-sensors-12-12940">Table 2</xref>, depicted as a confusion matrix:</p>
<p>The weighted ROC area is 0.965, which shows that the classification algorithm delivers robust results. The most important result is that the non-interesting moving features of the image sequence (the “other” class) are never classified as satellites, which means that the false positive rate is near zero. <xref ref-type="fig" rid="f11-sensors-12-12940">Figures 11</xref>–<xref ref-type="fig" rid="f13-sensors-12-12940">13</xref> show several detection and classification examples.</p>
<p>In order to estimate the accuracy of the 3D reconstruction algorithm, we have focused on LEO satellites, as for some of them the ground truth information can be extracted from the website <ext-link xlink:href="www.heavens-above.com" ext-link-type="uri">www.heavens-above.com</ext-link>. We have manually identified several satellites that were visible at the time and place of our observations, and extracted the minimum and maximum distance to the ground of their orbit, as well as the distance to the observation site at the moment of highest elevation.</p>
<p>The primary output of our LEO measurement algorithm is the set of 3D coordinates in the ECEF coordinate system. In order to compute the <italic>distance of the LEO object to the ground</italic>, we compute the distance of the object to the center of the Earth, and subtract from this distance the Earth's radius at the point of observation. The <italic>distance of the LEO object to the observation site</italic> is computed as the Euclidean norm of the difference between the vector containing the 3D coordinates of the LEO and the vector containing the 3D coordinates of the observation site (the translation vector, part of the extrinsic parameters set).</p>
<p>Heavens Above provides the distance to observer information for the LEO object only for the points of appearance, disappearance and maximum elevation. We compare our results to the distance of maximum elevation, but the results may not be entirely accurate as the exact moment of the maximum elevation may not be captured exactly in the image sequence, and the object moves rapidly between frames. <xref ref-type="table" rid="t3-sensors-12-12940">Table 3</xref> shows the computed results for several known satellites. The observations were made on 9 July 2011.</p>
<p>Even with the reservations about the accuracy of the ground truth, the results seem to be very promising, both for the distance to observer and for the distance to the ground. With the current limitations of camera sensitivity, the system is able to reliably detect objects that have a distance from the ground in the interval of 100 to 1,500 km.</p>
<p><xref ref-type="fig" rid="f14-sensors-12-12940">Figure 14</xref> shows a sequence of images containing the trajectory of a satellite of height of around 800 km, which is detected and measured in all frames, from the moment it enters the field of view to the moment it exits. <xref ref-type="fig" rid="f15-sensors-12-12940">Figure 15</xref> shows the 3D position of the satellite with respect to the Earth, clearly showing the satellite's orbiting movement.</p></sec>
<sec sec-type="conclusions">
<label>7.</label>
<title>Conclusions and Future Work</title>
<p>In order to detect moving objects in the night sky, several challenges had to be overcome: physical setup of the observation systems, camera synchronization, intrinsic parameter calibration, elimination of the radial distortions, automatic star-based calibration of the extrinsic parameters, automatic detection of object traces in the image space (where the main challenge was the low contrast of the trajectories against the background), automatic computation of the corresponding points from the epipolar lines, and computation of the 3D coordinates by triangulation.</p>
<p>This paper presents a complex, multidisciplinary solution for solving all these challenges, a solution that can be easily implemented with off the shelf components of reasonable cost. The calibration techniques combine classical approaches with the original automatic extraction of the rotation matrix, and the detection and measurement algorithms are original adaptations of computer vision techniques to the particularities of the problem of moving object detection. The resulted solution proved to deliver robust and accurate detection results. The system can be easily extended to run in real time, processing the images as they are acquired, as the computation requirements of the algorithms are light enough so that they fit inside the time between two acquired frames. Setting up a real time system requires broadband communication between the observation sites, which was not available to us, but which is not impossible to set up in other locations.</p>
<p>The functionality of the system can be extended by setting up a database of known satellites that can be automatically identified, combined with a possibility of automatic registration of new satellites as they are detected. Also, the baseline can be reduced in such a way that objects closer to the Earth, such as planes, can also be measured (in our case, the planes are detected, but due to the large baseline they are not seen simultaneously in the two images). The performance of the system can be improved by using cameras of higher sensitivity, or sensitivity beyond the visible spectrum. The visual field can be widened, so that we may cover a larger portion of the sky, or it can be narrowed, through the use of higher focal length optical instruments such as telescopes to increase the detection range so that higher orbit satellites or even near Earth asteroids can be detected. The use of new optical systems will require changes in the intrinsic calibration procedure, as the method currently used will not be suitable anymore.</p></sec></body>
<back>
<ack>
<p>This work was supported by a grant of the Romanian National Authority for Scientific Research, CNDI–UEFISCDI, project number PN-II-PT-PCCA-2011-3.2-0651 (AMHEOS).</p></ack>
<ref-list>
<title>References</title>
<ref id="b1-sensors-12-12940"><label>1.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Schildknecht</surname><given-names>T.</given-names></name></person-group><article-title>Optical surveys for space debris</article-title><source>Astron. Astrophys. Rev.</source><year>2007</year><volume>14</volume><fpage>41</fpage><lpage>111</lpage><pub-id pub-id-type="doi">10.1007/s00159-006-0003-9</pub-id></citation></ref>
<ref id="b2-sensors-12-12940"><label>2.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Anzalone</surname><given-names>A.</given-names></name><name><surname>Isgro</surname><given-names>F.</given-names></name><name><surname>Tegolo</surname><given-names>D.</given-names></name></person-group><article-title>Comparison of Stereo Vision Techniques for Cloud-Top Height Retrieval</article-title><conf-name>Proceedings of the 6th International Workshop on Data Analysis in Astronomy</conf-name><conf-loc>Erice, Italy</conf-loc><conf-date>15–22 April 2007</conf-date><fpage>319</fpage><lpage>326</lpage></citation></ref>
<ref id="b3-sensors-12-12940"><label>3.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Olson</surname><given-names>C.F.</given-names></name><name><surname>Abi-Rached</surname><given-names>H.</given-names></name></person-group><article-title>Wide-baseline stereo vision for terrain mapping</article-title><source>Mach. Vision Appl.</source><year>2010</year><volume>21</volume><fpage>713</fpage><lpage>725</lpage><pub-id pub-id-type="doi">10.1007/s00138-009-0188-9</pub-id></citation></ref>
<ref id="b4-sensors-12-12940"><label>4.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Mueller</surname><given-names>J.T.</given-names></name><name><surname>Maldonado</surname><given-names>H.</given-names></name><name><surname>Driesman</surname><given-names>A.S.</given-names></name></person-group><article-title>Stereo: The challenges</article-title><source>Acta Astronaut.</source><year>2003</year><volume>53</volume><fpage>729</fpage><lpage>738</lpage><pub-id pub-id-type="doi">10.1016/S0094-5765(03)00122-X</pub-id></citation></ref>
<ref id="b5-sensors-12-12940"><label>5.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Kaiser</surname><given-names>M.L.</given-names></name></person-group><article-title>The STEREO mission: An overview</article-title><source>Adv. Space Res.</source><year>2005</year><volume>36</volume><fpage>1483</fpage><lpage>1488</lpage><pub-id pub-id-type="doi">10.1016/j.asr.2004.12.066</pub-id></citation></ref>
<ref id="b6-sensors-12-12940"><label>6.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Eyles</surname><given-names>C.</given-names></name><name><surname>Davis</surname><given-names>C.</given-names></name><name><surname>Harrison</surname><given-names>R.A.</given-names></name><name><surname>Waltham</surname><given-names>N.</given-names></name><name><surname>Halain</surname><given-names>J.</given-names></name><name><surname>Mazy</surname><given-names>E.</given-names></name><name><surname>Defise</surname><given-names>J.M.</given-names></name><name><surname>Howard</surname><given-names>R.</given-names></name><name><surname>Moses</surname><given-names>D.</given-names></name><name><surname>Newmark</surname><given-names>J.</given-names></name><name><surname>Plunkett</surname><given-names>S.</given-names></name></person-group><article-title>In-orbit verification, calibration, and performance of the Heliospheric Imager on the STEREO mission</article-title><source>Proc. SPIE</source><year>2007</year><volume>6689</volume><fpage>68907:1</fpage><lpage>68907:13</lpage></citation></ref>
<ref id="b7-sensors-12-12940"><label>7.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Wallace</surname><given-names>B.</given-names></name><name><surname>Scott</surname><given-names>R.</given-names></name><name><surname>Spaans</surname><given-names>A.</given-names></name></person-group><article-title>The DRDC Ottawa Space Surveillance Observatory</article-title><conf-name>Proceedings of the Advanced Maui Optical and Space Surveillance Technologies Conference</conf-name><conf-loc>Maui, HI, USA</conf-loc><conf-date>12–15 September 2007</conf-date></citation></ref>
<ref id="b8-sensors-12-12940"><label>8.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Levesque</surname><given-names>M.</given-names></name></person-group><article-title>Automatic Reacquisition of Satellite Positions by Detecting Their Expected Streaks in Astronomical Images</article-title><conf-name>Proceedings of the Advanced Maui Optical and Space Surveillance Technologies Conference</conf-name><conf-loc>Maui, HI, USA</conf-loc><conf-date>1–4 September 2009</conf-date></citation></ref>
<ref id="b9-sensors-12-12940"><label>9.</label><citation citation-type="web"><person-group person-group-type="author"><collab>Sigma</collab></person-group><article-title>SIGMA 20 mm F1.8 EX DG ASP RF</article-title><comment>Available online: <ext-link xlink:href="http://www.sigmaphoto.com/shop/20mm-f18-ex-dg-asp-rf-sigma" ext-link-type="uri">http://www.sigmaphoto.com/shop/20mm-f18-ex-dg-asp-rf-sigma</ext-link> (accessed on 12 March 2012)</comment></citation></ref>
<ref id="b10-sensors-12-12940"><label>10.</label><citation citation-type="web"><person-group person-group-type="author"><collab>Canon</collab></person-group><article-title>Canon EOS 50D-Instruction Manual</article-title><comment>Available online: <ext-link xlink:href="http://gdlp01.c-wss.com/gds/1/0300001591/02/eos50d-h2-en.pdf" ext-link-type="uri">http://gdlp01.c-wss.com/gds/1/0300001591/02/eos50d-h2-en.pdf</ext-link> (accessed on 21 March 2012)</comment></citation></ref>
<ref id="b11-sensors-12-12940"><label>11.</label><citation citation-type="web"><article-title>Celestron Advanced Series CG-5 &amp; CG-5 GT Instruction Manual</article-title><comment>Available online: <ext-link xlink:href="http://www.telescopes.com/images/pdf/CELE054.pdf" ext-link-type="uri">http://www.telescopes.com/images/pdf/CELE054.pdf</ext-link> (accessed on 21 March 2012)</comment></citation></ref>
<ref id="b12-sensors-12-12940"><label>12.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Heikkila</surname><given-names>J.</given-names></name><name><surname>Silven</surname><given-names>O.</given-names></name></person-group><article-title>A Four-Step Camera Calibration Procedure with Implicit Image Correction</article-title><conf-name>Proceedings of the 1997 IEEE Computer Society Conference on Computer Vision and Pattern Recognition</conf-name><conf-loc>San Juan, Puerto Rico</conf-loc><conf-date>17– 19 June 1997</conf-date><fpage>1106</fpage><lpage>1112</lpage></citation></ref>
<ref id="b13-sensors-12-12940"><label>13.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Slama</surname><given-names>C.C.</given-names></name><name><surname>Theurer</surname><given-names>C.</given-names></name><name><surname>Henriksen</surname><given-names>S.W.</given-names></name></person-group><source>Manual of Photogrammetry</source><publisher-name>American Society of Photogrammetry</publisher-name><publisher-loc>Falls Church, VA, USA</publisher-loc><year>1980</year></citation></ref>
<ref id="b14-sensors-12-12940"><label>14.</label><citation citation-type="web"><person-group person-group-type="author"><name><surname>Bouguet</surname><given-names>J.Y.</given-names></name></person-group><article-title>Camera Calibration Toolbox for Matlab</article-title><comment>Available online: <ext-link xlink:href="http://www.vision.caltech.edu/bouguetj/calib_doc/" ext-link-type="uri">http://www.vision.caltech.edu/bouguetj/calib_doc/</ext-link> (accessed on 21 March 2012)</comment></citation></ref>
<ref id="b15-sensors-12-12940"><label>15.</label><citation citation-type="web"><person-group person-group-type="author"><name><surname>Monaco</surname><given-names>I.</given-names></name></person-group><article-title>User's Handbook on Datum Transformations Involving WGS 84</article-title><comment>Available online: <ext-link xlink:href="http://www.iho.int/iho_pubs/standard/S60_Ed3Eng.pdf" ext-link-type="uri">http://www.iho.int/iho_pubs/standard/S60_Ed3Eng.pdf</ext-link> (accessed on 3 March 2012)</comment></citation></ref>
<ref id="b16-sensors-12-12940"><label>16.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Smart</surname><given-names>W.M.</given-names></name></person-group><source>Textbook on Spherical Astronomy</source><edition>6th ed.</edition><publisher-name>Cambridge University Press</publisher-name><publisher-loc>Cambridge, UK</publisher-loc><year>1977</year></citation></ref>
<ref id="b17-sensors-12-12940"><label>17.</label><citation citation-type="web"><article-title>Bisque TheSkyX Serious Astronomer Edition</article-title><comment>Available online: <ext-link xlink:href="http://www.bisque.com/sc/pages/TheSkyX-Professional-Edition.aspx" ext-link-type="uri">http://www.bisque.com/sc/pages/TheSkyX-Professional-Edition.aspx</ext-link> (accessed on 21 March 2012)</comment></citation></ref>
<ref id="b18-sensors-12-12940"><label>18.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Williamson</surname><given-names>T.</given-names></name></person-group><source>A High-Performance Stereo Vision System for Obstacle Detection</source><publisher-name>Robotics Institute, Carnegie Mellon University</publisher-name><publisher-loc>Pittsburgh, PA, USA</publisher-loc><year>1998</year></citation></ref>
<ref id="b19-sensors-12-12940"><label>19.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Bjorck</surname><given-names>A.</given-names></name></person-group><source>Numerical Methods for Least Squares Problems</source><edition>1st ed.</edition><publisher-name>Society for Industrial and Applied Mathematics</publisher-name><publisher-loc>Philadelphia, PA, USA</publisher-loc><year>1996</year></citation></ref>
<ref id="b20-sensors-12-12940"><label>20.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Haralick</surname><given-names>R.M.</given-names></name><name><surname>Shapiro</surname><given-names>L.G.</given-names></name></person-group><source>Computer and Robot Vision</source><publisher-name>Addison-Wesley Longman Publishing Co. Inc.</publisher-name><publisher-loc>Boston, MA, USA</publisher-loc><year>1992</year><fpage>630</fpage></citation></ref>
<ref id="b21-sensors-12-12940"><label>21.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Bouckaert</surname><given-names>R.R.</given-names></name><name><surname>Frank</surname><given-names>E.</given-names></name><name><surname>Hall</surname><given-names>M.A.</given-names></name><name><surname>Holmes</surname><given-names>G.</given-names></name><name><surname>Pfahringer</surname><given-names>B.</given-names></name><name><surname>Reutemann</surname><given-names>P.</given-names></name><name><surname>Witten</surname><given-names>I.H.</given-names></name></person-group><article-title>WEKA-experiences with a java open-source project</article-title><source>J. Mach. Learn. Res.</source><year>2010</year><volume>11</volume><fpage>2533</fpage><lpage>2541</lpage></citation></ref>
<ref id="b22-sensors-12-12940"><label>22.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Oniga</surname><given-names>F.</given-names></name><name><surname>Miron</surname><given-names>M.</given-names></name><name><surname>Danescu</surname><given-names>R.</given-names></name><name><surname>Nedevschi</surname><given-names>S.</given-names></name></person-group><article-title>Automatic Recognition of Low Earth Orbit Objects from Image Sequences</article-title><conf-name>Proceedings of the 2011 IEEE International Conference on Intelligent Computer Communication and Processing</conf-name><conf-loc>Cluj-Napoca, Romania</conf-loc><conf-date>25– 27 August 2011</conf-date><fpage>335</fpage><lpage>338</lpage></citation></ref>
<ref id="b23-sensors-12-12940"><label>23.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Trucco</surname><given-names>E.</given-names></name><name><surname>Verri</surname><given-names>A.</given-names></name></person-group><source>Introductory Techniques for 3-D Computer Vision</source><publisher-name>Prentice Hall</publisher-name><publisher-loc>Upper Saddle River, NJ, USA</publisher-loc><year>1998</year><fpage>343</fpage></citation></ref>
<ref id="b24-sensors-12-12940"><label>24.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Gonzalez</surname><given-names>R.C.</given-names></name><name><surname>Woods</surname><given-names>R.E.</given-names></name></person-group><source>Digital Image Processing</source><publisher-name>Addison-Wesley Longman Publishing Co. Inc.</publisher-name><publisher-loc>Boston, MA, USA</publisher-loc><year>2001</year><fpage>793</fpage></citation></ref></ref-list>
<sec sec-type="display-objects">
<title>Figures and Tables</title>
<fig id="f1-sensors-12-12940" position="float">
<label>Figure 1.</label>
<caption>
<p>Detail of the individual observing camera. The camera <italic>C</italic> was piggybacked on the telescope, fixed on a tracking-capable equatorial mount Celestron CG5. The telescope itself is not used.</p></caption>
<graphic xlink:href="sensors-12-12940f1.gif"/></fig>
<fig id="f2-sensors-12-12940" position="float">
<label>Figure 2.</label>
<caption>
<p>Architecture of the stereoscope. The computer 2 controls through the custom USB to TTL interface the triggering sequence for the camera 1. GPS Time Receiver 3 delivered time signals for synchronization.</p></caption>
<graphic xlink:href="sensors-12-12940f2.gif"/></fig>
<fig id="f3-sensors-12-12940" position="float">
<label>Figure 3.</label>
<caption>
<p>The world and camera coordinate systems.</p></caption>
<graphic xlink:href="sensors-12-12940f3.gif"/></fig>
<fig id="f4-sensors-12-12940" position="float">
<label>Figure 4.</label>
<caption>
<p>The stars chosen for automatic calibration of the rotation matrices.</p></caption>
<graphic xlink:href="sensors-12-12940f4.gif"/></fig>
<fig id="f5-sensors-12-12940" position="float">
<label>Figure 5.</label>
<caption>
<p>Position of a sky object in Earth-bound polar coordinates.</p></caption>
<graphic xlink:href="sensors-12-12940f5.gif"/></fig>
<fig id="f6-sensors-12-12940" position="float">
<label>Figure 6.</label>
<caption>
<p>Difference in the manually selected positions of the calibration stars, after a longer period of time since the start of the observation process.</p></caption>
<graphic xlink:href="sensors-12-12940f6.gif"/></fig>
<fig id="f7-sensors-12-12940" position="float">
<label>Figure 7.</label>
<caption>
<p>Automatic finding of the new calibration points (marked in red), searching in a neighborhood of the initially marked points (marked in blue).</p></caption>
<graphic xlink:href="sensors-12-12940f7.gif"/></fig>
<fig id="f8-sensors-12-12940" position="float">
<label>Figure 8.</label>
<caption>
<p>(<bold>a</bold>) The original image containing two satellite streaks. (<bold>b</bold>) Labeled objects on the background-removed image.</p></caption>
<graphic xlink:href="sensors-12-12940f8.gif"/></fig>
<fig id="f9-sensors-12-12940" position="float">
<label>Figure 9.</label>
<caption>
<p>The epipolar geometry.</p></caption>
<graphic xlink:href="sensors-12-12940f9.gif"/></fig>
<fig id="f10-sensors-12-12940" position="float">
<label>Figure 10.</label>
<caption>
<p>Intersecting the epipolar line (green) and the trajectory line (red) to find the stereo correspondence. The disparity is shown in purple.</p></caption>
<graphic xlink:href="sensors-12-12940f10.gif"/></fig>
<fig id="f11-sensors-12-12940" position="float">
<label>Figure 11.</label>
<caption>
<p>Example of LEO objects classification: green—satellite, blue—outlier (other), red—plane.</p></caption>
<graphic xlink:href="sensors-12-12940f11.gif"/></fig>
<fig id="f12-sensors-12-12940" position="float">
<label>Figure 12.</label>
<caption>
<p>Example of satellite detected in a sequence of images (the detection is superimposed on the first image).</p></caption>
<graphic xlink:href="sensors-12-12940f12.gif"/></fig>
<fig id="f13-sensors-12-12940" position="float">
<label>Figure 13.</label>
<caption>
<p>Satellite streaks detection in eight successive frames: very faint or not visible streaks are not detected. This satellite is a spinning one, and therefore its brightness changes as it moves.</p></caption>
<graphic xlink:href="sensors-12-12940f13.gif"/></fig>
<fig id="f14-sensors-12-12940" position="float">
<label>Figure 14.</label>
<caption>
<p>A LEO detected in a sequence of images.</p></caption>
<graphic xlink:href="sensors-12-12940f14a.gif"/>
<graphic xlink:href="sensors-12-12940f14b.gif"/></fig>
<fig id="f15-sensors-12-12940" position="float">
<label>Figure 15.</label>
<caption>
<p>3D visualization of a detected satellite's trajectory with respect to the Earth's surface (MATLAB 3D plot).</p></caption>
<graphic xlink:href="sensors-12-12940f15.gif"/></fig>
<table-wrap id="t1-sensors-12-12940" position="float">
<label>Table 1.</label>
<caption>
<p>Identifiers and equatorial coordinates for the calibration stars.</p></caption>
<table frame="box" rules="all">
<thead>
<tr>
<th align="center" valign="middle" rowspan="2"><bold>Star Number</bold></th>
<th align="center" valign="middle" rowspan="2"><bold>Identifier</bold></th>
<th colspan="3" align="center" valign="top"><bold>RA 2011.07.09</bold></th>
<th colspan="3" align="center" valign="top"><bold>DEC 2011.07.09</bold></th></tr>
<tr>
<th align="center" valign="top"><bold>h</bold></th>
<th align="center" valign="top"><bold>m</bold></th>
<th align="center" valign="top"><bold>s</bold></th>
<th align="center" valign="top"><bold>deg</bold></th>
<th align="center" valign="top"><bold>min</bold></th>
<th align="center" valign="top"><bold>s</bold></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="top">1</td>
<td align="center" valign="top">α Lyr</td>
<td align="center" valign="top">18</td>
<td align="center" valign="top">37</td>
<td align="center" valign="top">22.166</td>
<td align="center" valign="top">38</td>
<td align="center" valign="top">47</td>
<td align="center" valign="top">47.569</td></tr>
<tr>
<td align="center" valign="top">2</td>
<td align="center" valign="top">ε<sub>2</sub> Lyr</td>
<td align="center" valign="top">18</td>
<td align="center" valign="top">44</td>
<td align="center" valign="top">48.144</td>
<td align="center" valign="top">39</td>
<td align="center" valign="top">37</td>
<td align="center" valign="top">36.535</td></tr>
<tr>
<td align="center" valign="top">3</td>
<td align="center" valign="top">ζ<sub>1</sub> Lyr</td>
<td align="center" valign="top">18</td>
<td align="center" valign="top">45</td>
<td align="center" valign="top">12.593</td>
<td align="center" valign="top">37</td>
<td align="center" valign="top">37</td>
<td align="center" valign="top">9.258</td></tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">δ<sub>2</sub> Lyr</td>
<td align="center" valign="top">18</td>
<td align="center" valign="top">54</td>
<td align="center" valign="top">56.886</td>
<td align="center" valign="top">36</td>
<td align="center" valign="top">54</td>
<td align="center" valign="top">54.924</td></tr>
<tr>
<td align="center" valign="top">5</td>
<td align="center" valign="top">β Lyr</td>
<td align="center" valign="top">18</td>
<td align="center" valign="top">50</td>
<td align="center" valign="top">32.706</td>
<td align="center" valign="top">33</td>
<td align="center" valign="top">22</td>
<td align="center" valign="top">41.244</td></tr>
<tr>
<td align="center" valign="top">6</td>
<td align="center" valign="top">γ Lyr</td>
<td align="center" valign="top">18</td>
<td align="center" valign="top">59</td>
<td align="center" valign="top">24.873</td>
<td align="center" valign="top">32</td>
<td align="center" valign="top">42</td>
<td align="center" valign="top">26.633</td></tr>
<tr>
<td align="center" valign="top">7</td>
<td align="center" valign="top">γ Dra</td>
<td align="center" valign="top">17</td>
<td align="center" valign="top">56</td>
<td align="center" valign="top">54.988</td>
<td align="center" valign="top">51</td>
<td align="center" valign="top">29</td>
<td align="center" valign="top">23.668</td></tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">β Dra</td>
<td align="center" valign="top">17</td>
<td align="center" valign="top">30</td>
<td align="center" valign="top">44.09</td>
<td align="center" valign="top">52</td>
<td align="center" valign="top">17</td>
<td align="center" valign="top">43.678</td></tr>
<tr>
<td align="center" valign="top">9</td>
<td align="center" valign="top">ν<sub>2</sub> Dra</td>
<td align="center" valign="top">17</td>
<td align="center" valign="top">32</td>
<td align="center" valign="top">32.237</td>
<td align="center" valign="top">55</td>
<td align="center" valign="top">10</td>
<td align="center" valign="top">3.811</td></tr>
<tr>
<td align="center" valign="top">10</td>
<td align="center" valign="top">ξ Dra</td>
<td align="center" valign="top">17</td>
<td align="center" valign="top">53</td>
<td align="center" valign="top">46.401</td>
<td align="center" valign="top">56</td>
<td align="center" valign="top">52</td>
<td align="center" valign="top">23.452</td></tr>
<tr>
<td align="center" valign="top">11</td>
<td align="center" valign="top">ρ Her</td>
<td align="center" valign="top">17</td>
<td align="center" valign="top">24</td>
<td align="center" valign="top">7.053</td>
<td align="center" valign="top">37</td>
<td align="center" valign="top">8</td>
<td align="center" valign="top">16.503</td></tr>
<tr>
<td align="center" valign="top">12</td>
<td align="center" valign="top">μ Her</td>
<td align="center" valign="top">17</td>
<td align="center" valign="top">46</td>
<td align="center" valign="top">56.876</td>
<td align="center" valign="top">27</td>
<td align="center" valign="top">42</td>
<td align="center" valign="top">52.518</td></tr>
<tr>
<td align="center" valign="top">13</td>
<td align="center" valign="top">SAO 85647</td>
<td align="center" valign="top">18</td>
<td align="center" valign="top">2</td>
<td align="center" valign="top">2.017</td>
<td align="center" valign="top">21</td>
<td align="center" valign="top">35</td>
<td align="center" valign="top">52.639</td></tr>
<tr>
<td align="center" valign="top">14</td>
<td align="center" valign="top">β<sub>1</sub> Cyg</td>
<td align="center" valign="top">19</td>
<td align="center" valign="top">31</td>
<td align="center" valign="top">13.518</td>
<td align="center" valign="top">27</td>
<td align="center" valign="top">59</td>
<td align="center" valign="top">8.922</td></tr>
<tr>
<td align="center" valign="top">15</td>
<td align="center" valign="top">ξ Her</td>
<td align="center" valign="top">17</td>
<td align="center" valign="top">58</td>
<td align="center" valign="top">15.043</td>
<td align="center" valign="top">29</td>
<td align="center" valign="top">14</td>
<td align="center" valign="top">56.259</td></tr>
<tr>
<td align="center" valign="top">16</td>
<td align="center" valign="top">κ Cyg</td>
<td align="center" valign="top">19</td>
<td align="center" valign="top">17</td>
<td align="center" valign="top">24.883</td>
<td align="center" valign="top">53</td>
<td align="center" valign="top">23</td>
<td align="center" valign="top">28.176</td></tr>
<tr>
<td align="center" valign="top">17</td>
<td align="center" valign="top">δ Cyg</td>
<td align="center" valign="top">19</td>
<td align="center" valign="top">45</td>
<td align="center" valign="top">22.632</td>
<td align="center" valign="top">45</td>
<td align="center" valign="top">9</td>
<td align="center" valign="top">37.064</td></tr>
<tr>
<td align="center" valign="top">18</td>
<td align="center" valign="top">26 Cyg</td>
<td align="center" valign="top">20</td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">43.775</td>
<td align="center" valign="top">50</td>
<td align="center" valign="top">8</td>
<td align="center" valign="top">16.015</td></tr></tbody></table></table-wrap>
<table-wrap id="t2-sensors-12-12940" position="float">
<label>Table 2.</label>
<caption>
<p>Classification accuracy for LEO hypotheses.</p></caption>
<table frame="box" rules="cols">
<thead>
<tr>
<th align="left" valign="top"><bold>Classification Result/Ground Truth Class</bold></th>
<th align="center" valign="top"><bold>Satellite</bold></th>
<th align="center" valign="top"><bold>Other</bold></th>
<th align="center" valign="top"><bold>Plane</bold></th></tr>
<tr>
<th valign="bottom" colspan="4">
<hr/></th></tr></thead>
<tbody>
<tr>
<td align="left" valign="top">Satellite</td>
<td align="left" valign="top">146</td>
<td align="left" valign="top">8</td>
<td align="right" valign="top">1</td></tr>
<tr>
<td align="left" valign="top">Other</td>
<td align="left" valign="top">0</td>
<td align="left" valign="top">523</td>
<td align="right" valign="top">0</td></tr>
<tr>
<td align="left" valign="top">Plane</td>
<td align="left" valign="top">2</td>
<td align="left" valign="top">2</td>
<td align="right" valign="top">9</td></tr></tbody></table></table-wrap>
<table-wrap id="t3-sensors-12-12940" position="float">
<label>Table 3.</label>
<caption>
<p>Results of the 3D measurement process.</p></caption>
<table frame="box" rules="cols">
<thead>
<tr>
<th align="center" valign="middle"><bold>Local time</bold></th>
<th align="center" valign="middle"><bold>Object Name</bold></th>
<th align="center" valign="middle"><bold>Orbit Min × Max (km)</bold></th>
<th align="center" valign="middle"><bold>Distance to Observer (km)</bold></th>
<th align="center" valign="middle"><bold>Distance to Ground, Computed (km)</bold></th>
<th align="center" valign="middle"><bold>Distance to Observer, Computed (km)</bold></th></tr>
<tr>
<th valign="bottom" colspan="6">
<hr/></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="top">2:58:51</td>
<td align="center" valign="top">Cosmos192</td>
<td align="center" valign="top">704 × 718</td>
<td align="center" valign="top">714</td>
<td align="center" valign="top"><bold>704</bold></td>
<td align="center" valign="top"><bold>713.70</bold></td></tr>
<tr>
<td align="center" valign="top">3:09:07</td>
<td align="center" valign="top">Cosmos1743</td>
<td align="center" valign="top">543 × 564</td>
<td align="center" valign="top">586</td>
<td align="center" valign="top"><bold>566</bold></td>
<td align="center" valign="top"><bold>582</bold></td></tr>
<tr>
<td align="center" valign="top">3:44:32</td>
<td align="center" valign="top">Cosmos923Rocket</td>
<td align="center" valign="top">761 × 789</td>
<td align="center" valign="top">1078</td>
<td align="center" valign="top"><bold>790</bold></td>
<td align="center" valign="top"><bold>1109</bold></td></tr>
<tr>
<td align="center" valign="top">2:50:59</td>
<td align="center" valign="top">Cosmos2263Rocket</td>
<td align="center" valign="top">825 × 848</td>
<td align="center" valign="top">1161</td>
<td align="center" valign="top"><bold>806</bold></td>
<td align="center" valign="top"><bold>1131</bold></td></tr>
<tr>
<td align="center" valign="top">3:41:44</td>
<td align="center" valign="top">Meteor <xref ref-type="table-fn" rid="tfn1-sensors-12-12940">*</xref></td>
<td align="center" valign="top">N.A.</td>
<td align="center" valign="top">N.A.</td>
<td align="center" valign="top"><bold>100.25</bold></td>
<td align="center" valign="top"><bold>105</bold></td></tr></tbody></table>
<table-wrap-foot><fn id="tfn1-sensors-12-12940">
<label>*</label>
<p>The detected distance meteor-observer is in the typical range interval for meteor burning in the atmosphere.</p></fn></table-wrap-foot></table-wrap></sec></back></article>
