前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >扩展的多曝光图像合成算法及其在单幅图像增强中的应用。

扩展的多曝光图像合成算法及其在单幅图像增强中的应用。

作者头像
用户1138785
发布2023-10-16 19:44:54
3200
发布2023-10-16 19:44:54
举报

拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介一文中提高的Exposure Fusion算法,是一种非常优秀的多曝光图片合成算法,对于大部分测试图都能获取到较为满意的结果,但是也存在着两个局限性:

  1、存在着Out-of-range Artifact;

        2、存在着low frequency halo;

  为了解决这两个问题,Charles Hessel在2019年发表了一篇名为《Extended Exposure Fusion》的论文,基本上有效的避免了《Exposure Fusion》的这两个缺陷,并且以此为基础,将Exposure Fusion扩展到了单幅图像的增强中。

  在IPOL网站中,有对这两篇文章的详细资料和在线测试程序,详见:

http://www.ipol.im/pub/art/2019/278/      Extended Exposure Fusion

https://www.ipol.im/pub/art/2019/279/     Simulated Exposure Fusion

  我们不去过多的分析他们的原理,只是大概的描述下论文的细节吧,更为详细的可以直接阅读论文本身。

  一、Extended Exposure Fusion

 这个文章虽然篇幅有十几页,但是实际上核心的东西就是一个:无中生有,即我们从原始的图像数据序列中fu在继续创造更多的图像,然后利用Exposure Fusion合成,这些新创造出的图像相对于原始的图具有更低的动态范围,具体的过程为:

  确定一个参数Beta,有效范围是0,1,然后根据Ceil(1.0 / Beta)向上取整得到我们需要重新创建的图像的数量M,这个Beta我们称之为动态范围。新创建的M个图像的生产方法如下:

   对于序列

中的每一个值,我们计算一个参数:        

   作为需要压缩的动态的范围的中心,当原始的像素值t在

范围内时,线性映射,即t不变化,当不在此范围时,按以下公式计算新的t值。

  其中   

 , 

以及 

,这样就保证像素不在我们设定的动态范围时,像素值不会断崖式的裁剪,而是平滑的予以变化,从而使得融合的结果不会太突兀。

  以下时Beta = 0.5/0.34/0.25时对应的重新映射的曲线图,可以看到随着Beta的值的变小,新创建的图像数量M不断地增加,但是不管如何,所有图像组合在一起,都覆盖了原图的所有的动态范围(即合并后的映射图总会有一条45倾斜的直线),而Beta值的含义页可以从曲线总可以看出就是直线段的长度,即每幅图动态范围保持不变的部分。

       Beta = 0.5, M = 2              Beta = 0.34, M = 3                 Beta = 0.25, M = 4

   注意,以上的映射等行为的公式都是针对归一化后的图像数据的,即要将图像由0,255先映射为0,1。

  如果原始图像序列由N幅图像,则这样处理就增加为了N*M幅图,后续就是对这N*M幅进行标准的比曝光融合了。因此可以明显的看出,这个算法的速度要比Exposure Fusion至少慢M倍。

  以下C++代码简答的解释了上述新图像的生成过程:

   当Beta = 0.5,M = 2时(注意到上述曲线),下述图像清晰的表达了这个扩展的过程:

     原始的图像序列只有4幅图,扩展后的为8幅图,而且我们注意到扩展后的图和源图没有一个是相同的,通过组合这新生产的8幅图,最终得到扩展的融合结果。

  就以上述图为例,Beta设置为0.5,我们金字塔层数都设置为8,Exposure Fusion和Extended Exposure Fusion的融合效果分别如下所示:

          Exposure Fusion                              Extended Exposure Fusion

  我们注意观察图中最左侧窗户上部的小方格内,左图里该方格里基本是纯白色,看不到什么信息,而右图则把原始图input 1里的有效信息带入了,增加了信息量。

  在比如下图,左图是标准的Exposure Fusion,右图为扩展后的,可以看到右侧图台灯里以及窗户外面的地面有着更为细腻的细节,而左图基本是纯色。

  在《Extended Exposure Fusion》还提到了对各图像权重的一个改进,虽然那个东西有一定作用,但是个人认为是锦上添花的一些东西吧,实际上也没有啥大的作用,因此,本人未做具体的研究。

  另外,Extended Exposure Fusion里还提到了一个叫Robust Normalization的东西,这个确实还是有点用的,他是对曝光融合的图像简单的做了一下增强,我们确实也发现普通的融合后图像不是很鲜艳,而使用Robust Normalization则可以比较为明显的改善他,这个过程有点类似于Photoshop的自动色阶或自动对比度,但是有别于他们的是他不是对单通道进行统计直方图,而是低裁剪值所依赖的直方图由每个像素的最小分量(Min(R/G/B))决定,高裁剪值所依赖的直方图由每个像素的最大分量决定。

  其他的这篇文章也没有啥好东西了。 

  二、Simulated Exposure Fusion

  那么这篇文章的作者和Extended Exposure Fusion其实是一个人,所以他们文章的思路其实是想通的。只不过这篇文章是这对单幅图像进行的处理。

  那么很明显,如果要想借用多曝光融合算法来增强单幅图像,一个很自然的想法就是在原图的基础上使用不同曝光值进行映射(增强或降低对比度),然后融合就可以了,但是这里就涉及到了几个问题,第一,如果确定需要的曝光的图像的数量,二是如何确定每幅图像的曝光值。

  我们先来看看第二个问题,假定我们已经确定了需要曝光的图像的数量为M,那么首先这样:

  我们计算出整幅图像的中间值Median,这个计算很明显可以用直方图搞定,至于彩色图像,可以直接把R/G/B所有通道的直方图全部累加后即可。一般来说,这个中间值很好的反应了整幅的明暗程度,因此,用他作为一个参考数据。利用下式计算出需要降低对比度(under-exposed image):

          Ns = int((M - 1) * Median / 255.

  则需要增加对比度的图像数量为 N =  M - 1 - Ns。

  比如Median的结果为50,则说明图像整体比较暗,如果M=10,则Ns = 1, N = 8;

  给定一个用户输入的最大对比度参数Alpha,该参数的意义上容许图像最多的增强或降低的对比度是Alpha(可过曝或欠曝),可如果在这M个序列的图像里,要能达到整个Alpah值,必须有某个参数和N或Ns有关,明显要取他们的最大值 Nx = Max(N, Ns)。论文里作者折腾了半天提出了下面这个计算式:      

  这个公式其实是个线性的公式,即图像整体变量或整体变暗,如果直接把这样生成的M幅图像合成,不用想,没有什么意义的。

  那么我们考虑到Extended Exposure Fusion文章里的动态范围压缩,如果把他们两个结合起来,那么是不是能获得更好的结果呢。

  因为在前面调节曝光度的时候,我们的调节公式必然会造成部分像素过曝或欠曝,如果简单的把他们裁剪掉,就造成了信息的丢失,所以我们暂时不裁剪,而是直接使用扩展的曝光融合里的动态范围压缩技术,把他们压缩,压缩完成后再次进行裁剪,这样就可以很好的控制结果了。

  这样这个过程就涉及到了前面所说的参数Beta了,那么由Alpha和Beta实际上又可以共同确定前面所说的第一个参数M,因为我们只要取某一个M使得所有的动态范围都至少又一次得到了增强。这个论文里提出了一个do while不断的去测试合理的M值:

代码语言:javascript
复制
 %%% Compute optimal number of images (smallest N that ensure every part of
    %%% the input range is enhanced)
    Mp = 1;              % Mp = M-1; M is the total number of images
    Ns = floor(Mp*cval); % number of images generated with fs
    N  = Mp-Ns;          % number of images generated with f
    Nx = max(N,Ns);      % used to compute maximal factor
    tmax1  = (+1    + (Ns+1)*(beta-1)/Mp)/(alpha^(1/Nx));     % t_max k=+1
    tmin1s = (-beta + (Ns-1)*(beta-1)/Mp)/(alpha^(1/Nx)) + 1; % t_min k=-1
    tmax0  = 1      + Ns*(beta-1)/Mp;                         % t_max k=0
    tmin0  = 1-beta + Ns*(beta-1)/Mp;                         % t_min k=0
    while tmax1 < tmin0 || tmax0 < tmin1s
        %%% add an image to the sequence
        Mp = Mp+1;
        %%% update values
        Ns = floor(Mp*cval);
        N  = Mp-Ns;
        Nx = max(N,Ns);
        tmax1  = (+1    + (Ns+1)*(beta-1)/Mp)/(alpha^(1/Nx));     % t_max k=+1
        tmin1s = (-beta + (Ns-1)*(beta-1)/Mp)/(alpha^(1/Nx)) + 1; % t_min k=-1
        tmax0  = 1      + Ns*(beta-1)/Mp;                         % t_max k=0
        tmin0  = 1-beta + Ns*(beta-1)/Mp;                         % t_min k=0
        if Mp > 49 % break if no solution
            warning(['The estimation of the number of image required in '...
                     'the sequence stopped because it reached M>50. ' ...
                     'Check the parameters.']);
            break
        end
    end

  根据不同的Alpha和Beta,已经不同的图像特性(决定了中值),可以得到不同的映射曲线,如下所示:

   注意上面的m就是指归一化的中值。

  有了这些曲线,在原有图像的基础上进行映射得到一个序列的图像,然后再用Exposure Fusion就可以了。

  论文里还提到了用HSV颜色空间的V分量来做这些工作,而不是用RGB颜色空间,这个时候由于是V是个灰度的信息,因此,在权重的计算时,饱和度那个指标就么有意义了,这个转换我觉得除了能加快下程度的速度,其他的可能并没有什么特殊的需要,而且HSV颜色空间和RGB之间的转换还是很耗时的,如果写的不好,可能还会降低速度,还不如直接在RGB颜色空间中做。

  我们测试一些图像,这个算法获得的结果却是还是相当不错和稳定的: 

  和其他的一些增强算法相比,这个方法的比较明显的特征是不会过分的引入瑕疵(比如突出的斑点或者块状),但是耗时方面也还是比较可观(和图像的内容和参数有关)。

  在原始的论文中,作者还进行了大量的比较,有兴趣的可以去看看。

       提供一个测试DEMO供有兴趣的朋友玩玩:https://files.cnblogs.com/files/Imageshop/Exposure_Fusion.rar?t=1694501148&download=true

       如果我们选择的是一个图像,则调用的即为Simulated Exposure Fusion算法。

       补充: 在上一篇Exposure fusion里,也简单的提到了不做权重融合,只对拉普拉斯金字塔取最大值、平均值等操作的多图融合方式,虽然这种融合对于多曝光融合的效果很一般,但是在对于多焦段融合时确有着较为明显的优势,这个时候权重融合反而效果很差,如下图所示 :

                原图1                                  原图2                                   

          基于特征权重的融合                            基于最大值/平均值的融合

  其实想一想,道理也很简单,多焦距的图像,在非焦点区域,图像是模糊的,焦点区域图像是清晰的,因为模糊区域的拉普拉斯金字塔必然数较小,而焦点区域因为有很多图像细节,拉普拉斯数据丰富,因此,如果是用特征权重融合,模糊区域对结果就一定有影响,而如果用最大值,则只取那些清晰的区域,所以合成后的结果就更为清晰。

  所以说,不同的算法还是有不同的应用场景,必须找到合适的对象予以体现他们的价值

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档