资源简介
实现《暗通道先验的大坝水下裂缝图像增强算法》中匀光算法,MATLAB编程。
代码片段和文件信息
clc
close all
clear
%%实现论文 暗通道先验的大坝水下裂缝图像增强算法 中匀光算法
srcImage=imread(‘5.png‘);
imshow(srcImage)
title(‘彩色图像‘);
src_gray=rgb2gray(srcImage);%彩色图像转灰度图像
figure;imshow(src_gray);
title(‘灰度图像‘)
%图像匀光处理
num = 91;%设置匀光处理的像素带个数,必须为奇数。
[mnk] = size(srcImage);
pixelNum = m*n;%图像像素个数
m_m = floor(m/4);%掩模的尺寸
n_n = floor(n/4);
X_mask = (1/(m_m*n_n))*ones(m_mn_n);%矩形滤波掩模
line_filting=imfilter(src_grayX_mask‘replicate‘);%通过对原图灰度图进行模糊处理,拟合出光照强弱分布图
figure;imshow(line_filting);title(‘光照分布图‘);
line_filting=im2double(line_filting);
% 光照分布图的最大值与最小值
mask_max=max(max(line_filting));
mask_min=min(min(line_filting));
pix_diff=mask_max-mask_min+1.0/255; %像素值差
gray_distance = double(pix_diff)/num;%每个区域的灰度间隔
normal = ceil(num/2);%正常区域
mask=zeros(mnnum);
program_mean1=zeros(1num);%每个区域的均值
program_std1=zeros(1num);%每个区域的均方差
for k=1:num
src_gray1=im2double(src_gray);
mask(::k)=(mask_min+gray_distance*(k-1)-0.0001) src_gray1(~mask(::k))=0;
if(k==normal)
[normal_meankk]=mean1(src_gray1);%求正常区域的均值跟标准差
program_mean1(k)=normal_mean;
normal_std=std1(src_gray1normal_meankk);
program_std1(k)=normal_std;
else
[program_meane]=mean1(src_gray1);%问题区域均值
program_mean1(k)=program_mean;
program_std=std1(src_gray1program_meane);%问题区域标准差
program_std1(k)=program_std;
end
end
%
out_gray=zeros(size(src_gray));%定义匀光之后的数组
for i=1:num
src_gray2=im2double(src_gray);
if(i==normal)
src_gray2(mask(::i)==0)=0;
out_gray=src_gray2+out_gray;
else
src_gray2(mask(::i)==0)=0;
out_gray=(Uniformlight( src_gray2out_graynormal_meannormal_stdprogram_mean1(i)program_std1(i)));
end
end
figure;imshow(out_gray[]);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2061 2018-01-27 10:47 匀光算法\dodging.m
文件 519 2018-01-26 16:43 匀光算法\mean1.m
文件 591 2017-10-14 14:51 匀光算法\std1.m
文件 470 2017-10-14 19:22 匀光算法\Uniformlight.m
目录 0 2018-01-27 10:46 匀光算法
----------- --------- ---------- ----- ----
3641 5
评论
共有 条评论