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

2019-04-14 20:28发布

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