图像逆光复原

1、提供可一种图像逆光复原的方案,针对逆光图像提供一种亮度调节方案,使得处理后的图像适于人眼获取原始逆光区域信息,此方案流程图如下:

图像逆光复原_第1张图片 图1 处理方案的流程

2、具体实施过程

本方案采用图像分块、设置亮度阈值区间的方法整体提高图像亮度值进行恢复逆光图像。具体实现流程如下:

(1)设置分块后每块图像块的宽度和高度,在原图像上利用rectangle函数绘制各图像块的边界用

(2)根据宽度和高度计算元胞数组的维度,元胞数组用于存放图像块,自主编写divide_image函数,此函数用于对图像进行分块;

(3)利用rgb2hsv函数将图像从RGB空间变换至HSV空间,取v分量,对v分量分块,计算v分量图像块的平均值,观察图像主体区域图像块的亮度均值,根据该均值设置亮度阈值区间(V_l,V_h),将在阈值区间内的亮度值增加\frac{1}{2}(V_l+V_h),提高在阈值区间内的亮度值;

(4)合并阈值处理后v分量的图像块,合并将v分量合并至原图像;

(5)利用hsv2rgb函数将图像变换至RGB空间;

(6)利用imadjust函数和stretchlim函数扩展图像对比度;

(7)改变图像块的高度与宽度重复过程(1)~(6)选择失真最小的图像块;

(8)对(7)得到的图像进行中值滤波后输出,与原图像对比。

3、代码如下:

(1)主函数

clear all
clc
I0=imread('hand.jpg');
%--------------------------------图像分块
[a,b,c]=size(I0);
height=1;                        %分块后每一块的高度
width=1;                         %分块后每一块的宽度
m=floor(a/height);               %m行
n=floor(b/width);                %n列
% figure,imshow(I0),title('分块')
% for i=1:m                      %画边界
%     for j=1:n
%         rectangle('Position',[width*(j-1),height*(i-1),width,height],...
%             'LineWidth',0.5,'LineStyle','-','EdgeColor','w');
%     end
% end
I1=rgb2hsv(I0);                         %变换至HSV空间
v1=I1(:,:,3);                           %亮度分量
divide_v1=divide_image(height,width,v1);%分块
Value=zeros(m,n);
%---------------------------------------亮度均值
for i=1:m
    for j=1:n
        Value(i,j,:)=mean(mean(divide_v1{i,j}));  %每一块图像的亮度均值
    end
end
Vl=0.007;                               %亮度阈值下限
Vh=0.045;                               %亮度阈值上限
%---------------------------------------提高亮度值
Vvalue=divide_v1;
for i=1:m
    for j=1:n
        Value(i,j,:)=mean(mean(divide_v1{i,j}));%每一块图像的亮度均值
        if Value(i,j)>Vl & Value(i,j)

(2)图像分块函数

function [divide_I0] = divide_image(height,width,I0)
%devide_photo 将图像分快
%height-分块后每一块的长度,width-分块后每一块的宽度
%I0-原图像
%devide_image-元胞数组,用于存储分块后的图像
[a,b,c]=size(I0);
m=floor(a/height);               %m行
n=floor(b/width);                %n列
divide_I0=cell(m,n);
for i=1:m                        %分块
    for j=1:n
        divide_I0(i,j)={I0((i-1)*height+1:i*height,(j-1)*width+1:j*width,:)};
    end
end
end

4、结果

图像逆光复原_第2张图片 图2 原逆光图像(hand)
图像逆光复原_第3张图片 图3 处理后的图

经对比发现:①在该图像中本方案较好的恢复了图像的主体区域,手掌的掌纹与关节处皮肤的纹路清晰可见,且亮度适中;②图像的背景部分,即图2中窗外的景物被过亮的光屏蔽掉了,在图3中无法显示出来。

本方案对于图像的主体部分,即拍摄着所需要的部分能够很清晰的还原,对于背景部分也能比较清晰的还原,但是对于图像的远景部分(距离镜头较远的区域)则无法还原,甚至会屏蔽掉。总而言之,本方案针对不同的图像需要设置不同的阈值区间,对于恢复图像主体区域效果较好。

下面在展示一下针对图2,实施本方案过程中的部分图片

图像逆光复原_第4张图片

图像逆光复原_第5张图片

图像逆光复原_第6张图片

图像逆光复原_第7张图片

图像逆光复原_第8张图片

图像逆光复原_第9张图片

图像逆光复原_第10张图片

从图3之后,图片依次为分块为64\times 64\32\times 32\16\times 16\ 8\times 8 \ 4\times 4 \3\times3\2\times 2进行调节亮度的结果,从这些图中可以看到:

(1)将图像分为64×64、32×32大小的图像块时,图像的失真非常严重视觉效果不如原图像;

(2)将图像分为16×16、8×8大小的图像块时,图像的亮度较原图像有较大改善,已经可以看清图像的中心区域手掌的掌纹等细节部分,但是图像非主体区域的背景区域以及手指区域的失真依然很严重;

(3)将图像分为4×4、3×3大小的图像块时,图像的主体区域的手掌与手指的掌纹、以及关节处的纹路清晰可见,与原逆光图像相比图像的亮度良好,但是图像主体部分的手掌、手指的边缘以及背景区域有较大失真。

(4)将图像分为2×2大小的图像块时,图像相比于前三种情况除边缘区域有较小程度的失真外,图像主体区域视觉效果良好,但是背景区域的高频部分仍有较大失真。

通过这个过程我们又得到了一个新的方案,用于给图像打马赛克的方案。只需要图像分块之后,把图像的亮度值调低一点,调至灰色,调整之后重组图像块就可以了。

你可能感兴趣的:(信号(语音,图像,其他)处理)