拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介。

这篇具有很好参考价值的文章主要介绍了拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

      在SSE图像算法优化系列二十九:基础的拉普拉斯金字塔融合用于改善图像增强中易出现的过增强问题(一) 一文中我们曾经描述过基于几种高频融合法则的拉普拉斯金字塔融合算法,那里是主要针对2副图像的。实际的应用中,我们可能会遇到多帧图像的融合过程(图像都是对齐后的),特别是多帧不同曝光度的图像的融合问题,在相机的应用中较为广泛,我们同时也可以认为这是另外一种的HDR算法。 

      这方面最经典的文章是2007年Tom Mertens等人发表的《Exposure Fusion》一文,用简单的篇幅和公式描述了一个非常优异的合成过程,虽然在2019年Charles Hessel发表了一篇《Extended Exposure Fusion》的文章中,提出了比Exposure Fusion更为优异的合成效果,但是代价是更高昂的计算成本,而Exposure Fusion也已经相当优秀了,本文主要简单记录下个人的Exposure Fusion优化过程。

  Exposure Fusion的思路也非常之简单,输入是一系列图像对齐后的大小格式相同的图像,输出是一张合成的多细节图。那么在进行计算之前,他需要做以下的准备。 

  1、对每副图像按照某些原则计算每融合的权重。文章里提出了3种权重。

     (1) 对比度:

               Contrast: we apply a Laplacian filter to the grayscale version of each image, and take the absolute value of the filter response [16]. This yields a simple indicator C for contrast. It tends to assign a high weight to important elements such as edges and texture. 

  对应的matlab代码非常简单:

% contrast measure
function C = contrast(I)
h = [0 1 0; 1 -4 1; 0 1 0]; % laplacian filter
N = size(I,4);
C = zeros(size(I,1),size(I,2),N);
for i = 1:N
    mono = rgb2gray(I(:,:,:,i));
    C(:,:,i) = abs(imfilter(mono,h,'replicate'));
end

  我们可以认为就是个边缘检测。

  (2)饱和度 

           Saturation: As a photograph undergoes a longer exposure, the resulting colors become desaturated and eventually clipped. Saturated colors are desirable and make the image look vivid. We include a saturation measure S, which is computed as the standard deviation within the R, G and B channel, at each pixel。

% saturation measure
function C = saturation(I)
N = size(I,4);
C = zeros(size(I,1),size(I,2),N);
for i = 1:N
    % saturation is computed as the standard deviation of the color channels
    R = I(:,:,1,i);
    G = I(:,:,2,i);
    B = I(:,:,3,i);
    mu = (R + G + B)/3;
    C(:,:,i) = sqrt(((R - mu).^2 + (G - mu).^2 + (B - mu).^2)/3);
end

  也是非常简单的过程。

  (3)曝光度

   Well-exposedness: Looking at just the raw intensities within a channel, reveals how well a pixel is exposed. We want to keep intensities that are not near zero (underexposed) or one (overexposed). We weight each intensity i based on how close it is to 0.5 using a Gauss curve: exp - (i-0.5)*(i-0.5)/(2*σ *σ), where σ equals 0.2 in our implementation. To account for multiple color channels, we apply the Gauss curve to each channel separately, and multiply the results, yielding the measure E。

% well-exposedness measure
function C = well_exposedness(I)
sig = .2;
N = size(I,4);
C = zeros(size(I,1),size(I,2),N);
for i = 1:N
    R = exp(-.5*(I(:,:,1,i) - .5).^2/sig.^2);
    G = exp(-.5*(I(:,:,2,i) - .5).^2/sig.^2);
    B = exp(-.5*(I(:,:,3,i) - .5).^2/sig.^2);
    C(:,:,i) = R.*G.*B;
end

  每副图像得到三个指标(对比度C、饱和度S以及曝光度E),将他们相乘得到这幅图像的综合权重W。

     2、根据每副图像的权重,计算在序列中图像的每副图像的归一化权重,原文表述如下:

          To obtain a consistent result, we normalizethe values of the N weight maps such that they sum to one at each pixel (i, j):      

           拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介。 

   注意,这是单个像素进行的处理,也就是说对于一个序列的图像,每个对应像素位置的权重先计算好后,再累加得到总权重,然后在每个对应像素的权重除以总权重得到归一化的值。

    3、理论上讲,得到了这些权重,就可以对N个图像进行直接融合,即使用下述公式:

          拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介。

   但是如果真的这样做,得到的结果惨不忍睹,即使我们对归一化后的权重进行高斯模糊、保边模糊等等也是解决不了问题的。所以这个文章的最核心的精华部分就在下面的过程中了。 

     4、我们并不是直接用这些权重进行合成,而是对原序列图像进行高斯拉普拉斯金字塔分解(利用其中的拉普拉斯数据),对各序列对应的归一化权重做高斯金字塔分解。 然后重构拉普拉斯金字塔,重构的规则为:

            拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介。

    即对合成后各层拉普拉斯金字塔数据,用每个序列的权重的高斯金字塔数据乘以对应的拉普拉斯金字塔数据,然后累加。就如此简单。

  关于这个算法的原理性说明,CSDN这个作者讲的也比较好: 【HDR】曝光融合(Exposure Fusion),有兴趣可以参考。

  这个算法的效果通过测试确实还是可以的,原始的作者提供了MATLAB版本的代码,但是实际测试速度是非常慢的,这个也不怪这些论文的作者,他们的重点是实现算法本身,而不是工程化。

  为了能提高算法的实用性,我们使用C++结合SIMD指令对该过程进行优化。优化的方式主要有以下几个方面:

       1、通过适当的改变数据类型来提高速度。

        M版本的代码是全程是使用的浮点类型的来计算各种数据的,为了效率,有些过程我们可以使用整形来代替。比如获取各个特征的权重的时,我们可以用byte来记录就可以了。在比如金字塔的分解和重构时,高斯金字塔我们也用byte类型记录,拉普拉斯金字塔考虑到有负数以及数据的范围,可以用signed short类型来记录。 

       2、通过改变数据类型后,使用对应的SIMD指令可以起到更大的步长,浮点数一般一次性只能处理4个数,如果是signed short则可以同时处理8个数据了。 

       3、对于金字塔分解和重构,要从原理上进行优化,详见:SSE图像算法优化系列二十六:和时间赛跑之优化高斯金字塔建立的计算过程。

       我们以计算饱和的过程为例,看看SSE的优化步骤: 

      拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介。

     简简单单的M代码,需要大概10倍以上行数的C代码和SIMD指令进行优化。 

  实际上,我们在优化时,归一化的那个权重矩阵我也用byte类型来保存数据,原本以为这样每个图的权重有可能会比较小,存在精度损失,不过实际测试,和M代码的结果也没啥特别大的视觉区别。 

  另外,还有内存方面的优化问题,如果建立所有图像的金字塔序列,然后再计算特征合成,这样会占用比较多的内存,特别是图像序列比较多时,实际上我们可以边分解边进行计算,这样带来的好处时速度有适当加速(应该还是cache miss较小的原因),当然如果每个序列都分配金字塔的内存,有一个好处就是,可以使用omp进行并行,适当的通过占用资源提高速度。

  原始论文的作者在获取了各个特征的权重后,是使用的乘法来统计特征,我这里也使用了加法进行测试,测试结果是加法的结果比乘法的要稍微暗一点。区别也不是很大,但是要注意如果是使用乘法,有的时候有些特征的权重为0,为了不让其他特征的权重被淹没掉,建议加一后再乘。 

  效果:  

     拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介。    拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介。

拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介。     拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介。

  其中第一个图是使用4副752*500的图合成,M代码大约耗时1600ms,我这里优化后的速度大概是25ms,有64倍的提速。 

       第二个图使用的是9副1024*683的图合成,M代码大约耗时5000ms,我这里优化后的速度大概是80ms,也有约60倍的提速。 

      从两幅图的合成结果来看,至少视觉上是非常不错的。不过在第一幅的中间靠上的部分的天空,以及第二副的右下角的台灯的中间部分还是有过曝的现象,这两个部分在原图中实际上是可以找到比较好的底图的,但是合成结果并没有吸收他们,这个可以适当的通过改变金字塔的数量来调节,但是没有啥理论依据去支持他,比如我们把他们的金字塔分别调整为6和7时效果如下两图所示:

 拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介。  拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介。

  这个现象在有些论文里也有提到,即金字塔层数太深,可能导致结果出现out-of-range的瑕疵,金字塔太少了,会有low-frequency halos出现。

       这个算法还有一个应用场景,在2019年的另外一篇论文里有提及: Simulated Exposure Fusion, 他的输入只有一张图片,然后通过某些手段生成一个序列的图像,然后在把这序列的图像予以使用EF算法合成,从而得到不错的结果,这个待我有空了也来研究一下,这也是个不错的主意。 

  这个算法也应该非常适合使用GPU进行优化,那可能会获得更为客观的提速比,对于某些应用从而得到实时级别的效果。

  在SSE图像算法优化系列二十九:基础的拉普拉斯金字塔融合用于改善图像增强中易出现的过增强问题(一)一文中使用的融合方法,实际上也是可以应用于多图的融合的,只不过这个时候低频的融合方式就不能是选择哪一个图了,此时可以使用平均值、最大值、最大值等策略,而高频融合一般只能使用AbsMax策略, 那个3*3 AbsMax方法也不可以使用了(因为一致性检测哪里无法实现)。

      不过这种融合对于多图来说一般效果不是很好,但是不排除也有其应用场景,他的一个优势就是速度能够做到更快,通常是本文放大的1/3耗时左右,而且内存的占用也很少。

  另外,对于这个算法,还有一个现象就是其对图像的合成结果和用光度立体法对那些图的合成结果似乎很像,当然,仅仅是合成结果类似,广地立体能获得的其他信息这个算法是无法获取的。 

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

       或者有兴趣的朋友也可以在ipol网站中找到一个在线的DEMO以及代码,详见地址:https://ipolcore.ipol.im/demo/clientApp/demo.html?id=278

 

    拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介。

    如果想时刻关注本人的最新文章,也可关注公众号或者添加本人微信:  laviewpbt

                             拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介。

翻译

搜索

复制文章来源地址https://www.toymoban.com/news/detail-709774.html

到了这里,关于拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 拉普拉斯锐化[原理及Python实现](含拉氏标定、拉普拉斯标定)

    [原理及Python实现](含拉氏标定、拉普拉斯标定) 原创文章;转载请注明出处:©️ Sylvan Ding 锐化处理的主要目的是突出灰度的过度部分。图像锐化的用途多种多样,应用范围从电子印刷和医学成像到工业检测和军事系统的制导等。利用图像微分可以增强边缘和其他突变(如

    2023年04月10日
    浏览(52)
  • 【信号与系统】(二十一)拉普拉斯变换与复频域分析——拉普拉斯变换及其性质

    傅里叶变换: j w jw j w 拉普拉斯变换: s = σ + j w s=sigma+jw s = σ + j w 有些函数不满足绝对可积条件 ,求解傅里叶变换困难。为此,可用一衰减因子 e − σ t e^{-sigma t} e − σ t ( σ sigma σ 为实常数)乘信号 f ( t ) f(t) f ( t ) ,适当选取 σ sigma σ 的值,使乘积信号 f ( t ) e −

    2024年02月09日
    浏览(60)
  • 拉普拉斯算子

    在介绍拉普拉斯算子概念之前我们先介绍,哈密尔顿算子( ∇ nabla ∇ ),梯度,散度等概念 所谓哈密尔顿算子即为某一物理量在笛卡尔坐标系下的偏导数的矢量和,其运算符号为: ∇ nabla ∇ ,定义如下: ∇ = δ δ x i + δ δ y j + δ δ z k nabla={frac{delta}{delta x}}pmb{i}+{f

    2024年02月09日
    浏览(49)
  • 拉普拉斯变换

    1.公式:设f(t)在t≥0时有定义, 其中s=β+jw。 注:L(1)=   L(sgnt)=   L()= 2.性质         性质1:          性质2:          性质3:         性质4:L()= 推导性质2:使用欧拉公式进行推导 同理,cosat= ,使用分部积分法,经过两次分部积分后会出现原来的积分,通过合并

    2024年02月05日
    浏览(46)
  • 【电路分析】拉普拉斯变换及其应用

    零状态响应 是指电路的外加激励源为零的情况下,由动态元件的初始储能引起的响应。 零输入响应 是指电路的初始状态为零(即换路前电容电压为零,电感电流为零),由外加激励源产生的响应。 该函数在 t0时幅值为1,在 t0 时幅值为-0,在 t=0时函数没有定义但为有限值

    2024年02月03日
    浏览(46)
  • visual Studio MFC 平台实现拉普拉斯和拉普拉斯与直方图均衡化与中值滤波相结合实现比较

    本文使用visual Studio MFC 平台实现图像增强中的拉普拉斯变换,同时拉普拉斯一般不会单独使用,与其他平滑操作相结合,本文使用了拉普拉斯与直方图均衡化以及与中值滤波相结合,也对三种方式进行了对比 关于基础工程的创建可以参考 01-Visual Studio 使用MFC 单文档工程绘制

    2024年02月04日
    浏览(50)
  • 【线性代数】P3 拉普拉斯定理

    拉普拉斯定理是通过对余子式和代数余子式的变形展开得到,有关余子式和代数余子式的概念见:https://blog.csdn.net/weixin_43098506/article/details/126765390 假设有四阶行列式: k阶子式 行列式D的一个二阶子式为: 余子式 那么二阶子式A的余子式为: 代数余子式 那么二阶子式的代数余

    2024年02月12日
    浏览(46)
  • 图谱论学习—拉普拉斯矩阵背后的含义

    一、为什么学习拉普拉斯矩阵     早期,很多图神经网络的概念是基于图信号分析或图扩散的,而这些都需要与图谱论相关的知识。并且在图网络深度学习中(graph deep learning)中,拉普拉斯矩阵是很常用的概念,深入理解其物理含义非常有助于加深对GNN模型的理解。博主最

    2023年04月09日
    浏览(45)
  • 图像处理之LoG算子(高斯拉普拉斯)

    LoG算子是由拉普拉斯算子改进而来。拉普拉斯算子是二阶导数算子,是一个标量,具有线性、位移不变性,其传函在频域空间的原点为0。所有经过拉普拉斯算子滤波的图像具有零平均灰度。但是该算子的缺点是对噪声具有敏感性,因此在实际应用中,一般先要对图像进行平滑

    2024年02月16日
    浏览(47)
  • 学习笔记:Opencv实现拉普拉斯图像锐化算法

    2023.8.19 为了在暑假内实现深度学习的进阶学习,Copy大神的代码,记录学习日常 图像锐化的百科: 图像锐化算法-sharpen_lemonHe_的博客-CSDN博客 在环境配置中要配置opencv: pip install opencv-contrib-python Code and lena.png:注意你是否在data下由lena.png   附上lena.png  效果所示(解读):

    2024年02月12日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包