资源简介
本程序是通过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
- 上一篇:基于薄板样条的图像配准MATLAB代码
- 下一篇:MatLab-CNN-车牌字符识别
相关资源
- Retinex in matlab图像增强、HDR图像压缩
- retinex 算法matlab仿真
- retinex matlab实现带测试图
- retinex by bilateral filter
- Retinex理论的matlab实现和雾天图像处理
- retinex的的matlab程序
- Multi-Scale Retinex with Color Restore 多尺度
- 图像增强Matlab代码总结6种
- retinex的matlab程序
- retinex的MATLAB实现程序
- 带色彩恢复的多尺度Retinex算法MSRCR
- 基于双边滤波器的retinex算法等代码
- Retinex Matlab算法
- 单尺度,多尺度的Retinex算法程序
- 图像处理,matlab程序,retinex_frankle_
- Retinex的算法
- MSR MATLAB程序
- 单尺度和多尺度retinex的matlab实现程序
- 多尺度retinex算法,图像增强
- MATLAB代码Retinex算法解决光照不均问题
- retinex算法代码MSR
- 单尺度Retinex算法实现
- retinex msr
- retinex中心环绕算法程序
- matlab基于多尺度retinex算法的图像去雾
- 基于直方图均衡化,暗通道先验,r
- 多尺度Retinex
- 基于Retinex理论的图像增强Matlab代码(
- retinex 采用中心环绕函数的retinex算法
- retinex图像增强
评论
共有 条评论