【低光图像增强】一个受生物启发(人类视觉系统HVS)的多曝光融合框架用于低光图像增强(Matlab代码实现)

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

 ⛳️赠与读者

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码、文章下载


 ⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

文献来源:

摘要— 低光图像由于能见度低,不利于人类观察和计算机视觉算法的应用。虽然已经提出了许多图像增强技术来解决这个问题,但现有方法不可避免地会引入对比度不足和过度增强的问题。受人类视觉系统启发,我们设计了一个用于低光图像增强的多曝光融合框架。基于该框架,我们提出了一种双曝光融合算法,以提供准确的对比度和亮度增强。具体来说,我们首先利用照明估计技术为图像融合设计权重矩阵。然后,我们引入我们的相机响应模型来合成多曝光图像。接下来,我们找到最佳曝光比率,使合成图像在原始图像曝光不足的区域得到很好的曝光。最后,根据权重矩阵,通过将输入图像和合成图像融合,得到增强的结果。实验证明,与几种最先进的方法相比,我们的方法可以获得更少的对比度和亮度失真的结果。

关键词— 图像增强,对比度增强,曝光补偿,曝光融合。

通过一组在同一场景中不同曝光的图像,高动态范围(HDR)技术可以合成接近感知场景的图像。我们知道相机和人眼有很多相似之处,那么为什么我们能够在各个地方都感知到曝光良好的图像,而相机却不能呢?原因在于我们大脑中的后处理具有类似HDR技术的图像融合机制[28]。人眼的曝光随着焦点的变化而变化,导致产生一组多曝光图像,然后发送到大脑中。尽管其中每一张图像在某些区域都存在曝光不足或过曝问题,但我们的大脑可以将这些图像融合成一张没有曝光不足或过曝问题的图像,如图1所示。

我们是否可以将人类视觉系统(HVS)的这种融合机制引入,帮助构建一个准确的图像增强算法?尽管在HDR领域已经提出了许多曝光融合技术,但在低光增强问题中通常无法获得额外的不同曝光的图像。幸运的是,这些图像是高度相关的。两个仅在曝光上有所不同的图像之间的映射函数称为亮度变换函数(BTF)。因此,我们可以首先使用BTF生成一系列多曝光图像,然后将这些图像融合以获得增强的结果。

 在本文中,我们提出了受HVS启发的多曝光融合框架。我们的框架分为两个阶段:眼曝光调整和大脑曝光调整。第一阶段模拟人眼调整曝光,生成多曝光图像集。第二阶段模拟人脑将生成的图像融合为最终增强结果。基于我们的框架,我们提出了一种双曝光融合方法。具体地,我们首先利用照明估计技术为图像融合构建权重矩阵。然后根据观察结果推导出我们的相机响应模型。接下来,我们找到适合我们相机响应模型的最佳曝光,生成在原始图像曝光不足区域得到良好曝光的合成图像。最后,我们通过使用权重矩阵将输入图像与合成图像融合,获取增强结果。我们对五个具有挑战性的数据集进行实验,以揭示我们的方法与其他最先进方法相比的优势。

通过直接利用空间信息,局部增强可以实现更好的效果,并成为近期技术的主流。局部直方图均衡化[36] [37]采用滑动窗口策略在局部执行直方图均衡化。基于倒置的低光图像与雾化图像相似的观察,一些方法借鉴了去雾技术来解决低光图像增强问题[38] [39]。然而,以上方法的基础模型缺乏物理解释[14]。为了为图像增强提供物理意义的模型,Retinex理论假设观察者接收到的光量可以分解为两部分:照明和场景反射。大多数基于Retinex的方法通过去除照明部分[18] [20] [15]来获得增强结果,而其他一些方法[40] [16] [14]保留一部分照明以保持自然。Fu等人[41]通过将其与两个增强照明融合来调整照明部分。据我们所知,由于低光增强问题通常以单张图像作为输入,目前没有针对该任务的多曝光融合方法。

📚2 运行结果

部分代码:

function [lightOrderError, mask] = loe100x100(raw, enhanceResult)
% function lightOrderError = calLightOrderError(raw, enhanceResult)

if nargin == 0
%     I = imread(imgetfile);
%     loe1 = loe100x100(I, imread(imgetfile))
%     loe2 = loe100x100(I, imread(imgetfile))
%     return;
    
    I = imload(imgetfile);
    loe1 = loe100x100(I, ours_K(I))
    loe2 = loe100x100(I, n(I))
    %loe_npe = loe100x100(I, npe(I))
    return;
    
%     raw = imread('#dataset\#new\ColourCharts\IMG002.tiff');
%     enhanceResult = imread('#dataset\#new\ColourCharts\IMG002__he.PNG');
    raw = imload(imgetfile);
    enhanceResult = imload(imgetfile);
    tic
    [lightOrderError, mask]= loe100x100(raw, enhanceResult);
    toc
    ezFig raw enhanceResult mat2gray(mask)
    return
end

assert(nargin == 2);

% resize
raw = im2uint8(raw); % imresize(raw,[100 100])
enhanceResult = im2uint8(enhanceResult); % imresize(enhanceResult,[100 100])

rawL = max(raw,[],3);
[nRow, nCol] = size(rawL);

enhanceResultL = max(enhanceResult,[],3);

N = 100;
sampleRow = round( linspace(1,nRow,N) ); % 100 samples
sampleCol = round( linspace(1,nCol,N) );
rawL = rawL(sampleRow, sampleCol); % downsample
enhanceResultL = enhanceResultL(sampleRow, sampleCol);

error = 0;
mask = zeros(N,N);
for r = 1:N %size(rawL,1)*size(rawL,2)   %numel(rawL)
    for c = 1:N
        mapRawOrder = rawL>=rawL(r,c);
        mapResultOrder = enhanceResultL>=enhanceResultL(r,c);
        mapError = xor(mapRawOrder,mapResultOrder);
        error = error + sum(mapError(:));
        mask(r,c) = sum(mapError(:));
    end
end

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

🌈4 Matlab代码、文章下载

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值