基于直方图均衡化的水下激光图像处理(MATLAB仿真)

时间:201491200: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('处理之后的图像')%显示均衡化后的图像

 

 

 

 

  • 8
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值