基于融合的方法增强单背光图像

    科技2022-08-04  109

    文章目录

    论文亮点:论文思路:1. 三个输入图形第一图像第二图像第三图像 2. 权值3. 图像融合 实验结果主观评价客观评价 实验代码

    论文亮点:

    背光图像不同于一般的低照度图像,它有很宽的动态光照范围,不仅包括了暗的部分,还会有亮的部分;文章的思路是考虑大量图像的特征,并单独处理暗和亮范围的图像;介绍了一种利用权值来增加清晰度的方法采用多尺度融合

    论文思路:

    如下图所示,首先作者把图像从RGB通道转到HSV通道(H:色相 S:饱和度 V:亮度),接着对V通道进行不同的(函数)操作得到三个输入图像,然后通过拉普拉斯金字塔和高斯金字塔进行多尺度融合,最后再将融合后的图像转回RGB通道。

    1. 三个输入图形

    第一图像

    通过log函数对V通道图像进行处理,在增加暗像素的亮度同时压缩动态图像,从而达到增强细节的目的。 α是表示图像亮度的系数,默认值为0.5; 加上一个“1”以确保I是正的。

    与V通道图像对比效果:

    第二图像

    采用单调递增的gamma函数来降低大值。 γ是自适应因子,它取决于低像素的数量

    与V通道图像对比效果:

    第三图像

    采用GUM方法,之前没听过,查了一下中文解释是:反锐化掩蔽 ,好高深的样子…… 理解一下,锐化的反面就是平滑,那“反锐化”应该就是平滑的意思。“掩蔽”我觉得可以理解为减去或者除去。加起来就是对V通道图像进行减去平滑处理后得到的图像,所以就是为了增强边缘和细节。

    与V通道图像对比效果: GUM函数

    function [ v2 ] = gum( x1 ) x1=im2double(x1); [ m, n, k ] = size( x1 ); x = x1; mask = ( 1 / 25 ) * ones( 5, 5 ); y1 = conv2( x, double( mask ), 'same' ); d = x - y1; g = 3 .* d; v1 = y1 + g; y2 = medfilt2( x, [ 3, 3 ] ); X = ( 1 - x ) ./ max( x, 0.01 ); Y = ( 1 - y2 ) ./ max( y2, 0.01 ); I = ones( m, n ); d1 = I ./ ( 1 + ( X ./ Y ) ); h = adapthisteq( y2, 'clipLimit', 0.005 ); c = ( 2 .* d1 ) - 1; Gmax = 5;Gmin = 1;eta = 0.5; beta = ( Gmax - Gmin ) / ( 1 - exp( - 1 ) ); alpha = ( Gmax - beta ); gama = alpha + ( beta * exp( - 1 .* abs( c ) .^ eta ) ); D = ( 1 - d1 ) ./ max( d1, 0.01 ); g = I ./ ( 1 + D .^ gama ); G = ( 1 - g ) ./ max( g, 0.01 ); H = ( 1 - h ) ./ max( h, 0.01 ); v2 = I ./ max( 0.1, ( 1 + ( H .* G ) ) ); t = v2 > 1; v2( t ) = x( t ); end

    2. 权值

    通过对0.5的差值来作为每个像素点的权重,生成权重矩阵。

    降低过度曝光、曝光不足的像素值,而正常曝光的像素则拥有较大的像素值。 由于有三张输入图片,所以进行归一化处理:

    3. 图像融合

    前边得到了输入图像和权值,如果直接将他们加权融合,很容易产生光晕

    在融合过程中,对输入图像进行拉普拉斯金字塔,对权值进行高斯金字塔处理: 因此,V(x,y)的结果是通过分别混合拉普拉斯输入和高斯权重映射得到的 具体代码如下所示:

    拉普拉斯金字塔函数

    function out = laplacian_pyramid(img, level) h = 1/16* [1, 4, 6, 4, 1]; %filt = h'*h; out{1} = img; temp_img = img; for i = 2 : level temp_img = temp_img(1 : 2 : end, 1 : 2 : end); %out{i} = imfilter(temp_img, filt, 'replicate', 'conv'); out{i} = temp_img; end % calculate the DoG for i = 1 : level - 1 [m, n] = size(out{i}); out{i} = out{i} - imresize(out{i+1}, [m, n]); end

    高斯金字塔函数

    function out = gaussian_pyramid(img, level) h = 1/16* [1, 4, 6, 4, 1]; filt = h'*h; out{1} = imfilter(img, filt, 'replicate', 'conv'); temp_img = img; for i = 2 : level temp_img = temp_img(1 : 2 : end, 1 : 2 : end); out{i} = imfilter(temp_img, filt, 'replicate', 'conv'); end

    金字塔重建函数

    function out = pyramid_reconstruct(pyramid) level = length(pyramid); for i = level : -1 : 2 %temp_pyramid = pyramid{i}; [m, n] = size(pyramid{i - 1}); %out = pyramid{i - 1} + imresize(temp_pyramid, [m, n]); pyramid{i - 1} = pyramid{i - 1} + imresize(pyramid{i}, [m, n]); end out = pyramid{1};

    实验结果

    主观评价

    在下图中,根据与其他几种方法的对比,可以看到: b是带颜色恢复的多尺度Retinex方法:尤其是最后一张女孩,可以看到颜色失真很严重; c存在背景过度曝光的问题; d的增强效果不明显。

    客观评价

    在表一中,NIQE使用图像中观察到的统计规律的可测量偏差,值越低表示质量越高 表二是时间的比较

    实验代码

    %% clc clear I=im2double(imread('10.jpg')); % imshow(I);figure; HSV=rgb2hsv(I); H=HSV(:,:,1);S=HSV(:,:,2);V=HSV(:,:,3); [m,n]=size(H); % imshow(V) %im1 log % im1=log(0.5*(V+1)+1); im1=V.^0.35; % imshow(im1);figure; %im2 gamma a=50/255; index=V<a; index=double(index); M=sum(index(:)); N=n*m; gamma=(N-M)/N; im2=1-(1-V).^gamma; % imshow(im2);figure; %im3 GUM im3=gum(V); % imshow(im3);figure; %weight sigma = 0.25; aver = 0.3; WE1= exp(-(im1 - aver).^2 / (2*sigma^2)); WE2=exp(-(im2 - aver).^2 / (2*sigma^2)); WE3=exp(-(im3 - aver).^2 / (2*sigma^2)); sumW=WE1+WE2+WE3; W1=WE1./sumW; W2=WE2./sumW; W3=WE3./sumW; % Multi-scale fusion level=4; G1=gaussian_pyramid(W1,level); G2=gaussian_pyramid(W2,level); G3=gaussian_pyramid(W3,level); L1=laplacian_pyramid(im1,level); L2=laplacian_pyramid(im2,level); L3=laplacian_pyramid(im3,level); for i=1:level F{i}=G1{i}.*L1{i}+G2{i}.*L2{i}+G3{i}.*L3{i}; end Vfinal=pyramid_reconstruct(F); % imshow(Vfinal);figure; hsv=cat(3,H,S,Vfinal); rgb=hsv2rgb(hsv); imshow([I rgb]); imwrite(rgb,'1.bmp');

    Processed: 0.011, SQL: 8