• 大小: 1.42MB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2023-08-16
  • 语言: Matlab
  • 标签: Retinex  

资源简介

本程序是通过Matlab编写的基于双边滤波的图像增强,希望能对研究这方面的朋友有所帮助!

资源截图

代码片段和文件信息

% 采用双边滤波和灰度级分层的方法来实现
clear all
clc
S = imread(‘G:\研二所有论文相关\新海雾图\2013.6.30海雾图片\青海\16.jpg‘);  %读入图像
figure;imshow(S);title(‘原始图‘);
% S1 = double(S); %转换为双精度 转换成双精度以后就不要直接转换为灰度图了 转换成双精度在转换成灰度的话值都是0和1区间的
[hwc]=size(S); %获取图像尺度信息
S_R = S(::1);%分别提取三个通道
S_G = S(::2);
S_B = S(::3);
l = 0.2989*S_R+0.587*S_G+0.114*S_B;  %求取亮度图像L 对应计算流程1
figure;imshow(l);title(‘原始亮度图‘);
% l = double(l);
l_log = log(double(l));                      %取对数 对应计算流程2
%% 直接利用双边滤波进行亮度估计试试
N=5;   %矩阵模板尺寸大小
deta(1)=N/6; %sigma_d
M=[1 -2 1;-2 4 -2;1 -2 1]; %定义一个拉普拉斯模板
l1 = conv2(lM‘same‘);
l_l = sum(sum(l1));
deta(2)=3*l_l*sqrt(pi/2)/(6*(h-2)*(w-2)); %利用自适应算法计算sigma_r
% L = bialteral(l_log N deta);
[XY] = meshgrid(-N:N-N:N);%generate two matrix 定义滤波窗口大小
D = exp(-(X.^2+Y.^2)/(2*deta(1)^2));%定义一个标准的高斯滤波器 定义域核 

%% rang filtering in v layer

B = zeros(h+N*2w+N*2);%扩充矩阵
B(N+1:h+NN+1:w+N) = l_log;  %扩充的地方都变为0
for i = N+1:h+N
    for j = N+1:w+N
        L = B(i-N:i+Nj-N:j+N);%extract the local region 窗口内的所有像素    
        d = L-B(ij);%窗口内的所有点都减去(i,j)这个点的值        
        R = exp(-(d.^2)/(2*deta(2)^2));% 值域核 f(p-s)                
        F = R.*D;%相当于滤波 其实就是定义域和与值域核对应模板相乘
        norm_F = sum(F(:));  
        C = sum(sum(L.*F));
        L_lvbo(i-Nj-N) = C/norm_F;   %归一化 L_lvbo就是所说的照度图像I
    end
end
% L_lvbo = bialteral2(l_log N deta);
figure;imshow(mat2gray(L_lvbo));title(‘亮度双边滤波以后结果图‘);
%% L减去I得到R 第四步
R = l_log-L_lvbo;
figure;imshow(mat2gray(R));title(‘增强图像‘);
%% 第五步 直方图截取方法截去I两端各1%的像素,在用式(6)对I操作,最后进行线性拉伸
R1_sort = sort(reshape(L_lvbo1h*w));
R_1ow = R1_sort(round(h*w*0.01));
R_high =R1_sort(round(h*w*0.99));
R1 = imadjust(L_lvbo/255[R_1ow/255;R_high/255][0;1]); %直方图截去I两端各1%的像素并压缩到【0.1】
figure;imshow(mat2gray(R1));title(‘截去压缩以后结果‘);
% R1 = R1.^(0.8.*R1+0.8);%公式(4)
% figure;imshow(mat2gray(R1));title(‘拉伸以后结果‘); %加不加这个拉伸影响也不大
% %% 第六步用式(5)对R操作 反射图像增强 采用的是Sigmoid函数 经过试验发现加不加步对程序影响不大 几乎没有影响
% a = 6;                   %Sigmoid函数的控制参数
% R = 2./(1+exp(-a.*R))-1; %公式(5)
% figure;imshow(mat2gray(R));title(‘采用Sigmoid函数进行增强结果‘);
%% 第七步 用I加上R得到新的图像New;
New = R+R1;
figure;imshow(mat2gray(New));title(‘新图像‘);%在没有前面两步的情况下这步的结果与第五步截去压缩以后结果差不多
% %% 第八步 取指数变换
% New = exp(New); 
% figure;imshow(mat2gray(New));title(‘取指数变换以后的新图像‘);
%% 第九步 彩色恢复
R = double(S_R).*New./l_log;
G = double(S_G).*New./l_log;
B = double(S_B).*New./l_log;
New2 = cat(3RGB);
figure;imshow(mat2gray(New2));title(‘彩色恢复以后的图‘);% 彩色恢复以后的图整体会比新图像暗一点 毕竟是彩色的





 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-08-14 00:43  Retinex\
     目录           0  2015-08-14 00:43  Retinex\胡韦伟论文程序\
     文件        3045  2013-10-09 07:49  Retinex\胡韦伟论文程序\huweiwei_bia_retinex.m
     文件     1502154  2013-09-13 09:23  Retinex\胡韦伟论文程序\基于双边滤波的Retinex图像增强算法_胡韦伟.caj

评论

共有 条评论