<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing with OASIS Tables v3.0 20080202//EN" "https://jats.nlm.nih.gov/nlm-dtd/publishing/3.0/journalpub-oasis3.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:oasis="http://docs.oasis-open.org/ns/oasis-exchange/table" xml:lang="en" dtd-version="3.0" article-type="research-article">
  <front>
    <journal-meta><journal-id journal-id-type="publisher">AMT</journal-id><journal-title-group>
    <journal-title>Atmospheric Measurement Techniques</journal-title>
    <abbrev-journal-title abbrev-type="publisher">AMT</abbrev-journal-title><abbrev-journal-title abbrev-type="nlm-ta">Atmos. Meas. Tech.</abbrev-journal-title>
  </journal-title-group><issn pub-type="epub">1867-8548</issn><publisher>
    <publisher-name>Copernicus Publications</publisher-name>
    <publisher-loc>Göttingen, Germany</publisher-loc>
  </publisher></journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.5194/amt-19-5785-2026</article-id><title-group><article-title>Cloud height mapping using multi simultaneous sky images from an all-sky camera network</article-title><alt-title>Cloud height mapping using all-sky cameras</alt-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author" corresp="yes" rid="aff1 aff2">
          <name><surname>Herrero del Barrio</surname><given-names>Celia</given-names></name>
          <email>celia@goa.uva.es</email>
        <ext-link>https://orcid.org/0009-0001-9508-3886</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff2">
          <name><surname>Román</surname><given-names>Roberto</given-names></name>
          
        <ext-link>https://orcid.org/0000-0003-4889-1781</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff2">
          <name><surname>Herrero-Anta</surname><given-names>Sara</given-names></name>
          
        <ext-link>https://orcid.org/0000-0003-4246-1836</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff2">
          <name><surname>González-Fernández</surname><given-names>Daniel</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-3302-8080</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff2">
          <name><surname>Carracedo</surname><given-names>Rogelio</given-names></name>
          
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff2">
          <name><surname>González</surname><given-names>Ramiro</given-names></name>
          
        <ext-link>https://orcid.org/0000-0003-0017-5591</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff2">
          <name><surname>Gatón</surname><given-names>Javier</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-1229-155X</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff2">
          <name><surname>Longarela</surname><given-names>Bruno</given-names></name>
          
        <ext-link>https://orcid.org/0009-0005-7323-462X</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1">
          <name><surname>Antuña-Sánchez</surname><given-names>Juan Carlos</given-names></name>
          
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff2">
          <name><surname>Mateos</surname><given-names>David</given-names></name>
          
        <ext-link>https://orcid.org/0000-0001-5540-4721</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff2">
          <name><surname>Toledano</surname><given-names>Carlos</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-6890-6648</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff2">
          <name><surname>Calle</surname><given-names>Abel</given-names></name>
          
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff2">
          <name><surname>Cachorro</surname><given-names>Victoria</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-4627-9444</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff2">
          <name><surname>de Frutos</surname><given-names>Ángel</given-names></name>
          
        </contrib>
        <aff id="aff1"><label>1</label><institution>Group of Atmospheric Optics (GOA-UVa), Universidad de Valladolid, 47011, Valladolid, Spain</institution>
        </aff>
        <aff id="aff2"><label>2</label><institution>Laboratory of Disruptive Interdisciplinary Science (LaDIS), Valladolid, Spain</institution>
        </aff>
      </contrib-group>
      <author-notes><corresp id="corr1">Celia Herrero del Barrio (celia@goa.uva.es)</corresp></author-notes><pub-date><day>14</day><month>September</month><year>2026</year></pub-date>
      
      <volume>19</volume>
      <issue>17</issue>
      <fpage>5785</fpage><lpage>5814</lpage>
      <history>
        <date date-type="received"><day>11</day><month>May</month><year>2026</year></date>
           <date date-type="rev-request"><day>21</day><month>May</month><year>2026</year></date>
           <date date-type="rev-recd"><day>23</day><month>July</month><year>2026</year></date>
           <date date-type="accepted"><day>24</day><month>August</month><year>2026</year></date>
      </history>
      <permissions>
        <copyright-statement>Copyright: © 2026 Celia Herrero del Barrio et al.</copyright-statement>
        <copyright-year>2026</copyright-year>
      <license license-type="open-access"><license-p>This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this licence, visit <ext-link ext-link-type="uri" xlink:href="https://creativecommons.org/licenses/by/4.0/">https://creativecommons.org/licenses/by/4.0/</ext-link></license-p></license></permissions><self-uri xlink:href="https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026.html">This article is available from https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026.html</self-uri><self-uri xlink:href="https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026.pdf">The full text article is available as a PDF file from https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026.pdf</self-uri>
      <abstract><title>Abstract</title>

      <p id="d2e207">This study presents a refined, automated in near-real time methodology to obtain cloud height maps using a network of 20 all-sky cameras. This low-cost and easily manipulated instruments are distributed in the city of Valladolid, Spain, trying to cover uniformly an estimated area up to 200 <inline-formula><mml:math id="M1" display="inline"><mml:mrow class="unit"><mml:msup><mml:mi mathvariant="normal">km</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>, with the actual spatial coverage depending on cloud height. Camera distances vary from more than 50 <inline-formula><mml:math id="M2" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> to less than 200 <inline-formula><mml:math id="M3" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula>, in order to have different viewing angles of the clouds above them. All these cameras are geometrically calibrated and maintained within GOA-SCAN (Group of Atmospheric Optics all-Sky CAmeras Network). The methodology utilizes a stereoscopic approach, pairing simultaneous images from all the cameras. Correlation between the image pixels is computed in order to find the same sky point in both images. Then knowing the baseline distance and the orientation of the cameras, the height of every pixel identified as cloudy is computed. This is repeated for all the camera pairs that have a significant overlapping field of view. Filtering criteria are applied to retain only the significant values. With this methodology, cloud base and top heights (CBH and CTH) maps with a 50 <inline-formula><mml:math id="M4" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> spatial resolution are obtained every five minutes during daytime and every two minutes for nighttime. These maps are compared with the scene classification product from Sentinel-2 satellite images, finding significant agreement. Some discrepancies were found for high transparent clouds and cloud edges. In addition, all CBH and CTH data available during two and a half years are compared against the independent values measured by a ceilometer collocated with one of the cameras. The determination coefficient for the median CBH values within a circular 150 <inline-formula><mml:math id="M5" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> distance is 0.93. The obtained CTH values tend to overestimate the ceilometer ones and have wider dispersion, with lower determination coefficient of 0.72. Illuminating conditions are crucial for the correct segmentation of cloudy pixels, limiting the performance of the algorithm at nighttime. Overall, the proposed methodology is promising for obtaining cloud spatial masks and cloud height maps, over different cloud types, layering and conditions.</p>
  </abstract>
    
<funding-group>
<award-group id="gs1">
<funding-source>Ministerio de Ciencia e Innovación</funding-source>
<award-id>PID2024-157697OB- I00</award-id>
<award-id>ED2021-131211B-I00375</award-id>
<award-id>10 101131631</award-id>
</award-group>
<award-group id="gs2">
<funding-source>European Commission</funding-source>
<award-id>NTERREG-SUDOE; S2/2.4/F0327)</award-id>
</award-group>
<award-group id="gs3">
<funding-source>Consejería de Educación, Junta de Castilla y León</funding-source>
<award-id>CLU-2023-1-05</award-id>
</award-group>
</funding-group>
</article-meta>
  </front>
<body>
      

<sec id="Ch1.S1" sec-type="intro">
  <label>1</label><title>Introduction</title>
      <p id="d2e262">It is estimated that approximately 67 <inline-formula><mml:math id="M6" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula> of the Earth is continuously covered by clouds <xref ref-type="bibr" rid="bib1.bibx25" id="paren.1"/>; therefore they play a key role in Earth's energy budget. Clouds, mainly formed by liquid water and ice crystals, reflect and absorb part of solar and thermal radiation; hence, they regulate the distribution of the radiative energy in the Earth-atmosphere system, modulating big scale atmospheric dynamics but also small scale regional processes <xref ref-type="bibr" rid="bib1.bibx19" id="paren.2"/>. In recent years, this topic has attracted particular interest due to the considerable uncertainty that remains in cloud–atmosphere feedbacks <xref ref-type="bibr" rid="bib1.bibx23" id="paren.3"/>. Estimations of cloud vertical structure, specifically cloud base height (CBH) and cloud top height (CTH), are essential for studying the radiative effect of clouds, as properties such as radiative forcing or heating rates are highly height dependent <xref ref-type="bibr" rid="bib1.bibx46" id="paren.4"/>. Cloud height estimations serves as well as a fundamental physical constraint for cloud typing <xref ref-type="bibr" rid="bib1.bibx21" id="paren.5"/>. </p>
      <p id="d2e290">Cloud height mapping is interesting for all the aforementioned reasons, but it also has other applications. Knowing CBH with spatial resolution can also be very useful for cloud monitoring, as it helps to understand formation and dissipation processes, as well as the evolution of clouds under different regimes <xref ref-type="bibr" rid="bib1.bibx44" id="paren.6"/>. This is particularly important for climate and weather prediction models. Another application is solar nowcasting, which requires capturing the high spatio-temporal variability of cloudiness to predict the solar energy budget in near-real time <xref ref-type="bibr" rid="bib1.bibx11" id="paren.7"/>. Accurate short-term cloudiness forecasting combined with detailed information on the 3D cloud field have been proven essential for the integration of renewable energy into power grids, as it allows for the prediction of irradiance fluctuations and ramp-rate events, thereby facilitating more efficient plant management and grid stability <xref ref-type="bibr" rid="bib1.bibx17 bib1.bibx37 bib1.bibx38" id="paren.8"/>. These estimations are also crucial for other issues related to visibility, particularly in aviation but also for monitoring local atmospheric conditions that affect road and maritime transport, as well as for civil protection in adverse weather situations <xref ref-type="bibr" rid="bib1.bibx24" id="paren.9"/>.</p>
      <p id="d2e305">Several remote sensing techniques are currently employed to estimate cloud base height. Ground based ceilometers and lidars offer high temporal resolution as they provide continuous and reliable direct measurements of CBH; however, these instruments are limited to a narrow field of view, generally measuring only at the zenith, lacking spatial resolution <xref ref-type="bibr" rid="bib1.bibx12" id="paren.10"/>. Another ground based instrument is the cloud radar, which can retrieve more detailed cloud microphysical properties and reconstruct the cloud field by scanning the sky <xref ref-type="bibr" rid="bib1.bibx26" id="paren.11"/>. However, the minimum time required to complete a 360° sweep limits the ability to describe a cloud field in real time <xref ref-type="bibr" rid="bib1.bibx7" id="paren.12"/>. These systems also involve high operational complexity and cost. On the other hand, satellites provide global coverage and information on cloud masks and CTH, but retrieving CBH requires additional assumptions <xref ref-type="bibr" rid="bib1.bibx49" id="paren.13"/>. Although satellite observations have an extensive global coverage, the temporal and spatial resolution of this data is often insufficient for short-term applications or regional studies <xref ref-type="bibr" rid="bib1.bibx18 bib1.bibx34" id="paren.14"/>. Also, satellite based cloud retrievals often face challenges in accurately identifying cloud shadows <xref ref-type="bibr" rid="bib1.bibx48" id="paren.15"/>, and in resolving the 3D structure of clouds, which can lead to significant uncertainties <xref ref-type="bibr" rid="bib1.bibx47" id="paren.16"/>.</p>
      <p id="d2e330">In this framework, the use of all-sky cameras has increased as these cost effective instruments are relatively simple and accessible technology, have low maintenance requirements, and ease of deployment compared to active remote sensing instruments such as lidars and cloud radars, while still providing valuable scientific information for monitoring cloud properties such as cloud cover, cloud type or cloud modification factor among others <xref ref-type="bibr" rid="bib1.bibx9 bib1.bibx27 bib1.bibx16" id="paren.17"/>. In addition, all-sky cameras have a wide field of view, providing sky images with information of the spatial cloud field with high temporal resolution. These characteristics make them particularly attractive for operational applications such as solar nowcasting in urban environments and over distributed solar power plants <xref ref-type="bibr" rid="bib1.bibx40" id="paren.18"/>. While a single all-sky camera can effectively localize the relative position of clouds within an image <xref ref-type="bibr" rid="bib1.bibx2" id="paren.19"/>, it lacks the inherent capability of a lidar or ceilometer to measure vertical distance, nor can it provide the absolute geographic coordinates typical of satellite data. However, this limitation can be overcome by multi-camera setups. Using stereoscopic techniques with two or more synchronized devices, it is possible to triangulate the three-dimensional geometry of cloud fields. This approach not only yields cloud height estimations but also determines cloud spatial positioning, providing a complete picture of their extent.</p>
      <p id="d2e343"><xref ref-type="bibr" rid="bib1.bibx33" id="text.20"/> attempted to obtain the CBH from two daytime images taken by a pair of all-sky cameras, located 1230 <inline-formula><mml:math id="M7" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> apart, using two different methods. Both approaches used a cloud mask filter based on the saturation channel of the RGB images to remove the cloud-free and sun pixels. The first method was bidimensional and used the georeferenced projection of the images at different hypothetical heights. The mean bias error of the overlapping pixels was computed, and the height that minimizes this error was selected as the CBH. This method was proven to produce root mean square errors of less than 400 <inline-formula><mml:math id="M8" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> when compared with a ceilometer, and the computational time cost was minimal (2 <inline-formula><mml:math id="M9" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula> per image). However, it did not provide information about different cloud layers, as only a single height value was obtained for the entire layer. The second proposed method was based on epipolar geometry and tried to find the cloud pixel seen in one of the images in the projection of the line joining the center of the camera and that pixel to the other camera image. This method provided three-dimensional information about the clouds, but it had some difficulty with the homogeneous central part of the clouds due to spurious pixel correlation. To address this issue, the reversed process of computing the epipolar line in the other camera was attempted. However, this resulted in a high computational cost. As a potential improvement, the authors suggested incorporating the correlation values of neighbour pixels along the epipolar line to refine the matching process and reduce ambiguities.</p>
      <p id="d2e372"><xref ref-type="bibr" rid="bib1.bibx4" id="text.21"/> proposed another approach to the three-dimensional reconstruction of the clouds during daytime also using a pair of all-sky cameras. Provided the calibration parameters of the cameras it is possible to align the images of both cameras with respect to their baseline so that the epipolar lines matches the rows of the images. This improves the computational cost, as it is only necessary to search in the same row for correlation of one pixel. In order to improve the sensitivity, the comparison was not done pixel by pixel but in small blocks that tried to avoid multiple matching and reduce noise problems. The authors pointed out the potential of this method for the study of convective clouds but the limitation of the retrieval to 5–6 <inline-formula><mml:math id="M10" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> cloud heights due to the short baseline distance between the used cameras (330 <inline-formula><mml:math id="M11" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula>), and suggested the implementation of a third camera in order to make a more robust analysis.</p>
      <p id="d2e393">A similar approach was proposed by <xref ref-type="bibr" rid="bib1.bibx13" id="text.22"/>, using two all-sky cameras situated 150 <inline-formula><mml:math id="M12" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> apart and aligned in the same horizontal plane. After correcting for fish-eye lens distortion using a laboratory calibration method <xref ref-type="bibr" rid="bib1.bibx43" id="paren.23"/>, the two images were matched using differentiated elements in the images, such as borders or textures, via the Scale Invariant Feature Transform (SIFT) algorithm <xref ref-type="bibr" rid="bib1.bibx29" id="paren.24"/>. Using the paired points and epipolar geometry, the essential matrix was computed by the least median of squares method. This matrix contains information about the orientation and relative position of the cameras. It is therefore possible to obtain the rotation and translation matrices that enable the alignment of the two camera images by their rows. Once the images were aligned, a block-matching procedure was used to correlate two pixels from the same row, obtaining a matrix of horizontal displacements and finally the cloud heights. In order to smooth the results, the image was reduced and blue sky filtering was applied. Additionally, they used a segmentation algorithm to isolate individual cumulus clouds and georeference them. The results were compared with the daytime measurements of a ceilometer, which found limitations for high clouds due to the small baseline of the cameras.</p>
      <p id="d2e413">Later on, <xref ref-type="bibr" rid="bib1.bibx6" id="text.25"/> applied a similar methodology to a network of all-sky cameras. They deployed seven cameras separated by distances ranging from 1.6 to 15 <inline-formula><mml:math id="M13" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>, taking images simultaneously every 30 <inline-formula><mml:math id="M14" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula> during daytime. Each image was projected onto a horizontal plane, and the difference in the red image component between two consecutive images was analyzed to identify features such as cloud edges, which appear as intensity changes. These features were then searched for in the images of the other cameras, combining them in pairs and applying a cross-correlation method that looks for the maximum correlation of a pixel window along the epipolar line. They used four different ceilometers to validate and correct their CBH estimations during three months period. That information was used to build probabilistic distributions, which allowed combining all the pairs' information, minimizing bias and measurement errors, and optimizing the importance of the camera distance for different cloud height ranges. Using these coefficients, each camera pair produced a CBH estimate, which was then evaluated through the probabilistic distributions, yielding the most likely cloud height as a combination of the information of all the pairs. This methodology demonstrated that the network provides better results than any individual pair, and particularly improves the estimation of high clouds compared with previous approaches.</p>
      <p id="d2e435">Regarding the three-dimensional reconstruction of cloud fields, <xref ref-type="bibr" rid="bib1.bibx35" id="text.26"/> evaluated three different methods. The first approach employed four all-sky cameras separated by distances ranging from 495 to 891 <inline-formula><mml:math id="M15" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula>, taking images every 30 <inline-formula><mml:math id="M16" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula> during daytime. The four images acquired simultaneously were projected into a predefined voxel space, and the intersection of the projected rays defined the possible cloud volumes. This approach strongly depended on the accuracy of cloud-pixel segmentation, and since no stereoscopic correlation was applied, large dispersions and uncertainties were observed. The second method used a pair of cameras placed 500 <inline-formula><mml:math id="M17" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> apart. After geometric calibration, the hemispheric images were projected onto an orthogonal horizontal plane. Using stereoscopy, pixels in both images were correlated by block-matching, and the displacement between corresponding pixels was converted into cloud height estimates. Although this method was computationally efficient, it produced inaccurate results for high clouds. Finally, a hybrid approach combining both methods was analyzed, leading to a more consistent three-dimensional reconstruction of the clouds but more computationally demanding.</p>
      <p id="d2e465">All this framework motivates the main goal of this work: to develop and test a refined methodology for estimating cloud height maps that can be easily implemented at a reasonable computational cost in a network of all-sky cameras. In this sense, another objective is to demonstrate that this methodology can be automated and scaled up for any location and number of cameras. This paper is structured as follows: Sect. 2 presents the technical characteristics of the instrumentation used, as well as the description of the all-sky camera network in Valladolid. Section 3 explains in detail the methodology developed to obtain the cloud heights. Section 4 presents the results obtained for different cloud scenarios, as well as a comparison with the Sentinel-2 cloud mask and the CBH obtained with a ceilometer. Finally, Sect. 5 summarizes the main conclusions of this work.</p>
</sec>
<sec id="Ch1.S2">
  <label>2</label><title>Instrumentation and data</title>
<sec id="Ch1.S2.SS1">
  <label>2.1</label><title>All-sky camera network</title>
      <p id="d2e483">The all-sky cameras that form the network used in this work, are mainly installed in  Valladolid (Spain), a city located in the north-central region of the Iberian Peninsula, with approximately 400 000 inhabitants including the metropolitan area <xref ref-type="bibr" rid="bib1.bibx22" id="paren.27"/>, surrounded by rural area. The prevailing climate is continental, characterized by dry and hot summers and cold winters <xref ref-type="bibr" rid="bib1.bibx5" id="paren.28"/>. Cloud conditions for Valladolid site show the lowest radiative impact during winter due to the lower solar zenith angle and the prevalence of thinner cloud layers like fog, compared to the thick convective clouds of spring <xref ref-type="bibr" rid="bib1.bibx32" id="paren.29"/>.</p>
      <p id="d2e495">The mentioned network is called PRESENTE as it was developed thanks to a project of the same name. It can be considered as a sub-network within GOA-SCAN (GOA all-Sky CAmeras Network), a bigger all-sky camera network managed by the Group of Atmospheric Optics from the University of Valladolid (GOA-UVa). The PRESENTE network is currently formed by 20 all-sky camera stations (as of February 2026), deployed on public buildings across the city (schools, high schools, university faculties, community centers, among others). The distribution of the stations tries to cover a wide variety of camera distances from more than 50 <inline-formula><mml:math id="M18" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> to less than 200 <inline-formula><mml:math id="M19" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula>, in order to have different viewing angles of the clouds above them. Two extra cameras are deployed outside the city at 40 and 25 <inline-formula><mml:math id="M20" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>, in order to assess the capability of the system to retrieve really high clouds (see locations in Fig. <xref ref-type="fig" rid="F1"/> and coordinates in Table <xref ref-type="table" rid="T1"/>).</p>

      <fig id="F1" specific-use="star"><label>Figure 1</label><caption><p id="d2e528">Location of the all-sky cameras of the PRESENTE network. GOA-SCAN identifier for each station can be found in Table <xref ref-type="table" rid="T1"/>. Base map: CARTO Positron, data © OpenStreetMap contributors.</p></caption>
          <graphic xlink:href="https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026-f01.png"/>

        </fig>

<table-wrap id="T1" specific-use="star"><label>Table 1</label><caption><p id="d2e543">Details of PRESENTE all-sky camera network. Each instrument is identified by its ID in GOA-SCAN, the installation date and its coordinates. All the installations have been selected in public buildings. CEIP, IES, CEE and CC are the Spanish acronym for public school, public high school, special education school and community center, respectively. All the faculties buildings belong to the University of Valladolid. ITACYL stands for Agricultural Technology Institute of Castilla y León. AEMet CyL refers to territorial delegation of the state meteorological agency and CIBA is the Research Center for the Lower Atmosphere, managed by the University of Valladolid as well.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="6">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="left"/>
     <oasis:colspec colnum="3" colname="col3" align="left"/>
     <oasis:colspec colnum="4" colname="col4" align="center"/>
     <oasis:colspec colnum="5" colname="col5" align="center"/>
     <oasis:colspec colnum="6" colname="col6" align="center"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Camera ID</oasis:entry>
         <oasis:entry colname="col2">Installation date</oasis:entry>
         <oasis:entry colname="col3">Site</oasis:entry>
         <oasis:entry colname="col4">Latitude (° N)</oasis:entry>
         <oasis:entry colname="col5">Longitude (° W)</oasis:entry>
         <oasis:entry colname="col6">Elevation (<inline-formula><mml:math id="M21" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">a</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">s</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">l</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:math></inline-formula>)</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">C013</oasis:entry>
         <oasis:entry colname="col2">27 June 2023</oasis:entry>
         <oasis:entry colname="col3">Faculty of Sciences</oasis:entry>
         <oasis:entry colname="col4">41.66344</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M22" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.70555</oasis:entry>
         <oasis:entry colname="col6">710</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">C014</oasis:entry>
         <oasis:entry colname="col2">23 January 2024</oasis:entry>
         <oasis:entry colname="col3">CEIP El Peral</oasis:entry>
         <oasis:entry colname="col4">41.61539</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M23" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.75537</oasis:entry>
         <oasis:entry colname="col6">692</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">C015</oasis:entry>
         <oasis:entry colname="col2">27 July 2023</oasis:entry>
         <oasis:entry colname="col3">IES Diego de Praves</oasis:entry>
         <oasis:entry colname="col4">41.64983</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M24" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.70109</oasis:entry>
         <oasis:entry colname="col6">710</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">C016</oasis:entry>
         <oasis:entry colname="col2">20 September 2023</oasis:entry>
         <oasis:entry colname="col3">IES José Jimenez Lozano</oasis:entry>
         <oasis:entry colname="col4">41.63251</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M25" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.76447</oasis:entry>
         <oasis:entry colname="col6">731</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">C017</oasis:entry>
         <oasis:entry colname="col2">8 November 2023</oasis:entry>
         <oasis:entry colname="col3">Faculty of Architecture</oasis:entry>
         <oasis:entry colname="col4">41.65021</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M26" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.74090</oasis:entry>
         <oasis:entry colname="col6">705</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">C018</oasis:entry>
         <oasis:entry colname="col2">30 January 2024</oasis:entry>
         <oasis:entry colname="col3">IESO Arroyo de la Encomienda</oasis:entry>
         <oasis:entry colname="col4">41.62182</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M27" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.78707</oasis:entry>
         <oasis:entry colname="col6">724</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">C019</oasis:entry>
         <oasis:entry colname="col2">22 January 2024</oasis:entry>
         <oasis:entry colname="col3">CC Santovenia</oasis:entry>
         <oasis:entry colname="col4">41.69261</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M28" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.68823</oasis:entry>
         <oasis:entry colname="col6">703</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">C020</oasis:entry>
         <oasis:entry colname="col2">6 March 2024</oasis:entry>
         <oasis:entry colname="col3">CEIP Gonzalo de Berceo</oasis:entry>
         <oasis:entry colname="col4">41.66401</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M29" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.72373</oasis:entry>
         <oasis:entry colname="col6">701</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">C021</oasis:entry>
         <oasis:entry colname="col2">7 February 2024</oasis:entry>
         <oasis:entry colname="col3">CEIP Puente de Simancas</oasis:entry>
         <oasis:entry colname="col4">41.58794</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M30" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.82042</oasis:entry>
         <oasis:entry colname="col6">686</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">C022</oasis:entry>
         <oasis:entry colname="col2">28 February 2024</oasis:entry>
         <oasis:entry colname="col3">CEIP Violeta Monreal</oasis:entry>
         <oasis:entry colname="col4">41.65140</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M31" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.77634</oasis:entry>
         <oasis:entry colname="col6">700</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">C023</oasis:entry>
         <oasis:entry colname="col2">18 March 2024</oasis:entry>
         <oasis:entry colname="col3">ITACyL</oasis:entry>
         <oasis:entry colname="col4">41.70242</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M32" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.70854</oasis:entry>
         <oasis:entry colname="col6">711</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">C024</oasis:entry>
         <oasis:entry colname="col2">15 March 2024</oasis:entry>
         <oasis:entry colname="col3">Faculty of Agricultural Engineering</oasis:entry>
         <oasis:entry colname="col4">41.98747</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M33" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.51697</oasis:entry>
         <oasis:entry colname="col6">749</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">C025</oasis:entry>
         <oasis:entry colname="col2">29 April 2024</oasis:entry>
         <oasis:entry colname="col3">CEIP Antonio Allue</oasis:entry>
         <oasis:entry colname="col4">41.63103</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M34" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.72546</oasis:entry>
         <oasis:entry colname="col6">701</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">C026</oasis:entry>
         <oasis:entry colname="col2">4 June 2024</oasis:entry>
         <oasis:entry colname="col3">Faculty of Economics</oasis:entry>
         <oasis:entry colname="col4">41.65858</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M35" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.70977</oasis:entry>
         <oasis:entry colname="col6">702</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">C027</oasis:entry>
         <oasis:entry colname="col2">24 October 2024</oasis:entry>
         <oasis:entry colname="col3">Faculty of Law</oasis:entry>
         <oasis:entry colname="col4">41.65194</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M36" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.72138</oasis:entry>
         <oasis:entry colname="col6">712</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">C028</oasis:entry>
         <oasis:entry colname="col2">19 February 2025</oasis:entry>
         <oasis:entry colname="col3">CEE No1</oasis:entry>
         <oasis:entry colname="col4">41.61354</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M37" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.75351</oasis:entry>
         <oasis:entry colname="col6">695</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">C029</oasis:entry>
         <oasis:entry colname="col2">26 February 2025</oasis:entry>
         <oasis:entry colname="col3">CEIP Joaquin Diaz</oasis:entry>
         <oasis:entry colname="col4">41.60789</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M38" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.68648</oasis:entry>
         <oasis:entry colname="col6">733</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">C030</oasis:entry>
         <oasis:entry colname="col2">25 September 2025</oasis:entry>
         <oasis:entry colname="col3">Faculty of Education</oasis:entry>
         <oasis:entry colname="col4">41.66253</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M39" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.70753</oasis:entry>
         <oasis:entry colname="col6">710</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">C031</oasis:entry>
         <oasis:entry colname="col2">29 October 2025</oasis:entry>
         <oasis:entry colname="col3">CIBA</oasis:entry>
         <oasis:entry colname="col4">41.81401</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M40" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.93239</oasis:entry>
         <oasis:entry colname="col6">852</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">C036</oasis:entry>
         <oasis:entry colname="col2">25 February 2026</oasis:entry>
         <oasis:entry colname="col3">AEMet CyL</oasis:entry>
         <oasis:entry colname="col4">41.64102</oasis:entry>
         <oasis:entry colname="col5"><inline-formula><mml:math id="M41" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>4.75391</oasis:entry>
         <oasis:entry colname="col6">743</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

      <p id="d2e1176">The all-sky camera model of the PRESENTE network is the OMEA-3C-TF a modified version of the OMEA-3C camera manufactured by <italic>Alcor Systems</italic> <xref ref-type="bibr" rid="bib1.bibx41" id="paren.30"/>. This camera is formed by a SONY IMX178 CMOS sensor with a fisheye lens, both encapsulated in a weatherproof case with a BK7 glass dome on top, including a heating system to avoid water condensation <xref ref-type="bibr" rid="bib1.bibx16" id="paren.31"/>. The sensor has three RGB filters (Red, Green and Blue) arranged in a RGGB Bayer pattern mosaic and a triband filter over the sensor (instead of an infrared cutting-off filter like in the OMEA-3C model) in order to reduce the spectral width of each color channel <xref ref-type="bibr" rid="bib1.bibx41" id="paren.32"/>.</p>
      <p id="d2e1191">These cameras are operated through an external computer placed inside a weatherproof outdoor box. These computers run the <italic>GOA OMEA-Capture</italic> software <xref ref-type="bibr" rid="bib1.bibx41" id="paren.33"/>, which handles camera configuration, image acquisition, downloading, processing, and data transfer. Following the GOA-SCAN protocols, the PRESENTE instruments are set up to capture a set of multi-exposure raw sky images every five minutes during the daytime and every two minutes at nighttime, which is considered when the solar zenith angle (SZA) is above 97°. For the OMEA-3C-TF model, exposure times are specifically adjusted. At night (<inline-formula><mml:math id="M42" display="inline"><mml:mrow><mml:mtext>SZA</mml:mtext><mml:mo>&gt;</mml:mo><mml:mn mathvariant="normal">97</mml:mn><mml:mi mathvariant="italic">°</mml:mi></mml:mrow></mml:math></inline-formula>), the camera uses, in addition to an ISO amplification set to a gain of 150, a multi-exposure sequence of 1, 5, 10, 20, and 30 <inline-formula><mml:math id="M43" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula> for moonlit nights (when the Moon is between the first and third quarters and the Moon zenith angle below 80°), and 3, 6, 12, 24, and 48 <inline-formula><mml:math id="M44" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula> under moonless conditions. During the day, the sequences depend on SZA: from 0 to 35<inline-formula><mml:math id="M45" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">°</mml:mi></mml:mrow></mml:math></inline-formula>, the times are 214, 356, 640, 1208, and 2344 <inline-formula><mml:math id="M46" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">µ</mml:mi><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula>; from 35 to 75<inline-formula><mml:math id="M47" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">°</mml:mi></mml:mrow></mml:math></inline-formula>, a 4616 <inline-formula><mml:math id="M48" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">µ</mml:mi><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula> exposure is added; and finally from 75 to 88<inline-formula><mml:math id="M49" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">°</mml:mi></mml:mrow></mml:math></inline-formula>, a 9160 <inline-formula><mml:math id="M50" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">µ</mml:mi><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula> exposure is included <xref ref-type="bibr" rid="bib1.bibx41" id="paren.34"/>. These different SZA intervals are set to best adjust to different illumination conditions, also distinguishing fast changes during twilight. To optimize storage without losing coverage of the full sky, the captured images are cropped to <inline-formula><mml:math id="M51" display="inline"><mml:mrow><mml:mn mathvariant="normal">2000</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">2000</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mrow class="unit"><mml:mi mathvariant="normal">pixels</mml:mi></mml:mrow></mml:mrow></mml:math></inline-formula> and saved in raw format (14-bit stored in 16-bit format, without demosaicing or white-balance corrections). Each image sequence is stored in a single Hierarchical Data Format version 5 (HDF5) file that also contains the associated metadata. The software is designed to automatically send these files to the GOA-SCAN servers, where they are processed into 8-bits RGB High Dynamic Range (HDR) color images <xref ref-type="bibr" rid="bib1.bibx1 bib1.bibx41" id="paren.35"/>. These HDR images are then published on the GOA-UVa website, which provides continuous updates from each station in the network (<uri>https://goa.uva.es/proyecto-presente/</uri>, last access:  9 September 2026). In this work, all references in the methodology to all-sky images refer to HDR images.</p>
      <p id="d2e1311">Each GOA-SCAN camera is carefully leveled to face the zenith and geometrically calibrated. This calibration is done with the ORION software <xref ref-type="bibr" rid="bib1.bibx1" id="paren.36"/>. This calibration involves identifying the positions of several stars in a set of cloud-free nighttime images, and relating their measured pixel coordinates to their known astronomical coordinates. Using this information, the software reconstructs the camera's pointing geometry by estimating the image center (sky zenith), the azimuthal offset with respect to image north, and the polynomial relationship between radial pixel distance and zenith angle. The resulting calibration matrices allow the precise mapping of any pixel to its corresponding viewing direction (zenith and azimuth coordinates). The GOA-SCAN cameras are subject to regular maintenance, which includes cleaning and inspection and a new geometric calibration is carried out whenever the camera is moved or its orientation shifts, even slightly <xref ref-type="bibr" rid="bib1.bibx41" id="paren.37"/>.</p>
      <p id="d2e1320">In addition, a semantic segmentation model developed by GOA-UVa and described by <xref ref-type="bibr" rid="bib1.bibx15" id="text.38"/> has been used to provide a segmented sky mask for identifying cloudy pixels in each sky image. This model is named “GOA-UVa All-Sky Segmentation U-Net Model” and it is available in <xref ref-type="bibr" rid="bib1.bibx42" id="text.39"/>. The model segments into five semantic classes: cloud-free, cloud, thin cloud, sun or other. Validation results from  <xref ref-type="bibr" rid="bib1.bibx15" id="text.40"/> showed that it achieves a recall of 87 <inline-formula><mml:math id="M52" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula> in the class non-thin clouds and 96 <inline-formula><mml:math id="M53" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula> in the class clear skies. This model was developed for daytime images, but is also used for nighttime images in this work.</p>
</sec>
<sec id="Ch1.S2.SS2">
  <label>2.2</label><title>Ceilometer</title>
      <p id="d2e1356">Ceilometers are single-wavelength lidar-based instruments designed to continuously monitor the vertical structure of the lower atmosphere and widely used to determine the CBH. They operate by emitting short laser pulses upward and measuring the backscattered signal returned by aerosols, cloud droplets, and other atmospheric constituents <xref ref-type="bibr" rid="bib1.bibx20" id="paren.41"/>. The CBH is generally estimated as the height for the local maxima in the backscatter signal or in its vertical gradient, allowing the detection of one or multiple cloud layers depending on atmospheric conditions <xref ref-type="bibr" rid="bib1.bibx31" id="paren.42"/>. The ceilometer model used in this study is a Lufft CHM15k-Nimbus, which operates with a pulsed 1064 <inline-formula><mml:math id="M54" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">nm</mml:mi></mml:mrow></mml:math></inline-formula> Nd:YAG laser and provides continuous vertical backscatter profiles at 15 <inline-formula><mml:math id="M55" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> resolution up to 15 <inline-formula><mml:math id="M56" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> above ground level (a.g.l.). Two different instruments are used, one installed on the same rooftop as the C013 camera, and the other one at CIBA location as the C031 camera (see Table <xref ref-type="table" rid="T1"/>). Both are part of the ICENet network, and their data are calibrated and processed following ICENet operational protocols <xref ref-type="bibr" rid="bib1.bibx10" id="paren.43"/>. These instruments are configured to provide a range-corrected signal every 15 <inline-formula><mml:math id="M57" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula>. They can provide CBH and cloud penetration depth (CPD) products at three different height levels with the same temporal resolution. From these parameters, the CTH can be estimated by adding the CPD to the CBH at each corresponding level. However, according to the manufacturer's specifications <xref ref-type="bibr" rid="bib1.bibx30" id="paren.44"/>, the CPD represents the depth into the cloud at which the laser signal is fully attenuated. Therefore, CTH values calculated this way are only fully reliable if the ceilometer detects an additional cloud layer above the current one, which guarantees that the laser has completely penetrated the first layer. In many cases, especially with low and dense clouds, the signal may be extinguished before reaching the actual top or any higher layers. In such instances, the CPD does not represent the total cloud thickness, and the resulting CTH must be handled with caution as it likely underestimates the real cloud top.</p>
</sec>
<sec id="Ch1.S2.SS3">
  <label>2.3</label><title>Satellite imagery</title>
      <p id="d2e1414">The Sentinel-2 mission, part of the European Space Agency (ESA) Copernicus Programme, provides high-resolution optical imagery for monitoring land and coastal environments. It is composed of two identical satellites, Sentinel-2A and Sentinel-2B, which fly in the same sun-synchronous orbit separated by 180°. Together, they achieve a swath width of 290 <inline-formula><mml:math id="M58" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> and a revisit frequency of approximately five days under identical viewing geometry; in higher latitudes or overlapping orbits, this frequency can increase <xref ref-type="bibr" rid="bib1.bibx36" id="paren.45"/>.</p>
      <p id="d2e1428">Each satellite carries a MultiSpectral Instrument (MSI) that records reflected solar radiation in 13 spectral bands spanning from the visible and near-infrared (VNIR) to the shortwave infrared (SWIR) regions. The data are provided at three spatial resolutions: 10 <inline-formula><mml:math id="M59" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> for four bands, 20 <inline-formula><mml:math id="M60" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> for six bands, and 60 <inline-formula><mml:math id="M61" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> for three bands. The 60 <inline-formula><mml:math id="M62" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> bands are primarily designed for atmospheric correction and cloud detection operations <xref ref-type="bibr" rid="bib1.bibx14" id="paren.46"/>. The Sentinel-2 true color product is generated by directly mapping the reflectances of bands B4 (red), B3 (green), and B2 (blue) into an RGB image <xref ref-type="bibr" rid="bib1.bibx45" id="paren.47"/>.</p>
      <p id="d2e1470">The Scene Classification Layer (SCL) product, provides a per-pixel mask with 60 <inline-formula><mml:math id="M63" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> resolution that efficiently detects clouds, snow, and cloud shadows, producing a classification map that includes four cloud-related classes (including cirrus) and six surface classes (shadows, vegetation, bare soil/desert, water, and snow). It operates on Level-1C Top-of-Atmosphere (TOA) reflectances at 60 <inline-formula><mml:math id="M64" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> resolution and generates additional quality indicators expressing the probability of cloud or snow occurrence. To optimize performance for operational processing, the algorithm relies on a sequential filtering approach that combines spectral thresholds, band ratios, and normalized indices such as NDVI and NDSI to identify potential cloudy pixels. These pixels undergo successive spectral tests in which the cloud probability is iteratively updated, ranging from 0 (high-confidence cloudless sky) to 1 (high-confidence cloud). The sequence terminates when the probability drops to zero, classifying the pixel as cloud-free. This probabilistic framework allows the algorithm to be computationally efficient and robust under varying illumination and atmospheric conditions. A self-organizing neural network (SOM) is also used in later steps to refine cloud and shadow classification. This classification is introduced into Sen2Cor processing chain, which performs the atmospheric correction used to generate level-2A products <xref ref-type="bibr" rid="bib1.bibx39" id="paren.48"/>. In this work, the Sentinel-2 true color and SCL products corresponding to tile 30TUM, defined within the Military Grid Reference System (MGRS) and covering the Valladolid region, have been downloaded from the Copernicus Data Space Ecosystem.</p>
</sec>
</sec>
<sec id="Ch1.S3">
  <label>3</label><title>Methodology</title>
      <p id="d2e1501">This section describes the proposed methodology for computing the cloud heights maps (specifically CBH and CTH) from the simultaneous all-sky images, from the mentioned PRESENTE network, captured at a given time. The procedure for image processing, cloud height computation, and cloud height map generation is explained. This algorithm can be implemented continuously to process the pictures taken by all the all-sky cameras of the network. It is important to remark that by using various camera pairs with different baselines, the system captures parts of the vertical cloud structure, enabling the retrieval of both CBH and CTH. For each grid bin, the minimum and maximum retrieved cloud heights are assigned to CBH and CTH, respectively. It should be noted, however, that cameras observe clouds from the surface; consequently, CTH calculation is expected to be less accurate and precise than CBH, as the top part of the clouds is often obstructed by the cloud layer itself and is only visible from a few viewing angles.</p>
<sec id="Ch1.S3.SS1">
  <label>3.1</label><title>Two images approach</title>
<sec id="Ch1.S3.SS1.SSS1">
  <label>3.1.1</label><title>Image rectification</title>
      <p id="d2e1519">To enable the inter comparison of fisheye images, the following procedure is implemented. First, a camera from the network is chosen as the reference camera and its image is paired with the corresponding image captured by another camera. For clarity, this second camera is denoted as the auxiliary camera in this description.</p>
      <p id="d2e1522">The Sun and surrounding objects, such as buildings, trees, and street lamps, are removed from both sky images by filtering out the saturated pixels and applying a custom made mask indicating the position of these obstacles for each camera. Also, a zenith angle control threshold is defined as <inline-formula><mml:math id="M65" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">θ</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">75</mml:mn><mml:mi mathvariant="italic">°</mml:mi></mml:mrow></mml:math></inline-formula>. In both sky images, pixels with zenith angles exceeding this threshold are discarded, since such viewing geometries are expected to introduce larger errors in the subsequent stereoscopic cloud height retrieval.</p>
      <p id="d2e1542">Then the geographical coordinates of the cameras are used to compute the relative displacement between both cameras. With this distance between the cameras on a local cartesian system (<inline-formula><mml:math id="M66" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M67" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:math></inline-formula>), it is possible to obtain the relative orientation angle between the reference and auxiliary camera as: <inline-formula><mml:math id="M68" display="inline"><mml:mrow><mml:mi mathvariant="italic">β</mml:mi><mml:mo>=</mml:mo><mml:mi>arctan⁡</mml:mi><mml:mfenced close=")" open="("><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:mfrac></mml:mstyle></mml:mfenced></mml:mrow></mml:math></inline-formula>. After that, both the reference and auxiliary fisheye images are transformed into planar projections. This is possible due to the geometrical calibration parameters of each camera. As mentioned in Sect. <xref ref-type="sec" rid="Ch1.S2.SS1"/>, the geometrical calibration provides the azimuth and zenith angles from which each pixel is viewed by the camera, but also the pixel coordinates of the zenith (camera center) and the relationship between the pixel radial distance <inline-formula><mml:math id="M69" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:mi>r</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> to this center position and the sky zenith angle (<inline-formula><mml:math id="M70" display="inline"><mml:mi mathvariant="italic">θ</mml:mi></mml:math></inline-formula>); this relationship is given by the coefficients of a second order polynomial. In a first step, the azimuth angles are corrected by an azimuth offset (<inline-formula><mml:math id="M71" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="italic">ϕ</mml:mi></mml:mrow></mml:math></inline-formula>) to align with north-up. To obtain the planar projections of the images, a Cartesian grid with uniform spacing and same resolution as the input image is generated at a fixed height. In this work, the grid is defined as a 4 <inline-formula><mml:math id="M72" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> square at <inline-formula><mml:math id="M73" display="inline"><mml:mrow><mml:mi>Z</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.6</mml:mn></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M74" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> above the camera. This grid is oriented according to the angle <inline-formula><mml:math id="M75" display="inline"><mml:mi mathvariant="italic">β</mml:mi></mml:math></inline-formula> relative to the North, ensuring that both images are projected into the same reference system. This alignment is crucial as it enables a direct pixel by pixel comparison along the rows of both planar images. For each point in the grid (X,Y), the corresponding zenith and azimuth angles are calculated knowing the height and distance from each point to the center of the grid <inline-formula><mml:math id="M76" display="inline"><mml:mrow><mml:mfenced close=")" open="("><mml:mrow><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>=</mml:mo><mml:mi>arctan⁡</mml:mi><mml:mfenced open="(" close=")"><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:msqrt><mml:mrow><mml:msup><mml:mi>X</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>+</mml:mo><mml:msup><mml:mi>Y</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:msqrt><mml:mi>Z</mml:mi></mml:mfrac></mml:mstyle></mml:mfenced><mml:mo>,</mml:mo><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mo>=</mml:mo><mml:mi>arctan⁡</mml:mi><mml:mfenced close=")" open="("><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:mi>X</mml:mi><mml:mi>Y</mml:mi></mml:mfrac></mml:mstyle></mml:mfenced></mml:mrow></mml:mfenced></mml:mrow></mml:math></inline-formula>. Then the polynomial r(<inline-formula><mml:math id="M77" display="inline"><mml:mi mathvariant="italic">θ</mml:mi></mml:math></inline-formula>) and the azimuth offset <inline-formula><mml:math id="M78" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="italic">ϕ</mml:mi></mml:mrow></mml:math></inline-formula> are used to get the pixel coordinates from the viewing angles (<inline-formula><mml:math id="M79" display="inline"><mml:mrow><mml:mi>u</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mi>u</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>-</mml:mo><mml:mi>r</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>)</mml:mo><mml:mi>sin⁡</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mo>+</mml:mo><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M80" display="inline"><mml:mrow><mml:mi>v</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mi>v</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub><mml:mo>-</mml:mo><mml:mi>r</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">θ</mml:mi><mml:mo>)</mml:mo><mml:mi>cos⁡</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mo>+</mml:mo><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, where <inline-formula><mml:math id="M81" display="inline"><mml:mrow><mml:msub><mml:mi>x</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M82" display="inline"><mml:mrow><mml:msub><mml:mi>y</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> are the optical center coordinates obtained from the calibration). Finally, bilinear interpolation is performed on these pixel values (<inline-formula><mml:math id="M83" display="inline"><mml:mi>u</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math id="M84" display="inline"><mml:mi>v</mml:mi></mml:math></inline-formula>) for each channel of the RGB image, evaluating each pixel of the original fisheye image.</p>
      <p id="d2e1840">The projected image is then resampled to produce the oriented planar view. To optimize computational efficiency, the planar image is downsampled to a resolution of <inline-formula><mml:math id="M85" display="inline"><mml:mrow><mml:mn mathvariant="normal">200</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mrow class="unit"><mml:mi mathvariant="normal">pixels</mml:mi></mml:mrow><mml:mo>×</mml:mo><mml:mn mathvariant="normal">200</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mrow class="unit"><mml:mi mathvariant="normal">pixels</mml:mi></mml:mrow><mml:mo>×</mml:mo><mml:mn mathvariant="normal">3</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mrow class="unit"><mml:mi mathvariant="normal">pixels</mml:mi></mml:mrow></mml:mrow></mml:math></inline-formula>. This significantly reduces processing time while preserving an adequate compromise between spatial resolution and the quality of the resulting cloud height retrieval. Figure <xref ref-type="fig" rid="F2"/> shows an example of two fisheye images taken at the same time for two cameras of the network, with the masked obstacle objects and the saturated pixels colored black (A1, B1), their planar projection (A2, B2) and the oriented planar projection so that the rows of both images align (A3, B3). Note that, since the images are acquired from the ground looking upward, the East–West axis appears reversed with respect to conventional maps, so that the North direction remains oriented upward. From this point, the algorithm only works with these rectified images.</p>

      <fig id="F2" specific-use="star"><label>Figure 2</label><caption><p id="d2e1876">Sky images captured by cameras C013 and C014 on 28 December 2025 at 11:20 <inline-formula><mml:math id="M86" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula>. It is shown: fisheye original HDR all-sky images, with the obstacle objects and the sun saturated pixels colored black <bold>(A1, B1)</bold>, their planar projection oriented upside to North <bold>(A2, B2)</bold> and their planar projection oriented so the rows of both images align <bold>(A3, B3)</bold>.</p></caption>
            <graphic xlink:href="https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026-f02.png"/>

          </fig>

</sec>
<sec id="Ch1.S3.SS1.SSS2">
  <label>3.1.2</label><title>Pixel matching and cloud height estimation</title>
      <p id="d2e1910">Once the pair of images (reference and auxiliary) is rectified, the next step is to identify the pixels of the reference image in the auxiliary one. As it can be seen in Fig. <xref ref-type="fig" rid="F2"/>, the rows of the oriented plane image A3 are coincident with the rows of B3, so corresponding points are constrained to lie along the same image row (row-wise correlation). To improve the pixel correlation with the information of the surrounding pixels, a square window centered on each selected pixel in the reference image is extracted. The window size used is <inline-formula><mml:math id="M87" display="inline"><mml:mrow><mml:mn mathvariant="normal">7</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mrow class="unit"><mml:mi mathvariant="normal">pixels</mml:mi></mml:mrow><mml:mo>×</mml:mo><mml:mn mathvariant="normal">7</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mrow class="unit"><mml:mi mathvariant="normal">pixels</mml:mi></mml:mrow></mml:mrow></mml:math></inline-formula>. For each valid window (all 49 <inline-formula><mml:math id="M88" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">pixels</mml:mi></mml:mrow></mml:math></inline-formula> in the window are not masked or saturated in any color channel) in the reference image (Fig. <xref ref-type="fig" rid="F2"/>A3), the algorithm searches for the most similar valid window along the same row in the other camera image (Fig. <xref ref-type="fig" rid="F2"/>B3). The similarity between the reference window and each candidate window in the auxiliary image is quantified using the sum of the normalized cross-correlation of each color channel, providing a value, hereinafter referred to as RGB-correlation, between <inline-formula><mml:math id="M89" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>3 and 3. For each pixel sampled in the reference image, the position of the pixel with the maximum RGB-correlation coefficient in the auxiliary camera image is stored. This provides: a maximum RGB-correlation coefficient matrix, storing the mentioned correlation values, and a pixel-column position matrix, recording the pixel column location in the auxiliary image where the best match (maximum RGB-correlation) is found (see Fig. <xref ref-type="fig" rid="F3"/>). As shown in Fig. <xref ref-type="fig" rid="F3"/>A, lower correlation values are generally observed in clear sky regions, while the highest values typically occur at cloud edges. These features provide distinct textures that are more easily identified by the matching algorithm than the more homogeneous appearance of both the clear sky and the cloud interior. Regarding the pixel-column position matrix (Fig. <xref ref-type="fig" rid="F3"/>B), the spatial variation of the values is smoother in areas with high RGB-correlation, indicating a consistent and continuous displacement field across the cloud structures. Conversely, in regions of low correlation, the pixel-column position values are noisier, which typically indicates inaccurate pixel matching.</p>

      <fig id="F3" specific-use="star"><label>Figure 3</label><caption><p id="d2e1963">For the same camera pair and timestamp as Fig. <xref ref-type="fig" rid="F2"/>,  maximum RGB-correlation coefficient MATRIX <bold>(A)</bold>, pixel-column position matrix <bold>(B)</bold> and height matrix <bold>(C)</bold>. To improve visibility, the color bar limits are truncated for the maximum RGB-correlation coefficient matrix <bold>(A)</bold> and for the cloud height matrix <bold>(C)</bold>.</p></caption>
            <graphic xlink:href="https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026-f03.png"/>

          </fig>

      <p id="d2e1990">The zenith (<inline-formula><mml:math id="M90" display="inline"><mml:mi mathvariant="italic">θ</mml:mi></mml:math></inline-formula>) and azimuth (<inline-formula><mml:math id="M91" display="inline"><mml:mi mathvariant="italic">ϕ</mml:mi></mml:math></inline-formula>) viewed by each reference pixel <inline-formula><mml:math id="M92" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> and its correspondent pixel in the auxiliary image <inline-formula><mml:math id="M93" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> (where <inline-formula><mml:math id="M94" display="inline"><mml:mi>k</mml:mi></mml:math></inline-formula> is obtained in the mentioned column position matrix), are well known. Figure <xref ref-type="fig" rid="F4"/> shows a schematic representation of a camera pair pointing to the same spot (C), where the index A corresponds to the reference camera and the index B to the auxiliary camera. From this disposition, Eq. (<xref ref-type="disp-formula" rid="Ch1.E1"/>) can be derived (same index notation used), which gives the altitude <inline-formula><mml:math id="M95" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:mi>H</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> above sea level (<inline-formula><mml:math id="M96" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">a</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">s</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">l</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:math></inline-formula>) of the observed point. The altitudes of each camera are denoted as <inline-formula><mml:math id="M97" display="inline"><mml:mrow><mml:msub><mml:mi>h</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M98" display="inline"><mml:mrow><mml:msub><mml:mi>h</mml:mi><mml:mi mathvariant="normal">B</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M99" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:math></inline-formula> is defined as the longitudinal distance between the camera pair and <inline-formula><mml:math id="M100" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M101" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mi mathvariant="normal">B</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math id="M102" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">θ</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M103" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">θ</mml:mi><mml:mi mathvariant="normal">B</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> are the respective azimuth and zenith angles. 

                  <disp-formula id="Ch1.E1" content-type="numbered"><label>1</label><mml:math id="M104" display="block"><mml:mstyle class="stylechange" displaystyle="true"/><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mi>H</mml:mi><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msub><mml:mi>h</mml:mi><mml:mi mathvariant="normal">B</mml:mi></mml:msub><mml:mo>⋅</mml:mo><mml:mi>sin⁡</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mi mathvariant="normal">B</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mo>⋅</mml:mo><mml:mi>tan⁡</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">θ</mml:mi><mml:mi mathvariant="normal">B</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:msub><mml:mi>h</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:msub><mml:mo>⋅</mml:mo><mml:mi>sin⁡</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mo>⋅</mml:mo><mml:mi>tan⁡</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">θ</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>sin⁡</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mi mathvariant="normal">B</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mo>⋅</mml:mo><mml:mi>tan⁡</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">θ</mml:mi><mml:mi mathvariant="normal">B</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:mi>sin⁡</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mo>⋅</mml:mo><mml:mi>tan⁡</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">θ</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:mfrac></mml:mstyle></mml:mrow></mml:math></disp-formula>

            </p>

      <fig id="F4"><label>Figure 4</label><caption><p id="d2e2304">Schematic representation of the system geometry for a camera pair pointing to the same cloud point (C). The index A is used for variables corresponding to the reference camera, while the index B indicates the auxiliary camera. Here, <inline-formula><mml:math id="M105" display="inline"><mml:mi mathvariant="italic">θ</mml:mi></mml:math></inline-formula> represents the zenith angle, <inline-formula><mml:math id="M106" display="inline"><mml:mi mathvariant="italic">ϕ</mml:mi></mml:math></inline-formula> is the azimuth angle, <inline-formula><mml:math id="M107" display="inline"><mml:mi>H</mml:mi></mml:math></inline-formula> denotes the height of cloud point C above sea level (<inline-formula><mml:math id="M108" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">a</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">s</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">l</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:math></inline-formula>), and <inline-formula><mml:math id="M109" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:math></inline-formula> indicates the longitudinal distance between both cameras in km.</p></caption>
            <graphic xlink:href="https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026-f04.png"/>

          </fig>

      <p id="d2e2362">Alternatively, <inline-formula><mml:math id="M110" display="inline"><mml:mi>H</mml:mi></mml:math></inline-formula> could be calculated from the latitudinal difference (<inline-formula><mml:math id="M111" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:math></inline-formula>) using the following Eq. (<xref ref-type="disp-formula" rid="Ch1.E2"/>): 

                  <disp-formula id="Ch1.E2" content-type="numbered"><label>2</label><mml:math id="M112" display="block"><mml:mstyle displaystyle="true" class="stylechange"/><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mi>H</mml:mi><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msub><mml:mi>h</mml:mi><mml:mi mathvariant="normal">B</mml:mi></mml:msub><mml:mo>⋅</mml:mo><mml:mi>cos⁡</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mi mathvariant="normal">B</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mo>⋅</mml:mo><mml:mi>tan⁡</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">θ</mml:mi><mml:mi mathvariant="normal">B</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:msub><mml:mi>h</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:msub><mml:mo>⋅</mml:mo><mml:mi>cos⁡</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mo>⋅</mml:mo><mml:mi>tan⁡</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">θ</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>y</mml:mi></mml:mrow><mml:mrow><mml:mi>cos⁡</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mi mathvariant="normal">B</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mo>⋅</mml:mo><mml:mi>tan⁡</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">θ</mml:mi><mml:mi mathvariant="normal">B</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:mi>cos⁡</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:msub><mml:mo>)</mml:mo><mml:mo>⋅</mml:mo><mml:mi>tan⁡</mml:mi><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="italic">θ</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:mfrac></mml:mstyle></mml:mrow></mml:math></disp-formula>

            </p>
      <p id="d2e2526">Although Eq. (<xref ref-type="disp-formula" rid="Ch1.E1"/>) was used throughout this study, Eq. (<xref ref-type="disp-formula" rid="Ch1.E2"/>) is recommended whenever the absolute value of <inline-formula><mml:math id="M113" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:math></inline-formula> is smaller than that of <inline-formula><mml:math id="M114" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:math></inline-formula>. An improved approach to be considered in future work, which explicitly accounts for uncertainties in the identified viewing angles (<inline-formula><mml:math id="M115" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M116" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">θ</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M117" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mi mathvariant="normal">B</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math id="M118" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">θ</mml:mi><mml:mi mathvariant="normal">B</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>), would be to estimate the <inline-formula><mml:math id="M119" display="inline"><mml:mi>H</mml:mi></mml:math></inline-formula> values by minimizing the distance between the two lines of sight corresponding to each camera, as defined by the viewing angles <inline-formula><mml:math id="M120" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M121" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">θ</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math id="M122" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">ϕ</mml:mi><mml:mi mathvariant="normal">B</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M123" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">θ</mml:mi><mml:mi mathvariant="normal">B</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, respectively.</p>
      <p id="d2e2650">Figure <xref ref-type="fig" rid="F3"/>C shows an example of the obtained cloud heights for each matching pixel in the auxiliary image. It is important to keep in mind that a cloud height value is calculated even for cloud-free pixels, although these will be removed in subsequent processing steps. As observed in this panel, retrieved heights in cloud covered areas show realistic values around 7 <inline-formula><mml:math id="M124" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">a</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">g</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">l</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:math></inline-formula>, whereas cloud-free pixels typically yield unrealistic values, such as negative heights or values exceeding 20 <inline-formula><mml:math id="M125" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. This preliminary height map already provides a first approximation for distinguishing between cloudy and cloud-free pixels on the basis of the physical consistency of the stereoscopic retrieval.</p>
      <p id="d2e2684">The uncertainty in the retrieved cloud height values is obtained by slightly shifting <inline-formula><mml:math id="M126" display="inline"><mml:mrow><mml:mo>±</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M127" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">pixels</mml:mi></mml:mrow></mml:math></inline-formula> the column positions of the maximum RGB-correlation coefficient value in the auxiliary image. For each displaced position, the cloud height is recalculated using Eq. (<xref ref-type="disp-formula" rid="Ch1.E1"/>). Finally, for each pixel, the absolute differences between the original cloud height and the <inline-formula><mml:math id="M128" display="inline"><mml:mrow><mml:mo>±</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> recalculated values are computed and the maximum of these two is considered as the uncertainty on the retrieved pixel cloud height. This uncertainty is greater than the uncertainties derived from zenith and azimuth because the error from these angles is around 1–2 <inline-formula><mml:math id="M129" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">pixels</mml:mi></mml:mrow></mml:math></inline-formula> <xref ref-type="bibr" rid="bib1.bibx1" id="paren.49"/>, whereas in this case, because of the image downsizing, the <inline-formula><mml:math id="M130" display="inline"><mml:mrow><mml:mo>±</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M131" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">pixel</mml:mi></mml:mrow></mml:math></inline-formula> shift corresponds to <inline-formula><mml:math id="M132" display="inline"><mml:mrow><mml:mo>±</mml:mo><mml:mn mathvariant="normal">10</mml:mn></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M133" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">pixels</mml:mi></mml:mrow></mml:math></inline-formula> in the original image.</p>
</sec>
<sec id="Ch1.S3.SS1.SSS3">
  <label>3.1.3</label><title>Two-images cloud height filtering</title>
      <p id="d2e2774">To ensure the reliability of the retrieved cloud heights, several filtering criteria are applied. First, physically plausible cloud heights thresholds are imposed: pixels with cloud height values below the ground level of the reference camera or above 15 <inline-formula><mml:math id="M134" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> (a.g.l.) are removed. This upper limit is chosen because most clouds are expected to lie within the troposphere, and higher values are likely cloud-free pixels or artifacts of the calculation rather than real cloud heights.</p>
      <p id="d2e2785">In addition, a range of admissible altitudes is defined based on the distance between the two cameras. This range is directly proportional to the distance between the cameras (d), since the overlapping field of view of two pairs of cameras is more sensitive to lower clouds when the cameras are closer together, and to higher clouds when they are farther apart. The minimum and maximum values of the admitted range are defined as the heights that would be seen from one camera to the other with angles between <inline-formula><mml:math id="M135" display="inline"><mml:mrow><mml:mn mathvariant="normal">80</mml:mn><mml:mi mathvariant="italic">°</mml:mi></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M136" display="inline"><mml:mrow><mml:mn mathvariant="normal">10</mml:mn><mml:mi mathvariant="italic">°</mml:mi></mml:mrow></mml:math></inline-formula>, respectively <inline-formula><mml:math id="M137" display="inline"><mml:mrow><mml:mfenced close=")" open="("><mml:mrow><mml:msub><mml:mi>H</mml:mi><mml:mtext>min</mml:mtext></mml:msub><mml:mo>=</mml:mo><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:mi>d</mml:mi><mml:mrow><mml:mi>tan⁡</mml:mi><mml:mo>(</mml:mo><mml:mn mathvariant="normal">80</mml:mn><mml:mo>)</mml:mo></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>,</mml:mo><mml:msub><mml:mi>H</mml:mi><mml:mtext>max</mml:mtext></mml:msub><mml:mo>=</mml:mo><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:mi>d</mml:mi><mml:mrow><mml:mi>tan⁡</mml:mi><mml:mo>(</mml:mo><mml:mn mathvariant="normal">10</mml:mn><mml:mo>)</mml:mo></mml:mrow></mml:mfrac></mml:mstyle></mml:mrow></mml:mfenced></mml:mrow></mml:math></inline-formula>.</p>
      <p id="d2e2858">Also, cloud height values whose associated uncertainty exceed the chosen threshold of 1 <inline-formula><mml:math id="M138" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> are also discarded. The error in the assumed height will be 1 <inline-formula><mml:math id="M139" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> with this threshold; this is a conservative choice, however, in many cases the actual error should be smaller. The quality of the pixel matching is then considered: cloud heights derived from pixels with a RGB-correlation coefficient lower than an established threshold of 2.25, or from undefined values, are rejected, as these cases correspond to poor or ambiguous correlations. Finally, the calculated segmentation sky mask (see Sect. <xref ref-type="sec" rid="Ch1.S2.SS1"/>) of the reference image is used to restrict the analysis to pixels identified as cloudy (cloud and thin cloud classes), thereby avoiding spurious correlations in cloud-free regions.</p>
      <p id="d2e2879">This process yields an estimation of cloud heights by stereoscopic calculations using a pair of cameras, with one of them designated as the reference camera. Due to the imposed filtering criteria, these cloud heights can be considered to represent reliable cloud points. To allow direct comparison of the cloud points matrices obtained from different pairs, all results must be expressed in the same reference system. For this purpose, the rotation applied earlier to align the image rows is reversed. The matrices are rotated around the image center, aligning the products with the external reference frame (north-up) and the camera viewing geometry. To these matrices, the same filters described earlier, based on geometrical consistency, physical plausibility, and correlation thresholds, are applied in order to remove unreliable values. The result is a set of <inline-formula><mml:math id="M140" display="inline"><mml:mrow><mml:mn mathvariant="normal">200</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">200</mml:mn></mml:mrow></mml:math></inline-formula> geometrically consistent cloud height, correlation, and uncertainty matrices that can be directly compared between different camera pairs with the same reference camera.</p>
</sec>
</sec>
<sec id="Ch1.S3.SS2">
  <label>3.2</label><title>Multi-image processing</title>
      <p id="d2e2903">The procedure described in Sect. <xref ref-type="sec" rid="Ch1.S3.SS1"/> is repeated pairing the reference camera with each of the others available in the network. Since the fields of view of multiple cameras may overlap depending on cloud heights, a filtering process is proposed to avoid redundant data and ensure computational efficiency. For each pair of all-sky cameras, the overlap area of their two vision cones (defined by <inline-formula><mml:math id="M141" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">θ</mml:mi><mml:mi>t</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">75</mml:mn><mml:mi mathvariant="italic">°</mml:mi></mml:mrow></mml:math></inline-formula>) is evaluated at a range of discrete height levels (0.5–15 <inline-formula><mml:math id="M142" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">a</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">s</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">l</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:math></inline-formula>, in 0.5 <inline-formula><mml:math id="M143" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> increments). A camera pair is only considered valid if the overlapping area at a given height level represents between 20 <inline-formula><mml:math id="M144" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula> and 80 <inline-formula><mml:math id="M145" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>. Specifically, at each height level, it is checked whether the overlapping area has already been covered by a previously processed pair. If the new pair does not increase the overlapping area by at least 5 <inline-formula><mml:math id="M146" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula> at any height level, it is excluded from the calculation.</p>
      <p id="d2e2979">Figure <xref ref-type="fig" rid="F5"/> illustrates the cloud points and their heights retrieved for the reference camera C015 at 11:20 <inline-formula><mml:math id="M147" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula> on 28 December 2025, when paired with all the different available cameras that fulfill the overlapping criteria. From Fig. <xref ref-type="fig" rid="F5"/>, it can be observed in practically all camera pairs, that the clouds identified in the image are located at an altitude of approximately 7 <inline-formula><mml:math id="M148" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">a</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">s</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">l</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:math></inline-formula>, with some pixels showing slightly lower heights toward the North. However, certain discrepancies arise depending on the specific auxiliary camera used. These differences may be attributed to several factors, such as geometric calibration uncertainties or optical reflections within the camera domes. Despite these minor variations, the cameras providing the most reliable results are those separated from C015 by distances between approximately 5 and 10 <inline-formula><mml:math id="M149" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. In contrast, very few valid cloud height estimates are obtained from camera C031, which lies more than 30 <inline-formula><mml:math id="M150" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> away from the reference C015 camera. There are also less valid cloud points for camera C026, which is located too close to the reference C015 camera, less than 2 <inline-formula><mml:math id="M151" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> away. In both cases, the stereoscopic cloud height retrieval deteriorates: for C031, the cameras observe the cloud field from excessively different points, so their fields of view have little overlap, while for C026 the images are too similar for the given cloud height (around 7 <inline-formula><mml:math id="M152" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">a</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">g</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">l</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:math></inline-formula>), displacement values are really small, limiting the accuracy of the cloud height retrieval.</p>

      <fig id="F5" specific-use="star"><label>Figure 5</label><caption><p id="d2e3063">Estimation of cloud height for reference camera C015, after pairing with each one of the available cameras which fulfil the overlapping criteria at 11:20 <inline-formula><mml:math id="M153" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula> on 28 December 2025. The first panel (top-left) shows the north-up oriented planar projection of the reference C015. The subsequent panels display the retrieved cloud height maps derived from correlating the reference image with each auxiliary camera, as specified in the titles.</p></caption>
          <graphic xlink:href="https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026-f05.png"/>

        </fig>

      <p id="d2e3081">In order to minimize the uncertainties in the derived cloud height values, the median value of the cloud height estimates from the different camera pairings is obtained for each pixel of the reference camera. The formed image with these median values is considered as the cloud height matrix for the reference camera. For the case analyzed in Fig. <xref ref-type="fig" rid="F5"/>, this would be the median value of all the cloud height matrices shown from the pairing of each all-sky camera available with C015. This approach provides a robust estimate while reducing the influence of noisy or outlier results from individual camera pairs.</p>
      <p id="d2e3086">To these cloud height estimations obtained for a given reference camera (the mentioned median of all individual pairs results), an additional filtering procedure is applied to refine the results and remove spurious values. First, a median filter with a <inline-formula><mml:math id="M154" display="inline"><mml:mrow><mml:mn mathvariant="normal">3</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:math></inline-formula> window is applied, and the difference between the filtered and original matrices is calculated. Pixels that deviate by more than 1 <inline-formula><mml:math id="M155" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> from the local median are discarded, in order to remove isolated outliers and warranty smoothness between adjacent pixels. Next, a layer filtering step is applied. A frequency histogram is computed from the remaining cloud height values, with 1 <inline-formula><mml:math id="M156" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> bins between 0–15 <inline-formula><mml:math id="M157" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> (a.g.l.). Then up to four height layers are selected from this distribution corresponding to the most populated bins, retaining only those containing at least 2 <inline-formula><mml:math id="M158" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula> of the valid pixels. The centers of these bins are interpreted as the dominant cloud layers. All pixels whose height differs by more than 0.7 <inline-formula><mml:math id="M159" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> from the center of every selected layer are discarded, ensuring that only cloud heights consistent with the main layers in the scene are preserved.</p>
      <p id="d2e3142">The effect of these two filters is to discard outliers, suppress isolated noisy pixels, and smooth the retrieved cloud height distributions while preserving, if existing, the different cloud height layer structure. The result for the case in Fig. <xref ref-type="fig" rid="F6"/>C shows that the filtered heights are spatially coherent and smooth, replicating the shape shown in the camera image and discarding spurious values produced by abnormal highlighted artifacts.</p>

      <fig id="F6" specific-use="star"><label>Figure 6</label><caption><p id="d2e3149">Panel <bold>(A)</bold> shows the planar projected image from the C015 camera on 28 December 2025 at 11:20 <inline-formula><mml:math id="M160" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula>. Panel <bold>(B)</bold> includes over this image the  cloud height median values from all the available camera pairs with C015 camera (see Fig. <xref ref-type="fig" rid="F5"/>). Panel <bold>(C)</bold> represents the same panel <bold>(B)</bold> but after applying  the <inline-formula><mml:math id="M161" display="inline"><mml:mrow><mml:mn mathvariant="normal">3</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">3</mml:mn></mml:mrow></mml:math></inline-formula> median and layer filters.</p></caption>
          <graphic xlink:href="https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026-f06.png"/>

        </fig>

      <p id="d2e3193">As explained previously, the image size is reduced to a <inline-formula><mml:math id="M162" display="inline"><mml:mrow><mml:mn mathvariant="normal">200</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">200</mml:mn></mml:mrow></mml:math></inline-formula> grid in order to optimize the computational time required for the correlation calculations between images. These reduced matrices are resized to the original <inline-formula><mml:math id="M163" display="inline"><mml:mrow><mml:mn mathvariant="normal">2000</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">2000</mml:mn></mml:mrow></mml:math></inline-formula> resolution using nearest-neighbor interpolation in order to include information for all cloudy pixels of the original image.</p>
      <p id="d2e3221">Once the cloud points and their heights have been determined for a given reference camera, the procedure is repeated using a different camera as the reference. In this sense, each camera in the system is successively designated as the reference camera, and the same stereoscopic reconstruction and filtering steps are applied. The process continues until every camera has been the reference, yielding a set of cloud fields estimations equal in number to the set of reference cameras.</p>
      <p id="d2e3224">Figure <xref ref-type="fig" rid="F7"/> illustrates the results obtained for each of the cameras in the analyzed case. Cameras C020 and C028 were not working due to malfunctions, C024 is excluded from the plot because it shows few representative cloud heights due to the large distance regarding the rest of the cameras, and C036 was not installed yet. Almost all of them successfully identify a fractured mid height cloud stratum. The retrieved cloud heights are homogeneous through the images, particularly in the central region of the sky image of each camera. There is a decrease in the resolution for the fragmented clouds near the horizon. This is a consequence of the projection geometry and the reduction in effective pixel resolution at high zenith angles, which limits the precision of the correlation process at the edges of the images. In the case of camera C031, the distance to the other cameras prevents it from seeing this range of clouds heights, since the overlapping field of view between cameras is not enough. Only a few pixels from the sky image are correlated with pixels in other cameras' images and maybe there are some wrong correlated pixels that yield on higher altitudes. In the Supplement, Fig. S1  shows another case of interest where it can be seen how the different camera distances in the network can facilitate the retrieval of different cloud layers within the same scene. This Fig. S1 reveals a high level cloud layer with lower level cumulus clouds beneath it. While both structures are not visible in all camera views, they are clearly distinguished in those where they both appear; this points out that the camera network's high density and spatial distribution provide multiple perspectives of the cloud field, enabling distinct cloud layers to be effectively differentiated.</p>

      <fig id="F7" specific-use="star"><label>Figure 7</label><caption><p id="d2e3231">Cloud height values obtained for all cameras available at 11:20 <inline-formula><mml:math id="M164" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula> on 28 December 2025. For each camera, a pair of vertically aligned subplots is presented: the upper image displays the north-up oriented planar projection of the original sky scene, while the lower image shows the same projection with the estimated cloud height values overlaid. The color scale represents the retrieved altitude (<inline-formula><mml:math id="M165" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">a</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">g</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">l</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:math></inline-formula>).</p></caption>
          <graphic xlink:href="https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026-f07.jpg"/>

        </fig>

</sec>
<sec id="Ch1.S3.SS3">
  <label>3.3</label><title>Cloud height grid</title>
      <p id="d2e3278">For each reference camera, the final cloud point pixels are converted to georeferenced coordinates using the zenith, azimuth and cloud height information of each pixel. The chosen reference system is a local cartesian centered in the coordinates of the C013 camera (see Table <xref ref-type="table" rid="T1"/>). To spatially aggregate the retrieved cloud points, a regular geographic grid is defined centered in the C013 camera coordinates. This grid covers a domain of <inline-formula><mml:math id="M166" display="inline"><mml:mrow><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.5</mml:mn></mml:mrow></mml:math></inline-formula>° in both longitude and latitude and is discretized in bins with a resolution of 0.0005°. This results in a two-dimensional array of bins, for which both the geographical limits and the central coordinates are explicitly determined. At these spatial scales, the geometric distortions associated with Earth curvature are negligible, this may become relevant when cameras are separated by several kilometers or when clouds reach high altitudes. Nevertheless, the results obtained from implementing this correction have proved to be quite equivalent, so the more simple calculation is implemented in the automation of cloud height retrieval to increase speed and reduce computational cost.</p>
      <p id="d2e3293">Each available cloud point from all reference cameras, its cloud height estimation and the ID of its corresponding reference camera, is then assigned to one of these grid bins. Points falling outside the defined grid are discarded. Thus, for each bin of the grid, there is a number of cloud points, from one or more reference cameras, which will exhibit a specific cloud height distribution for that bin. For each bin, a set of statistics is computed, including the number of different reference cameras providing cloud points to the bin, the maximum, minimum and the standard deviation of the cloud height distribution of the bin and the number of cloud points obtained within this bin. These statistical estimators allow a robust characterization of the variability within each grid bin while also providing a measure of the confidence offered by multiple camera perspectives.</p>
      <p id="d2e3296">Figure <xref ref-type="fig" rid="F8"/>A shows the number of cameras that contribute with at least one cloud point to each grid bin. The highest overlap appears in the central region of the network, where multiple cameras have overlapping fields of view. In contrast, peripheral areas are only seen by a few cameras. Figure <xref ref-type="fig" rid="F8"/>B displays the total number of individual cloud points assigned to each bin. Higher counts indicate regions where the stereoscopic retrieval is most reliable due to strong camera overlap. Lower counts highlight areas with limited observations or pixels removed by the quality filters. It is important to note that the number of data points per bin typically decreases as cloud altitude increases. This is because, for a given viewing angle, the physical area covered by each pixel expands with height, causing the available data to be distributed over a larger surface area. Based on these distributions and in order to ensure the reliability of the aggregated information, only grid bins meeting two criteria are retained: at least two distinct cameras must contribute to the bin, and there must be four or more individual cloud points inside it. These threshold values were manually selected based on an empirical review of the results. While they provide a robust filter for this study, they are not necessarily the most optimal in all scenarios, as the ideal thresholds likely depend on the density of the camera network and the altitude of the clouds being observed. This filtering guarantees that the resulting grid highlights only those regions supported by sufficient sampling, effectively reducing the impact of outliers. The outcome is a set of gridded cloud height maps that are spatially consistent and directly suitable for subsequent analysis and visualization.</p>

      <fig id="F8" specific-use="star"><label>Figure 8</label><caption><p id="d2e3306">Number of cameras providing cloud points <bold>(A)</bold> and number of cloud points <bold>(B)</bold> for each bin of the latitude–longitude grid. White dots indicate the locations of the cameras that contribute to the stereoscopic calculation (28 December, 11:20 <inline-formula><mml:math id="M167" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula>).</p></caption>
          <graphic xlink:href="https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026-f08.png"/>

        </fig>

      <p id="d2e3329">Figure <xref ref-type="fig" rid="F9"/>A shows the minimum height values retrieved, hereafter referred to as the CBH, for the analyzed case. In this example, the CBH remains relatively constant around 7 <inline-formula><mml:math id="M168" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">a</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">s</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">l</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:math></inline-formula>, although slightly lower values are observed in the central region of the map. Figure <xref ref-type="fig" rid="F9"/>B presents the maximum cloud heights within each grid bin, hereafter denoted as the CTH. These values are generally centered around 8 <inline-formula><mml:math id="M169" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">a</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">s</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">l</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:math></inline-formula>, even though some isolated bins show abnormally high values that likely correspond to spurious data. Figure <xref ref-type="fig" rid="F9"/>C illustrates the standard deviation of all height estimates within each grid bin. Higher standard deviation values indicate increased variability in the retrieved cloud point heights within a given bin. This variability is typically associated with multilayer cloud structures, although in some cases it may also reflect the presence of residual outliers (e.g. the aforementioned spurious CTH values). Notably, the standard deviation is lower in the central part of the grid. This may be attributed to a more precise characterization resulting from the higher number of cameras covering this area; however, it could also be related to the viewing geometry, since these clouds are located in the central part of the images, it is more challenging to distinguish their vertical edges and thickness compared to more slanted views. Together, these three cloud products provide a consistent description of both the vertical structure and the spatial variability of the reconstructed cloud field. Based on these three parameters, it can be concluded that the analyzed cloud layer appears highly homogeneous around 7 <inline-formula><mml:math id="M170" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> and relatively thin, with differences between top and base heights approximately of 1 <inline-formula><mml:math id="M171" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>, and with the standard deviation of the heights remaining low, roughly 0.2 <inline-formula><mml:math id="M172" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>, except for some localized areas in the northern sector. Similarly, in the Supplement, Fig. S2 presents a more complex scenario where the methodology effectively distinguishes distinct cloud levels within the same field of view. In this case, the retrieved heights reveal cloud structures at altitudes between 10–12 <inline-formula><mml:math id="M173" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">a</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">s</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">l</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:math></inline-formula>, while other regions of the map show clouds at much lower levels, around 2 <inline-formula><mml:math id="M174" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">a</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">s</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">l</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:math></inline-formula> This example confirms the system's ability to identify and separate distinct cloud layers.</p>

      <fig id="F9" specific-use="star"><label>Figure 9</label><caption><p id="d2e3449">Panel <bold>(A)</bold> values for cloud base height (CBH), panel <bold>(B)</bold> cloud top height (CTH) and panel <bold>(C)</bold> standard deviation of the cloud point heights within each bin of the latitude–longitude grid. White dots indicate the locations of the cameras that contribute to the stereoscopic calculation (28 December 2025, 11:20 <inline-formula><mml:math id="M175" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula>).</p></caption>
          <graphic xlink:href="https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026-f09.png"/>

        </fig>

      <p id="d2e3475">To fully assess the accuracy of these results, they must be compared against independent measurements from other instruments. For this purpose, the following section presents a validation study using the CBH and CTH products derived from the methodology applied to the entire historical image record available, comparing them with data from independent ground based and satellite sensors.</p>
</sec>
</sec>
<sec id="Ch1.S4">
  <label>4</label><title>Validation of cloud estimations from the all sky camera network</title>
<sec id="Ch1.S4.SS1">
  <label>4.1</label><title>Comparison with Sentinel-2 cloud mask</title>
      <p id="d2e3494">Satellite imagery and ground-based all-sky cameras provide complementary perspectives of the cloud field. The proposed stereoscopic method provides cloud height estimates with high temporal resolution at the local/regional scale, while some polar satellite instruments, such as Sentinel-2, offer an overhead view with robust cloud detection but lower temporal resolution. By comparing both datasets, it has been possible to assess whether the cloud structures estimated from the camera network are consistent with the distribution of clouds observed from space.</p>
      <p id="d2e3497">For a qualitative comparison of the cloud maps obtained from the all-sky camera network with those derived from Sentinel-2, both datasets have been evaluated on a point to point basis. Sentinel-2 SCL (60 <inline-formula><mml:math id="M176" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula>) has been first filtered to obtain the different cloud classes (medium probability, high probability, and thin cirrus). The cloud mask retrieved from the all-sky has been obtained for a geographical grid as explained in Sect. <xref ref-type="sec" rid="Ch1.S3"/>. To ensure spatial consistency, this Sentinel-2 cloud mask has then been resampled to the camera network's geographical grid using the nearest neighbor interpolation method. This has allowed each grid point to be directly compared and classified as cloudy or cloud-free if there was an available cloud height value or not, respectively.</p>
      <p id="d2e3510">Figure <xref ref-type="fig" rid="F10"/> shows the mentioned Sentinel-2 SCL product at 60 <inline-formula><mml:math id="M177" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> resolution and its comparison with the all-sky cameras cloud mask, for the particular case, which has been analyzed in the previous section (28 December 2025 at 11:20 <inline-formula><mml:math id="M178" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula>). A large fraction of the cameras' retrieved cloud field agrees with medium and high-probability cloud classes in the SCL layer (green pixels), confirming that the camera network captures the main cloud structures, which can also be distinguished in the satellite true-color image. The differences between both datasets have been found mainly at cloud borders. One possible explanation for this is the difference in contrast between cloud and cloud-free pixels and land and cloud pixels, which could make the Sentinel-2 algorithm discard more cloud values in the edges of the clouds where transparency is high. On the other hand, satellites have an almost zenithal point of view of the clouds, whereas cameras observe clouds from different angles. This implies that the level of detail captured depends on the cloud's position in the image; a cloud located near the zenith (the center of the image) is captured with much finer detail than when it is observed near the horizon. This leads to lower sensitivity for the reconstruction algorithm, especially for small, fragmented clouds. In addition, the width of fragmented clouds frequently prevents observing the cloud-free space between them, which can cause an overestimation of the cloud cover, especially between cloud edges. The cloud height is a key factor determining this sensitivity; higher structures are visible over a wider spatial extent and are therefore sampled by a larger number of cameras, leading to a more homogeneous and robust reconstruction of the cloud field, although the quality of the retrieved product also depends on the distance between the cameras. In contrast, mid and low clouds are observed over a more limited common field of view, so fewer cameras contribute to the same grid bins, making the reconstruction more sensitive to outliers. It can be seen in Fig. <xref ref-type="fig" rid="F8"/>A, that pixels located at cloud borders coincide with grid bins where the number of contributing cameras is lower, even if the minimum threshold of more than two cameras contributing per bin is satisfied. Although these pixels pass the imposed filtering criterion, the reduced spatial overlap suggests increased uncertainty in the retrieved classification and height at these transition regions. Additionally, the satellite acquisition time does not exactly match the time of the camera images. Even short temporal offsets can result in small displacements of cloud structures, primarily affecting the cloud edges. Nevertheless, the blue regions indicate a robust agreement in cloud-free detection, confirming that the stereoscopic algorithm does not produce significant false positives in cloud-free zones and the discrepancies are found mostly at the transitions between the clouds. Furthermore, the Sentinel-2 SCL product, generated via the Sen2Cor algorithm, presents well-documented limitations. Recent evaluations demonstrate that Sen2Cor's cloud and shadow detection frequently misses thin clouds, partial clouds, and transparent cloud boundaries <xref ref-type="bibr" rid="bib1.bibx28" id="paren.50"/>. Comprehensive accuracy assessments, including validations using the global CloudSEN12 dataset, show that Sen2Cor significantly underperforms in overall accuracy and F1-scores when compared to both alternative physical-rule-based algorithms (like Fmask or MAJA) and modern spatial-temporal machine learning models such as Cloud Score+ <xref ref-type="bibr" rid="bib1.bibx3 bib1.bibx8" id="paren.51"/>. Consequently, the discrepancies observed at the cloud edges may partly stem from the satellite mask's own misclassifications rather than solely from stereoscopic reconstruction uncertainties.</p>

      <fig id="F10" specific-use="star"><label>Figure 10</label><caption><p id="d2e3543">At 28 December 2025, 11:20 <inline-formula><mml:math id="M179" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula>: Sentinel-2 true color product <bold>(A)</bold> and cloud mask obtained from the camera network, together with the Sentinel-2 scene classification product <bold>(B)</bold>. Red points represent cloud height values from the all-sky camera network that Sentinel-2 does not classify as clouds. Green points represent areas where both the all-sky cameras and Sentinel-2 agree that there are clouds. The different shades of grey represent the different cloud scenes classified by Sentinel-2 that the cameras do not detect. Blue represents cloud-free regions predicted by both datasets.</p></caption>
          <graphic xlink:href="https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026-f10.png"/>

        </fig>

      <p id="d2e3566">The field of view of the network can also be observed for the present cloud heights, as clouds above 41.9° N latitude are not visible. In the central part of the network, the higher camera density results in shorter camera distances, which ensures strong overlap and reliable detection of low to mid level clouds. Moreover, these central cameras can be combined with more distant peripheral stations, providing larger camera distances that improve the triangulation geometry for higher cloud layers within the same region of the map. In contrast, grid bins located near the outer boundary of the network do not benefit from this geometric complementarity. While clouds in these bins may be observed by nearby stations within the central part of the network, they lack additional outer stations that could provide overlapping views from the opposite side. Consequently, the stereoscopic configuration becomes geometrically constrained toward the perimeter, particularly affecting the reconstruction of lower cloud layers.</p>
      <p id="d2e3569">Overall, this simple qualitative comparison points out the robustness of the proposed method to detect cloud points with high spatial resolution, identifying the same cloud systems detected by Sentinel-2 at least in the case shown. Discrepancies are largely confined to cloud edges, where fewer cameras see the same cloud point, blind zones, and slight temporal offsets between datasets increase uncertainty.</p>
</sec>
<sec id="Ch1.S4.SS2">
  <label>4.2</label><title>Ceilometer cloud heights comparison</title>
      <p id="d2e3580">For a more quantitative analysis of the retrieved CBH and CTH values with the cameras, the results have been compared with the independent measurements from the mentioned ceilometer installed in the Science Faculty of Valladolid, collocated with the C013 camera, in the center of the defined cloud grid. The cloud height maps derived from the all-sky camera network have been first projected onto a common geographic grid with a spatial resolution of 0.0005° in both latitude and longitude as explained in the previous section. Specifically, the CBH and CTH values that have been used in this comparison correspond to the grid bin closest to the ceilometer's location, which represents the central bin of the grid. To account for the different integration times when matching both datasets, all ceilometer observations within a <inline-formula><mml:math id="M180" display="inline"><mml:mrow><mml:mo>±</mml:mo><mml:mn mathvariant="normal">30</mml:mn></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M181" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula> window have been considered, selecting the CBH or CTH value closest to the camera's estimate. Also, nocturnal camera timestamps have been shifted 45 <inline-formula><mml:math id="M182" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula> to better align them with the center of the exposure interval, that increases for low light conditions, ensuring a more accurate temporal match with the ceilometer data. The analysis covers the period from 27 July 2023 to 19 January 2026. During this time, 377 647 paired ceilometer and camera measurements have been taken, excluding those matches for which the ceilometer presented a sky condition index (SCI) indicating precipitation, fog, snow, reduced window transmission or malfunction.</p>
      <p id="d2e3609">Table <xref ref-type="table" rid="T2"/> summarizes the performance of the camera network against the ceilometer for cloud detection. Of all cases where the cameras have identified clouds in the ceilometer's grid bin, they agree with the ceilometer in 95 <inline-formula><mml:math id="M183" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula> of times, indicating a very low false positive rate. In contrast, cameras have correctly identified 59 <inline-formula><mml:math id="M184" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula> of the clouds reported by the ceilometer. The remaining 41 <inline-formula><mml:math id="M185" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula> of clouds detected by the ceilometer but missed by the cameras are primarily due to the ceilometer's ability to operate in nearly all conditions. On the one hand, there are limitations related to very low clouds and overcast conditions, also cases not classified as fog by the ceilometer. While the ceilometer identifies the presence of a cloud layer at very low altitudes, the cameras often fail due to a lack of image texture and contrast, as the images are quite homogeneous and is difficult to find high RGB-correlations. Furthermore, at such low altitudes, there may be no overlap between the field of view of any cameras from the network. On the other hand, there are limitations related to the detection algorithm under specific lighting conditions, it should be noted that the segmentation algorithm used to discard outliers was not originally designed for nocturnal conditions, where it tends to misclassify clouds as cloud-free sky; this even happens sometimes for very dark clouds during daytime. Regarding the few cases (3 <inline-formula><mml:math id="M186" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>) where the cameras have detected clouds but the ceilometer has reported cloud-free skies, these are likely due to external factors such as dust deposition on the camera, or dome reflections that may be misclassified as clouds. It is also important to note that since the methodology requires a minimum of two reference cameras viewing cloud points in the same bin and applies height constraints based on camera distances, some cloud cases detected by the ceilometer are filtered out for the cameras network by these quality criteria. This is particularly relevant during the periods when only two cameras were operational (almost two months at early stages of the network, see installation dates in Table <xref ref-type="table" rid="T1"/>); causing many of these missed detections. Despite these limitations, the agreement in cloud-free scenarios has remained remarkably high at 97 <inline-formula><mml:math id="M187" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>.</p>

<table-wrap id="T2"><label>Table 2</label><caption><p id="d2e3660">Comparison of cloud and cloud-free detections between the camera system and the ceilometer using the punctual data at the ceilometer coordinates as the reference. The values represent the number of data points where both systems coincide or differ, with the percentages relative to the total number of detections in each ceilometer category shown in parentheses.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="4">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="left"/>
     <oasis:colspec colnum="3" colname="col3" align="right"/>
     <oasis:colspec colnum="4" colname="col4" align="right"/>
     <oasis:thead>
       <oasis:row>
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2"/>
         <oasis:entry rowsep="1" namest="col3" nameend="col4" align="center">Ceilometer </oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2"/>
         <oasis:entry colname="col3">Cloud</oasis:entry>
         <oasis:entry colname="col4">Cloud-free</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">Cameras</oasis:entry>
         <oasis:entry colname="col2">Cloud</oasis:entry>
         <oasis:entry colname="col3">119 156 (59 <inline-formula><mml:math id="M188" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col4">6074 (3 <inline-formula><mml:math id="M189" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2">Cloud-free</oasis:entry>
         <oasis:entry colname="col3">82 228 (41 <inline-formula><mml:math id="M190" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col4">170 189 (97 <inline-formula><mml:math id="M191" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

      <p id="d2e3768">Figure <xref ref-type="fig" rid="F11"/> shows the outcome of extending this comparison to the cloud height values estimated by both instruments. The plots show a notable difference between CBH (panels A, B) and CTH (panels C, D) analysis. Results for CBH show a high correlation with a determination coefficient (<inline-formula><mml:math id="M192" display="inline"><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>) about 0.89. The majority of the data points are concentrated at low altitudes (<inline-formula><mml:math id="M193" display="inline"><mml:mrow><mml:mo>&lt;</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M194" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi mathvariant="normal">a</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">g</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">l</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:math></inline-formula>) and align closely with the <inline-formula><mml:math id="M195" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>:</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> line, confirming the strong agreement between both independent datasets. Some dispersed points are observed where the camera network underestimates the CBH compared to the ceilometer. The mean bias error (MBE) calculated as the mean of the differences (<inline-formula><mml:math id="M196" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mtext>CBH</mml:mtext></mml:mrow></mml:math></inline-formula>) between camera and ceilometer values, is remarkably low (<inline-formula><mml:math id="M197" display="inline"><mml:mo lspace="0mm">-</mml:mo></mml:math></inline-formula>0.19 <inline-formula><mml:math id="M198" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>), indicating high accuracy, as the camera network predicts the CBH at an altitude very similar to the ceilometer on average. This can also be seen in the histogram of CBH differences (Fig. <xref ref-type="fig" rid="F11"/>B), which shows a Gaussian-like distribution centered at zero. Approximately 25 <inline-formula><mml:math id="M199" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula> of the differences fall within <inline-formula><mml:math id="M200" display="inline"><mml:mrow><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.2</mml:mn></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M201" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>, and about 35 <inline-formula><mml:math id="M202" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula> are within <inline-formula><mml:math id="M203" display="inline"><mml:mrow><mml:mo>±</mml:mo><mml:mn mathvariant="normal">0.4</mml:mn></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M204" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. The Standard Deviation (SD) of the differences is 1 <inline-formula><mml:math id="M205" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>, which establishes the precision of the method at approximately this value for the current network configuration. Furthermore, the Root Mean Square Error (RMSE) is 1.02 <inline-formula><mml:math id="M206" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>, nearly identical to the SD because the MBE is close to zero. This value reflects the impact of the dispersed points observed in Fig. <xref ref-type="fig" rid="F11"/>A, although most of the data remains closely aligned with the <inline-formula><mml:math id="M207" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>:</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> line, as is indicated by the pixel density values.</p>

      <fig id="F11" specific-use="star"><label>Figure 11</label><caption><p id="d2e3941">Bidimensional frequency histogram of camera values against ceilometer ones for cloud base height (CBH) and cloud top height (CTH) in panels <bold>(A)</bold> and <bold>(C)</bold>, respectively. Colorbar represents the number of data of each bin in a log scale. Panels <bold>(B)</bold> and <bold>(D)</bold> represent the frequency histogram of the differences (<inline-formula><mml:math id="M208" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mtext>CBH</mml:mtext></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M209" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mtext>CTH</mml:mtext></mml:mrow></mml:math></inline-formula>) between both instruments. Statistical metrics provided include the total number of cases <inline-formula><mml:math id="M210" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:mi>N</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, coefficient of determination (<inline-formula><mml:math id="M211" display="inline"><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>), mean bias error (MBE), root mean square error (RMSE) and standard deviation (SD).</p></caption>
          <graphic xlink:href="https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026-f11.png"/>

        </fig>

      <p id="d2e4006">Regarding the CTH, Fig. <xref ref-type="fig" rid="F11"/>C shows that the camera network and ceilometer also correlate, though with a lower <inline-formula><mml:math id="M212" display="inline"><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> value of 0.67. While many observations still fall close to the <inline-formula><mml:math id="M213" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>:</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> line, there is significantly more dispersion compared to the CBH analysis. The cameras tend to yield higher CTH values than the ceilometer for low ceilometer CTH values. This discrepancy is likely due to two factors: first, the ceilometer signal often saturates in low, thick clouds, potentially underestimating the cloud width, and consequently the CTH, but also failing to detect higher layers and thus underestimating the true CTH. Second, the limitation of the cameras as the top part of the cloud is only visible from fewer viewing angles. This trend is reflected in the histogram of differences (Fig. <xref ref-type="fig" rid="F11"/>D) by a prominent right-shifted tail of positive values. Despite this, the highest frequency of differences remains centered near 0 <inline-formula><mml:math id="M214" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. The mentioned overestimation in low cloud scenarios results in a higher MBE of 1.13 <inline-formula><mml:math id="M215" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. The precision of the CTH measurements degrades compared to the CBH as SD increases to 1.65 <inline-formula><mml:math id="M216" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. Consequently with these MBE and SD values, the RMSE rises to 2 <inline-formula><mml:math id="M217" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>, reflecting the increased dispersion in the CTH compared to the CBH.</p>
      <p id="d2e4069">To ensure a more consistent comparison between the camera network and the ceilometer, a spatial averaging approach has been implemented. Initially, the cameras' cloud heights have been extracted from the single grid bin at the ceilometer's location. However, this isolated bin may not fully represent the ceilometer's measurement, which is integrated over a 15 <inline-formula><mml:math id="M218" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula> interval, whereas the camera acquisition is quasi-instantaneous during daytime and longer than the ceilometer at nighttime. As clouds move during these temporal offsets, a single spatial point can result in discrepancies. To account for this and achieve a more robust comparison, the grid bins within a 150 <inline-formula><mml:math id="M219" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> radius of the ceilometer location (31 bins in total) have been considered to be a more representative area. The median and standard deviation of these bins have been calculated for each obtained CBH and CTH maps, separately. This median values provide a more realistic information of the cloud height retrievals from the cameras, but in order to ensure the reliability of this dataset, the following filtering criteria has been applied: for each defined grid bin, if there are less than 20 height values within the selected area (31 bins), those values and their median are discarded.</p>
      <p id="d2e4088">Using this new spatial representativeness criterion, the matching process with the ceilometer data has been repeated following the same procedure as the point to point analysis. In this approach, an observation is classified as cloud-free if no valid cloud height is retrieved among all the bins within the mentioned 150 <inline-formula><mml:math id="M220" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> radius window. These results, presented in the first row of Table <xref ref-type="table" rid="T3"/>, show an overall agreement of 66 <inline-formula><mml:math id="M221" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula> predicting clouds, which represents an improvement over the point to point comparison. The case when cameras detected clouds not identified by the ceilometer remains the same at only 3 <inline-formula><mml:math id="M222" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>.</p>

<table-wrap id="T3" specific-use="star"><label>Table 3</label><caption><p id="d2e4121">Comparison of cloud detection by the camera network, validated against the ceilometer as the reference instrument, under various solar zenith angle (SZA) ranges. Camera detections are based on the median cloud height value within a 150 <inline-formula><mml:math id="M223" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> radius of the Valladolid ceilometer location. Rows represent different lighting conditions: SZA 0–180° (all conditions), SZA 0–80° (daylight), SZA 80–110° (twilight), SZA 110–180° (night), and SZA 110–180° night with moon presence. Filtering criteria have been applied to discard heights provided by two or fewer cameras and with fewer than 20 height values. The values represent the number of data points where both systems coincide or differ, with the percentages relative to the total number of detections in each ceilometer category shown in parentheses.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="5">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="right"/>
     <oasis:colspec colnum="3" colname="col3" align="right"/>
     <oasis:colspec colnum="4" colname="col4" align="right"/>
     <oasis:colspec colnum="5" colname="col5" align="right"/>
     <oasis:thead>
       <oasis:row>
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2">Cloud</oasis:entry>
         <oasis:entry colname="col3">Cloud-free</oasis:entry>
         <oasis:entry colname="col4">Cloud Cam. &amp;</oasis:entry>
         <oasis:entry colname="col5">Cloud-free Cam.</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2">(Cam. &amp; Ceil.)</oasis:entry>
         <oasis:entry colname="col3">(Cam. &amp; Ceil.)</oasis:entry>
         <oasis:entry colname="col4">Cloud-free Ceil.</oasis:entry>
         <oasis:entry colname="col5">&amp; Cloud Ceil.</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">SZA 0–180° (All)</oasis:entry>
         <oasis:entry colname="col2">113 753 (66 <inline-formula><mml:math id="M224" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col3">165 839 (97 <inline-formula><mml:math id="M225" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col4">4317 (3 <inline-formula><mml:math id="M226" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col5">58 633 (34 <inline-formula><mml:math id="M227" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">SZA 0–80° (Day)</oasis:entry>
         <oasis:entry colname="col2">35 661 (86 <inline-formula><mml:math id="M228" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col3">38 633 (92 <inline-formula><mml:math id="M229" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col4">3186 (8 <inline-formula><mml:math id="M230" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col5">5778 (14 <inline-formula><mml:math id="M231" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">SZA 80–110° (Twilight)</oasis:entry>
         <oasis:entry colname="col2">23 135 (55 <inline-formula><mml:math id="M232" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col3">44 451 (99 <inline-formula><mml:math id="M233" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col4">378 (1 <inline-formula><mml:math id="M234" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col5">19 057 (45 <inline-formula><mml:math id="M235" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">SZA 110–180° (Night)</oasis:entry>
         <oasis:entry colname="col2">55 201 (62 <inline-formula><mml:math id="M236" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col3">82 755 (99 <inline-formula><mml:math id="M237" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col4">761 (1 <inline-formula><mml:math id="M238" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col5">33 798 (38 <inline-formula><mml:math id="M239" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">SZA 110–180° (Moon night)</oasis:entry>
         <oasis:entry colname="col2">18 468 (61 <inline-formula><mml:math id="M240" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col3">31 244 (99 <inline-formula><mml:math id="M241" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col4">301 (1 <inline-formula><mml:math id="M242" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col5">11 746 (39 <inline-formula><mml:math id="M243" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

      <p id="d2e4438">Since the illumination conditions seem to affect noticeably the cameras measurements and the performance of the segmentation model, an analysis of the cloud detection depending on the SZA is presented in Table <xref ref-type="table" rid="T3"/>. For daylight conditions the system achieves its peak performance, with the highest cloud detection coincidence of 86 <inline-formula><mml:math id="M244" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>. In this regime, the high contrast and clear image texture of the images allow for easy visualization and identification of clouds, with high RGB-correlations. The performance of the cloud segmentation algorithm in retaining cloudy pixels is also significant. On the other hand, a higher number of cases where the cameras predict clouds not identified by the ceilometer (8 <inline-formula><mml:math id="M245" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>) has been found during daytime. This is likely due to the strong presence of the sun in these images, which produces significant saturation if not obstructed by clouds (one example of this can be seen in Fig. S1 Cam C017 in the Supplement). Furthermore, direct solar radiation makes reflections and dirt on the camera dome more apparent  (see in the Supplement Figs. S3 and S4 for an example of a dirty dome case); these features can generate high but fictitious RGB-correlations, leading to artifacts and the retrieval of non real clouds in the final product. The performance of cloud detection for the cameras degrades during twilight, close to sunset and sunrise (SZA between 80 and 110<inline-formula><mml:math id="M246" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">°</mml:mi></mml:mrow></mml:math></inline-formula>); while the agreement for cloud-free scenarios remains exceptionally high at 99 <inline-formula><mml:math id="M247" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>, the cloud detection coincidence drops to its worst performance (55 <inline-formula><mml:math id="M248" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>), with missed clouds increasing to 45 <inline-formula><mml:math id="M249" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>. Under these conditions, where most of the solar radiation becomes diffuse, the cloud-free sky and the clouds are difficult to distinguish even visually. Consequently, the segmentation model is unable to correctly identify many clouds, increasing the underestimation of cloud presence by the camera method compared to the ceilometer. This highlights the challenges of quick light intensity transitions where the signal to noise ratio decreases, as the exposure times need to be increased. For the nighttime data, there is a 62 <inline-formula><mml:math id="M250" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula> agreement for cloud presence, while 38 <inline-formula><mml:math id="M251" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula> of clouds identified by the ceilometer are missed by the camera network. Interestingly, when filtering for night with moon presence (SZA 110–180° Moon night), the detection accuracy remains similar at 61 <inline-formula><mml:math id="M252" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>, suggesting that moonlight does not fully compensate for the limitations of the segmentation algorithm and the lower contrast compared to daytime images. Moreover, nocturnal sky images exhibit greater variability between cameras than daytime images due to the influence of nearby artificial light sources; these spatial differences in illumination can also cause the proposed cloud identification algorithm to perform worse under these conditions. Notably, the rate of cases where cameras detect clouds not identified by the ceilometer is lower for twilight and nighttime conditions (1 <inline-formula><mml:math id="M253" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>). This discrepancy supports the hypothesis that these infrequent false detections are primarily driven by dome reflections and dirt and dust deposition; such factors are significantly more impactful under direct solar illumination, whereas their influence is minimized during the night.</p>
      <p id="d2e4524">To study the performance of the proposed methodology to retrieve the CBH and CTH values, Figs. <xref ref-type="fig" rid="F12"/> and <xref ref-type="fig" rid="F13"/> show the mentioned cloud height median values by the camera compared to the measured by the ceilometer for the different illumination regimes. Figure <xref ref-type="fig" rid="F12"/> shows the results for CBH, presented in columns A (bidimensional frequency histogram) and B (histogram of differences). Figure <xref ref-type="fig" rid="F13"/> shows the results for CTH, following the same structure for the whole dataset in columns A and B, and additionally including, in columns C and D, the subset of cases where the CPD is considered reliable – that is, when an additional cloud layer is detected above, as specified by the manufacturer (see Sect. <xref ref-type="sec" rid="Ch1.S2.SS2"/>). This comparison complements the results of Table <xref ref-type="table" rid="T3"/>, showing not only whether clouds are detected, but also how precise the measurement of their altitude is. To ensure the reliability of the spatial averaging approach, an additional filtering criterion has been applied: any CTH or CBH median value with a standard deviation above 1 <inline-formula><mml:math id="M254" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> within the <inline-formula><mml:math id="M255" display="inline"><mml:mrow><mml:mo>&lt;</mml:mo><mml:mn mathvariant="normal">150</mml:mn></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M256" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> area of the grid has been discarded. This ensures the homogeneity of the median value, as cases with multiple cloud layers at different altitudes within the same 150 <inline-formula><mml:math id="M257" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> radius area could yield unrealistic median estimates for ceilometer comparisons.</p>

      <fig id="F12" specific-use="star"><label>Figure 12</label><caption><p id="d2e4576">First row <bold>(A)</bold> presents the bidimensional frequency histogram of median cloud heights values from the camera network within a 150 <inline-formula><mml:math id="M258" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> radius of the Valladolid ceilometer location, against ceilometer values for cloud base height (CBH). Second row <bold>(B)</bold> presents the frequency histogram of the differences (<inline-formula><mml:math id="M259" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mtext>CBH</mml:mtext></mml:mrow></mml:math></inline-formula>) between both instruments. Filtering criteria have been applied to discard heights provided by two or fewer cameras, with fewer than 20 height values and a standard deviation higher than 1 <inline-formula><mml:math id="M260" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. Rows represent different lighting conditions: SZA 0–180° (all conditions), SZA 0–80° (daylight), SZA 80–110° (twilight), SZA 110–180° (night), and SZA 110–180° (night with moon presence). Results include total number of cases <inline-formula><mml:math id="M261" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:mi>N</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, coefficient of determination (<inline-formula><mml:math id="M262" display="inline"><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>), mean bias error (MBE), root mean square error (RMSE) and standard deviation (SD).</p></caption>
          <graphic xlink:href="https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026-f12.png"/>

        </fig>

      <p id="d2e4641">The results show a significant improvement in correlation compared to the single pixel analysis; for the all conditions dataset, the determination coefficient increases to 0.93 for CBH and to 0.72 for CTH. Regarding the different illumination regimes, for CBH, the highest determination coefficient is found during daylight conditions (<inline-formula><mml:math id="M263" display="inline"><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.94</mml:mn></mml:mrow></mml:math></inline-formula>; Fig. <xref ref-type="fig" rid="F12"/>A2), as expected. However, the CTH shows the highest correlation values during twilight (<inline-formula><mml:math id="M264" display="inline"><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.77</mml:mn></mml:mrow></mml:math></inline-formula>; Fig. <xref ref-type="fig" rid="F13"/>A3) and moonlit nights (<inline-formula><mml:math id="M265" display="inline"><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.77</mml:mn></mml:mrow></mml:math></inline-formula>; Fig. <xref ref-type="fig" rid="F13"/>A5), surpassing the daytime correlation (<inline-formula><mml:math id="M266" display="inline"><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.68</mml:mn></mml:mrow></mml:math></inline-formula>; Fig. <xref ref-type="fig" rid="F13"/>A2). Although the camera network's detection sensitivity decreases at night and twilight (highest rates of missed detection respect to the ceilometer), it consistently measures the height of the clouds it successfully identifies. Consistent with the previous central pixel analysis, the data pairs for both CBH and CTH remain primarily concentrated around the <inline-formula><mml:math id="M267" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>:</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> line, as evidenced by the high density of points in the panels A1–A5 in Fig. <xref ref-type="fig" rid="F12"/> and A1–A5 in Fig. <xref ref-type="fig" rid="F13"/>. However, the CTH exhibits higher dispersion, particularly at lower cloud heights, likely for the same reasons discussed in the point to point analysis of Fig. <xref ref-type="fig" rid="F11"/>: the ceilometer signal saturates in low, thick clouds, preventing it from detecting higher cloud layers. When restricting the comparison to cases where the CPD is considered reliable (Panels C and D in Fig. <xref ref-type="fig" rid="F13"/>), the overestimation of the CTH by the cameras is notably less pronounced. For the all conditions dataset, <inline-formula><mml:math id="M268" display="inline"><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> increases from 0.72 to 0.80 and the MBE decreases from 1.06 to 0.52 <inline-formula><mml:math id="M269" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> (Panel D1), while the RMSE decreases from 1.78 to 1.21 <inline-formula><mml:math id="M270" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. This improvement is consistent across illumination regimes. This suggests that the observed overestimation at lower levels, while statistically significant, might not be entirely an artifact of the camera system, but could also be due to the ceilometer's lack of sensitivity to higher cloud layers when obscured by optically thick low-level clouds. However, restricting the validation to the filtered subset alone would be overly strict, as it would discard a substantial number of cases in which the ceilometer signal reached a single cloud with no additional layer above it, that the ceilometer fully penetrates. For this reason, both the unfiltered and CPD filtered results are presented.</p>

      <fig id="F13" specific-use="star"><label>Figure 13</label><caption><p id="d2e4764">Bidimensional frequency histogram of median cloud heights values from the camera network within a 150 <inline-formula><mml:math id="M271" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> radius of the Valladolid ceilometer location, against ceilometer values for cloud top height (CTH) in panels <bold>(A)</bold> and <bold>(C)</bold>, respectively. Panels <bold>(B)</bold> and <bold>(D)</bold> represent the frequency histogram of the differences (<inline-formula><mml:math id="M272" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mtext>CTH</mml:mtext></mml:mrow></mml:math></inline-formula>) between both instruments. For columns <bold>(C)</bold> and <bold>(D)</bold>, only those cases where the signal successfully penetrated the cloud layer, according to the manufacturer's criteria mentioned in Sect. <xref ref-type="sec" rid="Ch1.S2.SS2"/> have been included. Additional filtering criteria have been applied to discard heights provided by two or fewer cameras, with fewer than 20 height values and a standard deviation higher than 1 <inline-formula><mml:math id="M273" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. Rows represent different lighting conditions: SZA 0–180° (all conditions), SZA 0–80° (daylight), SZA 80–110° (twilight), SZA 110–180° (night), and SZA 110–180° (night with moon presence). Results include total number of cases <inline-formula><mml:math id="M274" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:mi>N</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, coefficient of determination (<inline-formula><mml:math id="M275" display="inline"><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>), mean bias error (MBE), root mean square error (RMSE) and standard deviation (SD).</p></caption>
          <graphic xlink:href="https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026-f13.png"/>

        </fig>

      <p id="d2e4844">Regarding the accuracy for the entire dataset, the CBH shows a MBE value of <inline-formula><mml:math id="M276" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.14 <inline-formula><mml:math id="M277" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>, whereas the unfiltered CTH shows a MBE value of 1.06 <inline-formula><mml:math id="M278" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. For CBH distinguishing different illumination intervals, the highest accuracy occurs during daytime, with an MBE of <inline-formula><mml:math id="M279" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.07 <inline-formula><mml:math id="M280" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. In contrast, nocturnal conditions show a slight underestimation of CBH, with the MBE reaching <inline-formula><mml:math id="M281" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.19 and <inline-formula><mml:math id="M282" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.20 <inline-formula><mml:math id="M283" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> for total night and moonlit nights, respectively. In the case of CTH, the MBE has positive values across all intervals due to the overestimation observed for low clouds. This trend is most pronounced during daytime, where the MBE reaches 1.4 <inline-formula><mml:math id="M284" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. For twilight and nocturnal conditions, the overestimation is less severe, with MBE values remaining between 0.84–0.93 <inline-formula><mml:math id="M285" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. The histograms of the cameras and ceilometer differences (Panels B1–B5 in Fig. <xref ref-type="fig" rid="F12"/> and B1–B5 and D1–D5 in Fig. <xref ref-type="fig" rid="F13"/>) reflect a normal behavior in the differences distribution where the highest frequencies are centered near zero for both CBH and CTH values; however, the <inline-formula><mml:math id="M286" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mtext>CTH</mml:mtext></mml:mrow></mml:math></inline-formula> distributions shows a skewness behavior with a noticeable positive tail, which explains the obtained positive MBE values for the CTH.</p>
      <p id="d2e4939">Panels A1–A5 in Fig. <xref ref-type="fig" rid="F12"/> and A1–A5 in Fig. <xref ref-type="fig" rid="F13"/> show for both CBH and CTH a cluster of points where camera derived heights are significantly lower than those from the ceilometer. These represent specific cases associated with multilayer cloud scenarios, such as low cumulus clouds situated beneath a higher cirrus stratum. This discrepancy arises from the differing spatial and temporal resolutions of the instruments, while the ceilometer provides a 15 <inline-formula><mml:math id="M287" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula> highly precise point measurement, the camera network provides a quasi-instantaneous (in daytime) picture of the clouds but the spatial resolution is limited by the constrains of the algorithm and may overestimate the horizontal extent of the lower cumulus. Consequently, the cameras may perceive the lower clouds as a bigger or continuous layer that obstructs the view of the higher clouds identified by the ceilometer. An example for these discrepancies is presented in the Fig. S5, which shows a sequence of images  with a sky predominantly covered by low level clouds, with an additional high level cloud layer above them. In this case, the ceilometer at 14:00 <inline-formula><mml:math id="M288" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula> reported a cloud height about 9.43 <inline-formula><mml:math id="M289" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>, whereas the camera network indicates 1.81 <inline-formula><mml:math id="M290" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">a</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">g</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">l</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:math></inline-formula>, since low clouds were close to the zenith of the image. The higher MBE observed for CBH during nocturnal conditions could be explained by a similar artifact. At night, the cameras have longer exposure times, if clouds are moving fast, this could cause the clouds to appear larger in the image than their actual physical dimensions.  Given that higher clouds are also difficult to see under low illumination conditions, this exacerbates the bias towards low altitudes. This is less pronounced in the filtered CTH (Fig. <xref ref-type="fig" rid="F13"/>C1–C5).</p>
      <p id="d2e4994">The precision of the CBH and CTH products from the proposed methodology, represented by the SD, is generally better under the spatial averaging approach compared to the central pixel analysis. Regarding CBH, the SD for the complete dataset is 0.77 <inline-formula><mml:math id="M291" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> (Fig. <xref ref-type="fig" rid="F12"/>B1), whereas for unfiltered CTH, it is 1.44 <inline-formula><mml:math id="M292" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> (Fig. <xref ref-type="fig" rid="F13"/>B1) and it is reduced to 1.1 <inline-formula><mml:math id="M293" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> for the filtered CTH (Fig. <xref ref-type="fig" rid="F13"/>D1). For CBH, the lowest dispersion is found at night (<inline-formula><mml:math id="M294" display="inline"><mml:mrow><mml:mtext>SD</mml:mtext><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.67</mml:mn></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M295" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>), (Fig. <xref ref-type="fig" rid="F12"/>B4), while the daytime shows a higher SD of 0.89 <inline-formula><mml:math id="M296" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> (Fig. <xref ref-type="fig" rid="F12"/>B2). These values result in an RMSE of 0.78 <inline-formula><mml:math id="M297" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> for the entirety of the observations and 0.89 <inline-formula><mml:math id="M298" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> for daylight conditions. As mentioned, the CTH exhibits greater dispersion due to the difficulty of capturing cloud tops. For the unfiltered CTH, the SD is higher during the day (1.78 <inline-formula><mml:math id="M299" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>) compared to twilight (1.31 <inline-formula><mml:math id="M300" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>) and nighttime (1.19 <inline-formula><mml:math id="M301" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>) (Fig. <xref ref-type="fig" rid="F13"/>B2–B4). Consequently, the RMSE for the unfiltered CTH reaches 1.78 <inline-formula><mml:math id="M302" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> across all conditions and 2.27 <inline-formula><mml:math id="M303" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> during the day. These metrics align with the higher variability observed in the CTH plots. This effect is less pronounced when filtering for those cases were it is clear that the ceilometer signal was not saturated and it penetrated an entire cloud. In these filtered cases, the SD decreases to 1.24 <inline-formula><mml:math id="M304" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> during daytime, 1.01 <inline-formula><mml:math id="M305" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> during twilight, and 1.07 <inline-formula><mml:math id="M306" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> at night (Fig. <xref ref-type="fig" rid="F13"/>D2–D4), further supporting that part of the residual CTH dispersion reflects ceilometer limitations.</p>
      <p id="d2e5146">This analysis proves that lighting conditions are a key factor for the cloud height retrievals of the all-sky camera network. A lack of light leads to low contrast images, variations between the images captured in different sites due to artificial light sources, and also cloud segmentation errors. Overall, the accuracy is robust, maintaining acceptable errors and proving the spatial averaging and the filtering criteria acceptable.</p>
      <p id="d2e5149">The obtained results indicate that the accuracy of cloud height retrievals, using the ceilometer as reference, varies significantly across different altitude layers, especially for CTH values. A statistical analysis of these discrepancies has been carried out using 1 <inline-formula><mml:math id="M307" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> height ranges. The same filtering criteria is applied to the median cloud height value within a 150 <inline-formula><mml:math id="M308" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> radius of the ceilometer location for all illumination scenarios. Figure <xref ref-type="fig" rid="F14"/> presents the distribution of the differences (<inline-formula><mml:math id="M309" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mtext>CBH</mml:mtext></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M310" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mtext>CTH</mml:mtext></mml:mrow></mml:math></inline-formula>), for each 1 <inline-formula><mml:math id="M311" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> bin of ceilometer height, showing the following statistical estimators in a box and whisker plot, presenting the interquartile range (IQR), median, mean, standard deviation and percentile 5th (P5) and 95th (P95). In addition, to complement this figure, Table <xref ref-type="table" rid="T4"/> shows the metrics, including <inline-formula><mml:math id="M312" display="inline"><mml:mi>N</mml:mi></mml:math></inline-formula> (the number of coincident cloud height values), MBE, SD and RMSE, for both CBH and CTH in the dataset of all conditions.</p>

      <fig id="F14" specific-use="star"><label>Figure 14</label><caption><p id="d2e5211">Box and whiskers plots for the differences between camera and ceilometer at 1 <inline-formula><mml:math id="M313" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> height ceilometer cloud height bins. Camera values are based on the median height value within a 150 <inline-formula><mml:math id="M314" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> radius of the ceilometer location. Filtering criteria have been applied to discard heights provided by less than two cameras, and those with fewer than 20 values and a standard deviation higher than 1 <inline-formula><mml:math id="M315" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. Column <bold>(A)</bold> Analysis for cloud base height (<inline-formula><mml:math id="M316" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mtext>CBH</mml:mtext></mml:mrow></mml:math></inline-formula>). Column <bold>(B)</bold> Analysis for cloud top height (<inline-formula><mml:math id="M317" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mtext>CTH</mml:mtext></mml:mrow></mml:math></inline-formula>). The boxes represent the interquartile range (IQR), the horizontal line is the median, and circular markers indicate the mean and triangle markers the percentiles (5th and 95th). Rows represent different lighting conditions: SZA 0–180° (all conditions), SZA 0–80° (daylight), SZA 80–110° (twilight), SZA 110–180° (night), and SZA 110–180° (night with moon presence).</p></caption>
          <graphic xlink:href="https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026-f14.png"/>

        </fig>

<table-wrap id="T4" specific-use="star"><label>Table 4</label><caption><p id="d2e5274">Statistical metrics including the number of coincident cloud height values <inline-formula><mml:math id="M318" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:mi>N</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, Mean Bias Error (MBE), Standard Deviation (SD), and Root Mean Square Error (RMSE), for the differences (<inline-formula><mml:math id="M319" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mtext>CBH</mml:mtext></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M320" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mtext>CTH</mml:mtext></mml:mrow></mml:math></inline-formula>) between camera and ceilometer at 1 <inline-formula><mml:math id="M321" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> ceilometer cloud height bins. Camera values are based on the median height value within a 150 <inline-formula><mml:math id="M322" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> radius of the ceilometer location. Filtering criteria have been applied to discard heights provided by less than two cameras, and those with fewer than 20 values and a standard deviation higher than 1 <inline-formula><mml:math id="M323" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="9">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="right"/>
     <oasis:colspec colnum="3" colname="col3" align="right"/>
     <oasis:colspec colnum="4" colname="col4" align="center"/>
     <oasis:colspec colnum="5" colname="col5" align="center" colsep="1"/>
     <oasis:colspec colnum="6" colname="col6" align="right"/>
     <oasis:colspec colnum="7" colname="col7" align="right"/>
     <oasis:colspec colnum="8" colname="col8" align="center"/>
     <oasis:colspec colnum="9" colname="col9" align="center"/>
     <oasis:thead>
       <oasis:row>
         <oasis:entry colname="col1"/>
         <oasis:entry rowsep="1" namest="col2" nameend="col5" align="center" colsep="1"><inline-formula><mml:math id="M324" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mtext>CBH</mml:mtext></mml:mrow></mml:math></inline-formula></oasis:entry>
         <oasis:entry rowsep="1" namest="col6" nameend="col9" align="center"><inline-formula><mml:math id="M325" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mtext>CTH</mml:mtext></mml:mrow></mml:math></inline-formula></oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Cloud height range (<inline-formula><mml:math id="M326" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi mathvariant="normal">a</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">g</mml:mi><mml:mo>.</mml:mo><mml:mi mathvariant="normal">l</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col2"><inline-formula><mml:math id="M327" display="inline"><mml:mi>N</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col3">MBE (<inline-formula><mml:math id="M328" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col4">SD (<inline-formula><mml:math id="M329" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col5">RMSE (<inline-formula><mml:math id="M330" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col6"><inline-formula><mml:math id="M331" display="inline"><mml:mi>N</mml:mi></mml:math></inline-formula></oasis:entry>
         <oasis:entry colname="col7">MBE (<inline-formula><mml:math id="M332" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col8">SD (<inline-formula><mml:math id="M333" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
         <oasis:entry colname="col9">RMSE (<inline-formula><mml:math id="M334" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>)</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1">0–1</oasis:entry>
         <oasis:entry colname="col2">26 564</oasis:entry>
         <oasis:entry colname="col3">0.17</oasis:entry>
         <oasis:entry colname="col4">0.50</oasis:entry>
         <oasis:entry colname="col5">0.53</oasis:entry>
         <oasis:entry colname="col6">14 390</oasis:entry>
         <oasis:entry colname="col7">2.68</oasis:entry>
         <oasis:entry colname="col8">1.57</oasis:entry>
         <oasis:entry colname="col9">3.11</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">1–2</oasis:entry>
         <oasis:entry colname="col2">35 788</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M335" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.16</oasis:entry>
         <oasis:entry colname="col4">0.33</oasis:entry>
         <oasis:entry colname="col5">0.37</oasis:entry>
         <oasis:entry colname="col6">30 968</oasis:entry>
         <oasis:entry colname="col7">1.58</oasis:entry>
         <oasis:entry colname="col8">1.15</oasis:entry>
         <oasis:entry colname="col9">1.96</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">2–3</oasis:entry>
         <oasis:entry colname="col2">18 151</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M336" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.32</oasis:entry>
         <oasis:entry colname="col4">0.43</oasis:entry>
         <oasis:entry colname="col5">0.54</oasis:entry>
         <oasis:entry colname="col6">20 425</oasis:entry>
         <oasis:entry colname="col7">0.83</oasis:entry>
         <oasis:entry colname="col8">0.91</oasis:entry>
         <oasis:entry colname="col9">1.23</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">3–4</oasis:entry>
         <oasis:entry colname="col2">10 258</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M337" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.35</oasis:entry>
         <oasis:entry colname="col4">0.68</oasis:entry>
         <oasis:entry colname="col5">0.77</oasis:entry>
         <oasis:entry colname="col6">10 896</oasis:entry>
         <oasis:entry colname="col7">0.46</oasis:entry>
         <oasis:entry colname="col8">0.84</oasis:entry>
         <oasis:entry colname="col9">0.96</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">4–5</oasis:entry>
         <oasis:entry colname="col2">5542</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M338" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.18</oasis:entry>
         <oasis:entry colname="col4">1.02</oasis:entry>
         <oasis:entry colname="col5">1.04</oasis:entry>
         <oasis:entry colname="col6">7968</oasis:entry>
         <oasis:entry colname="col7">0.27</oasis:entry>
         <oasis:entry colname="col8">0.92</oasis:entry>
         <oasis:entry colname="col9">0.96</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">5–6</oasis:entry>
         <oasis:entry colname="col2">3096</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M339" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.26</oasis:entry>
         <oasis:entry colname="col4">1.33</oasis:entry>
         <oasis:entry colname="col5">1.36</oasis:entry>
         <oasis:entry colname="col6">6413</oasis:entry>
         <oasis:entry colname="col7">0.07</oasis:entry>
         <oasis:entry colname="col8">0.96</oasis:entry>
         <oasis:entry colname="col9">0.96</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">6–7</oasis:entry>
         <oasis:entry colname="col2">2625</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M340" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.09</oasis:entry>
         <oasis:entry colname="col4">1.52</oasis:entry>
         <oasis:entry colname="col5">1.52</oasis:entry>
         <oasis:entry colname="col6">4417</oasis:entry>
         <oasis:entry colname="col7">0.08</oasis:entry>
         <oasis:entry colname="col8">1.12</oasis:entry>
         <oasis:entry colname="col9">1.12</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">7–8</oasis:entry>
         <oasis:entry colname="col2">2083</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M341" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.27</oasis:entry>
         <oasis:entry colname="col4">1.76</oasis:entry>
         <oasis:entry colname="col5">1.78</oasis:entry>
         <oasis:entry colname="col6">3696</oasis:entry>
         <oasis:entry colname="col7">0.10</oasis:entry>
         <oasis:entry colname="col8">1.23</oasis:entry>
         <oasis:entry colname="col9">1.24</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">8–9</oasis:entry>
         <oasis:entry colname="col2">1534</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M342" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.25</oasis:entry>
         <oasis:entry colname="col4">1.76</oasis:entry>
         <oasis:entry colname="col5">1.77</oasis:entry>
         <oasis:entry colname="col6">3028</oasis:entry>
         <oasis:entry colname="col7">0.08</oasis:entry>
         <oasis:entry colname="col8">1.20</oasis:entry>
         <oasis:entry colname="col9">1.21</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">9–10</oasis:entry>
         <oasis:entry colname="col2">1007</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M343" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.57</oasis:entry>
         <oasis:entry colname="col4">2.10</oasis:entry>
         <oasis:entry colname="col5">2.18</oasis:entry>
         <oasis:entry colname="col6">1871</oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M344" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.03</oasis:entry>
         <oasis:entry colname="col8">1.24</oasis:entry>
         <oasis:entry colname="col9">1.24</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">10–11</oasis:entry>
         <oasis:entry colname="col2">575</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M345" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>1.31</oasis:entry>
         <oasis:entry colname="col4">2.78</oasis:entry>
         <oasis:entry colname="col5">3.07</oasis:entry>
         <oasis:entry colname="col6">1308</oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M346" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.34</oasis:entry>
         <oasis:entry colname="col8">1.59</oasis:entry>
         <oasis:entry colname="col9">1.63</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">11–12</oasis:entry>
         <oasis:entry colname="col2">113</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M347" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>2.34</oasis:entry>
         <oasis:entry colname="col4">3.51</oasis:entry>
         <oasis:entry colname="col5">4.23</oasis:entry>
         <oasis:entry colname="col6">384</oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M348" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.89</oasis:entry>
         <oasis:entry colname="col8">2.53</oasis:entry>
         <oasis:entry colname="col9">2.68</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1">12–13</oasis:entry>
         <oasis:entry colname="col2">7</oasis:entry>
         <oasis:entry colname="col3"><inline-formula><mml:math id="M349" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>2.07</oasis:entry>
         <oasis:entry colname="col4">3.71</oasis:entry>
         <oasis:entry colname="col5">4.25</oasis:entry>
         <oasis:entry colname="col6">35</oasis:entry>
         <oasis:entry colname="col7"><inline-formula><mml:math id="M350" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>1.54</oasis:entry>
         <oasis:entry colname="col8">3.31</oasis:entry>
         <oasis:entry colname="col9">3.65</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

      <p id="d2e6003">Regarding <inline-formula><mml:math id="M351" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mtext>CBH</mml:mtext></mml:mrow></mml:math></inline-formula>, for the all conditions case, both the mean and median values remain remarkably stable and near zero for cloud layers below 10 <inline-formula><mml:math id="M352" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. As indicated in Table <xref ref-type="table" rid="T4"/>, the MBE varies, from 0.17 <inline-formula><mml:math id="M353" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> (0–1 <inline-formula><mml:math id="M354" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> range) to <inline-formula><mml:math id="M355" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.57 <inline-formula><mml:math id="M356" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> (9–10 <inline-formula><mml:math id="M357" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> range). However, for altitudes exceeding 10 <inline-formula><mml:math id="M358" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>, there is a more significant underestimation of the CBH, with the MBE reaching <inline-formula><mml:math id="M359" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>2.34 <inline-formula><mml:math id="M360" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> in the 11–12 <inline-formula><mml:math id="M361" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> interval. Figure <xref ref-type="fig" rid="F14"/>A1–A5 reveals that this high altitude underestimation is primarily driven by nocturnal conditions, particularly during moonless nights (Panel A4), as expected, since high clouds, such as cirrus, are notably difficult to identify due to their high transparency. However, the retrieval of lower cloud layers (below 4–5 <inline-formula><mml:math id="M362" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>) remains consistent regardless of lunar illumination. This is likely due to the reflection of artificial light from the city on the cloud base, providing sufficient contrast for the cameras to detect these lower layers even on moonless nights. In contrast, daytime observations (Panel A2) do not exhibit such dependence on altitude, showing only a slight underestimation. The dispersion of <inline-formula><mml:math id="M363" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mtext>CBH</mml:mtext></mml:mrow></mml:math></inline-formula> generally increases with cloud height. This is evidenced by the increase of IQR, a decrease in the P5, and a monotonic increase in the SD from 0.33 <inline-formula><mml:math id="M364" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> at 1–2 to 3.71 <inline-formula><mml:math id="M365" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> at the 12–13 <inline-formula><mml:math id="M366" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> range. Notably, the higher SD in the 0–1 <inline-formula><mml:math id="M367" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> range (0.50 <inline-formula><mml:math id="M368" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>) compared to the 1–2 <inline-formula><mml:math id="M369" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> range (0.33 <inline-formula><mml:math id="M370" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>) likely reflects the initial lack of nearby cameras by the ceilometer location, until the installation of C030, enabling the retrieval of lower clouds from this point. These results suggest that while CBH retrieval is highly accurate and precise under daylight, precision decreases with altitude during low light conditions, with accuracy significantly degrading above 10 <inline-formula><mml:math id="M371" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>.</p>
      <p id="d2e6183">The analysis for CTH, shows that the median of <inline-formula><mml:math id="M372" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mtext>CTH</mml:mtext></mml:mrow></mml:math></inline-formula> remains close to zero for most height ranges, except for the lowest layers (up to 3 <inline-formula><mml:math id="M373" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>). For higher cloud heights, the mean values deviate from zero as well at nighttime conditions. However, the data availability for this high altitude clouds is considerably lower (see <inline-formula><mml:math id="M374" display="inline"><mml:mi>N</mml:mi></mml:math></inline-formula> in Table <xref ref-type="table" rid="T4"/>). In contrast, the results for low altitude clouds are highly representative, as they correspond to the height ranges with the largest number of observations. In these low layers, the cameras overestimate the ceilometer's CTH values, with MBE values ranging from 2.68 <inline-formula><mml:math id="M375" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> (0–1 <inline-formula><mml:math id="M376" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> range) to 0.83 <inline-formula><mml:math id="M377" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> (2–3 <inline-formula><mml:math id="M378" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> range). This overestimation is more pronounced during daytime conditions (Panel B2), which explains the poorer CTH agreement found for the daylight interval in Fig. <xref ref-type="fig" rid="F12"/>. While the potential limitations causing this bias have been addressed previously, it is important to emphasize that the ceilometer's signal often fails to penetrate optically dense low clouds, preventing the detection of higher layers. This is likely to happen more during daylight hours, when solar background radiation increases the noise in the ceilometer signal and reduces its sensitivity to higher altitudes. Consequently, the cameras, which benefit from multiple viewing angles, may be obtaining in some cases true cloud tops that the ceilometer cannot resolve due to signal extinction. Regarding the precision of the CTH retrievals, although IQR exhibits larger values for clouds below 3 <inline-formula><mml:math id="M379" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>, the SD remains relatively stable for mid level clouds (3–6 <inline-formula><mml:math id="M380" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>), showing values around 1 <inline-formula><mml:math id="M381" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. The P5 values remain closer to zero for CTH than for CBH across most intervals, revealing a lower presence of extreme outliers in the cloud top estimates, except during moonless nights. These results indicate that the camera network is capable of retrieving the CTH with high accuracy and consistency for altitudes above 3 <inline-formula><mml:math id="M382" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>.</p>
      <p id="d2e6281">In order to complement the statistical analysis, a direct comparison of two distinct days with varying cloud layer configurations is presented in Fig. <xref ref-type="fig" rid="F15"/>. It illustrates the temporal evolution of the RCS (panels A and C) obtained by the ceilometer, and the estimated CBH and CTH from the camera network and the ceilometer (panels B and D). Consistent with the previous analysis, camera values are derived from the median height within a 150 <inline-formula><mml:math id="M383" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> radius of the ceilometer's location.</p>

      <fig id="F15" specific-use="star"><label>Figure 15</label><caption><p id="d2e6297">Temporal evolution for two different days of the ceilometer range corrected signal (RCS) overlaid with the cloud base and top heights (CBH and CTH) and those estimated by the all-sky camera network. Camera values are based on the median height value within a 150 <inline-formula><mml:math id="M384" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> radius of the ceilometer location.</p></caption>
          <graphic xlink:href="https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026-f15.png"/>

        </fig>

      <p id="d2e6314">For the case of 26 January 2025, the RCS (panel A) shows the evolution of a day where a high to mid level cloud layer during the night gradually descended in altitude. At 07:00 <inline-formula><mml:math id="M385" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula>, another mid to high cloud is observed, and until 16:00 <inline-formula><mml:math id="M386" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula>, the RCS indicates the likely presence of a very low and thick cloud layer, as the ceilometer signal became saturated. Between 14:00–16:00 <inline-formula><mml:math id="M387" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula>, precipitation was likely occurring. In the afternoon, again a thick low level cloud layer appeared to saturate the RCS and at night, around 22:00–23:00 <inline-formula><mml:math id="M388" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula>, a higher cloud descended with precipitation. Regarding the CBH and CTH values in Panel B, clouds were detected by the ceilometer around 00:00 <inline-formula><mml:math id="M389" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula> about 10 <inline-formula><mml:math id="M390" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>, that the cameras do not detect; as explained previously, this is likely because thin and translucent high clouds are extremely difficult to identify at night. During the rest of the night, both the CBH and CTH from the cameras show good agreement with the ceilometer. In the twilight intervals (around 07:00 and 18:00 <inline-formula><mml:math id="M391" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula>), the cameras show a lack of sensitivity, evidenced by two gaps in the cameras retrieved CBH and CTH. During daylight hours, the discrepancy in the cameras' CTH is likely partly due to the ceilometer signal saturating, whereas the cameras provide more information by viewing from different angles. Nevertheless, these values are also noisy. Also, during intervals with rain, droplet deposition on the domes, may explain the presence of high CTH outliers.</p>
      <p id="d2e6374">In the case of 18 May 2025, the RCS (Panel C) shows clouds around 2.5 <inline-formula><mml:math id="M392" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> during the first hours of the night, followed by a cloud-free period. Around 05:00 <inline-formula><mml:math id="M393" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula>, higher clouds are seen at approximately 7.5 <inline-formula><mml:math id="M394" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. During the day, there was a more complex situation with a low layer at around 2.5 <inline-formula><mml:math id="M395" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> that was probably not very opaque, allowing another layer to be detected between 7.5–10 <inline-formula><mml:math id="M396" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. From 18:00 <inline-formula><mml:math id="M397" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula> onward, only the lower layer remained. Regarding the cloud heights in Panel D, both instruments agree throughout the day, showing the capability of the cameras network to detect different cloud layers.</p>
      <p id="d2e6426">Finally, to evaluate the broader capabilities of the proposed method, based on the cameras network, an additional comparison has been performed using a second ceilometer situated at the Research Center for the Lower Atmosphere (CIBA), 35 <inline-formula><mml:math id="M398" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> away from the primary site. This location also hosts an all-sky camera (C031, see Table <xref ref-type="table" rid="T1"/>). It is important to note that, due to the geometric limitations of the cameras' fields of view caused by the geographical camera distribution, and the criteria imposed in the proposed methodology, only high altitude clouds can be detected in this location. Figure <xref ref-type="fig" rid="F16"/> shows the camera CBH and CTH values against the ceilometer ones at CIBA station. This figure (panels A and B) clearly illustrates the mentioned limitation to high altitude layers, as no cloud retrievals are found below 7 <inline-formula><mml:math id="M399" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. Given this specific limitation, a categorical evaluation of cloud detection is not representative for this station. Camera values agree with the ceilometer cloud heights for both CBH and CTH values even for the low number of observations (CIBA's ceilometer was installed on 30 October 2025). Outliers where the cameras report high altitude clouds while the ceilometer identifies clouds at significantly lower levels (below 2 <inline-formula><mml:math id="M400" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>) can be attributed to the presence of low clouds at CIBA that attenuate the ceilometer signal, preventing the detection of higher layers, as discussed previously. These outliers impact the accuracy and precision metrics of the dataset. The MBE is shifted toward overestimation, reaching 0.99 <inline-formula><mml:math id="M401" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> for CBH and 1.19 <inline-formula><mml:math id="M402" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> for CTH. Similarly, the precision is affected, with SD values of 2.40 and 2.65 <inline-formula><mml:math id="M403" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> for CBH and CTH, respectively. Despite the presence of these outliers, it can be observed that the most frequent differences between the cameras and the ceilometer are centered around zero for both CBH and CTH. Nevertheless, if these specific outliers are discarded, the remaining data points align closely with the <inline-formula><mml:math id="M404" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>:</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> line, demonstrating that the camera network is capable of providing reliable cloud height estimates even at significant distances from the network center.</p>

      <fig id="F16" specific-use="star"><label>Figure 16</label><caption><p id="d2e6496">Bidimensional frequency histogram of median cloud heights values from the camera network within a 150 <inline-formula><mml:math id="M405" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> radius of the CIBA ceilometer location, against ceilometer values for cloud base height (CBH) and cloud top height (CTH) in panels <bold>(A)</bold> and <bold>(C)</bold>, respectively. Panels <bold>(B)</bold> and <bold>(D)</bold> represent the frequency histogram of the differences (<inline-formula><mml:math id="M406" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mtext>CBH</mml:mtext></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M407" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mtext>CTH</mml:mtext></mml:mrow></mml:math></inline-formula>) between both instruments. Filtering criteria have been applied to discard heights provided by two or fewer cameras, with fewer than 20 height values and a standard deviation higher than 1 <inline-formula><mml:math id="M408" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. Results include total number of cases <inline-formula><mml:math id="M409" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:mi>N</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, coefficient of determination (<inline-formula><mml:math id="M410" display="inline"><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>), mean bias error (MBE), root mean square error (RMSE) and standard deviation (SD).</p></caption>
          <graphic xlink:href="https://amt.copernicus.org/articles/19/5785/2026/amt-19-5785-2026-f16.png"/>

        </fig>

</sec>
</sec>
<sec id="Ch1.S5" sec-type="conclusions">
  <label>5</label><title>Conclusions</title>
      <p id="d2e6587">This work proposes a robust methodology for the identification and three dimensional localization of clouds using stereoscopic calculations, implemented through an unprecedented 20 all-sky camera dense network deployed around the city of Valladolid (Spain). It presents a novel aggregation strategy in which each camera is paired with every overlapping camera, and the resulting heights are combined onto a common spatial grid, together with a fully automated, near real time operational implementation, generating openly available cloud height products every 5 <inline-formula><mml:math id="M411" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">min</mml:mi></mml:mrow></mml:math></inline-formula> during daytime and, as a further novelty, every 2 <inline-formula><mml:math id="M412" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">min</mml:mi></mml:mrow></mml:math></inline-formula> at nighttime. The workflow also brings together for the first time a combination of different recommendations from previous studies, such as downsizing images, using rectified row-oriented  pairs of simultaneous images to improve finding pixel correlations, using blocks of neighboring pixels in the correlation to avoid mismatches, using different baseline distances and applying smoothing filters that improve the segmentation of clouds. In addition, this implementation is also relevant due to the simultaneous application of all these novelties and aggregation strategies, while significantly optimizing the processes to achieve a high computational efficiency. For the case study shown in Sect. <xref ref-type="sec" rid="Ch1.S3"/> (28 December 2025 at 11:20 <inline-formula><mml:math id="M413" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula>), the total processing time to retrieve cloud heights for the 16 available camera pairings was 102 <inline-formula><mml:math id="M414" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula> using our server infrastructure. However, this processing time is significantly optimized in the operational version through parallelization. By executing 40 processes simultaneously, a total of 120 cases (captured between 07:30–17:25 <inline-formula><mml:math id="M415" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">UTC</mml:mi></mml:mrow></mml:math></inline-formula>) were processed in just <inline-formula><mml:math id="M416" display="inline"><mml:mrow><mml:mn mathvariant="normal">6</mml:mn><mml:mtext>min</mml:mtext><mml:mn mathvariant="normal">44</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mrow class="unit"><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:mrow></mml:math></inline-formula>. This results in an effective average processing time of <inline-formula><mml:math id="M417" display="inline"><mml:mrow><mml:mn mathvariant="normal">3.37</mml:mn><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mrow class="unit"><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:mrow></mml:math></inline-formula> per case. This allows for the generation of cloud position maps, including cloud base and top height (CBH and CTH), in near-real time, representing a substantial improvement over previous implementations.</p>
      <p id="d2e6661">The wide dispersion of the network enables the retrieval of a wide range of cloud heights, effectively reaching high clouds and providing observations from distant geographic positions. Potential biases are minimized by selecting for each case only those camera pairs that offer significant overlap for specific height ranges. A fundamental aspect of this methodology is its robust filtering process, which utilizes different criteria based on defining cloud levels and frequency analysis to validate the cloud height retrievals from the multiple camera pairs. These thresholds were selected empirically from a set of representative reference cases, balancing the rejection of outliers against the retention of a sufficient number of valid retrievals. This filtering stage is essential for integrating the vast amount of data generated by the network, as it successfully discards unrealistic values and allows for the determination of both CBH and CTH values.</p>
      <p id="d2e6664">Validation against a significantly larger dataset of ceilometer observations than those used in previous literature confirms that the network consistently detects clouds across a wide range of conditions. The proposed method is capable of obtaining the CBH with an accuracy, given by the mean bias error (MBE), of <inline-formula><mml:math id="M418" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.14 <inline-formula><mml:math id="M419" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> and a precision, reflected by the standard deviation (SD) of 0.78 <inline-formula><mml:math id="M420" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>. In general, precision decreases with cloud height, and accuracy deteriorates for clouds above 10 <inline-formula><mml:math id="M421" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>, especially during low light conditions such as night and twilight, corresponding to solar zenith angles (SZA) greater than 80°. This degraded performance at high cloud heights may be partly attributed to the presence of dirt or dust but also internal reflections over the camera domes, which can generate artifacts mistaken for low clouds. Furthermore, high clouds are more difficult to observe in low light situations, where the segmentation model also exhibits its poorest performance.</p>
      <p id="d2e6698">In addition, the proposed methodology is capable of estimating the CTH with considerable accuracy for clouds between 3–11 <inline-formula><mml:math id="M422" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>, with MBE values ranging from 0.46 to <inline-formula><mml:math id="M423" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.34 <inline-formula><mml:math id="M424" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula>, although it tends to overestimate the height of low clouds. This overestimation might not be entirely real, potentially resulting from the ceilometer's limited sensitivity to higher cloud layers when low level clouds are present. Under daytime conditions, the proposed method predicts the presence of clouds in 86 <inline-formula><mml:math id="M425" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula> of the cases identified by the reference instrument. This percentage decreases significantly at night to 62 <inline-formula><mml:math id="M426" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula> regardless of lunar illumination, and reaches its lowest point during twilight at 55 <inline-formula><mml:math id="M427" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">%</mml:mi></mml:mrow></mml:math></inline-formula>. This lower identification rate is primarily due to the reduced performance of the segmentation model in these conditions. Additionally, longer exposure times at night result in increased image noise and sometimes in motion blur. This negatively affects the correlation between pixel blocks during the matching process.</p>
      <p id="d2e6750">The reliability of the system has been further corroborated through comparison with a second ceilometer located more than 35 <inline-formula><mml:math id="M428" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> away from the center of the network. This analysis confirms that the method accurately identifies CBH and CTH even in locations distant from the densest part of the network, with the most frequent differences falling within the <inline-formula><mml:math id="M429" display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>0.2–0.2 <inline-formula><mml:math id="M430" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">km</mml:mi></mml:mrow></mml:math></inline-formula> range. However, due to geometric limitations, the minimum detectable cloud height increases with distance from the network; thus, lower clouds are only detectable near the cameras, while the detection area for high clouds is significantly larger.</p>
      <p id="d2e6776">This methodology provides not only vertical resolution but also high spatial resolution (0.0005° <inline-formula><mml:math id="M431" display="inline"><mml:mrow><mml:mo>∼</mml:mo><mml:mn mathvariant="normal">50</mml:mn></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M432" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula>), producing cloud masks similar to those obtained by satellites. A case study comparison with Sentinel-2 revealed that the methodology effectively captures the spatial distribution of clouds, with discrepancies mainly found at cloud edges due to temporal mismatches or specific filtering thresholds. These results highlight the potential of the PRESENTE network for satellite calibration and validation tasks with a high spatial and temporal resolution even in near-real time.</p>
      <p id="d2e6797">Although this study focused on CBH and CTH, with the aforementioned limitations, the developed methodology has the potential to reconstruct full 3D cloud structures, which can be explored in future work. This is particularly valuable for cloud modeling and monitoring in near-real time. Also, for studying cloud interactions with other atmospheric components such as aerosols or solar and thermal radiation. The adaptability of the methodology, including the ability to increase temporal resolution as needed or to be applied to other scaled cameras network, establishes it as a powerful and flexible tool for atmospheric research.</p>
      <p id="d2e6800">To ensure the generation of high quality products, several critical factors must be meticulously managed, including the maintenance of clean camera domes to prevent the appearance of artifacts, the precise synchronization of internal clocks to ensure simultaneous image acquisition, and the implementation of geometric calibrations that are both reliable and frequently updated to account for even minor positional changes. Looking ahead, the methodology could be further improved by establishing dynamic filtering thresholds tailored to cloud height and the number of available images, as well as by developing an advanced segmentation model capable of more effectively distinguishing between clear sky and clouds, with a specific focus on high clouds during both daytime and challenging low-light conditions such as nighttime or during sunrise and sunset.</p>
</sec>

      
      </body>
    <back><notes notes-type="dataavailability"><title>Data availability</title>

      <p id="d2e6807">All-sky cameras' images and cloud base and top height maps are available at <uri>https://goa.uva.es/proyecto-presente/</uri> (last access: 9 September 2026) and upon request.</p>
  </notes><app-group>
        <supplementary-material position="anchor"><p id="d2e6813">Supplement associated with this article includes additional validation figures (Figs. S1–S5). The supplement related to this article is available online at <inline-supplementary-material xlink:href="https://doi.org/10.5194/amt-19-5785-2026-supplement" xlink:title="pdf">https://doi.org/10.5194/amt-19-5785-2026-supplement</inline-supplementary-material>.</p></supplementary-material>
        </app-group><notes notes-type="authorcontribution"><title>Author contributions</title>

      <p id="d2e6823">Conceptualization: CHdB, RR; Methodology: CHdB, RR; Software: CHdB, RR, RG, JG, JCAS; Validation: CHdB, RR, SHA, DGF, JG, BL, JCAS, CT, VC; Investigation: CHdB, RR; Data curation: CHdB, RR; Writing  –  original draft: CHdB, RR; Writing  –  review and editing: SHA, DGF, JG, BL, JCAS, CT, VC; Visualization: CHdB, RR; Supervision: RR, RG, DM, CT; Project administration: RR, DM, CT; Funding acquisition: RR, DM, CT, AC, VC, AdF; Resources: RC, RG.</p>
  </notes><notes notes-type="competinginterests"><title>Competing interests</title>

      <p id="d2e6829">The contact author has declared that none of the authors has any competing interests.</p>
  </notes><notes notes-type="disclaimer"><title>Disclaimer</title>

      <p id="d2e6835">Publisher's note: Copernicus Publications remains neutral with regard to jurisdictional claims made in the text, published maps, institutional affiliations, or any other geographical representation in this paper. The authors bear the ultimate responsibility for providing appropriate place names. Views expressed in the text are those of the authors and do not necessarily reflect the views of the publisher.</p>
  </notes><notes notes-type="sistatement"><title>Special issue statement</title>

      <p id="d2e6841">This article is part of the special issue “Sun-photometric measurements of aerosols: harmonization, comparisons, synergies, effects, and applications”. It is not associated with a conference.</p>
  </notes><ack><title>Acknowledgements</title><p id="d2e6847">The authors would like to thank José Luis Martín for his help in maintaining the PRESENTE network. Our gratitude is extended to the City Councils of Valladolid, La Cistérniga, Santovenia de Pisuerga, and Zaratán for their institutional support. Furthermore, we sincerely thank the Agricultural Technology Institute of Castilla y León (ITACyL), the AEMet Delegation in Valladolid, and the various participating educational centers, including the faculties and schools of the University of Valladolid (Science, Law, Education, Economics, Agricultural Engineering and Architecture) as well as the regional primary and secondary schools (CEIP, IES, IESO, and CEE) for their collaboration and for providing the facilities to host the camera systems.</p></ack><notes notes-type="financialsupport"><title>Financial support</title>

      <p id="d2e6852">This research has been supported by the Ministerio de Ciencia e Innovación (grant nos. TED2021-131211B-I00375 and PID2024-157697OB-I00), the European Commission (GRASP-SYNERGY grant no. 10 101131631), the European Regional Development Fund (EUBURN-RISK, grant no. INTERREG-SUDOE; S2/2.4/F0327), the Consejería de Educación, Junta de Castilla y León (grant no. CLU-2023-1-05) and the European Cooperation in Science and Technology (COST Action CA21119 HARMONIA).</p>
  </notes><notes notes-type="reviewstatement"><title>Review statement</title>

      <p id="d2e6858">This paper was edited by Ilias Fountoulakis and reviewed by two anonymous referees.</p>
  </notes><ref-list>
    <title>References</title>

      <ref id="bib1.bibx1"><label>Antuña-Sánchez et al.(2022)</label><mixed-citation>Antuña-Sánchez, J. C., Román, R., Bosch, J., Toledano, C., Mateos, D., González, R., Cachorro, V. E., and de Frutos, A. M.: ORION software tool for the geometrical calibration of all-sky cameras, PLoS One, 17, <ext-link xlink:href="https://doi.org/10.1371/journal.pone.0265959" ext-link-type="DOI">10.1371/journal.pone.0265959</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx2"><label>Arbizu-Barrena et al.(2015)</label><mixed-citation>Arbizu-Barrena, C., Pozo-Vázquez, D., Ruiz-Arias, J. A., and Tovar-Pescador, J.: Macroscopic cloud properties in the WRF NWP model: an assessment using sky camera and ceilometer data, J. Geophys. Res.-Atmos., 120, 10,297–10,312, <ext-link xlink:href="https://doi.org/10.1002/2015JD023502" ext-link-type="DOI">10.1002/2015JD023502</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bibx3"><label>Aybar et al.(2022)</label><mixed-citation>Aybar, C., Ysuhuaylas, L., Loja, J., Gonzales, K., Herrera, F., Bautista, L., Yali, R., Flores, A., Diaz, L., Cuenca, N., Espinoza, W., Prudencio, F., Llactayo, V., Montero, D., Sudmanns, M., Tiede, D., Mateo-García, G., and Gómez-Chova, L.: CloudSEN12, a global dataset for semantic understanding of cloud and cloud shadow in Sentinel-2, Scientific Data, 9, 782, <ext-link xlink:href="https://doi.org/10.1038/s41597-022-01878-2" ext-link-type="DOI">10.1038/s41597-022-01878-2</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx4"><label>Beekmans et al.(2016)</label><mixed-citation>Beekmans, C., Schneider, J., Läbe, T., Lennefer, M., Stachniss, C., and Simmer, C.: Cloud photogrammetry with dense stereo for fisheye cameras, Atmos. Chem. Phys., 16, 14231–14248, <ext-link xlink:href="https://doi.org/10.5194/acp-16-14231-2016" ext-link-type="DOI">10.5194/acp-16-14231-2016</ext-link>, 2016.</mixed-citation></ref>
      <ref id="bib1.bibx5"><label>Bennouna et al.(2013)</label><mixed-citation>Bennouna, Y., Cachorro, V., Torres, B., Toledano, C., Berjón, A., de Frutos, A., and Alonso Fernández Coppel, I.: Atmospheric turbidity determined by the annual cycle of the aerosol optical depth over north-center Spain from ground (AERONET) and satellite (MODIS), Atmos. Environ., 67, 352–364, <ext-link xlink:href="https://doi.org/10.1016/j.atmosenv.2012.10.065" ext-link-type="DOI">10.1016/j.atmosenv.2012.10.065</ext-link>, 2013.</mixed-citation></ref>
      <ref id="bib1.bibx6"><label>Blum et al.(2021)</label><mixed-citation>Blum, N. B., Nouri, B., Wilbert, S., Schmidt, T., Lünsdorf, O., Stührenberg, J., Heinemann, D., Kazantzidis, A., and Pitz-Paal, R.: Cloud height measurement by a network of all-sky imagers, Atmos. Meas. Tech., 14, 5199–5224, <ext-link xlink:href="https://doi.org/10.5194/amt-14-5199-2021" ext-link-type="DOI">10.5194/amt-14-5199-2021</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx7"><label>Borque et al.(2014)</label><mixed-citation>Borque, P., Kollias, P., and Giangrande, S.: First observations of tracking clouds using scanning ARM cloud radars, J. Appl. Meteorol., 53, 2732–2746, <ext-link xlink:href="https://doi.org/10.1175/JAMC-D-13-0182.1" ext-link-type="DOI">10.1175/JAMC-D-13-0182.1</ext-link>, 2014.</mixed-citation></ref>
      <ref id="bib1.bibx8"><label>Cal(2026)</label><mixed-citation>Cal, A.: CLOSDI: a novel spectral index for cloud shadow detection in Sentinel-2 imagery using NDVI and EVI2, Remote Sensing Applications: Society and Environment, 42, 101990, <ext-link xlink:href="https://doi.org/10.1016/j.rsase.2026.101990" ext-link-type="DOI">10.1016/j.rsase.2026.101990</ext-link>, 2026.</mixed-citation></ref>
      <ref id="bib1.bibx9"><label>Calbó and Sabburg(2008)</label><mixed-citation>Calbó, J. and Sabburg, J.: Feature extraction from whole-sky ground-based images for cloud-type recognition, J. Atmos. Ocean. Tech., 25, 3–14, <ext-link xlink:href="https://doi.org/10.1175/2007JTECHA959.1" ext-link-type="DOI">10.1175/2007JTECHA959.1</ext-link>, 2008.</mixed-citation></ref>
      <ref id="bib1.bibx10"><label>Cazorla et al.(2017)</label><mixed-citation>Cazorla, A., Casquero-Vera, J. A., Román, R., Guerrero-Rascado, J. L., Toledano, C., Cachorro, V. E., Orza, J. A. G., Cancillo, M. L., Serrano, A., Titos, G., Pandolfi, M., Alastuey, A., Hanrieder, N., and Alados-Arboledas, L.: Near-real-time processing of a ceilometer network assisted with sun-photometer data: monitoring a dust outbreak over the Iberian Peninsula, Atmos. Chem. Phys., 17, 11861–11876, <ext-link xlink:href="https://doi.org/10.5194/acp-17-11861-2017" ext-link-type="DOI">10.5194/acp-17-11861-2017</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx11"><label>Cirés et al.(2019)</label><mixed-citation>Cirés, E., Marcos, J., de la Parra, I., García, M., and Marroyo, L.: The potential of forecasting in reducing the LCOE in PV plants under ramp-rate restrictions, Energy, 188, 116053, <ext-link xlink:href="https://doi.org/10.1016/j.energy.2019.116053" ext-link-type="DOI">10.1016/j.energy.2019.116053</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx12"><label>Costa-Surós et al.(2013)</label><mixed-citation>Costa-Surós, M., Calbó, J., González, J., and Martin-Vide, J.: Behavior of cloud base height from ceilometer measurements, Atmos. Res., 127, 64–76, <ext-link xlink:href="https://doi.org/10.1016/j.atmosres.2013.02.005" ext-link-type="DOI">10.1016/j.atmosres.2013.02.005</ext-link>, 2013.</mixed-citation></ref>
      <ref id="bib1.bibx13"><label>Crispel and Roberts(2018)</label><mixed-citation>Crispel, P. and Roberts, G.: All-sky photogrammetry techniques to georeference a cloud field, Atmos. Meas. Tech., 11, 593–609, <ext-link xlink:href="https://doi.org/10.5194/amt-11-593-2018" ext-link-type="DOI">10.5194/amt-11-593-2018</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bibx14"><label>Drusch et al.(2012)</label><mixed-citation>Drusch, M., Del Bello, U., Carlier, S., Colin, O., Fernandez, V., Gascon, F., Hoersch, B., Isola, C., Laberinti, P., Martimort, P., Meygret, A., Spoto, F., Sy, O., Marchese, F., and Bargellini, P.: Sentinel-2: ESA's optical high-resolution mission for GMES operational services, Remote Sens. Environ., 120, 25–36, <ext-link xlink:href="https://doi.org/10.1016/j.rse.2011.11.026" ext-link-type="DOI">10.1016/j.rse.2011.11.026</ext-link>, 2012.</mixed-citation></ref>
      <ref id="bib1.bibx15"><label>Gatón et al.(2026)</label><mixed-citation>Gatón, J., Román, R., Guzman, C., González-Fernández, D., Longarela, B., Toledano, C., and González, R.: Multi-frame cloud prediction in all-sky images from RGB images and segmented masks, Sol. Energy, 311, 114515, <ext-link xlink:href="https://doi.org/10.1016/j.solener.2026.114515" ext-link-type="DOI">10.1016/j.solener.2026.114515</ext-link>, 2026.</mixed-citation></ref>
      <ref id="bib1.bibx16"><label>González-Fernández et al.(2024)</label><mixed-citation>González-Fernández, D., Román, R., Mateos, D., Herrero del Barrio, C., Cachorro, V. E., Copes, G., Sánchez, R., García, R. D., Doppler, L., Herrero-Anta, S., Antuña-Sánchez, J. C., Barreto, Á, González, R., Gatón, J., Calle, A., Toledano, C., and de Frutos, Á: Retrieval of solar shortwave irradiance from all-sky camera images, Remote Sens.-Basel, 16, <ext-link xlink:href="https://doi.org/10.3390/rs16203821" ext-link-type="DOI">10.3390/rs16203821</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx17"><label>Gregor et al.(2023)</label><mixed-citation>Gregor, P., Zinner, T., Jakub, F., and Mayer, B.: Validation of a camera-based intra-hour irradiance nowcasting model using synthetic cloud data, Atmos. Meas. Tech., 16, 3257–3271, <ext-link xlink:href="https://doi.org/10.5194/amt-16-3257-2023" ext-link-type="DOI">10.5194/amt-16-3257-2023</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bibx18"><label>Hamann et al.(2014)</label><mixed-citation>Hamann, U., Walther, A., Baum, B., Bennartz, R., Bugliaro, L., Derrien, M., Francis, P. N., Heidinger, A., Joro, S., Kniffka, A., Le Gléau, H., Lockhoff, M., Lutz, H.-J., Meirink, J. F., Minnis, P., Palikonda, R., Roebeling, R., Thoss, A., Platnick, S., Watts, P., and Wind, G.: Remote sensing of cloud top pressure/height from SEVIRI: analysis of ten current retrieval algorithms, Atmos. Meas. Tech., 7, 2839–2867, <ext-link xlink:href="https://doi.org/10.5194/amt-7-2839-2014" ext-link-type="DOI">10.5194/amt-7-2839-2014</ext-link>, 2014.</mixed-citation></ref>
      <ref id="bib1.bibx19"><label>Hartmann(1993)</label><mixed-citation>Hartmann, D.: Chapter 6 Radiative effects of clouds on Earth's climate, in: Aerosol–Cloud–Climate Interactions, edited by: Hobbs, P. V., Vol. 54 of International Geophysics, Academic Press, <ext-link xlink:href="https://doi.org/10.1016/S0074-6142(08)60215-6" ext-link-type="DOI">10.1016/S0074-6142(08)60215-6</ext-link>, 151–173, 1993.</mixed-citation></ref>
      <ref id="bib1.bibx20"><label>Herrero del Barrio et al.(2024)</label><mixed-citation>Herrero del Barrio, C., Román, R., González, R., Cazorla, A., Herreras-Giralda, M., Antuña-Sánchez, J. C., Molero, F., Navas-Guzmán, F., Serrano, A., Obregón, M. Á, Sola, Y., Pandolfi, M., Herrero-Anta, S., González-Fernández, D., Muñiz-Rosado, J., Mateos, D., Calle, A., Toledano, C., Cachorro, V. E., and de Frutos, Á M.: CAECENET: an automatic system processing photometer and ceilometer data from different networks to provide columnar and vertically-resolved aerosol properties, PLoS One, 19, 1–23, <ext-link xlink:href="https://doi.org/10.1371/journal.pone.0311990" ext-link-type="DOI">10.1371/journal.pone.0311990</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx21"><label>Huertas-Tato et al.(2017)</label><mixed-citation>Huertas-Tato, J., Rodríguez-Benítez, F. J., Arbizu-Barrena, C., Aler-Mur, R., Galvan-Leon, I., and Pozo-Vázquez, D.: Automatic cloud-type classification based on the combined use of a sky camera and a ceilometer, J. Geophys. Res.-Atmos., 122, 11,045–11,061, <ext-link xlink:href="https://doi.org/10.1002/2017JD027131" ext-link-type="DOI">10.1002/2017JD027131</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx22"><label>INE(2025)</label><mixed-citation>INE: Instituto Nacional de Estadística. Valladolid: Población por municipios y sexo (Tabla 2904), cifras oficiales de población de los municipios españoles: Revisión del Padrón Municipal, <uri>https://www.ine.es/jaxiT3/Datos.htm?t=2904</uri> (last access: 13 February 2026), 2025.</mixed-citation></ref>
      <ref id="bib1.bibx23"><label>IPCC(2023)</label><mixed-citation>IPCC: Intergovernmental Panel on Climate Change. The Earth's Energy Budget, Climate Feedbacks and Climate Sensitivity, Cambridge University Press, 923–1054, <ext-link xlink:href="https://doi.org/10.1017/9781009157896.009" ext-link-type="DOI">10.1017/9781009157896.009</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bibx24"><label>Isaac et al.(2014)</label><mixed-citation>Isaac, G. A., Bailey, M., Boudala, F. S., Burrows, W. R., Cober, S. G., Crawford, R. W., Donaldson, N., Gultepe, I., Hansen, B., Heckman, I., Huang, L. X., Ling, A., Mailhot, J., Milbrandt, J. A., Reid, J., and Fournier, M.: The Canadian Airport Nowcasting System (CAN-Now), Meteorol. Appl., 21, 30–49, <ext-link xlink:href="https://doi.org/10.1002/met.1342" ext-link-type="DOI">10.1002/met.1342</ext-link>, 2014.</mixed-citation></ref>
      <ref id="bib1.bibx25"><label>King et al.(2013)</label><mixed-citation>King, M. D., Platnick, S., Menzel, W. P., Ackerman, S. A., and Hubanks, P. A.: Spatial and temporal distribution of clouds observed by MODIS onboard the terra and aqua satellites, IEEE T. Geosci. Remote, 51, 3826–3852, <ext-link xlink:href="https://doi.org/10.1109/TGRS.2012.2227333" ext-link-type="DOI">10.1109/TGRS.2012.2227333</ext-link>, 2013.</mixed-citation></ref>
      <ref id="bib1.bibx26"><label>Lamer et al.(2014)</label><mixed-citation>Lamer, K., Tatarevic, A., Jo, I., and Kollias, P.: Evaluation of gridded scanning ARM cloud radar reflectivity observations and vertical doppler velocity retrievals, Atmos. Meas. Tech., 7, 1089–1103, <ext-link xlink:href="https://doi.org/10.5194/amt-7-1089-2014" ext-link-type="DOI">10.5194/amt-7-1089-2014</ext-link>, 2014.</mixed-citation></ref>
      <ref id="bib1.bibx27"><label>Li et al.(2022)</label><mixed-citation>Li, X., Wang, B., Qiu, B., and Wu, C.: An all-sky camera image classification method using cloud cover features, Atmos. Meas. Tech., 15, 3629–3639, <ext-link xlink:href="https://doi.org/10.5194/amt-15-3629-2022" ext-link-type="DOI">10.5194/amt-15-3629-2022</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx28"><label>Liang et al.(2024)</label><mixed-citation>Liang, K., Yang, G., Zuo, Y., Chen, J., Sun, W., Meng, X., and Chen, B.: A novel method for cloud and cloud shadow detection based on the maximum and minimum values of Sentinel-2 time series images, Remote Sens.-Basel, 16, <ext-link xlink:href="https://doi.org/10.3390/rs16081392" ext-link-type="DOI">10.3390/rs16081392</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx29"><label>Lowe(2004)</label><mixed-citation>Lowe, D. G.: Distinctive image features from scale-invariant keypoints, Int. J. Comput. Vision, 60, 91–110, <ext-link xlink:href="https://doi.org/10.1023/B:VISI.0000029664.99615.94" ext-link-type="DOI">10.1023/B:VISI.0000029664.99615.94</ext-link>, 2004.</mixed-citation></ref>
      <ref id="bib1.bibx30"><label>Lufft(2021)</label><mixed-citation>Lufft: User Manual Lufft CHM 15k Ceilometer, Lufft, Fellbach, Germany, revision r19 edn., software version 1.110, <uri>https://www.kippzonen.com/products/chm15k_ceilometer</uri> (last access: 9 September 2026),  2021.</mixed-citation></ref>
      <ref id="bib1.bibx31"><label>Martucci et al.(2010)</label><mixed-citation>Martucci, G., Milroy, C., and O'Dowd, C. D.: Detection of cloud-base height using Jenoptik CHM15K and Vaisala CL31 ceilometers, J. Atmos. Ocean. Tech., 27, 305–318, <ext-link xlink:href="https://doi.org/10.1175/2009JTECHA1326.1" ext-link-type="DOI">10.1175/2009JTECHA1326.1</ext-link>, 2010.</mixed-citation></ref>
      <ref id="bib1.bibx32"><label>Mateos et al.(2013)</label><mixed-citation>Mateos, D., Antón, M., Sanchez-Lorenzo, A., Calbó, J., and Wild, M.: Long-term changes in the radiative effects of aerosols and clouds in a mid-latitude region (1985–2010), Global Planet. Change, 111, 288–295, <ext-link xlink:href="https://doi.org/10.1016/j.gloplacha.2013.10.004" ext-link-type="DOI">10.1016/j.gloplacha.2013.10.004</ext-link>, 2013.</mixed-citation></ref>
      <ref id="bib1.bibx33"><label>Nguyen and Kleissl(2014)</label><mixed-citation>Nguyen, D. A. and Kleissl, J.: Stereographic methods for cloud base height determination using two sky imagers, Sol. Energy, 107, 495–509, <ext-link xlink:href="https://doi.org/10.1016/j.solener.2014.05.005" ext-link-type="DOI">10.1016/j.solener.2014.05.005</ext-link>, 2014.</mixed-citation></ref>
      <ref id="bib1.bibx34"><label>Noh et al.(2017)</label><mixed-citation>Noh, Y.-J., Forsythe, J. M., Miller, S. D., Seaman, C. J., Li, Y., Heidinger, A. K., Lindsey, D. T., Rogers, M. A., and Partain, P. T.: Cloud-base height estimation from VIIRS. Part II: A statistical algorithm based on a-train satellite data, J. Atmos. Ocean. Tech., 34, 585–598, <ext-link xlink:href="https://doi.org/10.1175/JTECH-D-16-0110.1" ext-link-type="DOI">10.1175/JTECH-D-16-0110.1</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx35"><label>Nouri et al.(2019)</label><mixed-citation>Nouri, B., Kuhn, P., Wilbert, S., Hanrieder, N., Prahl, C., Zarzalejo, L., Kazantzidis, A., Blanc, P., and Pitz-Paal, R.: Cloud height and tracking accuracy of three all sky imager systems for individual clouds, Sol. Energy, 177, 213–228, <ext-link xlink:href="https://doi.org/10.1016/j.solener.2018.10.079" ext-link-type="DOI">10.1016/j.solener.2018.10.079</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx36"><label>Obregón et al.(2019)</label><mixed-citation>Obregón, M. Á, Rodrigues, G., Costa, M. J., Potes, M., and Silva, A. M.: Validation of ESA Sentinel-2 L2A aerosol optical thickness and columnar water vapour during 2017–2018, Remote Sens.-Basel, 11, <ext-link xlink:href="https://doi.org/10.3390/rs11141649" ext-link-type="DOI">10.3390/rs11141649</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx37"><label>Papachristopoulou et al.(2024)</label><mixed-citation>Papachristopoulou, K., Fountoulakis, I., Bais, A. F., Psiloglou, B. E., Papadimitriou, N., Raptis, I.-P., Kazantzidis, A., Kontoes, C., Hatzaki, M., and Kazadzis, S.: Effects of clouds and aerosols on downwelling surface solar irradiance nowcasting and short-term forecasting, Atmos. Meas. Tech., 17, 1851–1877, <ext-link xlink:href="https://doi.org/10.5194/amt-17-1851-2024" ext-link-type="DOI">10.5194/amt-17-1851-2024</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx38"><label>Papadimitriou et al.(2026)</label><mixed-citation>Papadimitriou, N., Fountoulakis, I., Gkikas, A., Papachristopoulou, K., Kazantzidis, A., Kazadzis, S., Pfenninger, S., Kapsomenakis, J., Eleftheratos, K., Argiriou, A. A., Doppler, L., and Zerefos, C. S.: PV power modelling using solar radiation from ground-based measurements and CAMS: Assessing the diffuse component related uncertainties leveraging the Global Solar Energy Estimator (GSEE), Atmos. Meas. Tech., 19, 1227–1244, <ext-link xlink:href="https://doi.org/10.5194/amt-19-1227-2026" ext-link-type="DOI">10.5194/amt-19-1227-2026</ext-link>, 2026.</mixed-citation></ref>
      <ref id="bib1.bibx39"><label>Richter et al.(2012)</label><mixed-citation>Richter, R., Louis, J., and Müller-Wilm, U.: Sentinel-2 MSI – Level 2A products algorithm theoretical basis document, European Space Agency, (Special Publication) ESA SP 49, 1–72, <uri>https://step.esa.int/thirdparties/sen2cor/2.3.0/[L2A-ATBD] S2PAD-ATBD-0001 [2.0].pdf</uri> (last access: 9 September 2026), 2012.</mixed-citation></ref>
      <ref id="bib1.bibx40"><label>Rodríguez-Benítez et al.(2021)</label><mixed-citation>Rodríguez-Benítez, F. J., López-Cuesta, M., Arbizu-Barrena, C., Fernández-León, M. M., Pamos-Ureña, M. Á, Tovar-Pescador, J., Santos-Alamillos, F. J., and Pozo-Vázquez, D.: Assessment of new solar radiation nowcasting methods based on sky-camera and satellite imagery, Appl. Energ., 292, 116838, <ext-link xlink:href="https://doi.org/10.1016/j.apenergy.2021.116838" ext-link-type="DOI">10.1016/j.apenergy.2021.116838</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx41"><label>Román et al.(2025)</label><mixed-citation>Román, R., González-Fernández, D., Antuña-Sánchez, J. C., Herrero del Barrio, C., Herrero-Anta, S., Barreto, Á., Cachorro, V. E., Doppler, L., González, R., Ritter, C., Mateos, D., Kouremeti, N., Copes, G., Calle, A., Granados-Muñoz, M. J., Toledano, C., and de Frutos, Á. M.: Star photometry with all-sky cameras to retrieve aerosol optical depth at nighttime, Atmos. Meas. Tech., 18, 2847–2875, <ext-link xlink:href="https://doi.org/10.5194/amt-18-2847-2025" ext-link-type="DOI">10.5194/amt-18-2847-2025</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bibx42"><label>Román et al.(2026)</label><mixed-citation>Román, R., Gatón, J., González-Fernández, D., Herrero-Anta, S., Herrero del Barrio, C., Longarela, B., Martín Marcos, J. L., and Gonzalez, R.: GOA-UVa All-Sky Segmentation U-Net Model, Zenodo [code], <ext-link xlink:href="https://doi.org/10.5281/zenodo.18894938" ext-link-type="DOI">10.5281/zenodo.18894938</ext-link>, 2026.</mixed-citation></ref>
      <ref id="bib1.bibx43"><label>Scaramuzza et al.(2006)</label><mixed-citation>Scaramuzza, D., Martinelli, A., and Siegwart, R. Y.: A Flexible Technique for Accurate Omnidirectional Camera Calibration and Structure from Motion, Fourth IEEE International Conference on Computer Vision Systems (ICVS'06), 45–45, <ext-link xlink:href="https://doi.org/10.1109/ICVS.2006.3" ext-link-type="DOI">10.1109/ICVS.2006.3</ext-link>, 2006.</mixed-citation></ref>
      <ref id="bib1.bibx44"><label>Seiz and Davies(2006)</label><mixed-citation>Seiz, G. and Davies, R.: Reconstruction of cloud geometry from multi-view satellite images, Remote Sens. Environ., 100, 143–149, <ext-link xlink:href="https://doi.org/10.1016/j.rse.2005.09.016" ext-link-type="DOI">10.1016/j.rse.2005.09.016</ext-link>, 2006.</mixed-citation></ref>
      <ref id="bib1.bibx45"><label>Sovdat et al.(2019)</label><mixed-citation>Sovdat, B., Kadunc, M., Batič, M., and Milčinski, G.: Natural color representation of Sentinel-2 data, Remote Sens. Environ., 225, 392–402, <ext-link xlink:href="https://doi.org/10.1016/j.rse.2019.01.036" ext-link-type="DOI">10.1016/j.rse.2019.01.036</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx46"><label>Stephens(2005)</label><mixed-citation>Stephens, G. L.: Cloud feedbacks in the climate system: a critical review, J. Climate, 18, 237–273, <ext-link xlink:href="https://doi.org/10.1175/JCLI-3243.1" ext-link-type="DOI">10.1175/JCLI-3243.1</ext-link>, 2005.</mixed-citation></ref>
      <ref id="bib1.bibx47"><label>Yu et al.(2024)</label><mixed-citation>Yu, H., Sun, X., Tu, B., Ti, R., Ma, J., Hong, J., Chen, C., Liu, X., Huang, H., Wang, Z., Ahmad, S., Wang, Y., Fan, Y., Li, Y., Wei, Y., Wang, Y., and Wang, Y.: Towards multi-views cloud retrieval accounting for the 3-D structure collected by directional polarization camera, ISPRS J. Photogramm., 212, 146–163, <ext-link xlink:href="https://doi.org/10.1016/j.isprsjprs.2024.04.028" ext-link-type="DOI">10.1016/j.isprsjprs.2024.04.028</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx48"><label>Zhai et al.(2018)</label><mixed-citation>Zhai, H., Zhang, H., Zhang, L., and Li, P.: Cloud/shadow detection based on spectral indices for multi/hyperspectral optical remote sensing imagery, ISPRS J. Photogramm., 144, 235–253, <ext-link xlink:href="https://doi.org/10.1016/j.isprsjprs.2018.07.006" ext-link-type="DOI">10.1016/j.isprsjprs.2018.07.006</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bibx49"><label>Zhang et al.(2025)</label><mixed-citation>Zhang, W., Li, J., Li, J., Xu, S., Zhang, L., Wang, Y., and Huang, J.: Cloud heights retrieval from passive satellite measurements using lapse rate information, Remote Sens. Environ., 319, 114622, <ext-link xlink:href="https://doi.org/10.1016/j.rse.2025.114622" ext-link-type="DOI">10.1016/j.rse.2025.114622</ext-link>, 2025.</mixed-citation></ref>

  </ref-list></back>
    <!--<article-title-html>Cloud height mapping using multi simultaneous sky images from an all-sky camera network</article-title-html>
<abstract-html/>
<ref-html id="bib1.bib1"><label>Antuña-Sánchez et al.(2022)</label><mixed-citation>
       Antuña-Sánchez, J. C., Román, R., Bosch, J., Toledano, C., Mateos, D., González, R., Cachorro, V. E., and de Frutos, A. M.: ORION software tool for the geometrical calibration of all-sky cameras, PLoS One, 17, <a href="https://doi.org/10.1371/journal.pone.0265959" target="_blank">https://doi.org/10.1371/journal.pone.0265959</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib2"><label>Arbizu-Barrena et al.(2015)</label><mixed-citation>
       Arbizu-Barrena, C., Pozo-Vázquez, D., Ruiz-Arias, J. A., and Tovar-Pescador, J.: Macroscopic cloud properties in the WRF NWP model: an assessment using sky camera and ceilometer data, J. Geophys. Res.-Atmos., 120, 10,297–10,312, <a href="https://doi.org/10.1002/2015JD023502" target="_blank">https://doi.org/10.1002/2015JD023502</a>, 2015.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib3"><label>Aybar et al.(2022)</label><mixed-citation>
       Aybar, C., Ysuhuaylas, L., Loja, J., Gonzales, K., Herrera, F., Bautista, L., Yali, R., Flores, A., Diaz, L., Cuenca, N., Espinoza, W., Prudencio, F., Llactayo, V., Montero, D., Sudmanns, M., Tiede, D., Mateo-García, G., and Gómez-Chova, L.: CloudSEN12, a global dataset for semantic understanding of cloud and cloud shadow in Sentinel-2, Scientific Data, 9, 782, <a href="https://doi.org/10.1038/s41597-022-01878-2" target="_blank">https://doi.org/10.1038/s41597-022-01878-2</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib4"><label>Beekmans et al.(2016)</label><mixed-citation>
       Beekmans, C., Schneider, J., Läbe, T., Lennefer, M., Stachniss, C., and Simmer, C.: Cloud photogrammetry with dense stereo for fisheye cameras, Atmos. Chem. Phys., 16, 14231–14248, <a href="https://doi.org/10.5194/acp-16-14231-2016" target="_blank">https://doi.org/10.5194/acp-16-14231-2016</a>, 2016.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib5"><label>Bennouna et al.(2013)</label><mixed-citation>
       Bennouna, Y., Cachorro, V., Torres, B., Toledano, C., Berjón, A., de Frutos, A., and Alonso Fernández Coppel, I.: Atmospheric turbidity determined by the annual cycle of the aerosol optical depth over north-center Spain from ground (AERONET) and satellite (MODIS), Atmos. Environ., 67, 352–364, <a href="https://doi.org/10.1016/j.atmosenv.2012.10.065" target="_blank">https://doi.org/10.1016/j.atmosenv.2012.10.065</a>, 2013.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib6"><label>Blum et al.(2021)</label><mixed-citation>
       Blum, N. B., Nouri, B., Wilbert, S., Schmidt, T., Lünsdorf, O., Stührenberg, J., Heinemann, D., Kazantzidis, A., and Pitz-Paal, R.: Cloud height measurement by a network of all-sky imagers, Atmos. Meas. Tech., 14, 5199–5224, <a href="https://doi.org/10.5194/amt-14-5199-2021" target="_blank">https://doi.org/10.5194/amt-14-5199-2021</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib7"><label>Borque et al.(2014)</label><mixed-citation>
       Borque, P., Kollias, P., and Giangrande, S.: First observations of tracking clouds using scanning ARM cloud radars, J. Appl. Meteorol., 53, 2732–2746, <a href="https://doi.org/10.1175/JAMC-D-13-0182.1" target="_blank">https://doi.org/10.1175/JAMC-D-13-0182.1</a>, 2014.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib8"><label>Cal(2026)</label><mixed-citation>
       Cal, A.: CLOSDI: a novel spectral index for cloud shadow detection in Sentinel-2 imagery using NDVI and EVI2, Remote Sensing Applications: Society and Environment, 42, 101990, <a href="https://doi.org/10.1016/j.rsase.2026.101990" target="_blank">https://doi.org/10.1016/j.rsase.2026.101990</a>, 2026.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib9"><label>Calbó and Sabburg(2008)</label><mixed-citation>
       Calbó, J. and Sabburg, J.: Feature extraction from whole-sky ground-based images for cloud-type recognition, J. Atmos. Ocean. Tech., 25, 3–14, <a href="https://doi.org/10.1175/2007JTECHA959.1" target="_blank">https://doi.org/10.1175/2007JTECHA959.1</a>, 2008.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib10"><label>Cazorla et al.(2017)</label><mixed-citation>
       Cazorla, A., Casquero-Vera, J. A., Román, R., Guerrero-Rascado, J. L., Toledano, C., Cachorro, V. E., Orza, J. A. G., Cancillo, M. L., Serrano, A., Titos, G., Pandolfi, M., Alastuey, A., Hanrieder, N., and Alados-Arboledas, L.: Near-real-time processing of a ceilometer network assisted with sun-photometer data: monitoring a dust outbreak over the Iberian Peninsula, Atmos. Chem. Phys., 17, 11861–11876, <a href="https://doi.org/10.5194/acp-17-11861-2017" target="_blank">https://doi.org/10.5194/acp-17-11861-2017</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib11"><label>Cirés et al.(2019)</label><mixed-citation>
       Cirés, E., Marcos, J., de la Parra, I., García, M., and Marroyo, L.: The potential of forecasting in reducing the LCOE in PV plants under ramp-rate restrictions, Energy, 188, 116053, <a href="https://doi.org/10.1016/j.energy.2019.116053" target="_blank">https://doi.org/10.1016/j.energy.2019.116053</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib12"><label>Costa-Surós et al.(2013)</label><mixed-citation>
       Costa-Surós, M., Calbó, J., González, J., and Martin-Vide, J.: Behavior of cloud base height from ceilometer measurements, Atmos. Res., 127, 64–76, <a href="https://doi.org/10.1016/j.atmosres.2013.02.005" target="_blank">https://doi.org/10.1016/j.atmosres.2013.02.005</a>, 2013.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib13"><label>Crispel and Roberts(2018)</label><mixed-citation>
       Crispel, P. and Roberts, G.: All-sky photogrammetry techniques to georeference a cloud field, Atmos. Meas. Tech., 11, 593–609, <a href="https://doi.org/10.5194/amt-11-593-2018" target="_blank">https://doi.org/10.5194/amt-11-593-2018</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib14"><label>Drusch et al.(2012)</label><mixed-citation>
       Drusch, M., Del Bello, U., Carlier, S., Colin, O., Fernandez, V., Gascon, F., Hoersch, B., Isola, C., Laberinti, P., Martimort, P., Meygret, A., Spoto, F., Sy, O., Marchese, F., and Bargellini, P.: Sentinel-2: ESA's optical high-resolution mission for GMES operational services, Remote Sens. Environ., 120, 25–36, <a href="https://doi.org/10.1016/j.rse.2011.11.026" target="_blank">https://doi.org/10.1016/j.rse.2011.11.026</a>, 2012.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib15"><label>Gatón et al.(2026)</label><mixed-citation>
       Gatón, J., Román, R., Guzman, C., González-Fernández, D., Longarela, B., Toledano, C., and González, R.: Multi-frame cloud prediction in all-sky images from RGB images and segmented masks, Sol. Energy, 311, 114515, <a href="https://doi.org/10.1016/j.solener.2026.114515" target="_blank">https://doi.org/10.1016/j.solener.2026.114515</a>, 2026.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib16"><label>González-Fernández et al.(2024)</label><mixed-citation>
       González-Fernández, D., Román, R., Mateos, D., Herrero del Barrio, C., Cachorro, V. E., Copes, G., Sánchez, R., García, R. D., Doppler, L., Herrero-Anta, S., Antuña-Sánchez, J. C., Barreto, Á, González, R., Gatón, J., Calle, A., Toledano, C., and de Frutos, Á: Retrieval of solar shortwave irradiance from all-sky camera images, Remote Sens.-Basel, 16, <a href="https://doi.org/10.3390/rs16203821" target="_blank">https://doi.org/10.3390/rs16203821</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib17"><label>Gregor et al.(2023)</label><mixed-citation>
       Gregor, P., Zinner, T., Jakub, F., and Mayer, B.: Validation of a camera-based intra-hour irradiance nowcasting model using synthetic cloud data, Atmos. Meas. Tech., 16, 3257–3271, <a href="https://doi.org/10.5194/amt-16-3257-2023" target="_blank">https://doi.org/10.5194/amt-16-3257-2023</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib18"><label>Hamann et al.(2014)</label><mixed-citation>
       Hamann, U., Walther, A., Baum, B., Bennartz, R., Bugliaro, L., Derrien, M., Francis, P. N., Heidinger, A., Joro, S., Kniffka, A., Le Gléau, H., Lockhoff, M., Lutz, H.-J., Meirink, J. F., Minnis, P., Palikonda, R., Roebeling, R., Thoss, A., Platnick, S., Watts, P., and Wind, G.: Remote sensing of cloud top pressure/height from SEVIRI: analysis of ten current retrieval algorithms, Atmos. Meas. Tech., 7, 2839–2867, <a href="https://doi.org/10.5194/amt-7-2839-2014" target="_blank">https://doi.org/10.5194/amt-7-2839-2014</a>, 2014.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib19"><label>Hartmann(1993)</label><mixed-citation>
       Hartmann, D.: Chapter 6 Radiative effects of clouds on Earth's climate, in: Aerosol–Cloud–Climate Interactions, edited by: Hobbs, P. V., Vol. 54 of International Geophysics, Academic Press, <a href="https://doi.org/10.1016/S0074-6142(08)60215-6" target="_blank">https://doi.org/10.1016/S0074-6142(08)60215-6</a>, 151–173, 1993.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib20"><label>Herrero del Barrio et al.(2024)</label><mixed-citation>
       Herrero del Barrio, C., Román, R., González, R., Cazorla, A., Herreras-Giralda, M., Antuña-Sánchez, J. C., Molero, F., Navas-Guzmán, F., Serrano, A., Obregón, M. Á, Sola, Y., Pandolfi, M., Herrero-Anta, S., González-Fernández, D., Muñiz-Rosado, J., Mateos, D., Calle, A., Toledano, C., Cachorro, V. E., and de Frutos, Á M.: CAECENET: an automatic system processing photometer and ceilometer data from different networks to provide columnar and vertically-resolved aerosol properties, PLoS One, 19, 1–23, <a href="https://doi.org/10.1371/journal.pone.0311990" target="_blank">https://doi.org/10.1371/journal.pone.0311990</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib21"><label>Huertas-Tato et al.(2017)</label><mixed-citation>
       Huertas-Tato, J., Rodríguez-Benítez, F. J., Arbizu-Barrena, C., Aler-Mur, R., Galvan-Leon, I., and Pozo-Vázquez, D.: Automatic cloud-type classification based on the combined use of a sky camera and a ceilometer, J. Geophys. Res.-Atmos., 122, 11,045–11,061, <a href="https://doi.org/10.1002/2017JD027131" target="_blank">https://doi.org/10.1002/2017JD027131</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib22"><label>INE(2025)</label><mixed-citation>
       INE: Instituto Nacional de
Estadística. Valladolid: Población por municipios y sexo (Tabla
2904), cifras oficiales de población de los municipios españoles:
Revisión del Padrón Municipal,
<a href="https://www.ine.es/jaxiT3/Datos.htm?t=2904" target="_blank"/> (last access: 13 February 2026), 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib23"><label>IPCC(2023)</label><mixed-citation>
       IPCC: Intergovernmental Panel on Climate Change. The Earth's Energy Budget, Climate Feedbacks and Climate Sensitivity, Cambridge University Press, 923–1054, <a href="https://doi.org/10.1017/9781009157896.009" target="_blank">https://doi.org/10.1017/9781009157896.009</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib24"><label>Isaac et al.(2014)</label><mixed-citation>
       Isaac, G. A., Bailey, M., Boudala, F. S., Burrows, W. R., Cober, S. G., Crawford, R. W., Donaldson, N., Gultepe, I., Hansen, B., Heckman, I., Huang, L. X., Ling, A., Mailhot, J., Milbrandt, J. A., Reid, J., and Fournier, M.: The Canadian Airport Nowcasting System (CAN-Now), Meteorol. Appl., 21, 30–49, <a href="https://doi.org/10.1002/met.1342" target="_blank">https://doi.org/10.1002/met.1342</a>, 2014.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib25"><label>King et al.(2013)</label><mixed-citation>
       King, M. D., Platnick, S., Menzel, W. P., Ackerman, S. A., and Hubanks, P. A.: Spatial and temporal distribution of clouds observed by MODIS onboard the terra and aqua satellites, IEEE T. Geosci. Remote, 51, 3826–3852, <a href="https://doi.org/10.1109/TGRS.2012.2227333" target="_blank">https://doi.org/10.1109/TGRS.2012.2227333</a>, 2013.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib26"><label>Lamer et al.(2014)</label><mixed-citation>
       Lamer, K., Tatarevic, A., Jo, I., and Kollias, P.: Evaluation of gridded scanning ARM cloud radar reflectivity observations and vertical doppler velocity retrievals, Atmos. Meas. Tech., 7, 1089–1103, <a href="https://doi.org/10.5194/amt-7-1089-2014" target="_blank">https://doi.org/10.5194/amt-7-1089-2014</a>, 2014.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib27"><label>Li et al.(2022)</label><mixed-citation>
       Li, X., Wang, B., Qiu, B., and Wu, C.: An all-sky camera image classification method using cloud cover features, Atmos. Meas. Tech., 15, 3629–3639, <a href="https://doi.org/10.5194/amt-15-3629-2022" target="_blank">https://doi.org/10.5194/amt-15-3629-2022</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib28"><label>Liang et al.(2024)</label><mixed-citation>
       Liang, K., Yang, G., Zuo, Y., Chen, J., Sun, W., Meng, X., and Chen, B.: A novel method for cloud and cloud shadow detection based on the maximum and minimum values of Sentinel-2 time series images, Remote Sens.-Basel, 16, <a href="https://doi.org/10.3390/rs16081392" target="_blank">https://doi.org/10.3390/rs16081392</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib29"><label>Lowe(2004)</label><mixed-citation>
       Lowe, D. G.: Distinctive image features from scale-invariant keypoints, Int. J. Comput. Vision, 60, 91–110, <a href="https://doi.org/10.1023/B:VISI.0000029664.99615.94" target="_blank">https://doi.org/10.1023/B:VISI.0000029664.99615.94</a>, 2004.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib30"><label>Lufft(2021)</label><mixed-citation>
       Lufft: User Manual Lufft CHM 15k
Ceilometer, Lufft, Fellbach, Germany, revision r19 edn., software version
1.110, <a href="https://www.kippzonen.com/products/chm15k_ceilometer" target="_blank"/> (last access: 9 September 2026),  2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib31"><label>Martucci et al.(2010)</label><mixed-citation>
       Martucci, G., Milroy, C., and O'Dowd, C. D.: Detection of cloud-base height using Jenoptik CHM15K and Vaisala CL31 ceilometers, J. Atmos. Ocean. Tech., 27, 305–318, <a href="https://doi.org/10.1175/2009JTECHA1326.1" target="_blank">https://doi.org/10.1175/2009JTECHA1326.1</a>, 2010.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib32"><label>Mateos et al.(2013)</label><mixed-citation>
       Mateos, D., Antón, M., Sanchez-Lorenzo, A., Calbó, J., and Wild, M.: Long-term changes in the radiative effects of aerosols and clouds in a mid-latitude region (1985–2010), Global Planet. Change, 111, 288–295, <a href="https://doi.org/10.1016/j.gloplacha.2013.10.004" target="_blank">https://doi.org/10.1016/j.gloplacha.2013.10.004</a>, 2013.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib33"><label>Nguyen and Kleissl(2014)</label><mixed-citation>
       Nguyen, D. A. and Kleissl, J.: Stereographic methods for cloud base height determination using two sky imagers, Sol. Energy, 107, 495–509, <a href="https://doi.org/10.1016/j.solener.2014.05.005" target="_blank">https://doi.org/10.1016/j.solener.2014.05.005</a>, 2014.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib34"><label>Noh et al.(2017)</label><mixed-citation>
       Noh, Y.-J., Forsythe, J. M., Miller, S. D., Seaman, C. J., Li, Y., Heidinger, A. K., Lindsey, D. T., Rogers, M. A., and Partain, P. T.: Cloud-base height estimation from VIIRS. Part II: A statistical algorithm based on a-train satellite data, J. Atmos. Ocean. Tech., 34, 585–598, <a href="https://doi.org/10.1175/JTECH-D-16-0110.1" target="_blank">https://doi.org/10.1175/JTECH-D-16-0110.1</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib35"><label>Nouri et al.(2019)</label><mixed-citation>
       Nouri, B., Kuhn, P., Wilbert, S., Hanrieder, N., Prahl, C., Zarzalejo, L., Kazantzidis, A., Blanc, P., and Pitz-Paal, R.: Cloud height and tracking accuracy of three all sky imager systems for individual clouds, Sol. Energy, 177, 213–228, <a href="https://doi.org/10.1016/j.solener.2018.10.079" target="_blank">https://doi.org/10.1016/j.solener.2018.10.079</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib36"><label>Obregón et al.(2019)</label><mixed-citation>
       Obregón, M. Á, Rodrigues, G., Costa, M. J., Potes, M., and Silva, A. M.: Validation of ESA Sentinel-2 L2A aerosol optical thickness and columnar water vapour during 2017–2018, Remote Sens.-Basel, 11, <a href="https://doi.org/10.3390/rs11141649" target="_blank">https://doi.org/10.3390/rs11141649</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib37"><label>Papachristopoulou et al.(2024)</label><mixed-citation>
       Papachristopoulou, K., Fountoulakis, I., Bais, A. F., Psiloglou, B. E., Papadimitriou, N., Raptis, I.-P., Kazantzidis, A., Kontoes, C., Hatzaki, M., and Kazadzis, S.: Effects of clouds and aerosols on downwelling surface solar irradiance nowcasting and short-term forecasting, Atmos. Meas. Tech., 17, 1851–1877, <a href="https://doi.org/10.5194/amt-17-1851-2024" target="_blank">https://doi.org/10.5194/amt-17-1851-2024</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib38"><label>Papadimitriou et al.(2026)</label><mixed-citation>
       Papadimitriou, N., Fountoulakis, I., Gkikas, A., Papachristopoulou, K., Kazantzidis, A., Kazadzis, S., Pfenninger, S., Kapsomenakis, J., Eleftheratos, K., Argiriou, A. A., Doppler, L., and Zerefos, C. S.: PV power modelling using solar radiation from ground-based measurements and CAMS: Assessing the diffuse component related uncertainties leveraging the Global Solar Energy Estimator (GSEE), Atmos. Meas. Tech., 19, 1227–1244, <a href="https://doi.org/10.5194/amt-19-1227-2026" target="_blank">https://doi.org/10.5194/amt-19-1227-2026</a>, 2026.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib39"><label>Richter et al.(2012)</label><mixed-citation>
       Richter, R., Louis, J., and
Müller-Wilm, U.: Sentinel-2 MSI – Level 2A products algorithm theoretical
basis document, European Space Agency, (Special Publication) ESA SP 49, 1–72, <a href="https://step.esa.int/thirdparties/sen2cor/2.3.0/[L2A-ATBD] S2PAD-ATBD-0001 [2.0].pdf" target="_blank"/> (last access: 9 September 2026), 2012.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib40"><label>Rodríguez-Benítez et al.(2021)</label><mixed-citation>
       Rodríguez-Benítez, F. J., López-Cuesta, M., Arbizu-Barrena, C., Fernández-León, M. M., Pamos-Ureña, M. Á, Tovar-Pescador, J., Santos-Alamillos, F. J., and Pozo-Vázquez, D.: Assessment of new solar radiation nowcasting methods based on sky-camera and satellite imagery, Appl. Energ., 292, 116838, <a href="https://doi.org/10.1016/j.apenergy.2021.116838" target="_blank">https://doi.org/10.1016/j.apenergy.2021.116838</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib41"><label>Román et al.(2025)</label><mixed-citation>
       Román, R., González-Fernández, D., Antuña-Sánchez, J. C., Herrero del Barrio, C., Herrero-Anta, S., Barreto, Á., Cachorro, V. E., Doppler, L., González, R., Ritter, C., Mateos, D., Kouremeti, N., Copes, G., Calle, A., Granados-Muñoz, M. J., Toledano, C., and de Frutos, Á. M.: Star photometry with all-sky cameras to retrieve aerosol optical depth at nighttime, Atmos. Meas. Tech., 18, 2847–2875, <a href="https://doi.org/10.5194/amt-18-2847-2025" target="_blank">https://doi.org/10.5194/amt-18-2847-2025</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib42"><label>Román et al.(2026)</label><mixed-citation>
       Román, R., Gatón, J., González-Fernández, D., Herrero-Anta, S., Herrero del Barrio, C., Longarela, B., Martín Marcos, J. L., and Gonzalez, R.: GOA-UVa All-Sky Segmentation U-Net Model, Zenodo [code], <a href="https://doi.org/10.5281/zenodo.18894938" target="_blank">https://doi.org/10.5281/zenodo.18894938</a>, 2026.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib43"><label>Scaramuzza et al.(2006)</label><mixed-citation>
       Scaramuzza, D.,
Martinelli, A., and Siegwart, R. Y.: A Flexible Technique for Accurate
Omnidirectional Camera Calibration and Structure from Motion, Fourth IEEE
International Conference on Computer Vision Systems (ICVS'06), 45–45,
<a href="https://doi.org/10.1109/ICVS.2006.3" target="_blank">https://doi.org/10.1109/ICVS.2006.3</a>, 2006.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib44"><label>Seiz and Davies(2006)</label><mixed-citation>
       Seiz, G. and Davies, R.: Reconstruction of cloud geometry from multi-view satellite images, Remote Sens. Environ., 100, 143–149, <a href="https://doi.org/10.1016/j.rse.2005.09.016" target="_blank">https://doi.org/10.1016/j.rse.2005.09.016</a>, 2006.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib45"><label>Sovdat et al.(2019)</label><mixed-citation>
       Sovdat, B., Kadunc, M., Batič, M., and Milčinski, G.: Natural color representation of Sentinel-2 data, Remote Sens. Environ., 225, 392–402, <a href="https://doi.org/10.1016/j.rse.2019.01.036" target="_blank">https://doi.org/10.1016/j.rse.2019.01.036</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib46"><label>Stephens(2005)</label><mixed-citation>
       Stephens, G. L.: Cloud feedbacks in the climate system: a critical review, J. Climate, 18, 237–273, <a href="https://doi.org/10.1175/JCLI-3243.1" target="_blank">https://doi.org/10.1175/JCLI-3243.1</a>, 2005.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib47"><label>Yu et al.(2024)</label><mixed-citation>
       Yu, H., Sun, X., Tu, B., Ti, R., Ma, J., Hong, J., Chen, C., Liu, X., Huang, H., Wang, Z., Ahmad, S., Wang, Y., Fan, Y., Li, Y., Wei, Y., Wang, Y., and Wang, Y.: Towards multi-views cloud retrieval accounting for the 3-D structure collected by directional polarization camera, ISPRS J. Photogramm., 212, 146–163, <a href="https://doi.org/10.1016/j.isprsjprs.2024.04.028" target="_blank">https://doi.org/10.1016/j.isprsjprs.2024.04.028</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib48"><label>Zhai et al.(2018)</label><mixed-citation>
       Zhai, H., Zhang, H., Zhang, L., and Li, P.: Cloud/shadow detection based on spectral indices for multi/hyperspectral optical remote sensing imagery, ISPRS J. Photogramm., 144, 235–253, <a href="https://doi.org/10.1016/j.isprsjprs.2018.07.006" target="_blank">https://doi.org/10.1016/j.isprsjprs.2018.07.006</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib49"><label>Zhang et al.(2025)</label><mixed-citation>
       Zhang, W., Li, J., Li, J., Xu, S., Zhang, L., Wang, Y., and Huang, J.: Cloud heights retrieval from passive satellite measurements using lapse rate information, Remote Sens. Environ., 319, 114622, <a href="https://doi.org/10.1016/j.rse.2025.114622" target="_blank">https://doi.org/10.1016/j.rse.2025.114622</a>, 2025.

    </mixed-citation></ref-html>--></article>
