<?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-3999-2026</article-id><title-group><article-title>Bayesian denoising of satellite images using co-registered <inline-formula><mml:math id="M1" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images</article-title><alt-title>Bayesian denoising of satellite images using co-registered <inline-formula><mml:math id="M2" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images</alt-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author" corresp="yes" rid="aff1">
          <name><surname>Koene</surname><given-names>Erik Franciscus Maria</given-names></name>
          <email>erik.koene@empa.ch</email>
        <ext-link>https://orcid.org/0000-0002-2778-4066</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1">
          <name><surname>Kuhlmann</surname><given-names>Gerrit</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-7021-4712</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1">
          <name><surname>Brunner</surname><given-names>Dominik</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-4007-6902</ext-link></contrib>
        <aff id="aff1"><label>1</label><institution>Empa, Laboratory for Air Pollution / Environmental Technology, Dübendorf, Switzerland</institution>
        </aff>
      </contrib-group>
      <author-notes><corresp id="corr1">Erik Franciscus Maria Koene (erik.koene@empa.ch)</corresp></author-notes><pub-date><day>17</day><month>June</month><year>2026</year></pub-date>
      
      <volume>19</volume>
      <issue>12</issue>
      <fpage>3999</fpage><lpage>4012</lpage>
      <history>
        <date date-type="received"><day>11</day><month>September</month><year>2025</year></date>
           <date date-type="rev-request"><day>13</day><month>October</month><year>2025</year></date>
           <date date-type="rev-recd"><day>8</day><month>May</month><year>2026</year></date>
           <date date-type="accepted"><day>11</day><month>May</month><year>2026</year></date>
      </history>
      <permissions>
        <copyright-statement>Copyright: © 2026 Erik Franciscus Maria Koene 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/3999/2026/amt-19-3999-2026.html">This article is available from https://amt.copernicus.org/articles/19/3999/2026/amt-19-3999-2026.html</self-uri><self-uri xlink:href="https://amt.copernicus.org/articles/19/3999/2026/amt-19-3999-2026.pdf">The full text article is available as a PDF file from https://amt.copernicus.org/articles/19/3999/2026/amt-19-3999-2026.pdf</self-uri>
      <abstract><title>Abstract</title>

      <p id="d2e121">Accurate emission tracking (e.g., locating and quantifying hot spots) using satellite images requires a good signal-to-noise ratio (SNR) of total column images. Achieving this SNR is challenging for satellite-based trace gas imagers, especially when enhancements are small relative to the background or small relative to retrieval uncertainty. Therefore, some satellites carry additional trace gas imagers with high SNR, such as <inline-formula><mml:math id="M3" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, which is co-emitted with the trace gas of interest. While <inline-formula><mml:math id="M4" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> is frequently used qualitatively for plume detection or plume fitting, its potential for quantitative noise reduction remains largely untapped. This paper presents two methods to enhance the SNR of total column images using co-registered <inline-formula><mml:math id="M5" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images through minimum mean square error (MMSE) Bayesian denoising, which are a simple form of a Kalman filter or maximum a posteriori estimate. The first “joint MMSE” method relies on the presence of plumes in both the low- and co-registered high-SNR <inline-formula><mml:math id="M6" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images. The second “self-similar MMSE” method utilizes image self-similarity and is based on an existing technique called BM3D. The methods are evaluated using a synthetic dataset (SMARTCARB) of atmospheric <inline-formula><mml:math id="M7" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M8" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> concentrations, achieving over <inline-formula><mml:math id="M9" display="inline"><mml:mo>+</mml:mo></mml:math></inline-formula>40 dB improvement in peak SNR (i.e., an over 10<sup>(40∕10)</sup> increase in SNR). Additionally, the methods are applied to TROPOMI <inline-formula><mml:math id="M11" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M12" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> data over South Africa and used to compute a divergence image, demonstrating that an estimated 40 %–80 % noise reduction is possible. By enhancing the SNR of total column images, these techniques improve the detectability of subtle emission signals, which could benefit atmospheric monitoring applications.</p>
  </abstract>
    
<funding-group>
<award-group id="gs1">
<funding-source>Horizon 2020</funding-source>
<award-id>958927</award-id>
<award-id>101082194</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="d2e247">To quantify emissions and support climate policy, satellite-based monitoring system are developed that will detect and quantify emissions plumes from cities and large point sources (hereafter referred to as “hot spots”). To perform emission quantification for hot spots, a good signal-to-noise ratio (SNR) is essential; first to be able to detect the plumes, and second to be able to quantify the plume enhancements with good accuracy. Achieving this for satellite observations of <inline-formula><mml:math id="M13" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> is challenging, as enhancements (<inline-formula><mml:math id="M14" display="inline"><mml:mo lspace="0mm">∼</mml:mo></mml:math></inline-formula> 0–5 ppm) are minor compared to background levels (<inline-formula><mml:math id="M15" display="inline"><mml:mo lspace="0mm">∼</mml:mo></mml:math></inline-formula> 420 ppm) and retrieval uncertainties are high <xref ref-type="bibr" rid="bib1.bibx21" id="paren.1"/>. Therefore, CO<sub>2</sub> monitoring satellites like the Global Observing Satellite for Greenhouse gases and Water cycle (GOSAT-GW), the Copernicus Anthropogenic Carbon Dioxide Monitoring (CO2M) mission and the Twin Anthropogenic Greenhouse Gas Observers (TANGO) mission will carry an additional NO<sub>2</sub> instrument. <inline-formula><mml:math id="M18" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> is useful because it is co-emitted with <inline-formula><mml:math id="M19" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> during high-temperature combustion while it can be measured with a much better SNR. <inline-formula><mml:math id="M20" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> thus helps delineating and thereby quantifying the low SNR <inline-formula><mml:math id="M21" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> plumes using emission quantification methods. So far, approaches in the literature have used the information contained in the <inline-formula><mml:math id="M22" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> observations mainly qualitatively. For example, they guided plume detection or constrained a Gaussian curve fitted to plume transects <xref ref-type="bibr" rid="bib1.bibx22 bib1.bibx14 bib1.bibx17" id="paren.2"/>. One prominent emission quantification method, the divergence method <xref ref-type="bibr" rid="bib1.bibx1 bib1.bibx2 bib1.bibx12" id="paren.3"/>, cannot effectively leverage the superior SNR of the co-registered <inline-formula><mml:math id="M23" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> data, as it does not depend on plume detection. As the divergence method is highly susceptible to noise in the data due to its derivative operations, <xref ref-type="bibr" rid="bib1.bibx10" id="text.4"/> proposed to apply a mean filter to prepare the noisy CO2M CO<sub>2</sub> images for the divergence method; however, such spatial smoothing risks blurring emission signals at the source.</p>
      <p id="d2e382">In this paper, we explore two data-driven methods to enhance the SNR of trace gas images using the co-registered <inline-formula><mml:math id="M25" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images (a process also referred to as “denoising”). Compared to alternatives like a model-driven denoising approach relying on meteorological, emission, and satellite noise priors, a data-driven method requires fewer assumptions, as the empirical cross-field covariance between co-registered images is learned directly from the data. An example of the proposed methods is given in Fig. <xref ref-type="fig" rid="F1"/>, which illustrates the effectiveness in reducing noise in a <inline-formula><mml:math id="M26" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> image recorded by the TROPOspheric Monitoring Instrument <xref ref-type="bibr" rid="bib1.bibx23" id="paren.5"><named-content content-type="pre">TROPOMI;</named-content></xref>. The two methods are minimum mean square estimators (MMSEs). The first is based on the joint information in <inline-formula><mml:math id="M27" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M28" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> pixels. The second is based on image self-similarity. Put simply, the MMSEs we present are operations that extract a denoised signal from two (or more) noisy inputs in a Bayesian optimal way, much like a Kalman filter. We define the estimators in the theory section, and suggest to chain them in series to provide the best results. Within the results section of the paper, we verify the method by applying it to synthetic CO2M data to denoise synthetic <inline-formula><mml:math id="M29" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images. We then show a “real data” example using combined TROPOMI <inline-formula><mml:math id="M30" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M31" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> data and use the denoised <inline-formula><mml:math id="M32" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> data to denoise the corresponding divergence map.</p>

      <fig id="F1" specific-use="star"><label>Figure 1</label><caption><p id="d2e483">Example of the denoising procedure for a South African region, recorded by TROPOMI on 20 February 2021. Axis labels are omitted to emphasize the clarity of the denoised image rather than geographical location. Data with a quality factor below 0.75 is masked and appears as plain gray. By optimally combining the <bold>(a)</bold> “noisy” <inline-formula><mml:math id="M33" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <bold>(b)</bold> less “noisy” <inline-formula><mml:math id="M34" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images, we create a <bold>(c)</bold> denoised <inline-formula><mml:math id="M35" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> image. We highlight some features of the denoised image. Square A shows that in areas without signal, noise is effectively removed from the image. Rectangle B indicates that plume signals present in the noisy data are retained, resulting in an enhanced signal-to-noise ratio. Arrow C illustrates an east-west (i.e., right-left) feature with low amplitude but sharp, high contrast edges, identifiable in the original <inline-formula><mml:math id="M36" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> image but absent in the <inline-formula><mml:math id="M37" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> image, confirming that significant “positive” and “negative” signals are preserved during denoising. Circle D shows a feature of high amplitude in the <inline-formula><mml:math id="M38" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> image which is absent in the <inline-formula><mml:math id="M39" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> image, indicating we do not add signal unduly. The noise level estimate is derived from <xref ref-type="bibr" rid="bib1.bibx11" id="text.6"/>.</p></caption>
        <graphic xlink:href="https://amt.copernicus.org/articles/19/3999/2026/amt-19-3999-2026-f01.png"/>

      </fig>

</sec>
<sec id="Ch1.S2">
  <label>2</label><title>Methods</title>
      <p id="d2e590">The two denoising methods presented in the following will be referred to as the “joint MMSE” approach and the “self-similar MMSE” approaches. The former is a novel innovation, whereas the latter is a pre-existing method from the field of computer vision, which we adapt for denoising co-registered images.</p>
<sec id="Ch1.S2.SS1">
  <label>2.1</label><title>Joint MMSE (jMMSE)</title>
      <p id="d2e600">In this section, we explore a method that makes use of the joint information in two co-registered signals at the pixel level. The theory may alternatively be derived from a Bayesian inference point of view, as shown in Sect. S1 in the Supplement.</p>
<sec id="Ch1.S2.SS1.SSS1">
  <label>2.1.1</label><title>Observation model</title>
      <p id="d2e610">Satellite data of two co-registered <italic>pixels</italic> of, say, <inline-formula><mml:math id="M40" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M41" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> follow a general model like

              <disp-formula id="Ch1.E1" content-type="numbered"><label>1</label><mml:math id="M42" display="block"><mml:mrow><mml:mfenced close="]" open="["><mml:mtable class="array" columnalign="center"><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mover accent="true"><mml:mtext>CO</mml:mtext><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mover accent="true"><mml:mtext>NO</mml:mtext><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mfenced><mml:mo>=</mml:mo><mml:mfenced close="]" open="["><mml:mtable class="array" columnalign="center"><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mtext>CO</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mtext>NO</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mfenced><mml:mo>+</mml:mo><mml:mfenced open="[" close="]"><mml:mtable class="array" columnalign="center"><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mrow><mml:msub><mml:mtext>CO</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mrow><mml:msub><mml:mtext>NO</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

            where the tildes indicate <italic>noisy</italic> observations; <inline-formula><mml:math id="M43" display="inline"><mml:mrow><mml:msub><mml:mtext>CO</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M44" display="inline"><mml:mrow><mml:msub><mml:mtext>NO</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> denote the noise-free but unknown true values, and <inline-formula><mml:math id="M45" display="inline"><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mrow><mml:msub><mml:mtext>CO</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M46" display="inline"><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mrow><mml:msub><mml:mtext>NO</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> indicate the noise on the measurements. We can rewrite this model into a coupled observational model by making it a function of the noise-free <inline-formula><mml:math id="M47" display="inline"><mml:mrow><mml:msub><mml:mtext>CO</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> data,

              <disp-formula id="Ch1.E2" content-type="numbered"><label>2</label><mml:math id="M48" display="block"><mml:mtable class="split" rowspacing="0.2ex" displaystyle="true" columnalign="right left"><mml:mtr><mml:mtd><mml:mrow><mml:mfenced close="]" open="["><mml:mtable class="array" columnalign="center"><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mover accent="true"><mml:mtext>CO</mml:mtext><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mover accent="true"><mml:mtext>NO</mml:mtext><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mfenced></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mspace linebreak="nobreak" width="0.25em"/><mml:mo>=</mml:mo><mml:mfenced open="[" close="]"><mml:mtable class="array" columnalign="center"><mml:mtr><mml:mtd><mml:mn mathvariant="normal">1</mml:mn></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:mi>d</mml:mi><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mfenced><mml:msub><mml:mtext>CO</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>+</mml:mo><mml:mfenced close="]" open="["><mml:mtable class="array" columnalign="center"><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mrow><mml:msub><mml:mtext>CO</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mrow><mml:msub><mml:mtext>NO</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mfenced></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mrow><mml:mspace width="0.25em" linebreak="nobreak"/><mml:mo>=</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mi>c</mml:mi><mml:mo>+</mml:mo><mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>

            where <inline-formula><mml:math id="M49" display="inline"><mml:mover accent="true"><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover></mml:math></inline-formula> contains the two noisy observed pixels, <inline-formula><mml:math id="M50" display="inline"><mml:mrow><mml:mi>c</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mtext>CO</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> is the noise-free column, <inline-formula><mml:math id="M51" display="inline"><mml:mrow><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mo>=</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mspace linebreak="nobreak" width="1em"/><mml:mi>d</mml:mi><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mo>)</mml:mo><mml:msup><mml:mo>]</mml:mo><mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula> is the observation operator with a spatially varying function <inline-formula><mml:math id="M52" display="inline"><mml:mrow><mml:mi>d</mml:mi><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> that transforms the <inline-formula><mml:math id="M53" display="inline"><mml:mrow><mml:msub><mml:mtext>CO</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> pixel into an equivalent <inline-formula><mml:math id="M54" display="inline"><mml:mrow><mml:msub><mml:mtext>NO</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> observation, and <inline-formula><mml:math id="M55" display="inline"><mml:mi mathvariant="bold-italic">n</mml:mi></mml:math></inline-formula> contains the two noise components.</p>
</sec>
<sec id="Ch1.S2.SS1.SSS2">
  <label>2.1.2</label><title>The maximum a posteriori solution</title>
      <p id="d2e1014">Our aim is to estimate <inline-formula><mml:math id="M56" display="inline"><mml:mi>c</mml:mi></mml:math></inline-formula> (the unknown noise-free <inline-formula><mml:math id="M57" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> column) from <inline-formula><mml:math id="M58" display="inline"><mml:mover accent="true"><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover></mml:math></inline-formula> (the noisy observations). This can be written as a <italic>maximum a posteriori problem</italic> with a Gaussian distributed prior with mean <inline-formula><mml:math id="M59" display="inline"><mml:mrow><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mi>c</mml:mi><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>, noise mean <inline-formula><mml:math id="M60" display="inline"><mml:mrow><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mi mathvariant="bold-italic">n</mml:mi><mml:mo>]</mml:mo><mml:mo>=</mml:mo><mml:mn mathvariant="bold">0</mml:mn></mml:mrow></mml:math></inline-formula> and independent errors <inline-formula><mml:math id="M61" display="inline"><mml:mrow><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mi>c</mml:mi><mml:mi mathvariant="bold-italic">n</mml:mi><mml:mo>]</mml:mo><mml:mo>=</mml:mo><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mi>c</mml:mi><mml:mo>]</mml:mo><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mi mathvariant="bold-italic">n</mml:mi><mml:mo>]</mml:mo><mml:mo>=</mml:mo><mml:mn mathvariant="bold">0</mml:mn></mml:mrow></mml:math></inline-formula>, yielding a minimum mean square error (MMSE) optimal estimate of the underlying <inline-formula><mml:math id="M62" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> field, which we will denote by <inline-formula><mml:math id="M63" display="inline"><mml:mover accent="true"><mml:mi>c</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover></mml:math></inline-formula>,

              <disp-formula id="Ch1.E3" content-type="numbered"><label>3</label><mml:math id="M64" display="block"><mml:mrow><mml:mover accent="true"><mml:mi>c</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:msub><mml:mtext>arg min</mml:mtext><mml:mi>c</mml:mi></mml:msub><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>E</mml:mi><mml:mfenced open="[" close="]"><mml:mrow><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mi>c</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msubsup><mml:mo>(</mml:mo><mml:mi>c</mml:mi><mml:mo>-</mml:mo><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mi>c</mml:mi><mml:mo>]</mml:mo><mml:msup><mml:mo>)</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>+</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mi>c</mml:mi><mml:mo>-</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover><mml:msup><mml:mo>)</mml:mo><mml:mi>T</mml:mi></mml:msup><mml:msubsup><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mi>c</mml:mi><mml:mo>-</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover><mml:mo>)</mml:mo></mml:mrow></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

            where <inline-formula><mml:math id="M65" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mi>c</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>=</mml:mo><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:msup><mml:mi>c</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>]</mml:mo><mml:mo>-</mml:mo><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mi>c</mml:mi><mml:msup><mml:mo>]</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> is the variance of the expected prior, and <inline-formula><mml:math id="M66" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mi mathvariant="bold-italic">n</mml:mi><mml:msup><mml:mi mathvariant="bold-italic">n</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> is the noise covariance matrix. See Appendix A for details how such quantities may be computed in practice. The solution to this problem is well-known <xref ref-type="bibr" rid="bib1.bibx9" id="paren.7"><named-content content-type="pre">e.g.,</named-content><named-content content-type="post">Eq. 6.8</named-content></xref>,

              <disp-formula id="Ch1.E4" content-type="numbered"><label>4</label><mml:math id="M67" display="block"><mml:mrow><mml:mover accent="true"><mml:mi>c</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:msubsup><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover><mml:mo>+</mml:mo><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mi>c</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msubsup><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mi>c</mml:mi><mml:mo>]</mml:mo></mml:mrow><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:msubsup><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mo>+</mml:mo><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mi>c</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula>

            The solution in Eq. (<xref ref-type="disp-formula" rid="Ch1.E4"/>) is the <italic>maximum a posteriori solution</italic>, also known as the <italic>generalized least squares solution</italic> or the <italic>Bayesian linear estimator</italic>, which is mathematically also identical to a single prediction step in a Kalman filter framework without recursive time updates <xref ref-type="bibr" rid="bib1.bibx9" id="paren.8"><named-content content-type="pre">e.g.,</named-content><named-content content-type="post">Eqs. 6.13–6.14</named-content></xref>.</p>
</sec>
<sec id="Ch1.S2.SS1.SSS3">
  <label>2.1.3</label><title>Solution using only the available data</title>
      <p id="d2e1444">The solution in Eq. (<xref ref-type="disp-formula" rid="Ch1.E4"/>) is elegant but impractical, as it requires one to know <inline-formula><mml:math id="M68" display="inline"><mml:mi mathvariant="bold-italic">H</mml:mi></mml:math></inline-formula> (i.e. the true <inline-formula><mml:math id="M69" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M70" display="inline"><mml:mo>:</mml:mo></mml:math></inline-formula> <inline-formula><mml:math id="M71" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> ratio <inline-formula><mml:math id="M72" display="inline"><mml:mrow><mml:mi>d</mml:mi><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> for every pixel). However, in the following, we show that the solution can be rewritten into a form that depends merely on the data itself. For this, we take a closer look at the data covariance matrix, which can be estimated from the data itself (i.e., the sample covariance matrix):

              <disp-formula id="Ch1.E5" content-type="numbered"><label>5</label><mml:math id="M73" display="block"><mml:mtable class="split" rowspacing="0.2ex" displaystyle="true" columnalign="right left"><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mi>d</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mo>=</mml:mo><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover><mml:msup><mml:mover accent="true"><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover><mml:mi>T</mml:mi></mml:msup><mml:mo>]</mml:mo><mml:mo>-</mml:mo><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover><mml:mo>]</mml:mo><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover><mml:msup><mml:mo>]</mml:mo><mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mrow><mml:mo>=</mml:mo><mml:mfenced open="[" close="]"><mml:mtable class="array" columnalign="center center"><mml:mtr><mml:mtd><mml:mrow><mml:mtext>cov</mml:mtext><mml:mo>(</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="normal">CO</mml:mi><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="normal">CO</mml:mi><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mtext>cov</mml:mtext><mml:mo>(</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="normal">CO</mml:mi><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="normal">NO</mml:mi><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:mtext>cov</mml:mtext><mml:mo>(</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="normal">CO</mml:mi><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="normal">NO</mml:mi><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mtext>cov</mml:mtext><mml:mo>(</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="normal">NO</mml:mi><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="normal">NO</mml:mi><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mfenced><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>

            Given the model of Eq. (<xref ref-type="disp-formula" rid="Ch1.E2"/>), we can also write it as (making judicious use of <inline-formula><mml:math id="M74" display="inline"><mml:mrow><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mi>c</mml:mi><mml:mi mathvariant="bold-italic">n</mml:mi><mml:mo>]</mml:mo><mml:mo>=</mml:mo><mml:mn mathvariant="bold">0</mml:mn></mml:mrow></mml:math></inline-formula>),

                  <disp-formula specific-use="gather" content-type="numbered"><mml:math id="M75" display="block"><mml:mtable displaystyle="true"><mml:mlabeledtr id="Ch1.E6"><mml:mtd><mml:mtext>6</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mi mathvariant="double-struck">E</mml:mi><mml:mfenced close="]" open="["><mml:mrow><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mi>c</mml:mi><mml:mo>+</mml:mo><mml:mi mathvariant="bold-italic">n</mml:mi><mml:mo>)</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mi>c</mml:mi><mml:mo>+</mml:mo><mml:mi mathvariant="bold-italic">n</mml:mi><mml:msup><mml:mo>)</mml:mo><mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:mfenced><mml:mo>-</mml:mo><mml:mi mathvariant="double-struck">E</mml:mi><mml:mfenced close="]" open="["><mml:mrow><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mi>c</mml:mi><mml:mo>+</mml:mo><mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:mfenced><mml:mi mathvariant="double-struck">E</mml:mi><mml:msup><mml:mfenced open="[" close="]"><mml:mrow><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mi>c</mml:mi><mml:mo>+</mml:mo><mml:mi mathvariant="bold-italic">n</mml:mi></mml:mrow></mml:mfenced><mml:mi>T</mml:mi></mml:msup><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E7"><mml:mtd><mml:mtext>7</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle class="stylechange" displaystyle="true"/><mml:mo>=</mml:mo><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mi mathvariant="bold-italic">n</mml:mi><mml:msup><mml:mi mathvariant="bold-italic">n</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:mo>]</mml:mo><mml:mo>-</mml:mo><mml:mi>E</mml:mi><mml:mfenced open="[" close="]"><mml:mi mathvariant="bold-italic">n</mml:mi></mml:mfenced><mml:mi>E</mml:mi><mml:mfenced open="[" close="]"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">n</mml:mi><mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:mfenced><mml:mo>+</mml:mo><mml:mi mathvariant="bold-italic">H</mml:mi><mml:msup><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:mfenced close=")" open="("><mml:mrow><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:msup><mml:mi>c</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>]</mml:mo><mml:mo>-</mml:mo><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mi>c</mml:mi><mml:msup><mml:mo>]</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr><mml:mlabeledtr id="Ch1.E8"><mml:mtd><mml:mtext>8</mml:mtext></mml:mtd><mml:mtd><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:mi mathvariant="bold-italic">H</mml:mi><mml:msup><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mi>c</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mlabeledtr></mml:mtable></mml:math></disp-formula>

            As detailed in Sect. S3.1, we can derive a matrix inversion identity from the Sherman–Morrison formula, <inline-formula><mml:math id="M76" display="inline"><mml:mrow><mml:mi mathvariant="bold">A</mml:mi><mml:mo>(</mml:mo><mml:mi mathvariant="bold">A</mml:mi><mml:mo>+</mml:mo><mml:mi mathvariant="bold-italic">B</mml:mi><mml:mi>C</mml:mi><mml:msup><mml:mi mathvariant="bold-italic">D</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:msup><mml:mo>)</mml:mo><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mi mathvariant="bold">I</mml:mi><mml:mo>-</mml:mo><mml:mi mathvariant="bold-italic">B</mml:mi><mml:msup><mml:mi mathvariant="bold-italic">D</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:msup><mml:mi mathvariant="bold">A</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mo>/</mml:mo><mml:mo>(</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">D</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:msup><mml:mi mathvariant="bold">A</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="bold-italic">B</mml:mi><mml:mo>+</mml:mo><mml:msup><mml:mi>C</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, which yields the following relation,

              <disp-formula id="Ch1.E9" content-type="numbered"><label>9</label><mml:math id="M77" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:msubsup><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:mi mathvariant="bold">I</mml:mi><mml:mo>-</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mi mathvariant="bold-italic">H</mml:mi><mml:msup><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:msubsup><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup></mml:mrow><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:msubsup><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mo>+</mml:mo><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mi>c</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

            for which we note that the right-hand side closely resembles Eq. (<xref ref-type="disp-formula" rid="Ch1.E4"/>). By rearranging terms, pre-multiplying with a vector <inline-formula><mml:math id="M78" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">w</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:mo>=</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mspace linebreak="nobreak" width="0.25em"/><mml:mn mathvariant="normal">0</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> that satisfies <inline-formula><mml:math id="M79" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">w</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula>, post-multiplying the result with <inline-formula><mml:math id="M80" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover><mml:mo>]</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> and adding the expected prior column <inline-formula><mml:math id="M81" display="inline"><mml:mrow><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mi>c</mml:mi><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>, we obtain

              <disp-formula id="Ch1.E10" content-type="numbered"><label>10</label><mml:math id="M82" display="block"><mml:mtable rowspacing="0.2ex" class="split" displaystyle="true" columnalign="right left"><mml:mtr><mml:mtd><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">w</mml:mi><mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mfenced open="(" close=")"><mml:mrow><mml:mi mathvariant="bold">I</mml:mi><mml:mo>-</mml:mo><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:msubsup><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:mfenced><mml:mfenced open="(" close=")"><mml:mrow><mml:mover accent="true"><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover><mml:mo>]</mml:mo></mml:mrow></mml:mfenced><mml:mo>+</mml:mo><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mi>c</mml:mi><mml:mo>]</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mrow><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:msubsup><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup><mml:mover accent="true"><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover><mml:mo>+</mml:mo><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mi>c</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msubsup><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mi>c</mml:mi><mml:mo>]</mml:mo></mml:mrow><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:msubsup><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup><mml:mi mathvariant="bold-italic">H</mml:mi><mml:mo>+</mml:mo><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mi>c</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>

            (the details of this step are given in Sect. S3.2).</p>
      <p id="d2e2336">The denoised column estimate <inline-formula><mml:math id="M83" display="inline"><mml:mover accent="true"><mml:mi>c</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover></mml:math></inline-formula> of the Bayesian optimal solution of Eq. (<xref ref-type="disp-formula" rid="Ch1.E4"/>) may thus be obtained entirely from the data itself, using the left-hand side of Eq. (<xref ref-type="disp-formula" rid="Ch1.E10"/>). It relieves us of the need to know the forward model <inline-formula><mml:math id="M84" display="inline"><mml:mi mathvariant="bold-italic">H</mml:mi></mml:math></inline-formula> that maps the noise-free <inline-formula><mml:math id="M85" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> field into <inline-formula><mml:math id="M86" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> columns. Simplifying the left-hand side of Eq. (<xref ref-type="disp-formula" rid="Ch1.E10"/>), the details of which are given in Sect. S3.3, we obtain the optimal joint MMSE estimate,

                  <disp-formula id="Ch1.E11" content-type="numbered"><label>11</label><mml:math id="M87" display="block"><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mover accent="true"><mml:mi>c</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mstyle displaystyle="true" class="stylechange"/><mml:mo>=</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="normal">CO</mml:mi><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>-</mml:mo><mml:msup><mml:mi mathvariant="bold-italic">w</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:msubsup><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup><mml:mo>(</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mover accent="true"><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover><mml:mo>]</mml:mo><mml:mo>)</mml:mo><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula>

            The various covariance matrices and expected values need to be computed using small patches of size <inline-formula><mml:math id="M88" display="inline"><mml:mrow><mml:mi>T</mml:mi><mml:mo>×</mml:mo><mml:mi>T</mml:mi></mml:mrow></mml:math></inline-formula> for small values of <inline-formula><mml:math id="M89" display="inline"><mml:mi>T</mml:mi></mml:math></inline-formula> (e.g., 5) around a given pixel. See Appendix A for an example implementation in the Python programming language, and Sect. S2 for an explicit version of the jMMSE estimate without vector notation.</p>
      <p id="d2e2481">The ratio <inline-formula><mml:math id="M90" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:msubsup><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> in Eq. (<xref ref-type="disp-formula" rid="Ch1.E11"/>) is quite literally the inverse of the SNR. Thus, in regions of a high SNR (<inline-formula><mml:math id="M91" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:msubsup><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup><mml:mo>≈</mml:mo><mml:mn mathvariant="bold">0</mml:mn></mml:mrow></mml:math></inline-formula>) we simply keep the measurement as it is, <inline-formula><mml:math id="M92" display="inline"><mml:mrow><mml:mover accent="true"><mml:mi>c</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:msub><mml:mover accent="true"><mml:mi mathvariant="normal">CO</mml:mi><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>. In regions without enhanced signals, we have <inline-formula><mml:math id="M93" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mo>⟺</mml:mo><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:msubsup><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:mi mathvariant="bold">I</mml:mi></mml:mrow></mml:math></inline-formula> and thus take the expected value <inline-formula><mml:math id="M94" display="inline"><mml:mrow><mml:mover accent="true"><mml:mi>c</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mi>c</mml:mi><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>, e.g., the local mean or local median. Conversely, noise will be optimally subtracted in the case of a lower SNR (<inline-formula><mml:math id="M95" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:msubsup><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup><mml:mo>&gt;</mml:mo><mml:mi mathvariant="bold">I</mml:mi></mml:mrow></mml:math></inline-formula>) based on the correlations between the <inline-formula><mml:math id="M96" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M97" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> measurements. Hence, the derived expression has all the properties that we would expect from a SNR perspective.</p>
</sec>
</sec>
<sec id="Ch1.S2.SS2">
  <label>2.2</label><title>Self-similar MMSE (BM3D)</title>
      <p id="d2e2700">An alternative method for denoising is called block matching and 3D filtering (BM3D). This method was introduced by <xref ref-type="bibr" rid="bib1.bibx8" id="text.9"/> in the field of computer vision. It is another MMSE method, but this time it makes use of the self-similarity of patches within single color images (with three channels) to denoise them. We adapt it for denoising joint satellite images using two channels by linearly combining min-max-normalized <inline-formula><mml:math id="M98" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M99" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> data (i.e., fitting the data range of the two satellite images into the range 0 to 1) into the first channel with a factor 0.5 each, and placing the min-max-normalized NO<sub>2</sub> image into the second channel. After computing the denoised estimates for both channels, we subtract the denoised NO<sub>2</sub> channel (with a factor 0.5) from the first channel to extract the denoised <inline-formula><mml:math id="M102" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> signal. Note that the factor 0.5 is one of the two hyperparameters that can be modified when applying BM3D (the other being the prior observation error, <inline-formula><mml:math id="M103" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi>c</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, mentioned in the following).</p>
      <p id="d2e2769">BM3D is still considered to be a state-of-the-art image denoising algorithm <xref ref-type="bibr" rid="bib1.bibx25" id="paren.10"><named-content content-type="pre">e.g.,</named-content></xref>, and computes the following MMSE result for the noise-free <inline-formula><mml:math id="M104" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> field (compare with Eq. <xref ref-type="disp-formula" rid="Ch1.E4"/>):

            <disp-formula id="Ch1.E12" content-type="numbered"><label>12</label><mml:math id="M105" display="block"><mml:mrow><mml:mover accent="true"><mml:mi>c</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:msup><mml:mi mathvariant="script">T</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup><mml:mfenced close="]" open="["><mml:mrow><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msubsup><mml:mi>C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">f</mml:mi><mml:mo>)</mml:mo></mml:mrow><mml:mrow><mml:msubsup><mml:mi>C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">f</mml:mi><mml:mo>)</mml:mo><mml:mo>+</mml:mo><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mi>c</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:mfrac></mml:mstyle><mml:mi mathvariant="script">T</mml:mi><mml:mfenced close="]" open="["><mml:mover accent="true"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover></mml:mfenced><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">f</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

          which is also known as a “Wiener (deconvolution) filter”. Operators <inline-formula><mml:math id="M106" display="inline"><mml:mi mathvariant="script">T</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M107" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="script">T</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> are 3D wavelet transforms and their inverses, which project the image pixel space (<inline-formula><mml:math id="M108" display="inline"><mml:mi mathvariant="bold-italic">x</mml:mi></mml:math></inline-formula>) into frequency domains (<inline-formula><mml:math id="M109" display="inline"><mml:mi mathvariant="bold-italic">f</mml:mi></mml:math></inline-formula>). Compared to Eq. (<xref ref-type="disp-formula" rid="Ch1.E4"/>), BM3D works with a scalar quantity rather than a vector quantity for each frequency, and the observation operator <inline-formula><mml:math id="M110" display="inline"><mml:mi mathvariant="bold-italic">H</mml:mi></mml:math></inline-formula> is simply replaced by <inline-formula><mml:math id="M111" display="inline"><mml:mn mathvariant="normal">1</mml:mn></mml:math></inline-formula>. The factor <inline-formula><mml:math id="M112" display="inline"><mml:mrow><mml:msubsup><mml:mi>C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup><mml:mo>(</mml:mo><mml:mi>f</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> is given by <inline-formula><mml:math id="M113" display="inline"><mml:mrow><mml:msubsup><mml:mi>C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup><mml:mo>(</mml:mo><mml:mi>f</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:msup><mml:mfenced close="|" open="|"><mml:mrow><mml:mi mathvariant="script">T</mml:mi><mml:mo>[</mml:mo><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow><mml:mo>]</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="bold-italic">f</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mfenced><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>. Thus, <inline-formula><mml:math id="M114" display="inline"><mml:mrow><mml:msubsup><mml:mi>C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> is the energy of the true (noisefree) <inline-formula><mml:math id="M115" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> signal in the wavelet transformed domain. High spectral energy implies low noise and vice versa. Of course, the noisefree signal is not available, so the Wiener filter of Eq. (<xref ref-type="disp-formula" rid="Ch1.E12"/>) is not actually computable. BM3D circumvents this problem by first obtaining an estimate of the noisefree <inline-formula><mml:math id="M116" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> data through an initial filtering step, which is used instead of the true noisefree signal in Eq. (<xref ref-type="disp-formula" rid="Ch1.E12"/>).</p>
      <p id="d2e3067">BM3D manages to achieve good performance using the assumption of <italic>image self-similarity</italic> (i.e., small patches of similar-looking data repeat throughout an image). If one can find several of such similar-looking patches in the image, and takes their mean, then random noise should be attenuated <xref ref-type="bibr" rid="bib1.bibx3 bib1.bibx4" id="paren.11"><named-content content-type="pre">this is called “non-local means”,</named-content></xref>. The first estimate in BM3D is obtained in a similar manner. More precisely, first, an <inline-formula><mml:math id="M117" display="inline"><mml:mrow><mml:mn mathvariant="normal">8</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:math></inline-formula> image patch is selected and <inline-formula><mml:math id="M118" display="inline"><mml:mi>N</mml:mi></mml:math></inline-formula> similar patches are found in the image. Second, an <inline-formula><mml:math id="M119" display="inline"><mml:mrow><mml:mi>N</mml:mi><mml:mo>×</mml:mo><mml:mn mathvariant="normal">8</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">8</mml:mn></mml:mrow></mml:math></inline-formula> “3D block” is formed of these patches. Third, the 3D blocks are transformed into the wavelet domain using a 3D wavelet transform <inline-formula><mml:math id="M120" display="inline"><mml:mi mathvariant="script">T</mml:mi></mml:math></inline-formula> and denoised using a hard thresholding step (i.e., frequency components with low energy are removed). Fourth, after an inverse wavelet transform <inline-formula><mml:math id="M121" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="script">T</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>, the <inline-formula><mml:math id="M122" display="inline"><mml:mi>N</mml:mi></mml:math></inline-formula> denoised patches are moved back to their respective spots in the image. This process is repeated for each image patch. The fifth step is to repeat the entire process, except that the denoising now uses Wiener deconvolution of Eq. (<xref ref-type="disp-formula" rid="Ch1.E12"/>) with <inline-formula><mml:math id="M123" display="inline"><mml:mrow><mml:msubsup><mml:mi>C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> defined by the first denoised estimate, yielding the MMSE of the final image. The method is sketched in Fig. <xref ref-type="fig" rid="F2"/>.</p>

      <fig id="F2" specific-use="star"><label>Figure 2</label><caption><p id="d2e3168">A schematic explanation of BM3D. In stage 1, similar looking patches are collaboratively denoised to produce a first denoised estimated image. In stage 2, similar looking patches are selected from the first estimate, and corresponding patches from the original input, form two blocks. Using a Wiener filter, the original image patches are denoised, leading to the final denoised image. The steps are carried out for all possible patches in the image.</p></caption>
          <graphic xlink:href="https://amt.copernicus.org/articles/19/3999/2026/amt-19-3999-2026-f02.png"/>

        </fig>

      <p id="d2e3177">BM3D denoises <italic>color images</italic> by forming a composite channel that contains the summed red, green, and blue image data. This composite channel is used for patch selection (step 1, above). For the remaining channels, the same patches are used, but each channel is denoised individually. We propose the same to make the process work for <inline-formula><mml:math id="M124" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M125" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images: we normalize the <inline-formula><mml:math id="M126" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M127" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images, and then form one channel of <inline-formula><mml:math id="M128" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow><mml:mo>+</mml:mo><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow><mml:mo>)</mml:mo><mml:mo>/</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:math></inline-formula> and one channel of just <inline-formula><mml:math id="M129" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>. Patch selection is carried out on the first channel (the mean of the normalized <inline-formula><mml:math id="M130" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M131" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images), but denoising of the patches is carried out on both channels individually. By subtracting the second channel from the first, we end up with a new <inline-formula><mml:math id="M132" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> image, which was helped by the higher signal-to-noise ratio of the <inline-formula><mml:math id="M133" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> image during patch selection and denoising. A reference implementation in Python can be used that is called “bm3d” on pypi by <xref ref-type="bibr" rid="bib1.bibx19" id="text.12"/>.</p>
</sec>
<sec id="Ch1.S2.SS3">
  <label>2.3</label><title>Sequential denoising using the two presented methods</title>
      <p id="d2e3323">As the two methods (joint MMSE and BM3D) are sufficiently different in the structural features they use to denoise the data, it stands to reason that an application of both BM3D (to provide an initial cleaned up version of the data) followed by the joint MMSE (to further enhance the signal) will have the potential to further denoise the data. In this paper, we also test this sequential denoising method.</p>
</sec>
</sec>
<sec id="Ch1.S3">
  <label>3</label><title>Results</title>
<sec id="Ch1.S3.SS1">
  <label>3.1</label><title>Performance metrics</title>
      <p id="d2e3342">We score the performance of the methods where the truth is available using the two most common metrics in computer vision. The first is the peak signal-to-noise ratio (PSNR) in units of decibel, i.e. a higher value means a better performance,

            <disp-formula id="Ch1.E13" content-type="numbered"><label>13</label><mml:math id="M134" display="block"><mml:mrow><mml:mtext>PSNR</mml:mtext><mml:mo>=</mml:mo><mml:mn mathvariant="normal">10</mml:mn><mml:msub><mml:mi>log⁡</mml:mi><mml:mn mathvariant="normal">10</mml:mn></mml:msub><mml:mfenced open="(" close=")"><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mo>(</mml:mo><mml:mo>max⁡</mml:mo><mml:mo>(</mml:mo><mml:mi>c</mml:mi><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:mo>min⁡</mml:mo><mml:mo>(</mml:mo><mml:mi>c</mml:mi><mml:mo>)</mml:mo><mml:msup><mml:mo>)</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow><mml:mrow><mml:mstyle displaystyle="false"><mml:mfrac style="text"><mml:mn mathvariant="normal">1</mml:mn><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mi>x</mml:mi></mml:msub><mml:msub><mml:mi>n</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:msub><mml:mo>∑</mml:mo><mml:mrow><mml:msub><mml:mi>i</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:msub><mml:msub><mml:mo>∑</mml:mo><mml:mrow><mml:msub><mml:mi>j</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>(</mml:mo><mml:msub><mml:mover accent="true"><mml:mi>c</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>i</mml:mi><mml:mi>x</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>j</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mrow><mml:msub><mml:mi>i</mml:mi><mml:mi>x</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>j</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:msub><mml:msup><mml:mo>)</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:mfrac></mml:mstyle></mml:mfenced><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

          where <inline-formula><mml:math id="M135" display="inline"><mml:mrow><mml:mi>c</mml:mi><mml:mo>≡</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mrow><mml:msub><mml:mi>i</mml:mi><mml:mi>x</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>j</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> is the true (noise-free) signal and <inline-formula><mml:math id="M136" display="inline"><mml:mrow><mml:mover accent="true"><mml:mi>c</mml:mi><mml:mo mathvariant="normal" stretchy="false">^</mml:mo></mml:mover><mml:mo>≡</mml:mo><mml:msub><mml:mover accent="true"><mml:mi>c</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>i</mml:mi><mml:mi>x</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>j</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> is the estimated signal, indexed over all 2D pixels <inline-formula><mml:math id="M137" display="inline"><mml:mrow><mml:msub><mml:mi>i</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M138" display="inline"><mml:mrow><mml:msub><mml:mi>j</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. The second metric is the structural similarity index measure <xref ref-type="bibr" rid="bib1.bibx24" id="paren.13"><named-content content-type="pre">SSIM;</named-content><named-content content-type="post">again, a higher value means a better performance</named-content></xref>,

            <disp-formula id="Ch1.E14" content-type="numbered"><label>14</label><mml:math id="M139" display="block"><mml:mrow><mml:mtext>SSIM</mml:mtext><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mo>)</mml:mo><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:mo>(</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:msub><mml:mi mathvariant="italic">μ</mml:mi><mml:mi>x</mml:mi></mml:msub><mml:msub><mml:mi mathvariant="italic">μ</mml:mi><mml:mi>y</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>)</mml:mo><mml:mo>(</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>)</mml:mo></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:msubsup><mml:mi mathvariant="italic">μ</mml:mi><mml:mi>x</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>+</mml:mo><mml:msubsup><mml:mi mathvariant="italic">μ</mml:mi><mml:mi>y</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>+</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>)</mml:mo><mml:mo>(</mml:mo><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mi>x</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>+</mml:mo><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mi>y</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>+</mml:mo><mml:msub><mml:mi>c</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

          where <inline-formula><mml:math id="M140" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M141" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> are <inline-formula><mml:math id="M142" display="inline"><mml:mrow><mml:mn mathvariant="normal">7</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">7</mml:mn></mml:mrow></mml:math></inline-formula> tiles/patches from images <inline-formula><mml:math id="M143" display="inline"><mml:mi>c</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M144" display="inline"><mml:mover accent="true"><mml:mi>c</mml:mi><mml:mo stretchy="false" mathvariant="normal">^</mml:mo></mml:mover></mml:math></inline-formula> respectively, <inline-formula><mml:math id="M145" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">μ</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M146" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">μ</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> are their sample averages, <inline-formula><mml:math id="M147" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M148" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> are the sample standard deviations, <inline-formula><mml:math id="M149" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> is their covariance, and <inline-formula><mml:math id="M150" display="inline"><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:mn mathvariant="normal">0.01</mml:mn><mml:mo>(</mml:mo><mml:mo>max⁡</mml:mo><mml:mo>(</mml:mo><mml:mi>c</mml:mi><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:mo>min⁡</mml:mo><mml:mo>(</mml:mo><mml:mi>c</mml:mi><mml:mo>)</mml:mo><mml:mo>)</mml:mo><mml:msup><mml:mo>)</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M151" display="inline"><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:mn mathvariant="normal">0.03</mml:mn><mml:mo>(</mml:mo><mml:mo>max⁡</mml:mo><mml:mo>(</mml:mo><mml:mi>c</mml:mi><mml:mo>)</mml:mo><mml:mo>-</mml:mo><mml:mo>min⁡</mml:mo><mml:mo>(</mml:mo><mml:mi>c</mml:mi><mml:mo>)</mml:mo><mml:mo>)</mml:mo><mml:msup><mml:mo>)</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>. The PSNR is very sensitive to random noise, while the SSIM is very sensitive to image artifacts such as blurring. Consequently, we want the PSNR and the SSIM to improve simultaneously.</p>
      <p id="d2e3878">We can make a noise estimate using the algorithm described in <xref ref-type="bibr" rid="bib1.bibx11" id="text.14"/>, which compares a grid-aligned Laplacian estimate with a diagonal Laplacian estimate, to estimate the noise standard deviation for Gaussian (i.e., white or random) noise as

            <disp-formula id="Ch1.E15" content-type="numbered"><label>15</label><mml:math id="M152" display="block"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mtext>est</mml:mtext></mml:msub><mml:mo>=</mml:mo><mml:msqrt><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mi mathvariant="italic">π</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:mfrac></mml:mstyle></mml:msqrt><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mrow><mml:mn mathvariant="normal">6</mml:mn><mml:mo>(</mml:mo><mml:mi>W</mml:mi><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mo>)</mml:mo><mml:mo>(</mml:mo><mml:mi>h</mml:mi><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mo>)</mml:mo></mml:mrow></mml:mfrac></mml:mstyle><mml:munder><mml:mo movablelimits="false">∑</mml:mo><mml:mtext>pixels</mml:mtext></mml:munder><mml:mfenced open="|" close="|"><mml:mrow><mml:mi>I</mml:mi><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mi>y</mml:mi><mml:mo>)</mml:mo><mml:mo>∗</mml:mo><mml:mi>N</mml:mi></mml:mrow></mml:mfenced></mml:mrow></mml:math></disp-formula>

          where <inline-formula><mml:math id="M153" display="inline"><mml:mi>W</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M154" display="inline"><mml:mi>H</mml:mi></mml:math></inline-formula>, respectively, are the width and height of the trace gas image <inline-formula><mml:math id="M155" display="inline"><mml:mi>I</mml:mi></mml:math></inline-formula>, and where <inline-formula><mml:math id="M156" display="inline"><mml:mo>∗</mml:mo></mml:math></inline-formula> denotes a spatial convolution with the 2-D kernel

            <disp-formula id="Ch1.E16" content-type="numbered"><label>16</label><mml:math id="M157" display="block"><mml:mrow><mml:mi>N</mml:mi><mml:mo>=</mml:mo><mml:mfenced close="]" open="["><mml:mtable class="array" columnalign="right right right"><mml:mtr><mml:mtd><mml:mn mathvariant="normal">1</mml:mn></mml:mtd><mml:mtd><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:mtd><mml:mtd><mml:mn mathvariant="normal">1</mml:mn></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:mtd><mml:mtd><mml:mn mathvariant="normal">4</mml:mn></mml:mtd><mml:mtd><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mn mathvariant="normal">1</mml:mn></mml:mtd><mml:mtd><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:mtd><mml:mtd><mml:mn mathvariant="normal">1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mfenced><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>
</sec>
<sec id="Ch1.S3.SS2">
  <label>3.2</label><title>Application to synthetic joint CO<sub>2</sub> and NO<sub>2</sub> images</title>
      <p id="d2e4066">In this section, we will apply the algorithms presented above to synthetic CO2M CO<sub>2</sub> and NO<sub>2</sub> satellite images from the SMARTCARB dataset <xref ref-type="bibr" rid="bib1.bibx15 bib1.bibx16" id="paren.15"/>. The SMARTCARB dataset is a synthetic quasi-Level 2 product at the CO2M spatial resolution (roughly <inline-formula><mml:math id="M162" display="inline"><mml:mrow><mml:mn mathvariant="normal">2</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:math></inline-formula> km<sup>2</sup>) and swath length (roughly 250 km) over primarily Germany and surrounding regions, for the year 2015. As it is essential that plume signals look “similar” for input to the MMSE methods, we will use column-averaged dry-air mole fractions of <inline-formula><mml:math id="M164" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> (X<inline-formula><mml:math id="M165" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>) data (in ppmv) and tropospheric <inline-formula><mml:math id="M166" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> column densities (in molec. cm<sup>−2</sup>). The reason for using X<inline-formula><mml:math id="M168" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> rather than <inline-formula><mml:math id="M169" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> column densities is that the latter are strongly susceptible to surface topography variations. One could also use X<inline-formula><mml:math id="M170" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images, but the topographic effect on <inline-formula><mml:math id="M171" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images is typically negligible. Hence, we will essentially use the “standard” data products. When denoting the results with the joint MMSE, the parameter <inline-formula><mml:math id="M172" display="inline"><mml:mi>T</mml:mi></mml:math></inline-formula> refers to the window size used to compute expected values within the joint MMSE method. For example, <inline-formula><mml:math id="M173" display="inline"><mml:mrow><mml:mi>T</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:math></inline-formula> means that we select a <inline-formula><mml:math id="M174" display="inline"><mml:mrow><mml:mn mathvariant="normal">5</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:math></inline-formula> region centered on a pixel, which for CO2M is a region of about <inline-formula><mml:math id="M175" display="inline"><mml:mrow><mml:mn mathvariant="normal">10</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">10</mml:mn></mml:mrow></mml:math></inline-formula> km.</p>
      <p id="d2e4245">We will refer to results from the joint MMSE as “jMMSE” and from the BM3D method as “BM3D”. Additionally, we show the results from applying a simple <inline-formula><mml:math id="M176" display="inline"><mml:mrow><mml:mn mathvariant="normal">5</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:math></inline-formula> pixel mean filter (denoted as “<inline-formula><mml:math id="M177" display="inline"><mml:mrow><mml:mn mathvariant="normal">5</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:math></inline-formula> mean filter” or “<inline-formula><mml:math id="M178" display="inline"><mml:mrow><mml:mn mathvariant="normal">5</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:math></inline-formula> filter”) to purely the <inline-formula><mml:math id="M179" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> data, which was proposed in <xref ref-type="bibr" rid="bib1.bibx10" id="text.16"/> as a simple but effective method to prepare the noisy SMARTCARB data for the divergence method. Figures <xref ref-type="fig" rid="F3"/>–<xref ref-type="fig" rid="F4"/> show an example of the denoising methods applied to synthetic CO2M <inline-formula><mml:math id="M180" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M181" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images. The examples use the “high noise” scenario of the SMARTCARB dataset with random errors of <inline-formula><mml:math id="M182" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mi mathvariant="normal">VEG</mml:mi><mml:mn mathvariant="normal">50</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:math></inline-formula> ppm for X<inline-formula><mml:math id="M183" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> (the VEG50 scenario uses vegetation albedos and solar zenith angle of 50°; <xref ref-type="bibr" rid="bib1.bibx5" id="altparen.17"/>) and <inline-formula><mml:math id="M184" display="inline"><mml:mrow><mml:mi mathvariant="italic">σ</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">2</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">15</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> molec. cm<sup>−2</sup> for <inline-formula><mml:math id="M186" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>. We select the simulation day 23 October 2015, and focus on the coal-fired power plants Prunéřov<fn id="Ch1.Footn1"><p id="d2e4400">50.42° N 13.26° E; simulated with emissions of 11.4 Mt <inline-formula><mml:math id="M187" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> yr<sup>−1</sup> and 11.3 kt <inline-formula><mml:math id="M189" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> yr<sup>−1</sup>.</p></fn> and Počerady<fn id="Ch1.Footn2"><p id="d2e4450">50.43° N 13.68° E; simulated with emissions of 9.3 Mt <inline-formula><mml:math id="M191" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> yr<sup>−1</sup> and 9.2 kt <inline-formula><mml:math id="M193" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> yr<sup>−1</sup></p></fn>. These mid-sized power plants were selected as their emissions produce only weak plume enhancements compared to the <inline-formula><mml:math id="M195" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> measurement noise level. Figure <xref ref-type="fig" rid="F3"/> shows that the simulated high noise on the <inline-formula><mml:math id="M196" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> signal largely obscures the signal of the power plants, while the high noise on the <inline-formula><mml:math id="M197" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> signal does not cause considerable changes with respect to the “true” simulated NO<sub>2</sub> field. We can see that the <inline-formula><mml:math id="M199" display="inline"><mml:mrow><mml:mn mathvariant="normal">5</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:math></inline-formula> pixel mean filter does not manage to recover much of the <inline-formula><mml:math id="M200" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> signal. Conversely, applying the joint MMSE to the two noisy input fields recovers much of the <inline-formula><mml:math id="M201" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images for a window size <inline-formula><mml:math id="M202" display="inline"><mml:mrow><mml:mi>T</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">9</mml:mn></mml:mrow></mml:math></inline-formula> – see Sect. S5 for images of other window sizes. The BM3D method (panel c) performs roughly equal to the joint MMSE method with <inline-formula><mml:math id="M203" display="inline"><mml:mrow><mml:mi>T</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">9</mml:mn></mml:mrow></mml:math></inline-formula> (panel b). We obtain the highest objective score by sequentially applying the joint MMSE method with <inline-formula><mml:math id="M204" display="inline"><mml:mrow><mml:mi>T</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">9</mml:mn></mml:mrow></mml:math></inline-formula> to the BM3D results (panel d), with a visibly good fit to the noisefree <inline-formula><mml:math id="M205" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> signal, as well as an eightfold improvement of the SSIM and an increase in PSNR by <inline-formula><mml:math id="M206" display="inline"><mml:mo>+</mml:mo></mml:math></inline-formula>45.1 dB when going from the noisy image to the denoised image. To put this into context, consider that for Gaussian white noise, averaging <inline-formula><mml:math id="M207" display="inline"><mml:mi>X</mml:mi></mml:math></inline-formula> images with noise variance <inline-formula><mml:math id="M208" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mtext>noisy</mml:mtext></mml:msub></mml:mrow></mml:math></inline-formula> yields <inline-formula><mml:math id="M209" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mtext>denoised</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>=</mml:mo><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mtext>noisy</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>/</mml:mo><mml:mi>X</mml:mi></mml:mrow></mml:math></inline-formula>. Their PSNR improvement in dB may be expressed as <inline-formula><mml:math id="M210" display="inline"><mml:mrow><mml:mn mathvariant="normal">10</mml:mn><mml:msub><mml:mi>log⁡</mml:mi><mml:mn mathvariant="normal">10</mml:mn></mml:msub><mml:mfenced close=")" open="("><mml:mrow><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mtext>noisy</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>/</mml:mo><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mtext>denoised</mml:mtext><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup></mml:mrow></mml:mfenced><mml:mo>=</mml:mo><mml:mn mathvariant="normal">10</mml:mn><mml:msub><mml:mi>log⁡</mml:mi><mml:mn mathvariant="normal">10</mml:mn></mml:msub><mml:mfenced close=")" open="("><mml:mi>X</mml:mi></mml:mfenced></mml:mrow></mml:math></inline-formula>. Using this relation, we we obtain here that <inline-formula><mml:math id="M211" display="inline"><mml:mrow><mml:mi>X</mml:mi><mml:mo>=</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mn mathvariant="normal">45.1</mml:mn><mml:mo>/</mml:mo><mml:mn mathvariant="normal">10</mml:mn></mml:mrow></mml:msup><mml:mo>≈</mml:mo><mml:mn mathvariant="normal">32</mml:mn><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mn mathvariant="normal">000</mml:mn></mml:mrow></mml:math></inline-formula>, i.e., the image denoised with BM3D and jMMSE for <inline-formula><mml:math id="M212" display="inline"><mml:mrow><mml:mi>T</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">9</mml:mn></mml:mrow></mml:math></inline-formula> has the same noise characteristics as if we would have averaged 32 000 images with these Gaussian independent high noise characteristics. Thus, the joint information content in <inline-formula><mml:math id="M213" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M214" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images is very large.</p>

      <fig id="F3"><label>Figure 3</label><caption><p id="d2e4785">An example of a synthetic CO2M satellite image on 23 October 2015 for a “high noise” scenario zooming on the emission plumes of the  coal-fired power stations near Prunéřov and Počerady.</p></caption>
          <graphic xlink:href="https://amt.copernicus.org/articles/19/3999/2026/amt-19-3999-2026-f03.png"/>

        </fig>

      <fig id="F4"><label>Figure 4</label><caption><p id="d2e4797">The noisy data from Fig. <xref ref-type="fig" rid="F3"/>b denoised using the jMMSE methods. Visually, it is clear that the plumes originally obscured by noise become visible again. The PSNR and SSIM scores have increased (indicating improvement). The best denoising performance is obtained by the combination of BM3D and the jMMSE method for <inline-formula><mml:math id="M215" display="inline"><mml:mrow><mml:mi>T</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">9</mml:mn></mml:mrow></mml:math></inline-formula>, with a <inline-formula><mml:math id="M216" display="inline"><mml:mo>+</mml:mo></mml:math></inline-formula>45.1 dB improvement. </p></caption>
          <graphic xlink:href="https://amt.copernicus.org/articles/19/3999/2026/amt-19-3999-2026-f04.png"/>

        </fig>


</sec>
<sec id="Ch1.S3.SS3">
  <label>3.3</label><title>Application to joint SO<sub>2</sub> and NO<sub>2</sub> TROPOMI images</title>
      <p id="d2e4856">The method is also evaluated using Level-2 trace gas products from Sentinel-5P/TROPOMI, which provides near-daily global coverage at a spatial resolution of approximately <inline-formula><mml:math id="M219" display="inline"><mml:mrow><mml:mn mathvariant="normal">7</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">3.5</mml:mn></mml:mrow></mml:math></inline-formula> km<sup>2</sup> at nadir. We use reprocessed (RPRO) <inline-formula><mml:math id="M221" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> data (processor version 02.04.01) and <inline-formula><mml:math id="M222" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> data (processor version 02.04.00) for the year 2021 <xref ref-type="bibr" rid="bib1.bibx6 bib1.bibx7" id="paren.18"/>. We perform the denoising using a qa_value <inline-formula><mml:math id="M223" display="inline"><mml:mo>&gt;</mml:mo></mml:math></inline-formula> 0.35 to retain some more data for the denoising methods to work with, but after denoising, we analyse and plot the results using the standard recommended threshold of qa_value <inline-formula><mml:math id="M224" display="inline"><mml:mo>&gt;</mml:mo></mml:math></inline-formula> 0.75. The <inline-formula><mml:math id="M225" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> product used here corresponds to the <inline-formula><mml:math id="M226" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> Differential Optical Absorption Spectroscopy (DOAS) RPRO product. The more recent operational RPRO product is obtained using the Covariance-Based Retrieval Algorithm (COBRA), which has significantly lower noise and a corrected bias in the retrieval. As a consequence, the denoising performance demonstrated here for <inline-formula><mml:math id="M227" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> should be interpreted in the context of this earlier processor version; results may differ for COBRA-based products due to their improved signal-to-noise ratio and potentially different error correlation structure. To better represent surface emissions, an air mass factor correction is applied to the <inline-formula><mml:math id="M228" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images, dividing the total column by the average of the three lowest averaging kernel weights<fn id="Ch1.Footn3"><p id="d2e4965">Following equation <inline-formula><mml:math id="M229" display="inline"><mml:mrow><mml:msub><mml:mtext>SO</mml:mtext><mml:mtext>2,new</mml:mtext></mml:msub><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:msub><mml:mo>∑</mml:mo><mml:mi>l</mml:mi></mml:msub><mml:msubsup><mml:mi>x</mml:mi><mml:mi>l</mml:mi><mml:mo>′</mml:mo></mml:msubsup><mml:mo>/</mml:mo><mml:msub><mml:mo>∑</mml:mo><mml:mi>l</mml:mi></mml:msub><mml:msub><mml:mi>A</mml:mi><mml:mi>l</mml:mi></mml:msub><mml:msubsup><mml:mi>x</mml:mi><mml:mi>l</mml:mi><mml:mo>′</mml:mo></mml:msubsup><mml:mo>)</mml:mo><mml:msub><mml:mtext>SO</mml:mtext><mml:mtext>2,old</mml:mtext></mml:msub></mml:mrow></mml:math></inline-formula> with <inline-formula><mml:math id="M230" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold-italic">x</mml:mi><mml:mo>′</mml:mo></mml:msup><mml:mo>=</mml:mo><mml:mo>[</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo><mml:mi mathvariant="normal">…</mml:mi><mml:mo>,</mml:mo><mml:mn mathvariant="normal">0</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>,</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> from the top of the atmosphere to the surface and <inline-formula><mml:math id="M231" display="inline"><mml:mi mathvariant="bold-italic">A</mml:mi></mml:math></inline-formula> is the averaging kernel. The reasoning is that we look only at power plant emissions, so we expect all the <inline-formula><mml:math id="M232" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> mass to be present close to the surface.</p></fn>. While a more detailed investigation of air mass correction factors would benefit accurate emission estimates, that is beyond the scope of this study.</p>
      <p id="d2e5080">Figure <xref ref-type="fig" rid="F5"/>a–d shows a TROPOMI overpass image over South Africa centered at Johannesburg for 3 March 2021, along with the ratio of the reported column precision to column values. This latter aspect is the inverse SNR (or, equivalently, the noise-to-signal-ratio). The <inline-formula><mml:math id="M233" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> image has substantially larger regions of low inverse SNR values (indicative of a good SNR) than that found for <inline-formula><mml:math id="M234" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>. Hence, the SNR for <inline-formula><mml:math id="M235" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> is much better than that for <inline-formula><mml:math id="M236" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>. Figure <xref ref-type="fig" rid="F5"/>e shows that the <inline-formula><mml:math id="M237" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> signal can be improved using the <inline-formula><mml:math id="M238" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> signal with the multichannel BM3D method. The noise reduction becomes greater when the combination of the BM3D and jMMSE method is applied (panel f). Note that we use the jMMSE using <inline-formula><mml:math id="M239" display="inline"><mml:mrow><mml:mi>T</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:math></inline-formula>, which effectively implies a window of <inline-formula><mml:math id="M240" display="inline"><mml:mrow><mml:mn mathvariant="normal">25</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">24.5</mml:mn></mml:mrow></mml:math></inline-formula> km<sup>2</sup> at nadir, which is slightly larger than what we used for the SMARTCARB test. Figure <xref ref-type="fig" rid="F5"/>g–h illustrates the changes compared to the original TROPOMI image, indicating substantial noise reduction. What is notable is that values close to 0 in Fig. <xref ref-type="fig" rid="F5"/>g–h are exactly those regions with good <inline-formula><mml:math id="M242" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> SNR as shown in Fig. <xref ref-type="fig" rid="F5"/>d. Hence, denoising has primarily removed “bad” signal while preserving “good” signal. Furthermore, the removed noise as shown in <xref ref-type="fig" rid="F5"/>g–h is essentially feature-less and consists of random speckles. Had we seen plume-like features in Fig. <xref ref-type="fig" rid="F5"/>g–h we would know that we were subtracting signal and not just noise, but this is clearly not the case. Thus, subtracting the denoised image from the original image provides an easy way to check if signal was added or destroyed.</p>

      <fig id="F5"><label>Figure 5</label><caption><p id="d2e5211">Single TROPOMI overpass image on 3 March 2021 of <bold>(a)</bold> <inline-formula><mml:math id="M243" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <bold>(c)</bold> <inline-formula><mml:math id="M244" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>. All pixels with a qa_value larger than 0.75 are plotted. Panels <bold>(b)</bold> and <bold>(d)</bold> plot the inverse of an estimate of the SNR, where values close to zero are assumed to be of high SNR.  Panels <bold>(e)</bold> and <bold>(f)</bold> show an application of the (multichannel) BM3D and additionally the jMMSE. Panels <bold>(g)</bold> and <bold>(h)</bold> show the difference between the estimates and the original <inline-formula><mml:math id="M245" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> image.</p></caption>
          <graphic xlink:href="https://amt.copernicus.org/articles/19/3999/2026/amt-19-3999-2026-f05.png"/>

        </fig>

      <p id="d2e5279">If we apply the noise estimation method from <xref ref-type="bibr" rid="bib1.bibx11" id="text.19"/> to our image, we find that the original <inline-formula><mml:math id="M246" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> image has <inline-formula><mml:math id="M247" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mtext>est,original</mml:mtext></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">4.1</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">24</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> molec. cm<sup>−2</sup> (which is 1.7 times the mean reported column precision for this overpass), while <inline-formula><mml:math id="M249" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mtext>est,BM3D</mml:mtext></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1.2</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">24</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> molec. cm<sup>−2</sup> and <inline-formula><mml:math id="M251" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:mtext>est,BM3D+jMMSE</mml:mtext><mml:mspace linebreak="nobreak" width="0.125em"/><mml:mi>T</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">5.9</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">23</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> molec. cm<sup>−2</sup>; in other words, a relative improvement of about 70 % or 86 %, respectively.</p>
      <p id="d2e5407">When considering a full year of observations (only selecting observations with a qa_value larger than 0.75) we find that the original <inline-formula><mml:math id="M253" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> image has a mean noise estimate following the method of <xref ref-type="bibr" rid="bib1.bibx11" id="text.20"/> of <inline-formula><mml:math id="M254" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi mathvariant="italic">σ</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mtext>est,original</mml:mtext></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">4.2</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">24</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> molec. cm<sup>−2</sup>, the BM3D average estimated noise is <inline-formula><mml:math id="M256" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi mathvariant="italic">σ</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mtext>est,BM3D</mml:mtext></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">2.3</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">24</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> molec. cm<sup>−2</sup>, and <inline-formula><mml:math id="M258" display="inline"><mml:mrow><mml:msub><mml:mover accent="true"><mml:mi mathvariant="italic">σ</mml:mi><mml:mo mathvariant="normal">‾</mml:mo></mml:mover><mml:mrow><mml:mtext>est,BM3D+jMMSE</mml:mtext><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mi>T</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn mathvariant="normal">1.4</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">24</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> molec. cm<sup>−2</sup> – that is, a 47 % and 66 % improvement in noise characteristics, respectively.</p>
      <p id="d2e5544">To further illustrate the advantage of this methodology, we present annual <inline-formula><mml:math id="M260" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> divergence maps in Fig. <xref ref-type="fig" rid="F6"/>, i.e., computations of <inline-formula><mml:math id="M261" display="inline"><mml:mrow><mml:mi mathvariant="normal">∇</mml:mi><mml:mo>×</mml:mo><mml:mo>(</mml:mo><mml:msub><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mtext>eff</mml:mtext></mml:msub><mml:mspace width="0.125em" linebreak="nobreak"/><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> averaged over a full year, where <inline-formula><mml:math id="M262" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold-italic">u</mml:mi><mml:mtext>eff</mml:mtext></mml:msub></mml:mrow></mml:math></inline-formula> is the 2-D vector containing the effective horizontal wind. In this case, wind fields were computed by vertically averaging ERA-5 reanalysis fields using the GNFR-A emission profile as weights. (We present an identical analysis for the SMARTCARB dataset in Sect. S4 where we show that the denoising methods, with the exception of the <inline-formula><mml:math id="M263" display="inline"><mml:mrow><mml:mn mathvariant="normal">5</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:math></inline-formula> pixel mean filter, do not introduce any biases, supporting the validity of the denoising approach for emission quantification.)  The divergence was computed on the TROPOMI overpass coordinate system, and then remapped to a common 0.03° grid. We consider the divergence map after applying BM3D to the overpasses in Fig. <xref ref-type="fig" rid="F6"/>b, a <inline-formula><mml:math id="M264" display="inline"><mml:mrow><mml:mn mathvariant="normal">5</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:math></inline-formula> pixel mean filter to each TROPOMI overpass as suggested by <xref ref-type="bibr" rid="bib1.bibx10" id="text.21"/> in Fig. <xref ref-type="fig" rid="F6"/>c, and the BM3D<inline-formula><mml:math id="M265" display="inline"><mml:mo>+</mml:mo></mml:math></inline-formula>jMMSE <inline-formula><mml:math id="M266" display="inline"><mml:mrow><mml:mi>T</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:math></inline-formula> approach in Fig. <xref ref-type="fig" rid="F6"/>d. The <inline-formula><mml:math id="M267" display="inline"><mml:mrow><mml:mn mathvariant="normal">5</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:math></inline-formula> pixel mean filter reduces noise but considerably smears the signal; in contrast, the other two methods better suppress noise while retaining source sharpness. Using the method of <xref ref-type="bibr" rid="bib1.bibx11" id="text.22"/>, we observe a 94 % noise reduction with the <inline-formula><mml:math id="M268" display="inline"><mml:mrow><mml:mn mathvariant="normal">5</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:math></inline-formula> pixel mean filter, while the BM3D approach reduces noise by 49 % and the BM3D<inline-formula><mml:math id="M269" display="inline"><mml:mo>+</mml:mo></mml:math></inline-formula>jMMSE approach by 68 %.</p>

      <fig id="F6"><label>Figure 6</label><caption><p id="d2e5687">Annual divergence maps for a region in South Africa. <bold>(a)</bold> The original “noisy” TROPOMI <inline-formula><mml:math id="M270" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> divergence map, <bold>(b)</bold> the estimate from applying BM3D to the <inline-formula><mml:math id="M271" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M272" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> field prior to taking the divergence, <bold>(c)</bold> the estimate from a <inline-formula><mml:math id="M273" display="inline"><mml:mrow><mml:mn mathvariant="normal">5</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:math></inline-formula> mean filter to the noisy <inline-formula><mml:math id="M274" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> prior to taking the divergence, <bold>(d)</bold> the estimate from the optimal <inline-formula><mml:math id="M275" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> image using the proposed BM3D<inline-formula><mml:math id="M276" display="inline"><mml:mo>+</mml:mo></mml:math></inline-formula>jMMSE <inline-formula><mml:math id="M277" display="inline"><mml:mrow><mml:mi>T</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:math></inline-formula> method prior to taking the divergence. A number of known sources are encircled.</p></caption>
          <graphic xlink:href="https://amt.copernicus.org/articles/19/3999/2026/amt-19-3999-2026-f06.png"/>

        </fig>

      <p id="d2e5796">To demonstrate that the denoising minimally impacts the signal structure, we compare emission estimates from different divergence fields in Fig. <xref ref-type="fig" rid="F7"/> (a more detailed examination of the estimates is provided in Sect. S5, where we also present a “difference” plot between the “noisy” divergence image and the denoised estimates). We focus on the ratio of the original “noisy” TROPOMI data estimates to those obtained with the denoising approaches. Emission estimates were obtained by spatial integration after masking data more than 0.15° from the point source location, corresponding to an integration radius of 16.7 km longitudinally and 15 km latitudinally. It is clear that the <inline-formula><mml:math id="M278" display="inline"><mml:mrow><mml:mn mathvariant="normal">5</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:math></inline-formula> pixel mean filter estimates significantly deviate from those based on noisy data. In contrast, estimates using the BM3D and BM3D<inline-formula><mml:math id="M279" display="inline"><mml:mo>+</mml:mo></mml:math></inline-formula>jMMSE <inline-formula><mml:math id="M280" display="inline"><mml:mrow><mml:mi>T</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:math></inline-formula> approaches are closer to the noisy data estimates, although some deviation is present. Sources where these two methods significantly differ from the noisy data are weakly represented in the <inline-formula><mml:math id="M281" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and/or <inline-formula><mml:math id="M282" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> dataset. This indicates that the noisy data may not accurately capture their presence and thus may not serve as reliable ground truth for comparison. In fact, the major deviations in Fig. <xref ref-type="fig" rid="F7"/>, the Newcastle Steel Works and Camden Power Station, yield <italic>negative</italic> emissions when using the original noisy data. Therefore, the divergence method does not provide a reliable estimate of these source emissions in these cases. This may be due to a (combination of a) variety of reasons, e.g., there was not enough data to produce a robust average; there was a temporal bias in the sampling (the divergence method needs satellite images with plumes being blown in all directions to produce a “point” on a map; otherwise “dipoles” with seeming positive and negative sides appear – so if our overpass consistently samples cases where the wind is blowing in one direction, we will get artifacts); the steady state assumption was invalid; our chosen effective wind is not appropriate for the terrain and/or plume.</p>

      <fig id="F7"><label>Figure 7</label><caption><p id="d2e5863"><inline-formula><mml:math id="M283" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> emission estimate <italic>ratios</italic> from integrating along a <inline-formula><mml:math id="M284" display="inline"><mml:mo>∼</mml:mo></mml:math></inline-formula> 15 km radius around point source locations across the divergence maps shown in Fig. <xref ref-type="fig" rid="F6"/>. A “blue” color in the ratio columns corresponds to an <italic>underestimation</italic> compared to the “noisy” <inline-formula><mml:math id="M285" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> divergence map, while a “red” color in the ratio columns corresponds to an <italic>overestimation</italic>. Note, that the “noisy” <inline-formula><mml:math id="M286" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> divergence map is not necessarily a ground truth, and this plot is shown for illustrative purposes only.</p></caption>
          <graphic xlink:href="https://amt.copernicus.org/articles/19/3999/2026/amt-19-3999-2026-f07.png"/>

        </fig>

</sec>
</sec>
<sec id="Ch1.S4">
  <label>4</label><title>Discussion</title>
      <p id="d2e5933">The joint MMSE and BM3D approaches aim to denoise data while preserving the signal. The examples demonstrate the effectiveness of these methods, but they also have limitations.</p>
      <p id="d2e5936">Firstly, these methods assume independent and identically distributed (i.i.d.) noise with zero mean. Consequently, structural noise patterns, such as stripes, may not be denoised and could be misinterpreted as meaningful signals by BM3D due to the self-similarity of structural noise. While tuning BM3D for such cases is possible with prior knowledge of noise distribution in the 2D wavenumber domain <xref ref-type="bibr" rid="bib1.bibx19" id="paren.23"/>, this knowledge is often absent for satellite data. Another violation of the i.i.d. assumption may show up in the form of correlated errors in both satellite products due to shared dependencies in the radiative transfer (such as albedo, cloud contamination or aerosol loading). These factors enter both retrievals, thereby introducing a common-mode error component. Mitigation strategies could include restricting the analysis to scenes with low sources of such errors, or extending the statistical model presented here to include such correlated errors or biases. Consequently, users should interpret the denoised image with caution in regions where strong scene-dependent retrieval artifacts are expected, as these features, shared between the low and high SNR images, may be preserved or even reinforced in the denoised output.</p>
      <p id="d2e5942">Secondly, the practical implementation of jMMSE requires spatial stationarity, meaning the ratio of <inline-formula><mml:math id="M287" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M288" display="inline"><mml:mo>:</mml:mo></mml:math></inline-formula> <inline-formula><mml:math id="M289" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> column densities (or similarly chosen trace gases) should be approximately constant within a window of <inline-formula><mml:math id="M290" display="inline"><mml:mrow><mml:mi>T</mml:mi><mml:mo>×</mml:mo><mml:mi>T</mml:mi></mml:mrow></mml:math></inline-formula> pixels. It is clear that there is no globally fixed <inline-formula><mml:math id="M291" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M292" display="inline"><mml:mo>:</mml:mo></mml:math></inline-formula> <inline-formula><mml:math id="M293" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> ratio, and although this is approximately true when we focus on a small region, NO<sub><italic>x</italic></sub> chemistry inside plumes will change ratios inside plumes <xref ref-type="bibr" rid="bib1.bibx20 bib1.bibx13" id="paren.24"/>. Hence, the value for <inline-formula><mml:math id="M295" display="inline"><mml:mi>T</mml:mi></mml:math></inline-formula> must be kept as low as possible. The competing interest, of course, is that for robust statistics, <inline-formula><mml:math id="M296" display="inline"><mml:mi>T</mml:mi></mml:math></inline-formula> should be chosen as large as possible. This raises the question of how to appropriately choose <inline-formula><mml:math id="M297" display="inline"><mml:mi>T</mml:mi></mml:math></inline-formula>. This can be based on subtracting the original image from the denoised image. Whatever shows up as structureless features there is noise, while whatever shows up as structured noise is likely the removal of real signal (e.g., this might happen if the difference shows something that looks like a plume and is indeed coincident with a plume on the original data). If one can grow <inline-formula><mml:math id="M298" display="inline"><mml:mi>T</mml:mi></mml:math></inline-formula>, but at some value of <inline-formula><mml:math id="M299" display="inline"><mml:mi>T</mml:mi></mml:math></inline-formula> the noise rejection does not improve anymore, then one has found the optimal <inline-formula><mml:math id="M300" display="inline"><mml:mi>T</mml:mi></mml:math></inline-formula> for noise rejection. Conversely, if one can grow <inline-formula><mml:math id="M301" display="inline"><mml:mi>T</mml:mi></mml:math></inline-formula> but at some point one is starting to reject also signal, then one can say they have found the optimal <inline-formula><mml:math id="M302" display="inline"><mml:mi>T</mml:mi></mml:math></inline-formula> to retain the signal. This argument suggests that spatial stationarity is best satisfied over small regions and indicates that denoising will be more applicable in high-resolution rather than coarse-resolution satellite images. The authors believe that rather than prescribing a value of <inline-formula><mml:math id="M303" display="inline"><mml:mi>T</mml:mi></mml:math></inline-formula> in this paper, it should remain an open hyperparameter for end users to decide. However, in the Supplement we demonstrate two example workflows for selecting the parameters based on a simple grid search – either by minimizing an objective function that maximizes noise reduction while minimizing signal bias, or by performing a simple grid search optimization for the remaining hyperparameters. Once optimal parameters are found to work for a handful of images, they generally work well for a full dataset.</p>
</sec>
<sec id="Ch1.S5" sec-type="conclusions">
  <label>5</label><title>Conclusions</title>
      <p id="d2e6101">We presented two minimum mean square error (MMSE) estimators that enhance the signal-to-noise ratio (SNR) of noisy <inline-formula><mml:math id="M304" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> or <inline-formula><mml:math id="M305" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images using co-registered <inline-formula><mml:math id="M306" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images from the upcoming GOSAT-GW and CO2M satellites, as well as from Sentinel-5P. These methods enhance the visibility of plumes that are hard to discern in the noisy images. The first method, joint MMSE, preserves plumes with good SNR (i.e., where the signal is strong or highly correlated with the <inline-formula><mml:math id="M307" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> field) while subtracting noise elsewhere. The second method, BM3D, leverages image self-similarity by denoising a linear combination of normalized <inline-formula><mml:math id="M308" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> or <inline-formula><mml:math id="M309" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M310" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images. The best outcomes result from combining both estimators, initially applying BM3D for denoising, followed by joint MMSE for further refinement of the <inline-formula><mml:math id="M311" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> or <inline-formula><mml:math id="M312" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> image.</p>
      <p id="d2e6204">We demonstrate the effectiveness of these techniques in two case studies. In synthetic data tests, the denoising process improves peak SNR by more than 40 dB. When applied to TROPOMI <inline-formula><mml:math id="M313" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">SO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M314" display="inline"><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> images over South Africa, or their annual divergence maps, we observe that a 30 %–60 % reduction in noise levels is possible, while leaving plume structures intact.</p>
      <p id="d2e6229">The proposed denoising methods can enhance plume detection for single-overpass images and averaged satellite datasets. These techniques improve plume visibility and may assist in plume emission quantification methods, such as Gaussian plume inversion, cross-sectional flux methods, or the divergence method, by providing cleaner input data. Therefore, by systematically reducing noise in total column images, this approach strengthens satellite capabilities for monitoring atmospheric emissions with greater precision.</p>
</sec>

      
      </body>
    <back><app-group>

<app id="App1.Ch1.S1">
  <label>Appendix A</label><title>Python implementation</title>
      <p id="d2e6244">In order to implement Eq. (<xref ref-type="disp-formula" rid="Ch1.E11"/>), we need to compute the quantities <inline-formula><mml:math id="M315" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M316" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mi>d</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M317" display="inline"><mml:mrow><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> with sufficient accuracy. In this section, we give some possible ways to obtain these quantities.</p>
      <p id="d2e6291"><list list-type="order">
          <list-item>

      <p id="d2e6296">The expected column <inline-formula><mml:math id="M318" display="inline"><mml:mrow><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula> can be defined as the median value of a <inline-formula><mml:math id="M319" display="inline"><mml:mrow><mml:mi>T</mml:mi><mml:mo>×</mml:mo><mml:mi>T</mml:mi></mml:mrow></mml:math></inline-formula> patch around any given pixel.</p>
          </list-item>
          <list-item>

      <p id="d2e6328">The data covariance matrix <inline-formula><mml:math id="M320" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mi>d</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> is defined by Eq. (<xref ref-type="disp-formula" rid="Ch1.E5"/>). To estimate it from the data (the “sample covariance matrix”), we form two row vectors of size <inline-formula><mml:math id="M321" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mi>T</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> – for example, <inline-formula><mml:math id="M322" display="inline"><mml:mover accent="true"><mml:mrow><mml:mi mathvariant="bold-italic">C</mml:mi><mml:msub><mml:mi mathvariant="bold-italic">O</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover></mml:math></inline-formula> as a <inline-formula><mml:math id="M323" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mi>T</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> row vector containing all <inline-formula><mml:math id="M324" display="inline"><mml:mover accent="true"><mml:mrow><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover></mml:math></inline-formula> observations in a <inline-formula><mml:math id="M325" display="inline"><mml:mrow><mml:mi>T</mml:mi><mml:mo>×</mml:mo><mml:mi>T</mml:mi></mml:mrow></mml:math></inline-formula> patch around the pixel, and <inline-formula><mml:math id="M326" display="inline"><mml:mover accent="true"><mml:mrow><mml:mi mathvariant="bold-italic">N</mml:mi><mml:msub><mml:mi mathvariant="bold-italic">O</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover></mml:math></inline-formula> as a <inline-formula><mml:math id="M327" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mi>T</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> row-vector containing all <inline-formula><mml:math id="M328" display="inline"><mml:mover accent="true"><mml:mrow><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow><mml:mo mathvariant="normal" stretchy="false">̃</mml:mo></mml:mover></mml:math></inline-formula> observations around the pixel. Defining the sample deviation matrix as a <inline-formula><mml:math id="M329" display="inline"><mml:mrow><mml:mn mathvariant="normal">2</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mi>T</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> array, <inline-formula><mml:math id="M330" display="inline"><mml:mrow><mml:mi mathvariant="bold">M</mml:mi><mml:mo>=</mml:mo><mml:mo>[</mml:mo><mml:msup><mml:mover accent="true"><mml:mrow><mml:mi mathvariant="bold-italic">C</mml:mi><mml:msub><mml:mi mathvariant="bold-italic">O</mml:mi><mml:mn mathvariant="bold">2</mml:mn></mml:msub></mml:mrow><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover><mml:mi>T</mml:mi></mml:msup><mml:msup><mml:mover accent="true"><mml:mrow><mml:mi mathvariant="bold-italic">N</mml:mi><mml:msub><mml:mi mathvariant="bold-italic">O</mml:mi><mml:mn mathvariant="bold">2</mml:mn></mml:msub></mml:mrow><mml:mo stretchy="false" mathvariant="normal">̃</mml:mo></mml:mover><mml:mi>T</mml:mi></mml:msup><mml:msup><mml:mo>]</mml:mo><mml:mi>T</mml:mi></mml:msup><mml:mo>-</mml:mo><mml:mi mathvariant="double-struck">E</mml:mi><mml:mo>[</mml:mo><mml:mi mathvariant="bold-italic">M</mml:mi><mml:mo>]</mml:mo></mml:mrow></mml:math></inline-formula>, we may compute the <inline-formula><mml:math id="M331" display="inline"><mml:mrow><mml:mn mathvariant="normal">2</mml:mn><mml:mo>×</mml:mo><mml:mn mathvariant="normal">2</mml:mn></mml:mrow></mml:math></inline-formula> data covariance matrix,

                <disp-formula id="App1.Ch1.S1.E17" content-type="numbered"><label>A1</label><mml:math id="M332" display="block"><mml:mrow><mml:msub><mml:mfenced close="|" open=""><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mi>d</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfenced><mml:mtext>sample</mml:mtext></mml:msub><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mn mathvariant="normal">1</mml:mn><mml:mrow><mml:msup><mml:mi>T</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:mfrac></mml:mstyle><mml:msup><mml:mi mathvariant="bold">MM</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>

      <p id="d2e6589">As we want to use a small value for <inline-formula><mml:math id="M333" display="inline"><mml:mi>T</mml:mi></mml:math></inline-formula>, it makes sense to use covariance shrinkage operators, which makes the estimation more robust <xref ref-type="bibr" rid="bib1.bibx18" id="paren.25"/>. A simple operation is to get the eigenvector decomposition <inline-formula><mml:math id="M334" display="inline"><mml:mrow><mml:msub><mml:mfenced close="|" open=""><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mi>d</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfenced><mml:mtext>sample</mml:mtext></mml:msub><mml:mo>=</mml:mo><mml:mi mathvariant="bold">U</mml:mi><mml:mi mathvariant="bold">Λ</mml:mi><mml:msup><mml:mi mathvariant="bold">U</mml:mi><mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>, and reconstruct it with modified eigenvalues as

                <disp-formula id="App1.Ch1.S1.E18" content-type="numbered"><label>A2</label><mml:math id="M335" display="block"><mml:mrow><mml:msub><mml:mfenced close="|" open=""><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mi>d</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfenced><mml:mi mathvariant="normal">est</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mi mathvariant="bold">U</mml:mi><mml:msup><mml:mi mathvariant="bold">Λ</mml:mi><mml:mo>′</mml:mo></mml:msup><mml:msup><mml:mi mathvariant="bold">U</mml:mi><mml:mi>T</mml:mi></mml:msup><mml:mo>,</mml:mo></mml:mrow></mml:math></disp-formula>

              where <inline-formula><mml:math id="M336" display="inline"><mml:mrow><mml:msup><mml:mi mathvariant="bold">Λ</mml:mi><mml:mo>′</mml:mo></mml:msup><mml:mo>=</mml:mo><mml:mo>(</mml:mo><mml:mi mathvariant="italic">α</mml:mi><mml:mi mathvariant="bold">Λ</mml:mi><mml:mo>+</mml:mo><mml:mo>(</mml:mo><mml:mn mathvariant="normal">1</mml:mn><mml:mo>-</mml:mo><mml:mi mathvariant="italic">α</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>Diag<inline-formula><mml:math id="M337" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:msub><mml:mi>n</mml:mi><mml:mrow><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>n</mml:mi><mml:mrow><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:msub><mml:mo>)</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> contains the modified eigenvalues based on the expected noise characteristics of the data, and Diag<inline-formula><mml:math id="M338" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:mo>×</mml:mo><mml:mo>,</mml:mo><mml:mo>×</mml:mo><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> forms a diagonal matrix with the elements given. For <inline-formula><mml:math id="M339" display="inline"><mml:mrow><mml:mi mathvariant="italic">α</mml:mi><mml:mo>=</mml:mo><mml:mn mathvariant="normal">0.5</mml:mn></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M340" display="inline"><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mrow><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M341" display="inline"><mml:mrow><mml:msub><mml:mi>n</mml:mi><mml:mrow><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> as diagonal entries of <inline-formula><mml:math id="M342" display="inline"><mml:mrow><mml:msub><mml:mfenced close="|" open=""><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mi>d</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfenced><mml:mtext>sample</mml:mtext></mml:msub></mml:mrow></mml:math></inline-formula> we, for example, mix the sample covariance matrix and a diagonalized covariance matrix.</p>
          </list-item>
          <list-item>

      <p id="d2e6811">The noise covariance matrix <inline-formula><mml:math id="M343" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> corresponds to the precision of the instrument. If the noise is uncorrelated and known as <inline-formula><mml:math id="M344" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M345" display="inline"><mml:mrow><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup></mml:mrow></mml:math></inline-formula> for the two measurements, that simply corresponds to <inline-formula><mml:math id="M346" display="inline"><mml:mrow><mml:msub><mml:mfenced open="" close="|"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>n</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfenced><mml:mtext>instrument</mml:mtext></mml:msub></mml:mrow></mml:math></inline-formula> <inline-formula><mml:math id="M347" display="inline"><mml:mo>=</mml:mo></mml:math></inline-formula>  Diag<inline-formula><mml:math id="M348" display="inline"><mml:mrow><mml:mo>(</mml:mo><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>,</mml:mo><mml:msubsup><mml:mi mathvariant="italic">σ</mml:mi><mml:mrow class="chem"><mml:msub><mml:mi mathvariant="normal">NO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow><mml:mn mathvariant="normal">2</mml:mn></mml:msubsup><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>. Alternatively, if this type of data is not available, we may estimate it as the median covariance of a single overpass (or image), the idea being that a typical image contains primarily “noise” and only a limited amount of “signal” (i.e., hot spot enhancements) such that the median covariance matrix of the data is representative for the noise.</p>
          </list-item>
        </list></p>
      <p id="d2e6925">We can give a straightforward example of an implementation of this algorithm in about 100 lines of Python code. Special care is taken of missing data through use of the numpy “mask” feature. Along with the robust estimator for <inline-formula><mml:math id="M349" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mi>d</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, we also include the capacity to make sure <inline-formula><mml:math id="M350" display="inline"><mml:mrow><mml:msub><mml:mi mathvariant="bold">C</mml:mi><mml:mrow><mml:mi>d</mml:mi><mml:mi>d</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> has a stable inverse by clipping the conditioning number and by adding small values along its diagonal. The code given here is given as an example of how the quantities used in the theory could be computed in practice.</p>
      <p id="d2e6958"><preformat><![CDATA[def covariance_shrinkage(Cdd, alpha, max_cond, min_eig):
    var_CO2 = np.ma.median(Cdd[:,:,0,0])
    var_NO2 = np.ma.median(Cdd[:,:,1,1])
    λ, U = np.linalg.eigh(np.nan_to_num(Cdd))
    λ[:,:,0] = alpha * λ[:,:,0] + (1-alpha) * var_CO2
    λ[:,:,1] = alpha * λ[:,:,1] + (1-alpha) * var_NO2
    eig_max = np.maximum(λ[:,:,1], min_eig)
    eig_min_allowed = eig_max / max_cond
    λ[:,:,0] = np.maximum(λ[:,:,0], eig_min_allowed)
    recon = (U * λ[..., None, :]) @ U.transpose((0,1,3,2))
    recon[np.isnan(Cdd)] = np.nan
    return recon

def ridge_regularization(Cdd, max_cond, γ, Γ):
    cond_num = np.linalg.cond(Cdd.filled(1.0))  # shape (lon, lat)
    p = 2.0  # curvature of ramp
    cond_factor = np.clip(np.log10(cond_num) / np.log10(max_cond), 0, 1)
    nugget_strength = γ + cond_factor**p * (Γ - γ)

    # Apply proportional nugget to each variance term
    Cdd[:,:,0,0] += nugget_strength * np.ma.median(Cdd[:,:,0,0])
    Cdd[:,:,1,1] += nugget_strength * np.ma.median(Cdd[:,:,1,1])

    variance_floor = np.ma.median( Cdd[:,:,0,0] )
    Cdd[:,:,0,0] = np.maximum(Cdd[:,:,0,0], variance_floor)
    return Cdd

def covariance(D, i, j):
    count = (D[i,...]*D[j,...]).count(axis=-1) - 1
    return np.ma.sum(D[i,...]*D[j,...], axis=-1)/count

def nanaverage(A,W,axis=-1):
    return np.nansum(A*W,axis=axis)/((~np.isnan(A))*W).sum(axis=axis)

def MMSE_estimate_fixed(
    in_arr1, in_arr2, T, CNN=None, alpha=0.5,
    method='median', max_cond=1e7, min_eig=1e-13,
    γ=1e-3, Γ=1e0):

    # --- Pad data (s.t. our windows catch all the data)
    CO2 = np.pad(in_arr1, ((T, T), (T, T)), 'symmetric')
    NO2 = np.pad(in_arr2, ((T, T), (T, T)), 'symmetric')

    # --- Extract overlapping patches of size WxW
    CO2_tiles = view_as_windows(CO2               , (T,T))
    NO2_tiles = view_as_windows(NO2               , (T,T))
    mask_tile = view_as_windows(~np.isnan(CO2+NO2), (T,T))

    # --- Reshape
    mask_tile = mask_tile.reshape(*mask_tile.shape[:-2], -1)
    X = np.stack((CO2_tiles.reshape(*CO2_tiles.shape[:-2], -1),
                  NO2_tiles.reshape(*NO2_tiles.shape[:-2], -1)))

    # --- Generate masked array
    X = np.ma.array( X, mask=~np.stack([mask_tile] * 2, axis=0) )

    # --- Compute expected value of the dataset
    av_field = {"mean": np.nanmean(X,-1,keepdims=1),
                "median": np.nanmedian(X,-1,keepdims=1)}[method]]]></preformat></p>
      <p id="d2e6965"><preformat><![CDATA[
    # --- Compute sample covariance matrix
    D = X - av_field
    Cdd = np.ma.zeros((*D.shape[1:3], 2, 2)) * np.nan
    Cdd[...,0,0] = covariance(D, 0, 0)
    Cdd[...,0,1] = covariance(D, 0, 1)
    Cdd[...,1,0] = covariance(D, 1, 0)
    Cdd[...,1,1] = covariance(D, 1, 1)
    Cdd = covariance_shrinkage(Cdd, alpha, max_cond, min_eig)
    Cdd = ridge_regularization(Cdd, max_cond, γ, Γ)

    # --- Compute noise covariance matrix
    Cnn = np.zeros_like(Cdd)
    Cnn[:,:,0,0] = np.ma.median(Cdd[...,0,0])
    if CNN is None:
        pass
    elif type(CNN) is np.float32:
        Cnn[:,:,0,0] = Cnn[:,:,0,0]*0.5 + CNN*0.5
    else:
        CNN = np.pad(CNN, ((T, T), (T, T)), 'symmetric')
        CNN = view_as_windows(CNN, (T,T))
        CNN = CNN.reshape(*mask_tile.shape[:-1], -1)
        CNN = np.nanmedian(CNN, -1)
        Cnn[:,:,0,0] = Cnn[:,:,0,0]*0.5 + CNN*0.5

    # --- Apply filter
    wCddICnn = np.linalg.solve(Cdd.filled(np.nan),Cnn.filled(np.nan))
    wCddICnnEM = np.einsum('ijk,kijl->ijl',wCddICnn[...,0].squeeze(),D)

    est_gather = np.zeros((*CO2.shape, T**2)) * np.nan
    for i in range(T**2):
        y, x = np.mod(i,T)-T//2, i//T-T//2
        xs, xe = max((T//2)+x,0), min(CO2.shape[0]-(T//2)+x, CO2.shape[0])
        ys, ye = max((T//2)+y,0), min(CO2.shape[1]-(T//2)+y, CO2.shape[1])
        est_gather[xs:xe, ys:ye, i] = wCddICnnEM[:,:,i]

    # --- Generate filter grid coordinates
    y, x = np.meshgrid(np.arange(-T//2+1, T//2+1), np.arange(-T//2+1, T//2+1))
    weights_2dgauss = np.exp(-(x**2 + y**2) / (2 * 4**2))

    # --- Compute final output
    pred = CO2 - nanaverage(est_gather,W=weights_2dgauss.flatten())
    est = np.where( np.isfinite(CO2), pred, np.nan )
    est = np.where( np.isnan(NO2) & np.isnan(est), CO2, est )

    return est[T:-T,T:-T]
]]></preformat></p>
</app>
  </app-group><notes notes-type="codedataavailability"><title>Code and data availability</title>

      <p id="d2e6976">A C<inline-formula><mml:math id="M351" display="inline"><mml:mrow><mml:mo>+</mml:mo><mml:mo>+</mml:mo></mml:mrow></mml:math></inline-formula> implementation of BM3D may be obtained from <uri>https://github.com/gfacciol/bm3d</uri> (last access: 21 August 2025), although in this paper we use a Python implementation from <uri>https://pypi.org/project/bm3d/</uri> (last access: 6 September 2024). The code which implements the joint MMSE is added as a supplement to this paper, along with example data (one example from the SMARTCARB dataset and one example from the TROPOMI dataset), which can be used to reproduce Figs. <xref ref-type="fig" rid="F1"/>, <xref ref-type="fig" rid="F3"/>–<xref ref-type="fig" rid="F5"/>.</p>
  </notes><app-group>
        <supplementary-material position="anchor"><p id="d2e7002">The supplement related to this article is available online at <inline-supplementary-material xlink:href="https://doi.org/10.5194/amt-19-3999-2026-supplement" xlink:title="zip">https://doi.org/10.5194/amt-19-3999-2026-supplement</inline-supplementary-material>.</p></supplementary-material>
        </app-group><notes notes-type="authorcontribution"><title>Author contributions</title>

      <p id="d2e7011">EK derived and implemented the jMMSE algorithm and BM3D method modification. EK, GK, and DB all contributed equally to the writing process.</p>
  </notes><notes notes-type="competinginterests"><title>Competing interests</title>

      <p id="d2e7017">At least one of the (co-)authors is a member of the editorial board of <italic>Atmospheric Measurement Techniques</italic>. The peer-review process was guided by an independent editor, and the authors also have no other competing interests to declare.</p>
  </notes><notes notes-type="disclaimer"><title>Disclaimer</title>

      <p id="d2e7026">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><ack><title>Acknowledgements</title><p id="d2e7032">This project has received funding from the European Union's Horizon 2020 research and innovation programme under grant agreement no. 958927 (CoCO2) and the European Union's Horizon Europe programme under grant agreement no. 101082194 (CORSO), with additional funding by the Swiss State Secretary for Education, Research and Innovation (SERI) no. 22.00422. We gratefully acknowledge CSCS for the computing resources (project s1302).</p></ack><notes notes-type="financialsupport"><title>Financial support</title>

      <p id="d2e7038">This research has been supported by the EU Horizon 2020 (grant nos. 958927 and 101082194) and the Swiss State Secretary for Education, Research and Innovation (SERI) no. 22.00422.</p>
  </notes><notes notes-type="reviewstatement"><title>Review statement</title>

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

      <ref id="bib1.bibx1"><label>Beirle et al.(2019)</label><mixed-citation>Beirle, S., Borger, C., Dörner, S., Li, A., Hu, Z., Liu, F., Wang, Y., and Wagner, T.: Pinpointing nitrogen oxide emissions from space, Sci. Adv., 5, eaax9800, <ext-link xlink:href="https://doi.org/10.1126/sciadv.aax9800" ext-link-type="DOI">10.1126/sciadv.aax9800</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx2"><label>Beirle et al.(2023)Beirle, Borger, Jost, and Wagner</label><mixed-citation>Beirle, S., Borger, C., Jost, A., and Wagner, T.: Improved catalog of NO<sub><italic>x</italic></sub> point source emissions (version 2), Earth Syst. Sci. Data, 15, 3051–3073, <ext-link xlink:href="https://doi.org/10.5194/essd-15-3051-2023" ext-link-type="DOI">10.5194/essd-15-3051-2023</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bibx3"><label>Buades et al.(2005)Buades, Coll, and Morel</label><mixed-citation>Buades, A., Coll, B., and Morel, J.-M.: A review of image denoising algorithms, with a new one, Multiscale Model. Simul., 4, 490–530, <ext-link xlink:href="https://doi.org/10.1137/040616024" ext-link-type="DOI">10.1137/040616024</ext-link>, 2005.</mixed-citation></ref>
      <ref id="bib1.bibx4"><label>Buades et al.(2011)Buades, Coll, and Morel</label><mixed-citation>Buades, A., Coll, B., and Morel, J.-M.: Non-local means denoising, Image Process. Line, 1, 208–212, <ext-link xlink:href="https://doi.org/10.5201/ipol.2011.bcm_nlm" ext-link-type="DOI">10.5201/ipol.2011.bcm_nlm</ext-link>, 2011.</mixed-citation></ref>
      <ref id="bib1.bibx5"><label>Buchwitz et al.(2013)Buchwitz, Reuter, Bovensmann, Pillai, Heymann, Schneising, Rozanov, Krings, Burrows, Boesch et al.</label><mixed-citation>Buchwitz, M., Reuter, M., Bovensmann, H., Pillai, D., Heymann, J., Schneising, O., Rozanov, V., Krings, T., Burrows, J. P., Boesch, H., Gerbig, C., Meijer, Y., and Löscher, A.: Carbon Monitoring Satellite (CarbonSat): assessment of atmospheric CO<sub>2</sub> and CH<sub>4</sub> retrieval errors by error parameterization, Atmos. Meas. Tech., 6, 3477–3500, <ext-link xlink:href="https://doi.org/10.5194/amt-6-3477-2013" ext-link-type="DOI">10.5194/amt-6-3477-2013</ext-link>, 2013.</mixed-citation></ref>
      <ref id="bib1.bibx6"><label>Copernicus Sentinel-5P(2020)</label><mixed-citation>Copernicus Sentinel-5P (processed by ESA): TROPOMI Level 2 Sulfur Dioxide Total Column products, Version 02, European Space Agency [data set], <ext-link xlink:href="https://doi.org/10.5270/S5P-74eidii" ext-link-type="DOI">10.5270/S5P-74eidii</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx7"><label>Copernicus Sentinel-5P(2021)</label><mixed-citation>Copernicus Sentinel-5P (processed by ESA): TROPOMI Level 2 Nitrogen Dioxide total column products, Version 02, European Space Agency [data set], <ext-link xlink:href="https://doi.org/10.5270/S5P-9bnp8q8" ext-link-type="DOI">10.5270/S5P-9bnp8q8</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx8"><label>Dabov et al.(2007)</label><mixed-citation>Dabov, K., Foi, A., Katkovnik, V., and Egiazarian, K.: Image denoising by  sparse 3-D transform-domain collaborative filtering, IEEE Trans. Image Process., 16, 2080–2095, <ext-link xlink:href="https://doi.org/10.1109/TIP.2007.901238" ext-link-type="DOI">10.1109/TIP.2007.901238</ext-link>, 2007.</mixed-citation></ref>
      <ref id="bib1.bibx9"><label>Fichtner(2021)</label><mixed-citation>Fichtner, A.: Lecture Notes on Inverse Theory, Tech. rep., ETH Zurich,  Switzerland, <ext-link xlink:href="https://doi.org/10.33774/coe-2021-qpq2j" ext-link-type="DOI">10.33774/coe-2021-qpq2j</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx10"><label>Hakkarainen et al.(2022)</label><mixed-citation>Hakkarainen, J., Ialongo, I., Koene, E., Szeląg, M. E., Tamminen, J.,  Kuhlmann, G., and Brunner, D.: Analyzing local carbon dioxide and nitrogen  oxide emissions from space using the divergence method: an application to the  synthetic SMARTCARB dataset, Front. Remote Sens., 3, 878731, <ext-link xlink:href="https://doi.org/10.3389/frsen.2022.878731" ext-link-type="DOI">10.3389/frsen.2022.878731</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx11"><label>Immerkaer(1996)</label><mixed-citation>Immerkaer, J.: Fast noise variance estimation, Comput. Vis. Image Underst., 64, 300–302, <ext-link xlink:href="https://doi.org/10.1006/cviu.1996.0060" ext-link-type="DOI">10.1006/cviu.1996.0060</ext-link>, 1996.</mixed-citation></ref>
      <ref id="bib1.bibx12"><label>Koene et al.(2024)Koene, Brunner, and Kuhlmann</label><mixed-citation>Koene, E. F. M., Brunner, D., and Kuhlmann, G.: On the theory of the divergence method for quantifying source emissions from satellite observations, J. Geophys. Res.-Atmos., 129, <ext-link xlink:href="https://doi.org/10.1029/2023JD039904" ext-link-type="DOI">10.1029/2023JD039904</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx13"><label>Krol et al.(2024)Krol, van Stratum, Anglou, and Boersma</label><mixed-citation>Krol, M., van Stratum, B., Anglou, I., and Boersma, K. F.: Evaluating NO<sub><italic>x</italic></sub> stack plume emissions using a high-resolution atmospheric chemistry model and satellite-derived NO<sub>2</sub> columns, Atmos. Chem. Phys., 24, 8243–8262, <ext-link xlink:href="https://doi.org/10.5194/acp-24-8243-2024" ext-link-type="DOI">10.5194/acp-24-8243-2024</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx14"><label>Kuhlmann et al.(2019)Kuhlmann, Broquet, Marshall, Clément, Löscher, Meijer, and Brunner</label><mixed-citation>Kuhlmann, G., Broquet, G., Marshall, J., Clément, V., Löscher, A., Meijer, Y., and Brunner, D.: Detectability of CO<sub>2</sub> emission plumes of cities and power plants with the Copernicus Anthropogenic CO<sub>2</sub> Monitoring (CO2M) mission, Atmos. Meas. Tech., 12, 6695–6719, <ext-link xlink:href="https://doi.org/10.5194/amt-12-6695-2019" ext-link-type="DOI">10.5194/amt-12-6695-2019</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx15"><label>Kuhlmann et al.(2020a)Kuhlmann, Clément, Marshall, Fuhrer, Broquet, Schnadt-Poberaj, Löscher, Meijer, and Brunner</label><mixed-citation>Kuhlmann, G., Clément, V., Marshall, J., Fuhrer, O., Broquet, G.,  Schnadt-Poberaj, C., Löscher, A., Meijer, Y., and Brunner, D.: SMARTCARB  – Use of satellite measurements of auxiliary reactive trace gases for  fossil fuel carbon dioxide emission estimation, Zenodo,  <ext-link xlink:href="https://doi.org/10.5281/zenodo.4034266" ext-link-type="DOI">10.5281/zenodo.4034266</ext-link>, 2020a.</mixed-citation></ref>
      <ref id="bib1.bibx16"><label>Kuhlmann et al.(2020b)Kuhlmann, Clément, Marshall, Fuhrer, Broquet, Schnadt-Poberaj, Löscher, Meijer, and Brunner</label><mixed-citation>Kuhlmann, G., Clément, V., Marshall, J., Fuhrer, O., Broquet, G., Schnadt-Poberaj, C., Löscher, A., Meijer, Y., and Brunner, D.: Synthetic XCO<sub>2</sub>, CO and NO<sub>2</sub> observations for the CO2M and Sentinel-5 satellites, Zenodo [data set], <ext-link xlink:href="https://doi.org/10.5281/zenodo.4048228" ext-link-type="DOI">10.5281/zenodo.4048228</ext-link>, 2020b.</mixed-citation></ref>
      <ref id="bib1.bibx17"><label>Kuhlmann et al.(2021)Kuhlmann, Henne, Meijer, and Brunner</label><mixed-citation>Kuhlmann, G., Henne, S., Meijer, Y., and Brunner, D.: Quantifying CO<sub>2</sub> emissions of power plants with CO<sub>2</sub> and NO<sub>2</sub> imaging satellites,  Front. Remote Sens., 14, <ext-link xlink:href="https://doi.org/10.3389/frsen.2021.689838" ext-link-type="DOI">10.3389/frsen.2021.689838</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx18"><label>Ledoit and Wolf(2022)</label><mixed-citation>Ledoit, O. and Wolf, M.: The power of (non-)linear shrinking: A review and  guide to covariance matrix estimation, J. Financ. Econom., 20, 187–218, <ext-link xlink:href="https://doi.org/10.2139/ssrn.3384500" ext-link-type="DOI">10.2139/ssrn.3384500</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx19"><label>Mäkinen et al.(2020)Mäkinen, Azzari, and Foi</label><mixed-citation>Mäkinen, Y., Azzari, L., and Foi, A.: Collaborative filtering of correlated noise: Exact transform-domain variance for improved shrinkage and patch matching, IEEE Trans. Image Process., 29, 8339–8354, <ext-link xlink:href="https://doi.org/10.1109/TIP.2020.3014721" ext-link-type="DOI">10.1109/TIP.2020.3014721</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx20"><label>Meier et al.(2024)Meier, Koene, Krol, Brunner, Damm, and Kuhlmann</label><mixed-citation>Meier, S., Koene, E. F. M., Krol, M., Brunner, D., Damm, A., and Kuhlmann, G.: A lightweight NO<sub>2</sub>-to-NO<sub><italic>x</italic></sub> conversion model for quantifying NO<sub><italic>x</italic></sub> emissions of point sources from NO<sub>2</sub> satellite observations, Atmos. Chem. Phys., 24, 7667–7686, <ext-link xlink:href="https://doi.org/10.5194/acp-24-7667-2024" ext-link-type="DOI">10.5194/acp-24-7667-2024</ext-link>, 2024. </mixed-citation></ref>
      <ref id="bib1.bibx21"><label>Miller et al.(2007)</label><mixed-citation>Miller, C., Crisp, D., DeCola, P., Olsen, S., Randerson, J., Michalak, A.,  Alkhaled, A., Rayner, P., Jacob, D. J., Suntharalingam, P.,Jones, D. B. A., Denning, A. S., Nicholls, M. E., Doney, S. C., Pawson, S., Boesch, H., Connor, B. J., Fung, I. Y., O'Brien, D., Salawitch, R. J., Sander, S. P., Sen, B., Tans, P., Toon, G. C., Wennberg, P. O., Wofsy, S. C., Yung, Y. L., and Law, R. M.: Precision requirements for space-based <inline-formula><mml:math id="M368" display="inline"><mml:mrow><mml:msub><mml:mi>X</mml:mi><mml:mrow><mml:msub><mml:mi mathvariant="normal">CO</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula> data, J. Geophys. Res.-Atmos., 112, <ext-link xlink:href="https://doi.org/10.1029/2006JD007659" ext-link-type="DOI">10.1029/2006JD007659</ext-link>, 2007.</mixed-citation></ref>
      <ref id="bib1.bibx22"><label>Reuter et al.(2019)Reuter, Buchwitz, Schneising, Krautwurst, O'Dell, Richter, Bovensmann, and Burrows</label><mixed-citation>Reuter, M., Buchwitz, M., Schneising, O., Krautwurst, S., O'Dell, C. W., Richter, A., Bovensmann, H., and Burrows, J. P.: Towards monitoring localized CO<sub>2</sub> emissions from space: co-located regional CO<sub>2</sub> and NO<sub>2</sub> enhancements observed by the OCO-2 and S5P satellites, Atmos. Chem. Phys., 19, 9371–9383, <ext-link xlink:href="https://doi.org/10.5194/acp-19-9371-2019" ext-link-type="DOI">10.5194/acp-19-9371-2019</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx23"><label>Veefkind et al.(2012)</label><mixed-citation>Veefkind, J. P., Aben, I., McMullan, K., Förster, H., De Vries, J., Otter, G., Claas, J., Eskes, H., De Haan, J., Kleipool, Q., van Weele, M, Hasekamp, O., Hoogeveen, R., Landgraf, J., Snel, R., Tol, P., Ingmann, P., Voors, R., Kruizinga, B., Vink, R., Visser, H., and Levelt, P. F.: TROPOMI on the ESA Sentinel-5 Precursor: A GMES mission for global observations of the  atmospheric composition for climate, air quality and ozone layer  applications, Remote Sens. Environ., 120, 70–83, <ext-link xlink:href="https://doi.org/10.1016/j.rse.2011.09.027" ext-link-type="DOI">10.1016/j.rse.2011.09.027</ext-link>, 2012.</mixed-citation></ref>
      <ref id="bib1.bibx24"><label>Wang et al.(2004)</label><mixed-citation>Wang, Z., Bovik, A. C., Sheikh, H. R., and Simoncelli, E. P.: Image quality  assessment: from error visibility to structural similarity, IEEE Trans. Image Process., 13, 600–612, <ext-link xlink:href="https://doi.org/10.1109/TIP.2003.819861" ext-link-type="DOI">10.1109/TIP.2003.819861</ext-link>, 2004.</mixed-citation></ref>
      <ref id="bib1.bibx25"><label>Yahya et al.(2020)Yahya, Tan, Su, Hu, Wang, Liu, and Hadi</label><mixed-citation>Yahya, A. A., Tan, J., Su, B., Hu, M., Wang, Y., Liu, K., and Hadi, A. N.: BM3D image denoising algorithm based on an adaptive filtering, Multimed. Tools Appl., 79, 20391–20427, <ext-link xlink:href="https://doi.org/10.1007/s11042-020-08815-8" ext-link-type="DOI">10.1007/s11042-020-08815-8</ext-link>, 2020.</mixed-citation></ref>

  </ref-list></back>
    <!--<article-title-html>Bayesian denoising of satellite images using co-registered NO<sub>2</sub> images</article-title-html>
<abstract-html/>
<ref-html id="bib1.bib1"><label>Beirle et al.(2019)</label><mixed-citation>
      
Beirle, S., Borger, C., Dörner, S., Li, A., Hu, Z., Liu, F., Wang, Y., and Wagner, T.: Pinpointing nitrogen oxide emissions from space, Sci. Adv., 5, eaax9800, <a href="https://doi.org/10.1126/sciadv.aax9800" target="_blank">https://doi.org/10.1126/sciadv.aax9800</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib2"><label>Beirle et al.(2023)Beirle, Borger, Jost, and
Wagner</label><mixed-citation>
      
Beirle, S., Borger, C., Jost, A., and Wagner, T.: Improved catalog of NO<sub><i>x</i></sub> point source emissions (version 2), Earth Syst. Sci. Data, 15, 3051–3073, <a href="https://doi.org/10.5194/essd-15-3051-2023" target="_blank">https://doi.org/10.5194/essd-15-3051-2023</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib3"><label>Buades et al.(2005)Buades, Coll, and Morel</label><mixed-citation>
      
Buades, A., Coll, B., and Morel, J.-M.: A review of image denoising algorithms,
with a new one, Multiscale Model. Simul., 4, 490–530,
<a href="https://doi.org/10.1137/040616024" target="_blank">https://doi.org/10.1137/040616024</a>, 2005.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib4"><label>Buades et al.(2011)Buades, Coll, and Morel</label><mixed-citation>
      
Buades, A., Coll, B., and Morel, J.-M.: Non-local means denoising, Image
Process. Line, 1, 208–212, <a href="https://doi.org/10.5201/ipol.2011.bcm_nlm" target="_blank">https://doi.org/10.5201/ipol.2011.bcm_nlm</a>, 2011.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib5"><label>Buchwitz et al.(2013)Buchwitz, Reuter, Bovensmann, Pillai, Heymann,
Schneising, Rozanov, Krings, Burrows, Boesch et al.</label><mixed-citation>
      
Buchwitz, M., Reuter, M., Bovensmann, H., Pillai, D., Heymann, J., Schneising, O., Rozanov, V., Krings, T., Burrows, J. P., Boesch, H., Gerbig, C., Meijer, Y., and Löscher, A.: Carbon Monitoring Satellite (CarbonSat): assessment of atmospheric CO<sub>2</sub> and CH<sub>4</sub> retrieval errors by error parameterization, Atmos. Meas. Tech., 6, 3477–3500, <a href="https://doi.org/10.5194/amt-6-3477-2013" target="_blank">https://doi.org/10.5194/amt-6-3477-2013</a>, 2013.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib6"><label>Copernicus Sentinel-5P(2020)</label><mixed-citation>
      
Copernicus Sentinel-5P (processed by ESA): TROPOMI Level 2 Sulfur Dioxide Total Column products, Version 02, European Space Agency [data set], <a href="https://doi.org/10.5270/S5P-74eidii" target="_blank">https://doi.org/10.5270/S5P-74eidii</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib7"><label>Copernicus Sentinel-5P(2021)</label><mixed-citation>
      
Copernicus Sentinel-5P (processed by ESA): TROPOMI Level 2 Nitrogen Dioxide total column products, Version 02, European Space Agency [data set], <a href="https://doi.org/10.5270/S5P-9bnp8q8" target="_blank">https://doi.org/10.5270/S5P-9bnp8q8</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib8"><label>Dabov et al.(2007)</label><mixed-citation>
      
Dabov, K., Foi, A., Katkovnik, V., and Egiazarian, K.: Image denoising by  sparse 3-D transform-domain collaborative filtering, IEEE Trans. Image Process., 16, 2080–2095, <a href="https://doi.org/10.1109/TIP.2007.901238" target="_blank">https://doi.org/10.1109/TIP.2007.901238</a>, 2007.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib9"><label>Fichtner(2021)</label><mixed-citation>
      
Fichtner, A.: Lecture Notes on Inverse Theory, Tech. rep., ETH Zurich,  Switzerland, <a href="https://doi.org/10.33774/coe-2021-qpq2j" target="_blank">https://doi.org/10.33774/coe-2021-qpq2j</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib10"><label>Hakkarainen et al.(2022)</label><mixed-citation>
      
Hakkarainen, J., Ialongo, I., Koene, E., Szeląg, M. E., Tamminen, J.,  Kuhlmann, G., and Brunner, D.: Analyzing local carbon dioxide and nitrogen  oxide emissions from space using the divergence method: an application to the  synthetic SMARTCARB dataset, Front. Remote Sens., 3, 878731, <a href="https://doi.org/10.3389/frsen.2022.878731" target="_blank">https://doi.org/10.3389/frsen.2022.878731</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib11"><label>Immerkaer(1996)</label><mixed-citation>
      
Immerkaer, J.: Fast noise variance estimation, Comput. Vis. Image Underst., 64, 300–302, <a href="https://doi.org/10.1006/cviu.1996.0060" target="_blank">https://doi.org/10.1006/cviu.1996.0060</a>, 1996.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib12"><label>Koene et al.(2024)Koene, Brunner, and Kuhlmann</label><mixed-citation>
      
Koene, E. F. M., Brunner, D., and Kuhlmann, G.: On the theory of the divergence
method for quantifying source emissions from satellite observations, J. Geophys. Res.-Atmos., 129,
<a href="https://doi.org/10.1029/2023JD039904" target="_blank">https://doi.org/10.1029/2023JD039904</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib13"><label>Krol et al.(2024)Krol, van Stratum, Anglou, and Boersma</label><mixed-citation>
      
Krol, M., van Stratum, B., Anglou, I., and Boersma, K. F.: Evaluating NO<sub><i>x</i></sub> stack plume emissions using a high-resolution atmospheric chemistry model and satellite-derived NO<sub>2</sub> columns, Atmos. Chem. Phys., 24, 8243–8262, <a href="https://doi.org/10.5194/acp-24-8243-2024" target="_blank">https://doi.org/10.5194/acp-24-8243-2024</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib14"><label>Kuhlmann et al.(2019)Kuhlmann, Broquet, Marshall, Clément, Löscher,
Meijer, and Brunner</label><mixed-citation>
      
Kuhlmann, G., Broquet, G., Marshall, J., Clément, V., Löscher, A., Meijer, Y., and Brunner, D.: Detectability of CO<sub>2</sub> emission plumes of cities and power plants with the Copernicus Anthropogenic CO<sub>2</sub> Monitoring (CO2M) mission, Atmos. Meas. Tech., 12, 6695–6719, <a href="https://doi.org/10.5194/amt-12-6695-2019" target="_blank">https://doi.org/10.5194/amt-12-6695-2019</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib15"><label>Kuhlmann et al.(2020a)Kuhlmann, Clément, Marshall,
Fuhrer, Broquet, Schnadt-Poberaj, Löscher, Meijer, and
Brunner</label><mixed-citation>
      
Kuhlmann, G., Clément, V., Marshall, J., Fuhrer, O., Broquet, G.,  Schnadt-Poberaj, C., Löscher, A., Meijer, Y., and Brunner, D.: SMARTCARB  – Use of satellite measurements of auxiliary reactive trace gases for  fossil fuel carbon dioxide emission estimation, Zenodo,  <a href="https://doi.org/10.5281/zenodo.4034266" target="_blank">https://doi.org/10.5281/zenodo.4034266</a>, 2020a.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib16"><label>Kuhlmann et al.(2020b)Kuhlmann, Clément, Marshall,
Fuhrer, Broquet, Schnadt-Poberaj, Löscher, Meijer, and
Brunner</label><mixed-citation>
      
Kuhlmann, G., Clément, V., Marshall, J., Fuhrer, O., Broquet, G.,
Schnadt-Poberaj, C., Löscher, A., Meijer, Y., and Brunner, D.: Synthetic
XCO<sub>2</sub>, CO and NO<sub>2</sub> observations for the CO2M and Sentinel-5 satellites, Zenodo [data set],
<a href="https://doi.org/10.5281/zenodo.4048228" target="_blank">https://doi.org/10.5281/zenodo.4048228</a>, 2020b.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib17"><label>Kuhlmann et al.(2021)Kuhlmann, Henne, Meijer, and
Brunner</label><mixed-citation>
      
Kuhlmann, G., Henne, S., Meijer, Y., and Brunner, D.: Quantifying CO<sub>2</sub> emissions of power plants with CO<sub>2</sub> and NO<sub>2</sub> imaging satellites,  Front. Remote Sens., 14, <a href="https://doi.org/10.3389/frsen.2021.689838" target="_blank">https://doi.org/10.3389/frsen.2021.689838</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib18"><label>Ledoit and Wolf(2022)</label><mixed-citation>
      
Ledoit, O. and Wolf, M.: The power of (non-)linear shrinking: A review and  guide to covariance matrix estimation, J. Financ. Econom., 20, 187–218, <a href="https://doi.org/10.2139/ssrn.3384500" target="_blank">https://doi.org/10.2139/ssrn.3384500</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib19"><label>Mäkinen et al.(2020)Mäkinen, Azzari, and
Foi</label><mixed-citation>
      
Mäkinen, Y., Azzari, L., and Foi, A.: Collaborative filtering of correlated
noise: Exact transform-domain variance for improved shrinkage and patch
matching, IEEE Trans. Image Process., 29, 8339–8354, <a href="https://doi.org/10.1109/TIP.2020.3014721" target="_blank">https://doi.org/10.1109/TIP.2020.3014721</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib20"><label>Meier et al.(2024)Meier, Koene, Krol, Brunner, Damm, and
Kuhlmann</label><mixed-citation>
      
Meier, S., Koene, E. F. M., Krol, M., Brunner, D., Damm, A., and Kuhlmann, G.: A lightweight NO<sub>2</sub>-to-NO<sub><i>x</i></sub> conversion model for quantifying NO<sub><i>x</i></sub> emissions of point sources from NO<sub>2</sub> satellite observations, Atmos. Chem. Phys., 24, 7667–7686, <a href="https://doi.org/10.5194/acp-24-7667-2024" target="_blank">https://doi.org/10.5194/acp-24-7667-2024</a>, 2024.


    </mixed-citation></ref-html>
<ref-html id="bib1.bib21"><label>Miller et al.(2007)</label><mixed-citation>
      
Miller, C., Crisp, D., DeCola, P., Olsen, S., Randerson, J., Michalak, A.,  Alkhaled, A., Rayner, P., Jacob, D. J., Suntharalingam, P.,Jones, D. B. A., Denning, A. S., Nicholls, M. E., Doney, S. C., Pawson, S., Boesch, H., Connor, B. J., Fung, I. Y., O'Brien, D., Salawitch, R. J., Sander, S. P., Sen, B., Tans, P., Toon, G. C., Wennberg, P. O., Wofsy, S. C., Yung, Y. L., and Law, R. M.: Precision requirements for space-based <i>X</i><sub>CO<sub>2</sub></sub> data, J. Geophys. Res.-Atmos., 112, <a href="https://doi.org/10.1029/2006JD007659" target="_blank">https://doi.org/10.1029/2006JD007659</a>, 2007.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib22"><label>Reuter et al.(2019)Reuter, Buchwitz, Schneising, Krautwurst, O'Dell,
Richter, Bovensmann, and Burrows</label><mixed-citation>
      
Reuter, M., Buchwitz, M., Schneising, O., Krautwurst, S., O'Dell, C. W., Richter, A., Bovensmann, H., and Burrows, J. P.: Towards monitoring localized CO<sub>2</sub> emissions from space: co-located regional CO<sub>2</sub> and NO<sub>2</sub> enhancements observed by the OCO-2 and S5P satellites, Atmos. Chem. Phys.,
19, 9371–9383, <a href="https://doi.org/10.5194/acp-19-9371-2019" target="_blank">https://doi.org/10.5194/acp-19-9371-2019</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib23"><label>Veefkind et al.(2012)</label><mixed-citation>
      
Veefkind, J. P., Aben, I., McMullan, K., Förster, H., De Vries, J., Otter, G., Claas, J., Eskes, H., De Haan, J., Kleipool, Q., van Weele, M, Hasekamp, O., Hoogeveen, R., Landgraf, J., Snel, R., Tol, P., Ingmann, P., Voors, R., Kruizinga, B., Vink, R., Visser, H., and Levelt, P. F.: TROPOMI on the ESA Sentinel-5 Precursor: A GMES mission for global observations of the  atmospheric composition for climate, air quality and ozone layer  applications, Remote Sens. Environ., 120, 70–83, <a href="https://doi.org/10.1016/j.rse.2011.09.027" target="_blank">https://doi.org/10.1016/j.rse.2011.09.027</a>, 2012.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib24"><label>Wang et al.(2004)</label><mixed-citation>
      
Wang, Z., Bovik, A. C., Sheikh, H. R., and Simoncelli, E. P.: Image quality  assessment: from error visibility to structural similarity, IEEE Trans. Image Process., 13, 600–612, <a href="https://doi.org/10.1109/TIP.2003.819861" target="_blank">https://doi.org/10.1109/TIP.2003.819861</a>, 2004.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib25"><label>Yahya et al.(2020)Yahya, Tan, Su, Hu, Wang, Liu, and
Hadi</label><mixed-citation>
      
Yahya, A. A., Tan, J., Su, B., Hu, M., Wang, Y., Liu, K., and Hadi, A. N.:
BM3D image denoising algorithm based on an adaptive filtering, Multimed. Tools Appl., 79, 20391–20427,
<a href="https://doi.org/10.1007/s11042-020-08815-8" target="_blank">https://doi.org/10.1007/s11042-020-08815-8</a>, 2020.

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