您的位置:首页 > 其它

基于直方图均衡化的激光水下图像处理

2014-11-20 22:12 176 查看
采用直方图进行水下图像处理,感觉对我搜到的这几个图片效果可以,最近看了一些使用修正的暗通道进行水下图像处理的,但是我没有弄出来效果。我感觉即使使用暗通道进行处理,那么每个通过处理的结果应该也朝直方图均衡化处理的结果发展。

%{

基于直方图均衡化的水下图像处理

时间:2014年11月20日22:15:40

整理:

采用直方图均衡化的算法,对采集图像RGB三个颜色

通道分别进行直方图均衡化处理,得到水下图像的修正结果

%}

clear;

t = imread('wa3.png');

d=t;

subplot(121);

imshow(t),title('原始图像');

I=d(:,:,1);%R颜色通道

dis(:,:,1)=junhenghua(I);% 调用均衡化函数

I=d(:,:,2);%G颜色通道

dis(:,:,2)=junhenghua(I); % 调用均衡化函数

I=d(:,:,3);%B颜色通道

dis(:,:,3)=junhenghua(I);% 调用均衡化函数

subplot(122);

imshow(dis),title('一次均衡化之后的图像')%显示均衡化后的图像

figure,imshow(dis(:,:,1)),title('红色通道均衡化处理');

figure,imshow(dis(:,:,2)),title('绿色通道均衡化处理');

figure,imshow(dis(:,:,3)),title('蓝色通道均衡化处理');

调用的函数

%{

均衡化处理函数。。

水下图像处理调用函数。。。

对输入的图像进行直方图统计,然后进行直方图均衡化处理

%}

function [rgb,gp]= junhenghua(I)

[height,width] = size(I);

%对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

rgb(i,j) = c(I(i,j)+1);

end

end

gp=zeros(1,256);

for k=0:255

gp(k+1)=length(find(rgb==k))/(height*width);

end

end







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: