<?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/s120606893</article-id>
<article-id pub-id-type="publisher-id">sensors-12-06893</article-id>
<article-categories>
<subj-group>
<subject>Article</subject></subj-group></article-categories>
<title-group>
<article-title>Geometric and Colour Data Fusion for Outdoor 3D Models</article-title></title-group>
<contrib-group>
<contrib contrib-type="author">
<name><surname>Merchán</surname><given-names>Pilar</given-names></name><xref ref-type="aff" rid="af1-sensors-12-06893"><sup>1</sup></xref><xref ref-type="corresp" rid="c1-sensors-12-06893"><sup>*</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Adán</surname><given-names>Antonio</given-names></name><xref ref-type="aff" rid="af2-sensors-12-06893"><sup>2</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Salamanca</surname><given-names>Santiago</given-names></name><xref ref-type="aff" rid="af1-sensors-12-06893"><sup>1</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Domínguez</surname><given-names>Vicente</given-names></name><xref ref-type="aff" rid="af2-sensors-12-06893"><sup>2</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Chacón</surname><given-names>Ricardo</given-names></name><xref ref-type="aff" rid="af2-sensors-12-06893"><sup>2</sup></xref></contrib></contrib-group>
<aff id="af1-sensors-12-06893">
<label>1</label> Industrial Engineering School, University of Extremadura, Avda. de Elvas, s/n, 06071 Badajoz, Spain; E-Mail: <email>ssalamanca@unex.es</email></aff>
<aff id="af2-sensors-12-06893">
<label>2</label> School of Computer Engineering, University of Castilla La Mancha, Ronda de Calatrava, 5,13071 Ciudad Real, Spain; E-Mails: <email>Antonio.Adan@uclm.es</email> (A.A.); <email>Vicente.Dominguez@uclm.es</email> (V.D.); <email>Ricardo.Chacon@uclm.es</email> (R.C.)</aff>
<author-notes>
<corresp id="c1-sensors-12-06893">
<label>*</label>Author to whom correspondence should be addressed; <email>pmerchan@unex.es</email>; Tel.: +34-924-289-600; Fax: +34-924-289-601.</corresp></author-notes>
<pub-date pub-type="collection">
<year>2012</year></pub-date>
<pub-date pub-type="epub">
<day>25</day>
<month>05</month>
<year>2012</year></pub-date>
<volume>12</volume>
<issue>6</issue>
<fpage>6893</fpage>
<lpage>6919</lpage>
<history>
<date date-type="received">
<day>29</day>
<month>02</month>
<year>2012</year></date>
<date date-type="rev-recd">
<day>15</day>
<month>05</month>
<year>2012</year></date>
<date date-type="accepted">
<day>17</day>
<month>05</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>This paper deals with the generation of accurate, dense and coloured 3D models of outdoor scenarios from scanners. This is a challenging research field in which several problems still remain unsolved. In particular, the process of 3D model creation in outdoor scenes may be inefficient if the scene is digitalized under unsuitable technical (specific scanner on-board camera) and environmental (rain, dampness, changing illumination) conditions. We address our research towards the integration of images and range data to produce photorealistic models. Our proposal is based on decoupling the colour integration and geometry reconstruction stages, making them independent and controlled processes. This issue is approached from two different viewpoints. On the one hand, given a complete model (geometry plus texture), we propose a method to modify the original texture provided by the scanner on-board camera with the colour information extracted from external images taken at given moments and under specific environmental conditions. On the other hand, we propose an algorithm to directly assign external images onto the complete geometric model, thus avoiding tedious on-line calibration processes. We present the work conducted on two large Roman archaeological sites dating from the first century A.D., namely, the Theatre of Segobriga and the <italic>Fori Porticus</italic> of Emerita Augusta, both in Spain. The results obtained demonstrate that our approach could be useful in the digitalization and 3D modelling fields.</p></abstract>
<kwd-group>
<kwd>3D modelling</kwd>
<kwd>texture fusion</kwd>
<kwd>3D digitalization</kwd>
<kwd>range data</kwd></kwd-group></article-meta></front>
<body>
<sec sec-type="intro">
<label>1.</label>
<title>Introduction</title>
<p>The construction of geometrical outdoor models, which consist of millions of points and patches, can be carried out with relatively efficiency and accuracy by using current 3D sensors, particularly with phase-shift and time of flight scanners. Colour information can also be acquired with high resolution by using appropriate digital cameras and lenses, which lead to a wide variety of parameters that can be set by hand.</p>
<p>However, the combination of a set of 3D clouds of points and colour images to obtain a photorealistic model is still an area of research which has a number of unsolved problems. The first of these relates to the experimental setup itself. Some scanners have an on-board camera with determined technical characteristics, and others permit the attachment of an external camera that has to be fitted in a specific position. Thus, in the field of digitalization, geometrical information and colour information are usually captured at the same time, under the illumination conditions that exist at the very moment of the 3D data acquisition. This makes the fusion of both types of information highly prone to errors. Under these circumstances, the process of geometrical and colour data acquisition is subdued in terms of both space and time: in terms of space because the sensor and the camera take up established positions during the data acquisition stage, and in terms of time because the geometrical information and the colour information are sensed simultaneously.</p>
<p>Consequently, mismatches commonly occur when combining texture images with 3D geometrical data either due to parallax effects that depend on the baseline between the laser scanner and the optical centre of the camera, or to differences between several colour images taken at different times and, therefore, under different illumination conditions.</p>
<p>The second problem arises when attempting to register and merge the set of data acquired from different positions in a unique representation model. Geometrical registration and 3D data integration problems, of course, were solved a number of years ago. There are numerous approaches in the literature related to registration, many of them based on the original well-known algorithm by Besl and McKay known as ICP (Iterative Closest Point Algorithm) [<xref ref-type="bibr" rid="b1-sensors-12-06893">1</xref>]. Zhang presents [<xref ref-type="bibr" rid="b2-sensors-12-06893">2</xref>] an important variant of the original algorithm. Xiao <italic>et al.</italic> [<xref ref-type="bibr" rid="b3-sensors-12-06893">3</xref>] modify the ICP and utilize both regional surface properties and shape rigidity constraint to align a partial object surface and its corresponding complete surface. In addition to ICP, some other methods have been proposed for 3D registration. For example, in [<xref ref-type="bibr" rid="b4-sensors-12-06893">4</xref>] genetic algorithms are used for registration of 3D data with low overlap and which may include substantial noise. Extensive comparison of registration methods can be seen in [<xref ref-type="bibr" rid="b5-sensors-12-06893">5</xref>,<xref ref-type="bibr" rid="b6-sensors-12-06893">6</xref>].</p>
<p>For the resolution of the integration problem, several methods have also been proposed. The most important classic ones are those based on “zippering” [<xref ref-type="bibr" rid="b7-sensors-12-06893">7</xref>] or volumetric [<xref ref-type="bibr" rid="b8-sensors-12-06893">8</xref>] algorithms. In [<xref ref-type="bibr" rid="b9-sensors-12-06893">9</xref>] a faster variant of zippering algorithm is presented. Santos <italic>et al.</italic> propose in [<xref ref-type="bibr" rid="b10-sensors-12-06893">10</xref>] a high fidelity merging algorithm that it is used for digital art preservation. Nevertheless, the integration of colour information taken from different viewpoints is an issue that still requires further research.</p>
<p>The problem in texture fusion is mainly caused by the colour disparity between two images. This is brought about by several reasons: First, changes in the angle between the observer direction and the normal of the reflecting surface and, second, variations in illumination conditions in the environments where they were captured. The third reason concerns the camera parameters, which may change from one scan to the next.</p>
<p>Many researchers have proposed solutions based on pairwise colour correction, colour mixing algorithms and image illumination change detection. When the scene is an artificially illuminated interior the difficulty for texture fusion is lessened, and acceptable results are obtained in most of the cases. In some cases, the light of the scene is controlled, so it is assumed that the scene is scanned under constant illumination. This assumption greatly simplifies the colour integration method which consists merely of searching for optimal blending functions [<xref ref-type="bibr" rid="b11-sensors-12-06893">11</xref>–<xref ref-type="bibr" rid="b14-sensors-12-06893">14</xref>]. For non-controlled scenarios, researchers have come up with only partial solutions. Most of these solutions are based either on global approaches, in which the complete colour image from one position of the scanner is processed (and therefore, modified), or on local strategies, in which only the colours at certain points of the image are corrected. In [<xref ref-type="bibr" rid="b15-sensors-12-06893">15</xref>] the colours are inserted by detecting featured points in the image and defining the overlapped regions. Park <italic>et al.</italic> [<xref ref-type="bibr" rid="b16-sensors-12-06893">16</xref>] developed a method that simultaneously fills in holes and associates (not acquired) colour. The study in [<xref ref-type="bibr" rid="b17-sensors-12-06893">17</xref>] deals with several images of the scene, which are taken under different light conditions, and corrects discontinuities in the overlapped zones. Troccoli <italic>et al.</italic> [<xref ref-type="bibr" rid="b18-sensors-12-06893">18</xref>] compute a relighting operator by analysing the overlapped area of a pair of images: the source image to be relighted and a target image. They then apply this operator over the non-overlapping region of the source, making it consistent with the target image. In [<xref ref-type="bibr" rid="b19-sensors-12-06893">19</xref>], Dellepiane <italic>et al.</italic> present a colour correction space which is capable of providing a space-dependent colour correction for each pixel of the image. It estimates the flash light position and permits identification and removal of annoying artifacts, such as highlights and shadows. Since many of the developed methodologies for the mapping of colour information on 3D models also include the possibility of discarding parts of the input images or of selectively assigning a weight to contributing pixels, these authors state that their proposal is an interesting addition to such methods</p>
<p>Drastic approaches can be also found. For instance Sun <italic>et al.</italic> [<xref ref-type="bibr" rid="b20-sensors-12-06893">20</xref>] remove, in overlapped regions, the less confident triangles and consider only the texture of the selected patches, avoiding any colour fusion procedure. Bernardini <italic>et al.</italic> [<xref ref-type="bibr" rid="b21-sensors-12-06893">21</xref>] adjust the colours by global colour registration, imposing a restriction that distributes error in the results equally on the model. Finally, Xu <italic>et al.</italic> [<xref ref-type="bibr" rid="b22-sensors-12-06893">22</xref>] integrate texture maps of large structures by decomposing the colour into two frequency bands and combining them.</p>
<p>The other line of research focuses on the obtention of a surface reflectance map of the scene. In this, the 3D model is illumination-free and can be rendered under any illumination conditions. Some interesting methods of obtaining a reflectance function are presented in [<xref ref-type="bibr" rid="b23-sensors-12-06893">23</xref>] and [<xref ref-type="bibr" rid="b24-sensors-12-06893">24</xref>]. These proposals were developed under laboratory conditions in which light positions are assumed to be known. Later, Debevec <italic>et al.</italic> [<xref ref-type="bibr" rid="b25-sensors-12-06893">25</xref>] estimated the spatially-varying surface reflectance of complex scenes under natural illumination conditions. This approach uses a novel lighting measurement apparatus to record the full dynamic range of both sunlit and cloudy natural illumination conditions. Finally, in [<xref ref-type="bibr" rid="b26-sensors-12-06893">26</xref>] the authors present a model of natural illumination as a combination of point source plus ambient component. They are able to compute the actual reflectance and to remove any effects of illumination in the images.</p>
<p>In spite of researchers' efforts over the last decade, the generated models are frequently incomplete or have neither sufficient accuracy nor quality. In particular, when dealing with outdoor scenarios the process becomes much harder. The colour images are severely affected by weather variability (rain and humidity) as well as the time of day at which they are taken. Furthermore, differing orientation and placement of the camera with respect to the surface must once again be taken into account.</p>
<p>This paper addresses the problem of how to build complete photorealistic models by uncoupling the time and particular circumstances in which 3D data and colour of the scene are captured. This issue is tackled from two different perspectives. Firstly, using a complete model (geometry plus texture) obtained after several data acquisition sessions, our aim is to modify the original texture provided on site by the scanner on-board camera with the colour information extracted from external images taken at particular times of day, times of the year (season) or under more suitable environmental conditions. We discuss this in Section 2. Secondly, we aim to keep the processes of geometrical data acquisition and colour acquisition apart, so that they become independent. Thus, the acquisition of colour information with external high-resolution cameras could be executed at chosen times, separately from the data acquisition for the geometrical modelling process, which is not sensitive to time or weather variations. This task therefore involves assigning colour to the geometrical model once it is finished, rather than modifying an existing colour model on it. Section 3 of this paper explains the procedure carried out to do this.</p>
<p>A further aspect to bear in mind with regard to our study relates to the fact that our algorithms increase the automation level in the overall geometry and colour merging process. In particular, we aim to automate two sub-processes: the colour fusion algorithm for several views by using a previous analysis of the global colour of the scene, and the search for the best view in the stage of making the match between the model and the external images. The automation of these phases is intended to go beyond manual and user dependent procedures. Despite this, the current state of the method presented in this paper requires user intervention in some steps. For instance, the user selects the set of external images to be used and can also vary certain specific parameters at the colour integration stage, such as window sizes, masks, thresholds, <italic>etc.</italic> These aspects are dealt with in Section 4.</p>
<p>Finally, the experimental section shows the results obtained in large outdoor scenarios. Specifically, we present the work carried out in two Roman archaeological sites that date back to the first century A.D., the theatre of Segobriga and the <italic>Fori Porticus</italic> of Emerita Augusta, both in Spain.</p></sec>
<sec>
<label>2.</label>
<title>Colour Modification on Synthetic Models</title>
<p>Let us assume a 3D model <bold><italic>M</italic></bold> of an object obtained from the information acquired with a scanner equipped with an internal low-resolution camera. The rough information provided by the sensor is composed of the 3D coordinates of the points of the object and their corresponding colors in RGB format. A meshing algorithm then yields a patch representation, including vertices and normal vectors. We specifically used the volumetric approach published in [<xref ref-type="bibr" rid="b8-sensors-12-06893">8</xref>] to generate the partial meshes. The view registration and geometric integration problem is solved using the k–d tree algorithm published by Zhang in [<xref ref-type="bibr" rid="b2-sensors-12-06893">2</xref>]. Given the model <bold><italic>M</italic></bold> (<bold><italic>V, F, N, C</italic></bold>) where:</p>
<list list-type="simple">
<list-item>
<p><bold><italic>V</italic> =</bold> {<bold><italic>V</italic><sub>1</sub>, <italic>V</italic><sub>2</sub></bold>,<bold>…, <italic>V</italic><sub>n</sub></bold>} are the 3D points of the model, that is, the vertices of the final mesh.</p></list-item>
<list-item>
<p><bold><italic>F</italic> =</bold> {<bold><italic>F</italic><sub>1</sub>, <italic>F</italic><sub>2</sub></bold>,<bold>…, <italic>F</italic><sub>n</sub></bold>} are the patches of the mesh model.</p></list-item>
<list-item>
<p><bold><italic>N</italic> =</bold> {<bold><italic>N</italic><sub>1</sub>, <italic>N</italic><sub>2</sub></bold>,<bold>…, <italic>N</italic><sub>n</sub></bold>} are the normal vectors for each vertex of the mesh model.</p></list-item>
<list-item>
<p><bold><italic>C</italic> =</bold> {<bold><italic>C</italic><sub>1</sub>, <italic>C</italic><sub>2</sub></bold>,<bold>…, <italic>C</italic><sub>n</sub></bold>} are the colour components for each vertex of the mesh model.</p></list-item></list>
<p>Our goal is to modify <bold><italic>C</italic></bold> by using a new set of images taken with external high-quality cameras and to obtain a photo-realistic model <bold><italic>M</italic>′</bold> (<bold><italic>V, F, N, C</italic></bold>).We achieve this after the sequence of steps drawn in the sketch shown in <xref ref-type="fig" rid="f1-sensors-12-06893">Figure 1</xref>.</p>
<p>In the first step, we choose two images, <bold><italic>I</italic></bold><italic><sub>1</sub></italic> and <bold><italic>I</italic></bold><italic><sub>2</sub></italic>. <bold><italic>I</italic></bold><italic><sub>1</sub></italic> can be either the image provided by the camera of the scanner itself or an ortho-photo of <bold><italic>M</italic></bold> from a viewpoint close to the viewpoint of the external high-quality camera when taking <bold><italic>I</italic></bold><italic><sub>2</sub></italic>. The following step consists of selecting control points in both images. In the software we have created to execute colour modification, these can be marked automatically or by hand. If the automatic option is selected, the algorithm picks several pixels equally separated in the image <bold><italic>I</italic></bold><italic><sub>2</sub></italic> and looks for their corresponding ones in <bold><italic>I</italic></bold><italic><sub>1</sub></italic>. Then, for every pair of marked pixels, an iterative algorithm is run so that the position of each selected pixel in <bold><italic>I</italic></bold><italic><sub>1</sub></italic> is recalculated, and the correspondence error between pixels is minimized. The procedure for the iterative algorithm can be summarized as follows: for a given pair of pixels, a window <italic>W<sub>2</sub></italic> centred in the corresponding pixel from <bold><italic>I</italic></bold><italic><sub>2</sub></italic> is set. At the same time, a smaller window <italic>W<sub>1</sub></italic> is selected for the pixel in <bold><italic>I</italic></bold><italic><sub>1</sub></italic>. By means of a cross-correlation algorithm all the possible superimpositions of <italic>W<sub>1</sub></italic> onto <italic>W<sub>2</sub></italic> are obtained. The cross-correlation factor <italic>R</italic> is calculated by following <xref rid="FD1" ref-type="disp-formula">Equation (1)</xref>.</p>
<p>
<disp-formula id="FD1">
<label>(1)</label>
<mml:math id="mm1" display="block">
<mml:semantics id="sm1">
<mml:mrow>
<mml:mi mathvariant="bold-italic">R</mml:mi>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mo mathvariant="bold">∑</mml:mo>
<mml:mi mathvariant="bold-italic">x</mml:mi></mml:msub>
<mml:msub>
<mml:mo mathvariant="bold">∑</mml:mo>
<mml:mi mathvariant="bold-italic">y</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo mathvariant="bold">,</mml:mo>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mi mathvariant="bold-italic">y</mml:mi></mml:mrow></mml:msub>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mo mathvariant="bold">¯</mml:mo></mml:mover>
<mml:mn mathvariant="bold">1</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">2</mml:mn>
<mml:mo mathvariant="bold">,</mml:mo>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mi mathvariant="bold-italic">y</mml:mi></mml:mrow></mml:msub>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mo mathvariant="bold">¯</mml:mo></mml:mover>
<mml:mn mathvariant="bold">2</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mo mathvariant="bold">∑</mml:mo>
<mml:mi mathvariant="bold-italic">x</mml:mi></mml:msub>
<mml:msub>
<mml:mo mathvariant="bold">∑</mml:mo>
<mml:mi mathvariant="bold-italic">y</mml:mi></mml:msub>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo mathvariant="bold">,</mml:mo>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mi mathvariant="bold-italic">y</mml:mi></mml:mrow></mml:msub>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mo mathvariant="bold">¯</mml:mo></mml:mover>
<mml:mn mathvariant="bold">1</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mn mathvariant="bold">2</mml:mn></mml:msup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mo mathvariant="bold">∑</mml:mo>
<mml:mi mathvariant="bold-italic">x</mml:mi></mml:msub>
<mml:msub>
<mml:mo mathvariant="bold">∑</mml:mo>
<mml:mi mathvariant="bold-italic">y</mml:mi></mml:msub>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">2</mml:mn>
<mml:mo mathvariant="bold">,</mml:mo>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mi mathvariant="bold-italic">y</mml:mi></mml:mrow></mml:msub>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mo mathvariant="bold">¯</mml:mo></mml:mover>
<mml:mn mathvariant="bold">2</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mn mathvariant="bold">2</mml:mn></mml:msup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msqrt></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></disp-formula>where P<sub>1</sub>,<italic><sub>xy</sub></italic> is the pixel (<italic>x</italic>,<italic>y</italic>) in the image <bold><italic>I</italic></bold><italic><sub>1</sub></italic>, P<sub>2</sub>,<italic><sub>xy</sub></italic> is the pixel (<italic>x</italic>,<italic>y</italic>) in <bold><italic>I</italic></bold><italic><sub>2</sub></italic> and <bold><italic>Ī</italic><sub>1</sub></bold> and <bold><italic>Ī</italic><sub>2</sub></bold> are the arithmetic means of the components of <bold><italic>I</italic></bold><italic><sub>1</sub></italic> and <bold><italic>I</italic></bold><italic><sub>2</sub></italic>, respectively. As is known, the superimposition that gives the cross-correlation factor closest to 1 corrects the correspondence of pixels between <bold><italic>I</italic></bold><italic><sub>1</sub></italic> and <bold><italic>I</italic></bold><italic><sub>2</sub></italic>. <xref ref-type="fig" rid="f2-sensors-12-06893">Figure 2</xref> shows an example detailing several stages of the pixels correspondence process.</p>
<p>The next step consists of correcting the original image <bold><italic>I</italic></bold><italic><sub>1</sub></italic>. The correspondence between <italic>n</italic> pixels from <bold><italic>I</italic></bold><italic><sub>1</sub></italic> and <bold><italic>I</italic></bold><italic><sub>2</sub></italic> can be expressed by means of a homogeneous transformation <bold>A</bold> in <xref rid="FD2" ref-type="disp-formula">Equation (2)</xref>:
<disp-formula id="FD2">
<label>(2)</label>
<mml:math id="mm2" display="block">
<mml:semantics id="sm2">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">e</mml:mi></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">m</mml:mi></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula>where <bold><italic>P</italic></bold><italic><sub>e</sub></italic> and <bold><italic>P</italic></bold><italic><sub>m</sub></italic> are the coordinates of the pixels in <bold><italic>I</italic></bold><italic><sub>1</sub></italic> and <bold><italic>I</italic></bold><italic><sub>2</sub></italic>, respectively.</p>
<p>Note that the alignment between images <bold><italic>I</italic></bold><italic><sub>1</sub></italic> and <bold><italic>I</italic></bold><italic><sub>2</sub></italic> is not an affine homography because the scene is not exactly the same for both cases. <bold><italic>I</italic></bold><italic><sub>1</sub></italic> and <bold><italic>I</italic></bold><italic><sub>2</sub></italic> are taken for different scenes and seen under different optical properties. Thus, <bold><italic>I</italic></bold><italic><sub>1</sub></italic> corresponds to the image of a 3D model and is generated under graphical characteristics. In this case, the scene is a 3D model. Nevertheless, <bold><italic>I</italic></bold><italic><sub>2</sub></italic> is the real image captured by the camera, which has its own optical properties, and the scene is now the real environment.</p>
<p>For a general case:
<disp-formula id="FD3">
<label>(3)</label>
<mml:math id="mm3" display="block">
<mml:semantics id="sm3">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">e</mml:mi></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mrow>
<mml:mo mathvariant="bold">(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">λ</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:msub>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">λ</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:msub>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mo mathvariant="bold">⋯</mml:mo></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">λ</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:msub>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">λ</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:msub>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">λ</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:msub>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mo mathvariant="bold">⋯</mml:mo></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">λ</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:msub>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">λ</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">λ</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mo mathvariant="bold">⋯</mml:mo></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">λ</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo mathvariant="bold">)</mml:mo></mml:mrow>
<mml:mo mathvariant="bold">,</mml:mo>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mrow>
<mml:mo mathvariant="bold">(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">11</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">12</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">13</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">21</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">22</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">23</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">31</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">32</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">33</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo mathvariant="bold">)</mml:mo></mml:mrow>
<mml:mo mathvariant="bold">,</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">m</mml:mi></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mrow>
<mml:mo mathvariant="bold">(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mo mathvariant="bold">⋯</mml:mo></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mo mathvariant="bold">⋯</mml:mo></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn mathvariant="bold">1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mo mathvariant="bold">⋯</mml:mo></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo mathvariant="bold">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>
<array>
<tbody>
<tr>
<td align="left" valign="middle" rowspan="4">If we chose a<sub>33</sub> = 1, then:</td>
<td align="center" valign="middle">λ<sub>1</sub>=<italic>a</italic><sub>31</sub><italic>x</italic><sub><italic>m</italic>1</sub>+<italic>a</italic><sub>32</sub><italic>y</italic><sub><italic>m</italic>1</sub>+1</td></tr>
<tr>
<td align="center" valign="middle">λ<sub>2</sub>=<italic>a</italic><sub>31</sub><italic>x</italic><sub><italic>m</italic>2</sub>+<italic>a</italic><sub>32</sub><italic>y</italic><sub><italic>m</italic>2</sub>+1</td></tr>
<tr>
<td align="center" valign="middle">⋮</td></tr>
<tr>
<td align="center" valign="middle">λ<sub><italic>n</italic></sub>=<italic>a</italic><sub>31</sub><italic>x<sub>mn</sub></italic>+<italic>a</italic><sub>32</sub><italic>y<sub>mn</sub></italic>+1</td></tr></tbody></array></p>
<p>Taking these <italic>n</italic> related points as a starting point, <xref rid="FD2" ref-type="disp-formula">Equation (2)</xref> leads to the expression:
<disp-formula id="FD4">
<label>(4)</label>
<mml:math id="mm6" display="block">
<mml:semantics id="sm6">
<mml:mrow>
<mml:mi mathvariant="bold-italic">H</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi mathvariant="bold-italic">v</mml:mi></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">X</mml:mi>
<mml:mi mathvariant="bold-italic">p</mml:mi></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula>and matrices <bold><italic>X</italic></bold><italic><sub>p</sub></italic> and <bold><italic>H</italic></bold> are obtained from <bold>P</bold><italic><sub>e</sub></italic> and <bold>P</bold><italic><sub>m</sub></italic> in the following way:
<disp-formula id="FD5">
<label>(5)</label>
<mml:math id="mm7" display="block">
<mml:semantics id="sm7">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">X</mml:mi>
<mml:mi mathvariant="bold-italic">p</mml:mi></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mrow>
<mml:mo mathvariant="bold">(</mml:mo>
<mml:mrow>
<mml:mtable columnalign="left">
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mo mathvariant="bold">⋯</mml:mo>
<mml:mo mathvariant="bold">⋯</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo mathvariant="bold">)</mml:mo></mml:mrow>
<mml:mo mathvariant="bold">,</mml:mo>
<mml:mi mathvariant="bold-italic">H</mml:mi>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mrow>
<mml:mo mathvariant="bold">(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mn mathvariant="bold">0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mn mathvariant="bold">0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mn mathvariant="bold">0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mn mathvariant="bold">0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">…</mml:mo>
<mml:mo mathvariant="bold">…</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">…</mml:mo>
<mml:mo mathvariant="bold">…</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">…</mml:mo>
<mml:mo mathvariant="bold">…</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">…</mml:mo>
<mml:mo mathvariant="bold">…</mml:mo></mml:mrow></mml:mtd>
<mml:mtd/>
<mml:mtd>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">…</mml:mo>
<mml:mo mathvariant="bold">…</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">…</mml:mo>
<mml:mo mathvariant="bold">…</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">…</mml:mo>
<mml:mo mathvariant="bold">…</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">…</mml:mo>
<mml:mo mathvariant="bold">…</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mn mathvariant="bold">0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mn mathvariant="bold">0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn mathvariant="bold">1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo mathvariant="bold">)</mml:mo></mml:mrow>
<mml:mo mathvariant="bold">,</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi mathvariant="bold">v</mml:mi></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mrow>
<mml:mo mathvariant="bold">(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">11</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">12</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">13</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">21</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">22</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">23</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">31</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">32</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo mathvariant="bold">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Then we solve the <xref rid="FD4" ref-type="disp-formula">Equation (4)</xref> and obtain the transformation matrix between the two images <bold><italic>I</italic></bold><italic><sub>1</sub></italic> and <bold><italic>I</italic></bold><italic><sub>2</sub></italic>:
<disp-formula id="FD6">
<label>(6)</label>
<mml:math id="mm8" display="block">
<mml:semantics id="sm8">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi mathvariant="bold">v</mml:mi></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msup>
<mml:mi mathvariant="bold-italic">H</mml:mi>
<mml:mi mathvariant="bold-italic">T</mml:mi></mml:msup>
<mml:mi mathvariant="bold-italic">H</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msup>
<mml:msup>
<mml:mi mathvariant="bold-italic">H</mml:mi>
<mml:mi mathvariant="bold-italic">T</mml:mi></mml:msup>
<mml:msub>
<mml:mi mathvariant="bold-italic">X</mml:mi>
<mml:mi mathvariant="bold-italic">p</mml:mi></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Once we have <bold>A</bold>, the final corrected image, 
<inline-formula>
<mml:math id="mm9" display="inline">
<mml:semantics id="sm9">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> will be the one obtained after modifying the RGB components with the RGB values of the corresponding pixels in the image <bold><italic>I</italic></bold><italic><sub>2</sub></italic>. Let us denote <bold><italic>C</italic></bold> as the vector which contains the three colour components, <bold><italic>C</italic></bold> = [<italic>R G B</italic>]<italic><sup>t</sup></italic>. For each pixel of <bold><italic>I</italic></bold><italic><sub>1</sub></italic> the colour is modify as follows:
<disp-formula id="FD7">
<label>(7)</label>
<mml:math id="mm10" display="block">
<mml:semantics id="sm10">
<mml:mrow>
<mml:mtable columnalign="left">
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mi mathvariant="bold-italic">C</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">k</mml:mi>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mi mathvariant="bold-italic">C</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">k</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">k</mml:mi></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">k</mml:mi>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">λ</mml:mi>
<mml:mi mathvariant="bold-italic">k</mml:mi></mml:msub></mml:mrow></mml:mfrac>
<mml:mo mathvariant="bold">,</mml:mo>
<mml:mo mathvariant="bold">∀</mml:mo>
<mml:mi mathvariant="bold-italic">k</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p><italic>P<sub>k</sub></italic> and 
<inline-formula>
<mml:math id="mm11" display="inline">
<mml:semantics id="sm11">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">k</mml:mi>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> being the coordinates of the <italic>k</italic>-th pixel in <bold><italic>I</italic></bold><italic><sub>2</sub></italic> and 
<inline-formula>
<mml:math id="mm12" display="inline">
<mml:semantics id="sm12">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, respectively, and <italic>C</italic>(<italic>P<sub>k</sub></italic>) being the colour information stored in the <italic>k</italic>-th pixel of <bold><italic>I</italic></bold><italic><sub>2</sub></italic> and 
<inline-formula>
<mml:math id="mm13" display="inline">
<mml:semantics id="sm13">
<mml:mrow>
<mml:mi mathvariant="bold-italic">C</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">k</mml:mi>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></inline-formula> the colour information assigned to the <italic>k</italic>-th pixel in 
<inline-formula>
<mml:math id="mm14" display="inline">
<mml:semantics id="sm14">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>.</p>
<p>In those cases when the image deformations are not considered, that is, when dealing with a geometric transformation, the following equalities are verified:
<disp-formula id="FD8">
<label>(8)</label>
<mml:math id="mm15" display="block">
<mml:semantics id="sm15">
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">λ</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">λ</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mo mathvariant="bold">⋯</mml:mo>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">λ</mml:mi>
<mml:mi mathvariant="bold-italic">k</mml:mi></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mo mathvariant="bold">⋯</mml:mo>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">λ</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo mathvariant="bold">;</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">31</mml:mn></mml:mrow></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">32</mml:mn></mml:mrow></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mo mathvariant="bold">;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">33</mml:mn></mml:mrow></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>At the end of this process, a global correction algorithm is applied to the initial image <bold><italic>I</italic></bold><italic><sub>1</sub></italic>. Thus, the transformation that relates the colour components of image <bold><italic>I</italic></bold><italic><sub>1</sub></italic> to the colour components of image 
<inline-formula>
<mml:math id="mm16" display="inline">
<mml:semantics id="sm16">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> can be modelled by a linear transformation as follows:
<disp-formula id="FD9">
<label>(9)</label>
<mml:math id="mm17" display="block">
<mml:semantics id="sm17">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">C</mml:mi>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup></mml:mrow></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mi mathvariant="bold">Z</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula>and the values of the elements of <bold>Z</bold> can be computed using <xref rid="FD10" ref-type="disp-formula">Equation (10)</xref>:
<disp-formula id="FD10">
<label>(10)</label>
<mml:math id="mm18" display="block">
<mml:semantics id="sm18">
<mml:mrow>
<mml:mi mathvariant="bold">Z</mml:mi>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mrow>
<mml:mo mathvariant="bold">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold-italic">C</mml:mtext>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup></mml:mrow></mml:msub>
<mml:msup>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:msub></mml:mrow></mml:msub></mml:mrow>
<mml:mi mathvariant="bold-italic">T</mml:mi></mml:msup></mml:mrow>
<mml:mo mathvariant="bold">)</mml:mo></mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo mathvariant="bold">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">C</mml:mi>
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup></mml:mrow></mml:msub>
<mml:msup>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">C</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:msub></mml:mrow></mml:msub></mml:mrow>
<mml:mi mathvariant="bold-italic">T</mml:mi></mml:msup></mml:mrow>
<mml:mo mathvariant="bold">)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Note that this section is developed taking one view of the original coloured model and therefore <bold>Z</bold> represents a colour transformation for this particular view. Nevertheless, in the case of uniform colour models, transformation <bold>Z</bold> could be used to modify the colour of any partial view of the model. This circumstance frequently occurs in heritage pieces, like marble statues or stone monuments. Formally:
<disp-formula id="FD11">
<label>(11)</label>
<mml:math id="mm19" display="block">
<mml:semantics id="sm19">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">C</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">M</mml:mi>
<mml:mo mathvariant="bold">′</mml:mo></mml:mrow></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mi mathvariant="bold">Z</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">C</mml:mi>
<mml:mi mathvariant="bold-italic">M</mml:mi></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p><xref ref-type="fig" rid="f3-sensors-12-06893">Figure 3</xref> shows an example in which the colour of the whole model of the piece has been modified.</p></sec>
<sec>
<label>3.</label>
<title>Applying External Images onto the Geometrical Models</title>
<p>Let us now suppose that we have a geometrical model <bold><italic>M</italic></bold> (<bold><italic>V, F, N</italic></bold>) of a large scenario with no integrated texture and a set of high resolution images taken without any restrictions with an external camera. Restrictions concern any aspect related to the image (size, accuracy, resolution…) and the time at which the images were taken. With the collection of images and the geometry of the scene, a procedure to obtain a final complete model that comprises colour and geometry has been developed.</p>
<p>It is well known that colour assignation can be carried out on-line using a camera and always under an accuracy camera-scanner calibration. As mentioned in Section 1, this involves certain inconveniences in colour integration post-processing. By decoupling geometry and colour with respect to the moment at which the data are taken, our aim is to integrate the texture in the geometry in a controlled off-line process.</p>
<p>Our procedure consists of three main stages:</p>
<list list-type="order">
<list-item>
<p>Images matching. We look for a viewpoint in the geometrical model to generate an ortho-image as similar as possible to an external image.</p></list-item>
<list-item>
<p>Generation of the coloured ortho-image.</p></list-item>
<list-item>
<p>Colour assignation into the geometrical model.</p></list-item></list></sec>
<sec>
<label>3.1.</label>
<title>Images Matching</title>
<p>At this first stage, two images are chosen: an ortho-photo of the 3D geometrical model, which will be denoted as <bold><italic>I</italic></bold><italic><sub>1</sub></italic>, and an external image acquired without any restrictions, <bold><italic>I</italic></bold><italic><sub>2</sub></italic>. The viewpoint that provides the image <bold><italic>I</italic></bold><italic><sub>1</sub></italic> must be defined in such a way that the resulting projected view can be compared to the external image <bold><italic>I</italic></bold><italic><sub>2</sub></italic>, as shown in <xref ref-type="fig" rid="f4-sensors-12-06893">Figure 4</xref>. Several transformation matrixes must be stored when projecting the model to assure the reverse transformation from the coloured ortho-image to the 3D model, <italic>i.e.</italic>, the matrix that controls the position of the viewpoint which the user views the model from, the projection transformation matrix, which defines the kind of perspective applied to the 3D model (either orthogonal or orthographical), and the model rotation/translation matrix that stores the rotation and/or translation undergone by the 3D model to be placed in a view close to the external image view. It is also necessary to record the size (in pixels) of the window in which the 3D model is viewed.</p>
<sec>
<label>3.2.</label>
<title>Generation of the Coloured Ortho-Image</title>
<p>To begin this stage, we establish a correspondence between images <bold>I<sub>1</sub></bold> and <bold>I<sub>2</sub></bold> by marking corresponding pixels manually. These sets of points define two matrixes of 2D coordinates, denoted as P<sub>m</sub> and P<sub>e</sub>, can be written as:
<disp-formula id="FD12">
<mml:math id="mm20" display="block">
<mml:semantics id="sm20">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">m</mml:mi></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mrow>
<mml:mo mathvariant="bold">(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold-italic">x</mml:mtext>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold-italic">x</mml:mtext>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold-italic">y</mml:mtext>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold-italic">y</mml:mtext>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mn mathvariant="bold">3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">…</mml:mo>
<mml:mo mathvariant="bold">…</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">m</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo mathvariant="bold">)</mml:mo></mml:mrow>
<mml:mo mathvariant="bold">;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mtext mathvariant="bold-italic">e</mml:mtext></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mrow>
<mml:mo mathvariant="bold">(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mtext mathvariant="bold-italic">e</mml:mtext>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mtext mathvariant="bold-italic">e</mml:mtext>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mn mathvariant="bold">3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo mathvariant="bold">…</mml:mo>
<mml:mo mathvariant="bold">…</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">x</mml:mi>
<mml:mrow>
<mml:mtext mathvariant="bold-italic">en</mml:mtext></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">y</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">e</mml:mi>
<mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo mathvariant="bold">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The transformation between the two images is modelled as:
<disp-formula id="FD13">
<label>(12)</label>
<mml:math id="mm21" display="block">
<mml:semantics id="sm21">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">e</mml:mi></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:msub>
<mml:mi mathvariant="bold-italic">P</mml:mi>
<mml:mi mathvariant="bold-italic">m</mml:mi></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula>with <bold>A</bold> being a transformation matrix <italic>3x3</italic> that includes the rotation, translation and deformation of image <bold><italic>I</italic></bold><italic><sub>1</sub></italic>. We find the values of <bold>A</bold> by carrying through a sequence of operations as described in Section 2 (Equations (3–6)). We then build a new image with the RGB components of external image <bold><italic>I</italic></bold><italic><sub>2</sub></italic> and matrix <bold>A</bold>, that is, we build a new image 
<inline-formula>
<mml:math id="mm22" display="inline">
<mml:semantics id="sm22">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, in which the pixels have the colour of their corresponding pixels in <bold><italic>I</italic></bold><italic><sub>2</sub></italic>, as expressed in <xref rid="FD7" ref-type="disp-formula">Equation (7)</xref>.</p>
<p><xref ref-type="fig" rid="f5-sensors-12-06893">Figure 5</xref> displays some stages of this procedure, such as the selection of the corresponding points in both the projected image and the external one, or the generated coloured ortho-image achieved in the end.</p></sec>
<sec>
<label>3.3.</label>
<title>Colour Assignation in the Geometric Model</title>
<p>Once we have the coloured image generated in the preceding step, we look for the correspondence between each pixel in image 
<inline-formula>
<mml:math id="mm25" display="inline">
<mml:semantics id="sm25">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> and the points of the 3D geometrical model. To do so, we start by restoring the point of view of <bold><italic>M</italic></bold>. The basic idea is to recover the size and placement in which the ortho-image <bold><italic>I</italic></bold><italic><sub>1</sub></italic> was taken. Therefore, we need the information in the different matrixes stored previously.</p>
<p>As is known, the description of a 3D object can be given by a list of 3D coordinates (points), and the colour associated to these points. An optional point indexation to form faces can also exist. In order to map the image 
<inline-formula>
<mml:math id="mm26" display="inline">
<mml:semantics id="sm26">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> onto the model <bold><italic>M</italic></bold>, we use a function which maps the 2D coordinates of a graphical window to the corresponding 3D coordinates of the model. It generates a matrix <bold><italic>I</italic><sub>3</sub></bold><italic><sub>D</sub></italic> in which every pixel in the image has an associated point with 3D coordinates. <xref ref-type="fig" rid="f6-sensors-12-06893">Figure 6(a)</xref> illustrates this step. It is understood that the value of the 3D coordinates is calculated by interpolation on a mesh model, but the assignation must be necessarily made to a vertex of the geometrical mesh, as will be discussed below. The matrix <bold><italic>I</italic><sub>3</sub></bold><italic><sub>D</sub></italic> is subjected to a cleaning process to eliminate those elements which have no associated 3D components, in order to purge the assignation of pixels that corresponds to the background of the image 
<inline-formula>
<mml:math id="mm27" display="inline">
<mml:semantics id="sm27">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> (<xref ref-type="fig" rid="f6-sensors-12-06893">Figure 6(b)</xref>). For every valid element in matrix <bold><italic>I</italic><sub>3</sub></bold><italic><sub>D</sub></italic>, the closest vertex is sought in the mesh model, generating a new matrix 
<inline-formula>
<mml:math id="mm28" display="inline">
<mml:semantics id="sm28">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">3</mml:mn>
<mml:mi mathvariant="bold-italic">D</mml:mi></mml:mrow>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> that consists of the vertex indexes associated to the model (<xref ref-type="fig" rid="f6-sensors-12-06893">Figure 6(c)</xref>). The matrixes 
<inline-formula>
<mml:math id="mm29" display="inline">
<mml:semantics id="sm29">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> (<bold><italic>l</italic></bold><italic>x</italic><bold><italic>d</italic></bold><italic>x</italic><bold><italic>3</italic></bold>) and 
<inline-formula>
<mml:math id="mm30" display="inline">
<mml:semantics id="sm30">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mrow>
<mml:mn mathvariant="bold">3</mml:mn>
<mml:mi mathvariant="bold-italic">D</mml:mi></mml:mrow>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> (<bold><italic>l</italic></bold><italic>x</italic><bold><italic>d</italic></bold>) are then combined in a unique matrix <bold><italic>T</italic></bold><italic><sub>i</sub></italic> (<bold><italic>k</italic></bold><italic>x</italic><bold><italic>4</italic></bold>) which contains the vertex indexes of the 3D model and their associated colour in the image 
<inline-formula>
<mml:math id="mm31" display="inline">
<mml:semantics id="sm31">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> (<xref ref-type="fig" rid="f6-sensors-12-06893">Figure 6(d)</xref>). Since it may be the case that the same node has more than one colour assigned, the matrix <bold><italic>T</italic></bold><italic><sub>i</sub></italic> is resized so that each vertex in the model has a unique associated colour, this colour being the mean of the possible colour values assigned in matrix <bold><italic>T</italic></bold><italic><sub>i</sub></italic> (<xref ref-type="fig" rid="f6-sensors-12-06893">Figure 6(e)</xref>).</p></sec></sec>
<sec>
<label>4.</label>
<title>Multi-View Colour-Fusion Algorithm</title>
<p>When the colour assignation for a specific viewpoint is finished, we have a coloured model <bold><italic>M</italic></bold> (<bold><italic>V, F, N, C</italic>′</bold>) in which only a part of its vertices has colour information. In order to have the whole model coloured, we need to assign the texture provided by the set of external images to the rest of the vertices. As was mentioned before, the images are taken without restrictions about the point of view and they may or may not overlap.</p>
<p>We carry out an iterative procedure that assigns colour to some of the nodes as new images are matched onto the geometric model. Let us assume a particular step <bold><italic>t</italic></bold> in the iterative process. At this point, we denote <bold><italic>T̃</italic></bold><italic><sub>t</sub></italic> as the matrix generated throughout the earlier <bold><italic>t-1</italic></bold> iterations which stores the colour information extracted from <bold><italic>t-1</italic></bold> external images. A new external image can provide texture for some of the vertices that have not yet been assigned, leading to a matrix <bold><italic>T</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold> that must be combined with <bold><italic>T̃</italic></bold><italic><sub>t</sub></italic> to produce a new matrix <bold><italic>T̃</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold> (<xref ref-type="fig" rid="f7-sensors-12-06893">Figure 7</xref>). This process is generically denoted by the symbol ⊗ in <xref rid="FD14" ref-type="disp-formula">Equation (13)</xref></p>
<disp-formula id="FD14">
<label>(13)</label>
<mml:math id="mm32" display="block">
<mml:semantics id="sm32">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mi mathvariant="bold-italic">t</mml:mi></mml:msub>
<mml:mo mathvariant="bold">⊗</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula>
<p>In a sense, matrix <bold><italic>T̃</italic></bold><italic><sub>t</sub></italic> is a matrix accumulated after <bold><italic>t-1</italic></bold> iterations (see <xref ref-type="fig" rid="f7-sensors-12-06893">Figure 7</xref>). Let us suppose that we have the mesh model without colour in iteration number 0. The colour fusion process is defined depending on the overlapping between the new view and the current status of the model. Thus if <bold><italic>T̃</italic></bold><italic><sub>t</sub></italic> y <bold><italic>T</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold> have no nodes in common, <xref rid="FD14" ref-type="disp-formula">Equation (13)</xref> then becomes <bold><italic>T̃</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub> = <italic>T̃</italic></bold><italic><sub>t</sub></italic> <bold>∪</bold>.<bold><italic>T</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold> Nevertheless, if <bold><italic>T̃</italic></bold><italic><sub>t</sub></italic> y <bold><italic>T</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold> have common nodes the colour merging then becomes a more complex process. We can distinguish between global and local approaches.</p>
<p>Depending on the kind of scene we are working on, we apply either one of the two processes described below or both of them. We will denote the two processes using symbols ➀ and ➁ in <xref rid="FD15" ref-type="disp-formula">Equations (14)</xref> and <xref rid="FD16" ref-type="disp-formula">(15)</xref>:
<disp-formula id="FD15">
<label>(14)</label>
<mml:math id="mm33" display="block">
<mml:semantics id="sm33">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mi mathvariant="bold-italic">t</mml:mi></mml:msub>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:msub>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD16">
<label>(15)</label>
<mml:math id="mm34" display="block">
<mml:semantics id="sm34">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mi mathvariant="bold-italic">t</mml:mi></mml:msub>
<mml:mn mathvariant="bold">2</mml:mn>
<mml:msub>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The chart in <xref ref-type="fig" rid="f8-sensors-12-06893">Figure 8</xref> illustrates both processes. The process ➀ is illustrated in <xref ref-type="fig" rid="f8-sensors-12-06893">Figure 8(a)</xref>. In order to make the notation more readable from here on we will assume that the superscript “<bold><italic>c</italic></bold>” in the following equations will signify the overlapped part of matrices <bold><italic>T̃</italic></bold><italic><sub>t</sub></italic> and <bold><italic>T</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold> and superscript “<bold><italic>c̄</italic></bold>” will be the non-overlapped part. Thus 
<inline-formula>
<mml:math id="mm35" display="inline">
<mml:semantics id="sm35">
<mml:mrow>
<mml:msubsup>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mi mathvariant="bold-italic">c</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> and 
<inline-formula>
<mml:math id="mm36" display="inline">
<mml:semantics id="sm36">
<mml:mrow>
<mml:msubsup>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow>
<mml:mi mathvariant="bold-italic">c</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> are the sub matrixes for the common nodes in matrices <bold><italic>T̃</italic></bold><italic><sub>t</sub></italic> and <bold><italic>T</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold>.</p>
<p>Process ➀ consists of three steps. First, a transformation is applied over 
<inline-formula>
<mml:math id="mm37" display="inline">
<mml:semantics id="sm37">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow>
<mml:mi mathvariant="bold-italic">c</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, and <bold><italic>T</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold> turns on <bold><italic>T</italic>′</bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold>. This transformation is obtained by using the colour relationship between 
<inline-formula>
<mml:math id="mm38" display="inline">
<mml:semantics id="sm38">
<mml:mrow>
<mml:msubsup>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mi mathvariant="bold-italic">c</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> and 
<inline-formula>
<mml:math id="mm39" display="inline">
<mml:semantics id="sm39">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow>
<mml:mi mathvariant="bold-italic">c</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, which can be modelled by means of transformation Z in <xref rid="FD17" ref-type="disp-formula">Equation (16)</xref>:
<disp-formula id="FD17">
<label>(16)</label>
<mml:math id="mm40" display="block">
<mml:semantics id="sm40">
<mml:mrow>
<mml:msubsup>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mi mathvariant="bold-italic">c</mml:mi></mml:msubsup>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow>
<mml:mi mathvariant="bold-italic">c</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The solution for Z is given by the equation:
<disp-formula id="FD18">
<label>(17)</label>
<mml:math id="mm41" display="block">
<mml:semantics id="sm41">
<mml:mrow>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:msubsup>
<mml:mover accent="true">
<mml:mtext mathvariant="bold-italic">T</mml:mtext>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mi mathvariant="bold-italic">c</mml:mi></mml:msubsup>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow>
<mml:mi mathvariant="bold-italic">c</mml:mi></mml:msubsup>
<mml:mo stretchy="false">]</mml:mo></mml:mrow>
<mml:mi mathvariant="bold-italic">T</mml:mi></mml:msup>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow>
<mml:mi mathvariant="bold-italic">c</mml:mi></mml:msubsup>
<mml:mo mathvariant="bold">⋅</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow>
<mml:mi mathvariant="bold-italic">c</mml:mi></mml:msubsup>
<mml:mo stretchy="false">]</mml:mo></mml:mrow>
<mml:mi mathvariant="bold-italic">T</mml:mi></mml:msup>
<mml:mo stretchy="false">]</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Thus, matrix <bold><italic>T</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold> is transformed after:
<disp-formula id="FD19">
<label>(18)</label>
<mml:math id="mm42" display="block">
<mml:semantics id="sm42">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
<mml:mo mathvariant="bold">⋅</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>After this, we calculate the average values between 
<inline-formula>
<mml:math id="mm43" display="inline">
<mml:semantics id="sm43">
<mml:mrow>
<mml:msubsup>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mi mathvariant="bold-italic">c</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> and 
<inline-formula>
<mml:math id="mm44" display="inline">
<mml:semantics id="sm44">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold-italic">c</mml:mi>
<mml:mo mathvariant="bold">′</mml:mo></mml:mrow></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> and add the non-common part 
<inline-formula>
<mml:math id="mm45" display="inline">
<mml:semantics id="sm45">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">c</mml:mi>
<mml:mo mathvariant="bold">¯</mml:mo></mml:mover>
<mml:mo mathvariant="bold">′</mml:mo></mml:mrow></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>, generating the partial matrix 
<inline-formula>
<mml:math id="mm46" display="inline">
<mml:semantics id="sm46">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold-italic">a</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> (<xref rid="FD20" ref-type="disp-formula">Equation (19)</xref>). <bold><italic>T</italic>′</bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold> then turns on <bold><italic>T</italic></bold>″<italic><sub>t</sub></italic><bold><sub>+1</sub></bold>.</p>
<p>
<disp-formula id="FD20">
<label>(19)</label>
<mml:math id="mm47" display="block">
<mml:semantics id="sm47">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow>
<mml:mi mathvariant="bold-italic">a</mml:mi></mml:msubsup>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mrow>
<mml:mo mathvariant="bold">{</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo mathvariant="bold">[</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mi mathvariant="bold-italic">c</mml:mi></mml:msubsup>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold-italic">c</mml:mi>
<mml:mo mathvariant="bold">′</mml:mo></mml:mrow></mml:msubsup></mml:mrow>
<mml:mn mathvariant="bold">2</mml:mn></mml:mfrac></mml:mrow>
<mml:mo mathvariant="bold">]</mml:mo></mml:mrow>
<mml:mo mathvariant="bold">∪</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">c</mml:mi>
<mml:mo mathvariant="bold">¯</mml:mo></mml:mover>
<mml:mo mathvariant="bold">′</mml:mo></mml:mrow></mml:msubsup></mml:mrow>
<mml:mo mathvariant="bold">}</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Finally, 
<inline-formula>
<mml:math id="mm48" display="inline">
<mml:semantics id="sm48">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow>
<mml:mi mathvariant="bold-italic">a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> is inserted in <bold><italic>T̃</italic></bold><italic><sub>t</sub></italic> and <bold><italic>T̃</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold> is generated. We denote the insertion operator by means of the symbol ⊕ in <xref rid="FD21" ref-type="disp-formula">Equation (20)</xref>:
<disp-formula id="FD21">
<label>(20)</label>
<mml:math id="mm49" display="block">
<mml:semantics id="sm49">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mi mathvariant="bold-italic">t</mml:mi></mml:msub>
<mml:mo mathvariant="bold">⊕</mml:mo>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow>
<mml:mi mathvariant="bold-italic">a</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Process ➁ is illustrated in <xref ref-type="fig" rid="f8-sensors-12-06893">Figure 8(b,c)</xref>. It consists of making a colour substitution of 
<inline-formula>
<mml:math id="mm50" display="inline">
<mml:semantics id="sm50">
<mml:mrow>
<mml:msubsup>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mi mathvariant="bold-italic">c</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> by using a weighted expression of the colour. The weight factors are based on the observation angles for the nodes of which the colour values are about to be modified.</p>
<p>We start by defining a weighted observation angle for each node of the model which is seen in previous scans. This parameter will be used if we want to take into account local properties in the model. Formally, we define the weighted observation angle as follows.</p>
<p>Let us suppose <bold><italic>N</italic></bold> be a node of <bold><italic>T̃</italic></bold><italic><sub>t</sub></italic> and <bold><italic>T</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold> with assigned colours <bold><italic>C̃</italic></bold><italic><sub>t</sub></italic>(<bold><italic>N</italic></bold>) and <bold><italic>C</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub>(</bold><italic>N</italic><bold>), r</bold>espectively. Let <bold><italic>θ</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold>(<bold><italic>N</italic></bold>) be the observation angles of <bold><italic>N</italic></bold> in the step <bold><italic>t</italic></bold>, where 
<inline-formula>
<mml:math id="mm51" display="inline">
<mml:semantics id="sm51">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">θ</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="bold-italic">N</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mover accent="true">
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mo mathvariant="bold">→</mml:mo></mml:mover>
<mml:mo mathvariant="bold">,</mml:mo>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mo mathvariant="bold">→</mml:mo></mml:mover></mml:mrow>
<mml:mo stretchy="true">^</mml:mo></mml:mover>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo mathvariant="bold">,</mml:mo>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">l</mml:mi>
<mml:mo mathvariant="bold">→</mml:mo></mml:mover>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold-italic">N</mml:mi>
<mml:mi mathvariant="bold-italic">R</mml:mi></mml:mrow>
<mml:mo stretchy="true">→</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo mathvariant="bold">,</mml:mo>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">n</mml:mi>
<mml:mo mathvariant="bold">→</mml:mo></mml:mover></mml:mrow></mml:semantics></mml:math></inline-formula> being the normal at <bold><italic>N</italic></bold> and <bold><italic>R</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold> being the camera position in iteration <bold><italic>t</italic></bold>. Finally, let <bold><italic>θ̃</italic></bold><italic><sub>t</sub></italic>(<bold><italic>N</italic></bold>) be a weighted observation angle which is computed after <bold><italic>t-1</italic></bold> iterations. The weighted observation angle at iteration <bold><italic>t</italic></bold> is calculated as follows:
<disp-formula id="FD22">
<label>(21)</label>
<mml:math id="mm52" display="block">
<mml:semantics id="sm52">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">θ</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mrow>
<mml:mtext mathvariant="bold-italic">t</mml:mtext>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="bold-italic">N</mml:mtext>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">θ</mml:mi>
<mml:mrow>
<mml:mtext mathvariant="bold-italic">t</mml:mtext>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="bold-italic">N</mml:mtext>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo mathvariant="bold">⋅</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold-italic">w</mml:mtext>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">θ</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mtext mathvariant="bold-italic">t</mml:mtext></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="bold-italic">N</mml:mtext>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo mathvariant="bold">⋅</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">w</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mtext mathvariant="bold-italic">t</mml:mtext></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="bold-italic">N</mml:mtext>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">w</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="bold-italic">N</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">w</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mi mathvariant="bold-italic">t</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="bold-italic">N</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></disp-formula>in which weights <bold><italic>w</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold> are based on angles <bold><italic>θ</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold>:
<disp-formula id="FD23">
<label>(22)</label>
<mml:math id="mm53" display="block">
<mml:semantics id="sm53">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">w</mml:mi>
<mml:mrow>
<mml:mtext mathvariant="bold-italic">t</mml:mtext>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="bold-italic">N</mml:mtext>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mrow>
<mml:mo mathvariant="bold">{</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo mathvariant="bold">,</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">θ</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="bold-italic">N</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo mathvariant="bold">≤</mml:mo>
<mml:mi mathvariant="bold-italic">a</mml:mi></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">θ</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:mtext mathvariant="bold-italic">b</mml:mtext></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:mi mathvariant="bold-italic">b</mml:mi></mml:mrow></mml:mfrac>
<mml:mo mathvariant="bold">,</mml:mo>
<mml:mi mathvariant="bold-italic">a</mml:mi>
<mml:mo mathvariant="bold">&lt;</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">θ</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="bold-italic">N</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo mathvariant="bold">&lt;</mml:mo>
<mml:mi mathvariant="bold-italic">b</mml:mi></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mo mathvariant="bold">,</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">θ</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo mathvariant="bold">≥</mml:mo>
<mml:mi mathvariant="bold-italic">b</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>and <bold><italic>w̃</italic></bold><italic><sub>t</sub></italic> is based on previous weights in the following manner:
<disp-formula id="FD24">
<label>(23)</label>
<mml:math id="mm54" display="block">
<mml:semantics id="sm54">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">w</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mi mathvariant="bold-italic">t</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="bold-italic">N</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:munderover>
<mml:mo mathvariant="bold">∑</mml:mo>
<mml:mrow>
<mml:mi mathvariant="bold-italic">k</mml:mi>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">−</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:munderover>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">w</mml:mi>
<mml:mi mathvariant="bold-italic">k</mml:mi></mml:msub></mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi></mml:mfrac></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>In <xref rid="FD23" ref-type="disp-formula">Equation (22)</xref><bold><italic>a</italic></bold> and <bold><italic>b</italic></bold> are two thresholds imposed to the observation angles.</p>
<p>With this algorithm, matrix <bold><italic>T̃</italic></bold><italic><sub>t</sub></italic> is modified taking into account the colour and the observation angle for each common node in <bold><italic>T̃</italic></bold><italic><sub>t</sub></italic> and <bold><italic>T</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold>. The colour updating for a node <italic>N</italic> in <bold><italic>T̃</italic></bold><italic><sub>t</sub></italic> is given by the expression:
<disp-formula id="FD25">
<label>(24)</label>
<mml:math id="mm55" display="block">
<mml:semantics id="sm55">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">C</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mrow>
<mml:mtext mathvariant="bold-italic">t</mml:mtext>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="bold-italic">N</mml:mtext>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">C</mml:mi>
<mml:mrow>
<mml:mtext mathvariant="bold-italic">t</mml:mtext>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="bold-italic">N</mml:mtext>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo mathvariant="bold">⋅</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold-italic">w</mml:mtext>
<mml:mrow>
<mml:mtext mathvariant="bold-italic">t</mml:mtext>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="bold-italic">N</mml:mtext>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">C</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mi mathvariant="bold-italic">t</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="bold-italic">N</mml:mtext>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo mathvariant="bold">⋅</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">w</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mi mathvariant="bold-italic">t</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="bold-italic">N</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold-italic">w</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="bold-italic">N</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">w</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mi mathvariant="bold-italic">t</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="bold-italic">N</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Where <bold><italic>C̃</italic></bold><italic><sub>t</sub></italic>(<bold><italic>N</italic></bold>) is the colour of <bold><italic>N</italic></bold> in <bold><italic>T̃</italic></bold><italic><sub>t</sub></italic> and <bold><italic>C</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold> is the colour of <bold><italic>N</italic></bold> in <bold><italic>T</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold>, the weights <bold><italic>w</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold> and <bold><italic>w̃</italic></bold><italic><sub>t</sub></italic> are calculated with <xref rid="FD23" ref-type="disp-formula">Equations (22)</xref> and <xref rid="FD24" ref-type="disp-formula">(23)</xref> from the observation angle <italic>s</italic> <bold><italic>θ</italic></bold><italic><sub>t</sub></italic><bold><sub>+1</sub></bold>(<bold><italic>N</italic></bold>) and <bold><italic>θ̃</italic></bold><italic><sub>t</sub></italic>(<bold><italic>N</italic></bold>), respectively.</p>
<p>In conclusion, the process of colour merging, depending on the type of scene we are dealing with, can consist of:</p>
<list list-type="bullet">
<list-item>
<p>A global correction plus average following process ➀; that is, applying Equations (16) to (20).</p></list-item>
<list-item>
<p>A local correction depending on the observation angle following process ➁; that is, applying Equations (21) to (24).</p></list-item>
<list-item>
<p>A global correction followed by a local correction, which results in:
<disp-formula id="FD26">
<label>(25)</label>
<mml:math id="mm56" display="block">
<mml:semantics id="sm56">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo mathvariant="bold">=</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mo mathvariant="bold">˜</mml:mo></mml:mover>
<mml:mi mathvariant="bold-italic">t</mml:mi></mml:msub>
<mml:mo mathvariant="bold">➀</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo mathvariant="bold">➁</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold-italic">T</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold-italic">t</mml:mi>
<mml:mo mathvariant="bold">+</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula></p></list-item></list></sec>
<sec sec-type="results">
<label>5.</label>
<title>Experimental Results</title>
<p>In order to illustrate the worthiness of our proposal, we present in this section the results for the reconstruction of two Roman archaeological sites from to the first century A.D., the Roman Theatre of Segobriga and the <italic>Fori Porticus</italic> of Emerita Augusta (<xref ref-type="fig" rid="f9-sensors-12-06893">Figure 9</xref>). They are both good prototypes of exterior scenarios, huge outdoor spaces with a high degree of difficulty due to the multitude of occlusions that arise when acquiring the surfaces.</p>
<p>For the acquisition of the geometry, we used both a Faro LS 880 laser scanner and a Faro Photon 80 sensor to provide a panoramic view of the scene. Azimuth and elevation angles range over [0, 360°] and [−65°, 90°], respectively, and the maximum data density of the scanner is 40.110 × 17.223 points. Obviously when the data is used in outdoor scenes most of the potential data are missed because they correspond to the sky and only a part of the data are useful. The colour information has been obtained with two Nikon D200 cameras with Nikon AF DX Fisheye lens, one for each scanner. This system composes a single panoramic image from 10 photos, 10.2 Mpixels each. The system takes 1 hour and 49 minutes to scan a panoramic sample plus 8 minutes to take the sequence of photos.</p>
<sec>
<label>5.1.</label>
<title>The Roman Theatre of Segobriga</title>
<p>As usual, the first task we accomplished <italic>in situ</italic> was the planning of the accessible scanner positions. The volume that could be covered in a single scan is limited by several factors: the field of view, the accessibility of the scanner, the occlusion conditions and the overlap with other scans. The theatre is split into four parts: <italic>Cavea, Poedria, Orchesta</italic> and <italic>Proscaenium</italic>. Most of the scans were taken in the Cavea zone because of the multiple occlusions that the stairs generate everywhere in this area. <xref ref-type="fig" rid="f10-sensors-12-06893">Figure 10</xref> shows the 56 scanner positions we planned initially on a map of the theatre. But as we took new scans we sometimes detected some redundant views that were discarded. Thus, we ended up taking 45 scans of the theatre.</p>
<p>We worked with resolution of up to 4,010 × 1,723 points per scan. The average amount of data and memory requirement per range image at this resolution were 3,084,840 points. It must be remembered that many data are missed in outdoor scenes. The geometric model building stage was run over an Intel<sup>®</sup> Core™ 2 6400 2.13 GHz with 2 GB RAM computer whereas in the colour model phase we used an Intel<sup>®</sup> Pentium™ 4 3.2 GHz, 3 GB RAM.</p>
<p>Apart from noise and outliers filtering tasks in the pre-processing stage, we had to correct errors in colour assignment. The system is capable of associating colour information to each point of the scene but, due to small camera alignment errors, the colour-geometry registration must be refined. To solve this problem we set a pair of corresponding points in reflectance and colour images and aligned accurately.</p>
<p>To begin generating the model, the acquired data have to be registered so that they are all in the same coordinate system. Data registration is a well-studied problem, and methods to automatically register laser scans are commercially available. In order to make the registration process more precise, we carried out an initial alignment of the two scans by manually marking related points in the two datasets to be registered. After this, the ICP algorithm was run. Finally, with the aim of having as regular and homogenous a model as possible, we performed normalization and resampling work. <xref ref-type="table" rid="t1-sensors-12-06893">Table 1</xref> shows computational times for different steps in the creation of the geometrical model and for several resolutions of the scanner. Resolution R1 corresponds to 4,010 × 1,723 = 6,909,230 points per scan, and R2 to R7 are resolutions that go from 90%R1 to 40%R1. The filtering processes eliminate erroneous points provided by the scanner: points generated in the infinite (spread points), noise (owing to reflections and shiny surfaces) and outliers (points outside the scene). Registration signifies the process of putting in correspondence two overlapped surfaces. After this process a coarse transformation is achieved. The registration refinement stage calculates an accurate alignment between both surfaces. Finally, the merging stage samples the points on the surface and rewraps it in order to make smooth transitions and generate only one cloud of points.</p>
<p>As we have said, one of the most common failures of current conventional 3D sensor devices is that they are unable to make a realistic colour fusion between overlapped samples. To overcome this drawback, we used our colour fusion algorithm in the geometric model generated in the previous phase. <xref ref-type="fig" rid="f11-sensors-12-06893">Figure 11(a)</xref> displays an example of a deficient colour assignment carried out with on-line images which were processed using commercial software. Commercial modelling tools are currently inefficient and do not provide an acceptable texture from different light conditions and scanner positions. This partially can occur owing to the lack of information that the software manages when the colour is assigned to the model. For example, the position of the scanner with respect to the surface of the object might be unknown if the 3D data are loaded from a global reference system. In the majority of the cases, the colour of overlapped nodes from different viewpoints is assigned drastically (RapidForm, Faro Scene). Thus, sometimes the colour of overlapped zone in the last scan replaces the existing colour in the model or, at the much, a simple average is calculated. Apparently, there are no filtering and colour inconsistency detection processes so that the final colour is erroneous. <xref ref-type="fig" rid="f11-sensors-12-06893">Figure 11(b)</xref> shows the result using external off-line images and the colour fusion process explained here. Our solution, as explained throughout the paper, follows a sequential merging strategy that entails three stages: global processing, local processing and filtering. <xref ref-type="fig" rid="f12-sensors-12-06893">Figure 12</xref> illustrates how the geometric plus colour model is sequentially updated as the colour information of a new scan is integrated.</p>
<p>Colour discontinuities corresponding to typical seam or edge points arise after local correction. The solution to such types of colour discontinuities is addressed here by means of a linear smoothing filter in a 3D environment. We applied a 3D discrete Gaussian filter over the three colour components. After merging all scans several colour-holes may appear. This is due to the fact that the colour merging algorithm imposes several restrictions that a few points do not satisfy. We solved the colour-hole problems following a simple nearest neighbour interpolation algorithm. <xref ref-type="fig" rid="f13-sensors-12-06893">Figure 13</xref> shows the colour-holes detected in the model in red and the result after the filling process. Finally, we generated the colour mesh model in which the colour of the patch is assigned by means of a bicubic interpolation over the vertices of the patch. <xref ref-type="table" rid="t2-sensors-12-06893">Table 2</xref> presents computational cost, memory requirement and number of filled holes concerning the colour assignation stage. The table includes several mesh model resolutions. The primary complete mesh-model was a 746 MB file with 9,587,505 triangular patches and average edge of 1.6 cm. <italic>N<sub>p</sub></italic> symbolizes the number of nodes of the mesh model (in million units). T<sub>1</sub>, T<sub>2</sub> and T<sub>3</sub> concern loading, colour merging and colour-hole filling computation times, respectively. The next column (RAM) is the amount of memory required and <italic>N<sub>h</sub></italic> corresponds to the number of filled patches.</p></sec>
<sec>
<label>5.2.</label>
<title>The Fori Porticus of Emerita Augusta</title>
<p>Following the same procedure as for the theatre model, we also generated a complete geometrical model for the <italic>Fori Porticus</italic> of Emerita Augusta in Merida that can be seen in <xref ref-type="fig" rid="f14-sensors-12-06893">Figure 14</xref>. We worked with resolution up to 5,014 × 2,153 points per scan. This site needed 25 scans to be completely reconstructed, each having an average of six million points. These data were taken during four sessions, eight hours per session. The final point cloud of the definitive model was reduced to 48,560,845 points, with a memory size of 1.148 GB. To integrate the texture in the model we took, on a different day and over one hour, 126 shots of the site and applied our method. We chose a cloudy but light day so that illumination conditions were the best. The model was run over on two 3.2 GHz, 4 GB RAM personal computers and a graphic server with two processors, six cores each, two threads per core and 32 GB RAM.</p>
<p><xref ref-type="table" rid="t3-sensors-12-06893">Tables 3</xref> and <xref ref-type="table" rid="t4-sensors-12-06893">4</xref> present approximate computational times for different stages and scanner resolutions concerning the geometrical model generation and colour assignation processes respectively. Resolution R1 corresponds to 5,014 × 2,153 points per scan, and R2 to R7 are resolutions that go from 90%R1 to 40%R1. <xref ref-type="table" rid="t3-sensors-12-06893">Table 3</xref> shows, besides the times concerning the registration between two range images, the time required to obtain the whole mesh model (“Meshing”) and the time required to normalize (edge regularization) and refinement (mesh smoothing). <xref ref-type="table" rid="t4-sensors-12-06893">Table 4</xref> provides details of specific steps referred to in Sections 2, 3 and 4: extraction of the ortho-image from the 3D model, correspondence between the model and the external image, colour filling process and colour merging in the whole coloured model.</p>
<p><xref ref-type="fig" rid="f15-sensors-12-06893">Figures 15</xref> to <xref ref-type="fig" rid="f18-sensors-12-06893">18</xref> highlight some moments of the sequence of steps carried out to assign colour from external images to the geometrical model built.</p>
<p>Finally, we present a set of pictures to show the results obtained after applying our method to the <italic>Fori Porticus</italic> of Emerita Augusta in comparison to the previous coloured model generated by using the colour information provided by the scanner on-board camera (<xref ref-type="fig" rid="f18-sensors-12-06893">Figure 18</xref>). The improvement in the colour model generated from external images can clearly be seen.</p></sec></sec>
<sec sec-type="conclusions">
<label>6.</label>
<title>Conclusions</title>
<p>Building accurate and complete (geometry+texture) 3D models of large heritage indoor/outdoor scenes from scanners is still a challenging and unresolved issue on which many researchers are currently working [<xref ref-type="bibr" rid="b27-sensors-12-06893">27</xref>,<xref ref-type="bibr" rid="b28-sensors-12-06893">28</xref>]. In the last decade technology relating to 3D sensors has significantly improved in many respects and the devices are now more flexible, more precise and less costly than in the past. Consequently, we believe that better reverse engineering results will be obtained in this area. Processing of information, nevertheless, may be inefficient if the scene is digitalized under unsuitable conditions. This frequently occurs in outdoor scenarios in which the illumination and the environment conditions of the scene cannot be controlled. This paper proposes to improve the existing modelling techniques by decoupling the colour integration and geometry reconstruction stages. Colour assignation in particular is carried out as an independent and controlled process. The method has basically two parts: colour assignation for one shot of the scanner and colour fusion of multiple views.</p>
<p>Colour assignation focuses firstly on modifying low-quality coloured 3D models by using sets of images of the scene that have been taken at different times and circumstances than those of the geometrical information capture phase. In this approach a colour transformation is obtained after matching the model's orthoimages with external images. The second line is addressed to directly assigning external images to the complete geometric model. Both approaches are quite simple and can easily be implemented in practice.</p>
<p>The merging colour algorithm is proposed in the last part of the paper. This stage is carried out under an iterative process in which the next external image is automatically integrated into the ‘as-built’ model. The result is a complete coloured model that can be refined in the last step.</p>
<p>The proposed method has been widely tested in large outdoor scenes with very good results; the present paper shows the results obtained at two popular heritage sites in Spain. We have achieved high-quality photorealistic models in all tests we have performed. Comparison with former models is also illustrated at the end of the paper.</p></sec></body>
<back>
<ack>
<p>We would like to express our appreciation to the staff of both the Segobriga Archaeological Park and the Consortium of the Monumental City of Mérida, for their assistance in our work. We would also like to thank the Spanish Ministry of Science and Innovation, the Castilla La Mancha Government and the Extremadura Regional Government for financing it through projects DPI2009-14024-C02-01, PCI08-0052-1401 and PRI09C088.</p></ack>
<ref-list>
<title>References</title>
<ref id="b1-sensors-12-06893"><label>1.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Besl</surname><given-names>P.J.</given-names></name><name><surname>McKay</surname><given-names>H.D.</given-names></name></person-group><article-title>A method for registration of 3-D shapes</article-title><source>IEEE Trans. Pattern Anal. Mach. Intell.</source><year>1992</year><volume>14</volume><fpage>239</fpage><lpage>256</lpage><pub-id pub-id-type="doi">10.1109/34.121791</pub-id></citation></ref>
<ref id="b2-sensors-12-06893"><label>2.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Zhang</surname><given-names>Z.</given-names></name></person-group><article-title>Iterative point matching for registration of free-form curves and surfaces</article-title><source>Int. J. Comput. Vis.</source><year>1994</year><volume>13</volume><fpage>119</fpage><lpage>152</lpage><pub-id pub-id-type="doi">10.1007/BF01427149</pub-id></citation></ref>
<ref id="b3-sensors-12-06893"><label>3.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Xiao</surname><given-names>G.</given-names></name><name><surname>Ong</surname><given-names>S.H.</given-names></name><name><surname>Foong</surname><given-names>K.W.C.</given-names></name></person-group><article-title>Efficient partial-surface registration for 3D objects</article-title><source>Comput. Vis. Image Underst.</source><year>2005</year><volume>98</volume><fpage>271</fpage><lpage>293</lpage><pub-id pub-id-type="doi">10.1016/j.cviu.2004.10.001</pub-id></citation></ref>
<ref id="b4-sensors-12-06893"><label>4.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Silva</surname><given-names>L.</given-names></name><name><surname>Bellon</surname><given-names>O.R.P.</given-names></name><name><surname>Boyer</surname><given-names>K.L.</given-names></name></person-group><article-title>Precision range image registration using a robust surface interpenetration measure and enhanced genetic algorithms</article-title><source>IEEE Trans. Pattern Anal. Mach. Intell.</source><year>2005</year><volume>27</volume><fpage>762</fpage><lpage>776</lpage><pub-id pub-id-type="doi">10.1109/TPAMI.2005.108</pub-id><pub-id pub-id-type="pmid">15875797</pub-id></citation></ref>
<ref id="b5-sensors-12-06893"><label>5.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Salvi</surname><given-names>J.</given-names></name><name><surname>Matabosch</surname><given-names>C.</given-names></name><name><surname>Fofi</surname><given-names>D.</given-names></name><name><surname>Forest</surname><given-names>J.</given-names></name></person-group><article-title>A review of recent range image registration methods with accuracy evaluation</article-title><source>Image Vis. Comput.</source><year>2007</year><volume>25</volume><fpage>578</fpage><lpage>596</lpage><pub-id pub-id-type="doi">10.1016/j.imavis.2006.05.012</pub-id></citation></ref>
<ref id="b6-sensors-12-06893"><label>6.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Santamaría</surname><given-names>J.</given-names></name><name><surname>Cordón</surname><given-names>O.</given-names></name><name><surname>Damas</surname><given-names>S.</given-names></name></person-group><article-title>A comparative study of state-of-the-art evolutionary image registration methods for 3D modelling</article-title><source>Comput. Vis. Image Underst.</source><year>2011</year><volume>115</volume><fpage>1340</fpage><lpage>1354</lpage><pub-id pub-id-type="doi">10.1016/j.cviu.2011.05.006</pub-id></citation></ref>
<ref id="b7-sensors-12-06893"><label>7.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Turk</surname><given-names>G.</given-names></name><name><surname>Levoy</surname><given-names>M.</given-names></name></person-group><article-title>Zippered Polygon Meshes from Range Images</article-title><conf-name>Proceedings of the 21st Annual Conference on Computer Graphics and Interactive Techniques (SIGGRAPH '94)</conf-name><conf-loc>Orlando, FL, USA</conf-loc><conf-date>24–29 July 1994</conf-date><fpage>311</fpage><lpage>318</lpage></citation></ref>
<ref id="b8-sensors-12-06893"><label>8.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Curless</surname><given-names>B.</given-names></name><name><surname>Levoy</surname><given-names>M.</given-names></name></person-group><article-title>A Volumetric Method for Building Complex Models from Range Images</article-title><conf-name>Proceedings of the 23rd Annual Conference on Computer Graphics and Interactive Techniques</conf-name><conf-loc>New Orleans, LA, USA</conf-loc><conf-date>4–9 August 1996</conf-date><fpage>303</fpage><lpage>312</lpage></citation></ref>
<ref id="b9-sensors-12-06893"><label>9.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Di Angelo</surname><given-names>L.</given-names></name><name><surname>di Stefano</surname><given-names>P.</given-names></name><name><surname>Giaccari</surname><given-names>L.</given-names></name></person-group><article-title>A new mesh-growing algorithm for fast surface reconstruction</article-title><source>Comput. Aided Des.</source><year>2011</year><volume>43</volume><fpage>639</fpage><lpage>650</lpage><pub-id pub-id-type="doi">10.1016/j.cad.2011.02.012</pub-id></citation></ref>
<ref id="b10-sensors-12-06893"><label>10.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Santos</surname><given-names>J.</given-names><suffix>Jr.</suffix></name><name><surname>Bellon</surname><given-names>O.</given-names></name><name><surname>Silva</surname><given-names>L.</given-names></name><name><surname>Vrubel</surname><given-names>A.</given-names></name></person-group><article-title>Improving 3D reconstruction for digital art preservation</article-title><source>Lect. Notes Comput. Sci.</source><year>2011</year><volume>6978</volume><fpage>374</fpage><lpage>383</lpage></citation></ref>
<ref id="b11-sensors-12-06893"><label>11.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Wang</surname><given-names>L.</given-names></name><name><surname>Kang</surname><given-names>S.B.</given-names></name><name><surname>Szeliski</surname><given-names>R.</given-names></name><name><surname>Shum</surname><given-names>H.-Y.</given-names></name></person-group><article-title>Optimal Texture Map Reconstruction from Multiple Views</article-title><conf-name>Proceedings of the 2001 IEEE Computer Society Conference on Computer Vision and Pattern Recognition</conf-name><conf-loc>Miami, FL, USA</conf-loc><conf-date>8–14 December 2001</conf-date><fpage>347</fpage><lpage>354</lpage></citation></ref>
<ref id="b12-sensors-12-06893"><label>12.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Callieri</surname><given-names>M.</given-names></name><name><surname>Cignoni</surname><given-names>P.</given-names></name><name><surname>Corsini</surname><given-names>M.</given-names></name><name><surname>Scopigno</surname><given-names>R.</given-names></name></person-group><article-title>Masked photo blending: Mapping dense photographic data set on high- resolution sampled 3D models</article-title><source>Comput. Graph.</source><year>2008</year><volume>32</volume><fpage>464</fpage><lpage>473</lpage><pub-id pub-id-type="doi">10.1016/j.cag.2008.05.004</pub-id></citation></ref>
<ref id="b13-sensors-12-06893"><label>13.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Goldluecke</surname><given-names>B.</given-names></name><name><surname>Cremers</surname><given-names>D.</given-names></name></person-group><article-title>Superresolution texture maps for multiview reconstruction</article-title><source>IEEE Int. Conf. Comput. Vis.</source><year>2009</year><volume>2009</volume><fpage>1677</fpage><lpage>1684</lpage></citation></ref>
<ref id="b14-sensors-12-06893"><label>14.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Liu</surname><given-names>X.M.</given-names></name><name><surname>Peng</surname><given-names>X.</given-names></name><name><surname>Yin</surname><given-names>Y.K.</given-names></name><name><surname>Li</surname><given-names>A.M.</given-names></name><name><surname>Liu</surname><given-names>X.L.</given-names></name><name><surname>Wu</surname><given-names>W.</given-names></name></person-group><article-title>Generation of photorealistic 3D image using optical digitizer</article-title><source>Appl. Opt.</source><year>2012</year><volume>51</volume><fpage>1304</fpage><lpage>1311</lpage><pub-id pub-id-type="doi">10.1364/AO.51.001304</pub-id><pub-id pub-id-type="pmid">22441476</pub-id></citation></ref>
<ref id="b15-sensors-12-06893"><label>15.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Wyngaerd</surname><given-names>J.V.</given-names></name><name><surname>van Gool</surname><given-names>L.</given-names></name></person-group><article-title>Combining Texture and Shape for Automatic Crude Patch Registration</article-title><conf-name>Proceedings of the Fourth International Conference on 3D Digital Imaging and Modeling</conf-name><conf-loc>Banff, Canada</conf-loc><conf-date>6–10 October 2003</conf-date><fpage>179</fpage><lpage>186</lpage></citation></ref>
<ref id="b16-sensors-12-06893"><label>16.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Park</surname><given-names>S.</given-names></name><name><surname>Guo</surname><given-names>X.</given-names></name><name><surname>Shin</surname><given-names>H.</given-names></name><name><surname>Qin</surname><given-names>H.</given-names></name></person-group><article-title>Shape and Appearance Repair for Incomplete Point Surfaces</article-title><conf-name>Proceedings of the 10th IEEE International Conference on Computer Vision</conf-name><conf-loc>Beijing, China</conf-loc><conf-date>17–20 October 2005</conf-date><fpage>1260</fpage><lpage>1267</lpage></citation></ref>
<ref id="b17-sensors-12-06893"><label>17.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Bannai</surname><given-names>N.</given-names></name><name><surname>Fisher</surname><given-names>R.B.</given-names></name><name><surname>Agathos</surname><given-names>A.</given-names></name></person-group><article-title>Multiple color texture map fusion for 3D models</article-title><source>Pattern Recognit. Lett.</source><year>2007</year><volume>28</volume><fpage>748</fpage><lpage>758</lpage><pub-id pub-id-type="doi">10.1016/j.patrec.2006.07.013</pub-id></citation></ref>
<ref id="b18-sensors-12-06893"><label>18.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Troccoli</surname><given-names>A.</given-names></name><name><surname>Allen</surname><given-names>P.</given-names></name></person-group><article-title>Building illumination coherent 3D models of large-scale outdoor scenes</article-title><source>Int. J. Comput. Vis.</source><year>2008</year><volume>78</volume><fpage>261</fpage><lpage>280</lpage><pub-id pub-id-type="doi">10.1007/s11263-007-0100-x</pub-id></citation></ref>
<ref id="b19-sensors-12-06893"><label>19.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Dellepiane</surname><given-names>M.</given-names></name><name><surname>Callieri</surname><given-names>M.</given-names></name><name><surname>Corsini</surname><given-names>M.</given-names></name><name><surname>Cignoni</surname><given-names>P.</given-names></name><name><surname>Scopigno</surname><given-names>R.</given-names></name></person-group><article-title>Improved color acquisition and mapping on 3D models via flash-based photography</article-title><source>J. Comput. Cult. Herit</source><year>2010</year><issue>2</issue><pub-id pub-id-type="doi">10.1145/1709091.1709092.</pub-id></citation></ref>
<ref id="b20-sensors-12-06893"><label>20.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Sun</surname><given-names>Y.</given-names></name><name><surname>Dumont</surname><given-names>C.</given-names></name><name><surname>Abidi</surname><given-names>M.</given-names></name></person-group><article-title>Mesh-based Integration of Range and Color Images</article-title><conf-name>Proceedings of the SPIE Conference on Sensor Fusion: Architectures, Algorithms, and Applications IV</conf-name><conf-loc>Orlando, FL, USA</conf-loc><conf-date>24–28 April 2000</conf-date><comment>Volume 4051</comment><fpage>110</fpage><lpage>117</lpage></citation></ref>
<ref id="b21-sensors-12-06893"><label>21.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Bernardini</surname><given-names>F.</given-names></name><name><surname>Martin</surname><given-names>L.M.</given-names></name><name><surname>Rushmeier</surname><given-names>H.</given-names></name></person-group><article-title>High-quality texture reconstruction from multiple scans</article-title><source>IEEE Trans. Vis. Comput. Graph.</source><year>2001</year><volume>7</volume><fpage>318</fpage><lpage>332</lpage></citation></ref>
<ref id="b22-sensors-12-06893"><label>22.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Xu</surname><given-names>C.</given-names></name><name><surname>Georghiades</surname><given-names>A.</given-names></name><name><surname>Rushmeier</surname><given-names>H.</given-names></name><name><surname>Dorsey</surname><given-names>J.</given-names></name></person-group><article-title>A System for Reconstructing Integrated texture Maps for Large Structures</article-title><conf-name>Proceeding of 3rd International Symposium on 3D Data Processing Visualization and Transmission</conf-name><conf-loc>Chapel Hill, NC, USA</conf-loc><conf-date>14–16 June 2006</conf-date><fpage>822</fpage><lpage>829</lpage></citation></ref>
<ref id="b23-sensors-12-06893"><label>23.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Debevec</surname><given-names>P.</given-names></name><name><surname>Hawkins</surname><given-names>T.</given-names></name><name><surname>Tchou</surname><given-names>C.</given-names></name><name><surname>Duiker</surname><given-names>H.-P.</given-names></name><name><surname>Sarokin</surname><given-names>W.</given-names></name><name><surname>Sagar</surname><given-names>M.</given-names></name></person-group><article-title>Acquiring the Reflectance Field of a Human Face</article-title><conf-name>Proceedings of the 27th Annual Conference on Computer Graphics and Interactive Techniques</conf-name><conf-loc>New Orleans, LA, USA</conf-loc><conf-date>23–28 July 2000</conf-date><fpage>145</fpage><lpage>156</lpage></citation></ref>
<ref id="b24-sensors-12-06893"><label>24.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Lensch</surname><given-names>H.P.A.</given-names></name><name><surname>Kautz</surname><given-names>J.</given-names></name><name><surname>Goesele</surname><given-names>M.</given-names></name><name><surname>Heidrich</surname><given-names>W.</given-names></name><name><surname>Seidel</surname><given-names>H.-P.</given-names></name></person-group><article-title>Image-based reconstruction of spatial appearance and geometric detail</article-title><source>ACM Trans. Graph.</source><year>2003</year><volume>22</volume><fpage>234</fpage><lpage>257</lpage><pub-id pub-id-type="doi">10.1145/636886.636891</pub-id></citation></ref>
<ref id="b25-sensors-12-06893"><label>25.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Debevec</surname><given-names>P.</given-names></name><name><surname>Tchou</surname><given-names>C.</given-names></name><name><surname>Gardner</surname><given-names>A.</given-names></name><name><surname>Hawkins</surname><given-names>T.</given-names></name><name><surname>Poullis</surname><given-names>C.</given-names></name><name><surname>Stumpfel</surname><given-names>J.</given-names></name><name><surname>Jones</surname><given-names>A.</given-names></name><name><surname>Yun</surname><given-names>N.</given-names></name><name><surname>Einarsson</surname><given-names>P.</given-names></name><name><surname>Lundgren</surname><given-names>T.</given-names></name><name><surname>Fajardo</surname><given-names>M.</given-names></name><name><surname>Martinez</surname><given-names>P.</given-names></name></person-group><source>Estimating Surface Reflectance Properties of a Complex Scene under Natural Captured Illumination</source><comment>USC ICT Technical Report ICT-TR-06.2004</comment><publisher-name>University of Southern California</publisher-name><publisher-loc>Los Angeles, CA, USA</publisher-loc><year>2004</year></citation></ref>
<ref id="b26-sensors-12-06893"><label>26.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Troccoli</surname><given-names>A.</given-names></name><name><surname>Allen</surname><given-names>P.</given-names></name></person-group><article-title>Recovering Illumination and Texture Using Ratio Images</article-title><conf-name>Proceeding of the 3rd International Symposium 3D Data Processing, Visualization and Transmission</conf-name><conf-loc>Chapel Hill, NC, USA</conf-loc><conf-date>14–16 June 2006</conf-date><fpage>655</fpage><lpage>662</lpage></citation></ref>
<ref id="b27-sensors-12-06893"><label>27.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Remondino</surname><given-names>F.</given-names></name></person-group><article-title>Heritage recording and 3D modeling with photogrammetry and 3D scaning</article-title><source>Remote Sens.</source><year>2011</year><volume>3</volume><fpage>1104</fpage><lpage>1138</lpage><pub-id pub-id-type="doi">10.3390/rs3061104</pub-id></citation></ref>
<ref id="b28-sensors-12-06893"><label>28.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Gonzalez</surname><given-names>D.</given-names></name><name><surname>Muñoz</surname><given-names>A.</given-names></name><name><surname>Gómez</surname><given-names>J.</given-names></name><name><surname>Herrero</surname><given-names>J.</given-names></name><name><surname>Gutierrez</surname><given-names>G.</given-names></name></person-group><article-title>3D modelling surveying and modelling of cave geometry: Application to palaeolithic rock art</article-title><source>Sensors</source><year>2009</year><volume>9</volume><fpage>1108</fpage><lpage>1127</lpage><pub-id pub-id-type="doi">10.3390/s90201108</pub-id><pub-id pub-id-type="pmid">22399958</pub-id></citation></ref></ref-list>
<sec sec-type="display-objects">
<title>Figures and Tables</title>
<fig id="f1-sensors-12-06893" position="float">
<label>Figure 1.</label>
<caption>
<p>Sketch of the procedure used to modify the colour of a 3D model.</p></caption>
<graphic xlink:href="sensors-12-06893f1.gif"/></fig>
<fig id="f2-sensors-12-06893" position="float">
<label>Figure 2.</label>
<caption>
<p>(<bold>a</bold>) Selection of relevant pixels in images <bold><italic>I</italic></bold><italic><sub>1</sub></italic> (taken from the coloured model) and <bold><italic>I</italic></bold><italic><sub>2</sub></italic> (external image) and one pair of pixels chosen to run the algorithm of error minimization; (<bold>b</bold>) Corrected position of the chosen pixel in <bold><italic>I</italic></bold><italic><sub>1</sub></italic> depicted <italic>versus</italic> the position of its related pixel in <bold><italic>I</italic></bold><italic><sub>2</sub></italic>.</p></caption>
<graphic xlink:href="sensors-12-06893f2.gif"/></fig>
<fig id="f3-sensors-12-06893" position="float">
<label>Figure 3.</label>
<caption>
<p>Correction of texture: (<bold>left</bold>) Corrected model assuming a pure geometric transformation between <italic>I<sub>1</sub></italic> and <italic>I<sub>2</sub></italic>; (<bold>right</bold>) Result by considering image deformations.</p></caption>
<graphic xlink:href="sensors-12-06893f3.gif"/></fig>
<fig id="f4-sensors-12-06893" position="float">
<label>Figure 4.</label>
<caption>
<p>(<bold>left</bold>) External image <bold><italic>I</italic></bold><italic><sub>2</sub></italic>; (<bold>right</bold>) Uncoloured 3D model and chosen view to obtain image <bold><italic>I</italic></bold><italic><sub>1</sub></italic>.</p></caption>
<graphic xlink:href="sensors-12-06893f4.gif"/></fig>
<fig id="f5-sensors-12-06893" position="float">
<label>Figure 5.</label>
<caption>
<p>Generation of the coloured ortho-image: (<bold>a</bold>) Selection of the corresponding pairs of points onto the 3D geometrical model ortho-image and the external image; (<bold>b</bold>) Result of the colour transformation method on <bold><italic>I</italic></bold><italic><sub>1</sub></italic> (left) to obtain 
<inline-formula>
<mml:math id="mm23" display="inline">
<mml:semantics id="sm23">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> (right); (<bold>c</bold>) Comparison between the original external image <bold><italic>I</italic></bold><italic><sub>2</sub></italic> (left) and the generated coloured ortho-image 
<inline-formula>
<mml:math id="mm24" display="inline">
<mml:semantics id="sm24">
<mml:mrow>
<mml:msubsup>
<mml:mi mathvariant="bold-italic">I</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo mathvariant="bold">′</mml:mo></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> (right).</p></caption>
<graphic xlink:href="sensors-12-06893f5a.gif"/>
<graphic xlink:href="sensors-12-06893f5b.gif"/></fig>
<fig id="f6-sensors-12-06893" position="float">
<label>Figure 6.</label>
<caption>
<p>(<bold>a</bold>) Mapping of the 2D information in the 3D coordinates; (<bold>b</bold>) Elimination of the point coordinates that do not belong to the geometrical model; (<bold>c</bold>) Definition of the vertex indexes associated to the model; (<bold>d</bold>) Storage of the vertex indexes and their associated colour; (<bold>e</bold>) Assignation of a unique colour to each vertex in the geometrical model.</p></caption>
<graphic xlink:href="sensors-12-06893f6.gif"/></fig>
<fig id="f7-sensors-12-06893" position="float">
<label>Figure 7.</label>
<caption>
<p>(<bold>a</bold>) Assigning images to the mesh model and evolution of matrix <bold><italic>T̃</italic></bold><italic><sub>i</sub></italic>; (<bold>b</bold>) Integration of a new image.</p></caption>
<graphic xlink:href="sensors-12-06893f7.gif"/></fig>
<fig id="f8-sensors-12-06893" position="float">
<label>Figure 8.</label>
<caption>
<p>Illustration of multi-view colour-fusion processes ➀ (<bold>a</bold>) and ➁ (<bold>b</bold>).</p></caption>
<graphic xlink:href="sensors-12-06893f8.gif"/></fig>
<fig id="f9-sensors-12-06893" position="float">
<label>Figure 9.</label>
<caption>
<p>Pictures of the Roman Theatre of Segobriga (<bold>left</bold>) and the <italic>Fori Porticus</italic> of Emerita Augusta (<bold>right</bold>).</p></caption>
<graphic xlink:href="sensors-12-06893f9.gif"/></fig>
<fig id="f10-sensors-12-06893" position="float">
<label>Figure 10.</label>
<caption>
<p>Small red spots point out the scanners positions on a map of the theatre.</p></caption>
<graphic xlink:href="sensors-12-06893f10.gif"/></fig>
<fig id="f11-sensors-12-06893" position="float">
<label>Figure 11.</label>
<caption>
<p>Erroneous colour fusion made with commercial software (<bold>a</bold>) and the result after applying our algorithm (<bold>b</bold>).</p></caption>
<graphic xlink:href="sensors-12-06893f11.gif"/></fig>
<fig id="f12-sensors-12-06893" position="float">
<label>Figure 12.</label>
<caption>
<p>(<bold>1</bold>–<bold>2)</bold>. Two coloured scans, (<bold>3)</bold> Matching of coloured scan 1 onto the geometrical model, (<bold>4)</bold> Result after merging scan 2 with the current coloured model.</p></caption>
<graphic xlink:href="sensors-12-06893f12.gif"/></fig>
<fig id="f13-sensors-12-06893" position="float">
<label>Figure 13.</label>
<caption>
<p>Colour holes depicted in red (left); Result for the nearest neighbour filling algorithm run on them (<bold>right</bold>).</p></caption>
<graphic xlink:href="sensors-12-06893f13.gif"/></fig>
<fig id="f14-sensors-12-06893" position="float">
<label>Figure 14.</label>
<caption>
<p>Two views of the final geometrical model for the <italic>Fori Porticus</italic> of Emerita Augusta.</p></caption>
<graphic xlink:href="sensors-12-06893f14.gif"/></fig>
<fig id="f15-sensors-12-06893" position="float">
<label>Figure 15.</label>
<caption>
<p>(<bold>a</bold>) Selection of the corresponding pairs on the 3D geometrical model ortho-image and the external image; (<bold>b</bold>) Result of the colour transformation method on the ortho-image (left) to obtain the coloured ortho-image (right); (<bold>c</bold>) Colour information mapped onto the 3D model.</p></caption>
<graphic xlink:href="sensors-12-06893f15.gif"/></fig>
<fig id="f16-sensors-12-06893" position="float">
<label>Figure 16.</label>
<caption>
<p>(<bold>a</bold>) Selection of corresponding pairs; (<bold>b</bold>) Colour information mapped onto the 3D model.</p></caption>
<graphic xlink:href="sensors-12-06893f16.gif"/></fig>
<fig id="f17-sensors-12-06893" position="float">
<label>Figure 17.</label>
<caption>
<p>External images taken under appropriate environmental conditions (<bold>top</bold>); Evolution of the coloured model as the colour information is added (<bold>bottom</bold>).</p></caption>
<graphic xlink:href="sensors-12-06893f17.gif"/></fig>
<fig id="f18-sensors-12-06893" position="float">
<label>Figure 18.</label>
<caption>
<p>Pictures of a previous coloured model generated from the images provided for the scanner on-board camera (<bold>left</bold>) in comparison with pictures of the photorealistic model created from the geometrical model and a set of external images taken without any restrictions (<bold>right</bold>).</p></caption>
<graphic xlink:href="sensors-12-06893f18.gif"/></fig>
<table-wrap id="t1-sensors-12-06893" position="float">
<label>Table 1.</label>
<caption>
<p>Average computational times in different processing phases of theTheatre of Segobriga geometrical model and for several scanner resolutions.</p></caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="bottom"><bold>Process</bold></th>
<th align="center" valign="bottom"><bold>R1</bold></th>
<th align="center" valign="bottom"><bold>R2</bold></th>
<th align="center" valign="bottom"><bold>R3</bold></th>
<th align="center" valign="bottom"><bold>R4</bold></th>
<th align="center" valign="bottom"><bold>R5</bold></th>
<th align="center" valign="bottom"><bold>R6</bold></th>
<th align="center" valign="bottom"><bold>R7</bold></th></tr></thead>
<tbody>
<tr>
<td align="left" valign="middle">Spread points filtering (one scan)</td>
<td align="center" valign="top">21s</td>
<td align="center" valign="top">20s</td>
<td align="center" valign="top">20s</td>
<td align="center" valign="top">16s</td>
<td align="center" valign="top">16s</td>
<td align="center" valign="top">13s</td>
<td align="center" valign="top">12s</td></tr>
<tr>
<td align="left" valign="middle">Outliers and noise filtering (one scan)</td>
<td align="center" valign="top">6s</td>
<td align="center" valign="top">6s</td>
<td align="center" valign="top">5s</td>
<td align="center" valign="top">5s</td>
<td align="center" valign="top">5s</td>
<td align="center" valign="top">3s</td>
<td align="center" valign="top">3s</td></tr>
<tr>
<td align="left" valign="middle">Normalization and resampling (one scan)</td>
<td align="center" valign="top">49s</td>
<td align="center" valign="top">40s</td>
<td align="center" valign="top">34s</td>
<td align="center" valign="top">22s</td>
<td align="center" valign="top">12s</td>
<td align="center" valign="top">9s</td>
<td align="center" valign="top">8s</td></tr>
<tr>
<td align="left" valign="middle">Registration (two scans)</td>
<td align="center" valign="top">4m35s</td>
<td align="center" valign="top">3m13s</td>
<td align="center" valign="top">1m40s</td>
<td align="center" valign="top">1m14s</td>
<td align="center" valign="top">1m14s</td>
<td align="center" valign="top">1m14s</td>
<td align="center" valign="top">1m14s</td></tr>
<tr>
<td align="left" valign="middle">Registration refinement (two scans)</td>
<td align="center" valign="top">4m59s</td>
<td align="center" valign="top">7m11s</td>
<td align="center" valign="top">6m33s</td>
<td align="center" valign="top">5m49s</td>
<td align="center" valign="top">5m04s</td>
<td align="center" valign="top">4m35s</td>
<td align="center" valign="top">3m31s</td></tr>
<tr>
<td align="left" valign="middle">Merging (two scans)</td>
<td align="center" valign="top">21s</td>
<td align="center" valign="top">21s</td>
<td align="center" valign="top">20s</td>
<td align="center" valign="top">17s</td>
<td align="center" valign="top">16s</td>
<td align="center" valign="top">15s</td>
<td align="center" valign="top">15s</td></tr>
<tr>
<td align="left" valign="middle"/>
<td align="left" valign="bottom"/>
<td align="left" valign="bottom"/>
<td align="left" valign="bottom"/>
<td align="left" valign="bottom"/>
<td align="left" valign="bottom"/>
<td align="left" valign="bottom"/>
<td align="left" valign="bottom"/></tr></tbody></table></table-wrap>
<table-wrap id="t2-sensors-12-06893" position="float">
<label>Table 2.</label>
<caption>
<p>Interesting figures for several Theatre of Segobriga models.</p></caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="bottom"><bold><italic>N<sub>p</sub></italic></bold></th>
<th align="center" valign="bottom"><bold>T<sub>1</sub></bold></th>
<th align="center" valign="bottom"><bold>T<sub>2</sub></bold></th>
<th align="center" valign="bottom"><bold>T<sub>3</sub></bold></th>
<th align="center" valign="bottom"><bold>RAM</bold></th>
<th align="center" valign="bottom"><bold><italic>N<sub>h</sub></italic></bold></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="top">2,93</td>
<td align="center" valign="top">30s</td>
<td align="center" valign="top">1h</td>
<td align="center" valign="top">1h 53m</td>
<td align="center" valign="top">115 MB</td>
<td align="center" valign="top">32524</td></tr>
<tr>
<td align="center" valign="top">6,02</td>
<td align="center" valign="top">53s</td>
<td align="center" valign="top">1h 21m</td>
<td align="center" valign="top">3h 55m</td>
<td align="center" valign="top">195MB</td>
<td align="center" valign="top">61096</td></tr>
<tr>
<td align="center" valign="top">7,88</td>
<td align="center" valign="top">1m 10s</td>
<td align="center" valign="top">1h 47m</td>
<td align="center" valign="top">5h 20m</td>
<td align="center" valign="top">143MB</td>
<td align="center" valign="top">82959</td></tr>
<tr>
<td align="center" valign="top">9,58</td>
<td align="center" valign="top">1m 28s</td>
<td align="center" valign="top">2h 10m</td>
<td align="center" valign="top">8h 5m</td>
<td align="center" valign="top">298MB</td>
<td align="center" valign="top">102314</td></tr></tbody></table></table-wrap>
<table-wrap id="t3-sensors-12-06893" position="float">
<label>Table 3.</label>
<caption>
<p>Computational times for different stages and scanner resolutions of the <italic>Fori Porticus</italic> geometrical model.</p></caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="bottom"><bold>Process</bold></th>
<th align="center" valign="bottom"><bold>R1</bold></th>
<th align="center" valign="bottom"><bold>R2</bold></th>
<th align="center" valign="bottom"><bold>R3</bold></th>
<th align="center" valign="bottom"><bold>R4</bold></th>
<th align="center" valign="bottom"><bold>R5</bold></th>
<th align="center" valign="bottom"><bold>R6</bold></th>
<th align="center" valign="bottom"><bold>R7</bold></th></tr></thead>
<tbody>
<tr>
<td align="left" valign="top">Registration (two scans)</td>
<td align="center" valign="top">2m</td>
<td align="center" valign="top">1m42s</td>
<td align="center" valign="top">1m33s</td>
<td align="center" valign="top">1m24s</td>
<td align="center" valign="top">1m22s</td>
<td align="center" valign="top">1m19s</td>
<td align="center" valign="top">1m20s</td></tr>
<tr>
<td align="left" valign="top">Registration refinement (two scans)</td>
<td align="center" valign="top">1m</td>
<td align="center" valign="top">56s</td>
<td align="center" valign="top">50s</td>
<td align="center" valign="top">44s</td>
<td align="center" valign="top">42s</td>
<td align="center" valign="top">37s</td>
<td align="center" valign="top">33s</td></tr>
<tr>
<td align="left" valign="top">Meshing (complete model)</td>
<td align="center" valign="top">30m</td>
<td align="center" valign="top">27m</td>
<td align="center" valign="top">24m</td>
<td align="center" valign="top">21m</td>
<td align="center" valign="top">18m</td>
<td align="center" valign="top">15m</td>
<td align="center" valign="top">12m</td></tr>
<tr>
<td align="left" valign="top">Normalization and refinement of the final mesh (complete model)</td>
<td align="center" valign="top">8h</td>
<td align="center" valign="top">7h</td>
<td align="center" valign="top">5h</td>
<td align="center" valign="top">3h</td>
<td align="center" valign="top">1h</td>
<td align="center" valign="top">30m</td>
<td align="center" valign="top">10m</td></tr></tbody></table></table-wrap>
<table-wrap id="t4-sensors-12-06893" position="float">
<label>Table 4.</label>
<caption>
<p>Computational times for several steps and scanner resolutions in the <italic>Fori Porticus</italic> coloured model building.</p></caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="left" valign="bottom"><bold>Stages</bold></th>
<th align="left" valign="bottom"><bold>R1</bold></th>
<th align="left" valign="bottom"><bold>R2</bold></th>
<th align="left" valign="bottom"><bold>R3</bold></th>
<th align="left" valign="bottom"><bold>R4</bold></th>
<th align="left" valign="bottom"><bold>R5</bold></th>
<th align="left" valign="bottom"><bold>R6</bold></th>
<th align="left" valign="bottom"><bold>R7</bold></th></tr></thead>
<tbody>
<tr>
<td align="left" valign="top">Pre-processing of each view (normal calculation, format conversion, <italic>etc.</italic>)</td>
<td align="left" valign="top">5 m</td>
<td align="left" valign="top">4m30s</td>
<td align="left" valign="top">4m</td>
<td align="left" valign="top">3m30s</td>
<td align="left" valign="top">3m</td>
<td align="left" valign="top">2m30s</td>
<td align="left" valign="top">2m</td></tr>
<tr>
<td align="left" valign="top">Definition of the ortho-image from the 3D model</td>
<td align="left" valign="top">2m</td>
<td align="left" valign="top">1m47s</td>
<td align="left" valign="top">1m35s</td>
<td align="left" valign="top">1m23s</td>
<td align="left" valign="top">1m13s</td>
<td align="left" valign="top">1m2s</td>
<td align="left" valign="top">45s</td></tr>
<tr>
<td align="left" valign="top">Definition of corresponding pairs between the model and the external image</td>
<td align="left" valign="top">3m</td>
<td align="left" valign="top">3m10s</td>
<td align="left" valign="top">3m20s</td>
<td align="left" valign="top">3m30s</td>
<td align="left" valign="top">3m45s</td>
<td align="left" valign="top">4m5s</td>
<td align="left" valign="top">5m</td></tr>
<tr>
<td align="left" valign="top">New colour modification/assignation</td>
<td align="left" valign="top">1m</td>
<td align="left" valign="top">56s</td>
<td align="left" valign="top">50s</td>
<td align="left" valign="top">43s</td>
<td align="left" valign="top">35s</td>
<td align="left" valign="top">31s</td>
<td align="left" valign="top">23s</td></tr>
<tr>
<td align="left" valign="top">Filling of colour-holes</td>
<td align="left" valign="top">10m</td>
<td align="left" valign="top">9m6s</td>
<td align="left" valign="top">8m10s</td>
<td align="left" valign="top">7m15s</td>
<td align="left" valign="top">6m25s</td>
<td align="left" valign="top">5m30s</td>
<td align="left" valign="top">4m</td></tr>
<tr>
<td align="left" valign="top">Merging of colour with the whole coloured model</td>
<td align="left" valign="top">3m</td>
<td align="left" valign="top">2m40s</td>
<td align="left" valign="top">2m20s</td>
<td align="left" valign="top">2m</td>
<td align="left" valign="top">1m49s</td>
<td align="left" valign="top">1m36s</td>
<td align="left" valign="top">1m10s</td></tr></tbody></table></table-wrap></sec></back></article>
