基于直方图均衡化的水下激光图像处理(MATLAB仿真)
2019-04-14 20:28发布
生成海报
时间:2014年9月12日00:20:21
整理:天空之恋
地点:桂电
基于直方图均衡化的水下图像增强(MATLAB仿真)
参考网址:http://blog.csdn.net/laviewpbt/article/details/22982953
上面这篇文章提到可以对RGB三个通道进行直方图规定化从而实现水下图像增强。此处我们使用的是直方图均衡化,通过实际仿真效果也很明显。
在此特别感谢laviewpbt博主,他的很多文章很有指导意义,尤其是下面这个
(http://blog.csdn.net/laviewpbt/article/details/18181505)
前段时间一直在做去雾处理。在laviewpbt博客中对去雾算法介绍的很详细,我从暗通道算法开始学习的,后来又仿真快速去雾算法,效果都还可以。然后花了两周的时间,在DM642上实现快速去雾算法的视频处理,效果比较一般,以后再写一下具体的实验效果。
我们最终的目的的是实现水下激光成像,去雾算法和水下图像处理还是有一定的差距的。前段时间也没有看水下成像的仿真,只是看了一下具体的系统设计等等。今天看到能够用三个通道分别通过直方图规定化来进行增强,而我前段时间在学习那本经典的《数字图像处理》(冈萨雷斯)做过直方图均衡化的仿真,所以直接拿过程序进行仿真。通过实际测试效果还是可以的。下面列出一些具体的测试结果:
MATLAB仿真程序:
%{
基于直方图均衡化的水下图像增强(MATLAB仿真)
对RGB三个通道分别进行均衡化处理,得到增强之后的图像
实际测试,效果明显,下面
时间:2014年9月11日23:59:01
整理:天空之恋
地点:桂电
%}
clear;
t = imread('wa5.png');
I=t(:,:,1);
[height,width] = size(I);
subplot(121);
imshow(t),title('原始图像')%显示原始图像
%对R通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用
%进行像素灰度统计;
s = zeros(1,256);%统计各灰度数目,共256个灰度级
%绘制直方图
gp=zeros(1,256);
for k=0:255
gp(k+1)=length(find(I==k))/(height*width);
end
for i = 1:height
for j = 1: width
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
end
end
%计算灰度分布密度
p = zeros(1,256);
for i = 1:256
p(i) = s(i) / (height * width * 1.0);
end
%计算累计直方图分布
c = zeros(1,256);
c(1) = p(1);
for i = 2:256
c(i) = c(i - 1) + p(i);
end
%累计分布取整,将其数值归一化为1~256
c = uint8(255 .* c + 0.5);
%对图像进行均衡化
for i = 1:height
for j = 1: width
Ir(i,j) = c(I(i,j)+1);
end
end
dis(:,:,1)=Ir;
%subplot(122)
%imshow(Ir)%显示均衡化后的图像
%对G通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用
I=t(:,:,2);
[height,width] = size(I);
%下面使用直方图均衡化进行处理
%进行像素灰度统计;
s = zeros(1,256);%统计各灰度数目,共256个灰度级
%绘制直方图
gp=zeros(1,256);
for k=0:255
gp(k+1)=length(find(I==k))/(height*width);
end
for i = 1:height
for j = 1: width
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
end
end
%计算灰度分布密度
p = zeros(1,256);
for i = 1:256
p(i) = s(i) / (height * width * 1.0);
end
%计算累计直方图分布
c = zeros(1,256);
c(1) = p(1);
for i = 2:256
c(i) = c(i - 1) + p(i);
end
%累计分布取整,将其数值归一化为1~256
c = uint8(255 .* c + 0.5);
%对图像进行均衡化
for i = 1:height
for j = 1: width
Ig(i,j) = c(I(i,j)+1);
end
end
%subplot(122)
%imshow(Ig)%显示均衡化后的图像
dis(:,:,2)=Ig;
%对B通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用
I=t(:,:,3);
[height,width] = size(I);
%下面使用直方图均衡化进行处理
%进行像素灰度统计;
s = zeros(1,256);%统计各灰度数目,共256个灰度级
%绘制直方图
gp=zeros(1,256);
for k=0:255
gp(k+1)=length(find(I==k))/(height*width);
end
for i = 1:height
for j = 1: width
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
end
end
%计算灰度分布密度
p = zeros(1,256);
for i = 1:256
p(i) = s(i) / (height * width * 1.0);
end
%计算累计直方图分布
c = zeros(1,256);
c(1) = p(1);
for i = 2:256
c(i) = c(i - 1) + p(i);
end
%累计分布取整,将其数值归一化为1~256
c = uint8(255 .* c + 0.5);
%对图像进行均衡化
for i = 1:height
for j = 1: width
Ib(i,j) = c(I(i,j)+1);
end
end
dis(:,:,3)=Ib;
%subplot(122)
%imshow(Ib)%显示均衡化后的图像
subplot(122);
imshow(dis),title('处理之后的图像')%显示均衡化后的图像
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮