直方图均衡化图像增强 matlab,图像增强(双向直方图均衡化)!

clear

g=imread('C:\Users\hp\Desktop\1.jpg');              %读取原始图像

[row,col]=size(g);                                  %获取图像高度row,宽度col

g=imnoise(g,'gaussian',0,0.005);                    %添加高斯噪声

g=g+1;                                              %修改像素范围

I=g(:,:,1);                                         %初始化原始图像矩阵

J=g(:,:,1);                                         %初始化直方图均衡结果矩阵

JJ=g(:,:,1);                                        %初始化双向直方图均衡结果矩阵

L=256;                                              %灰度级

Ps=zeros(L,1);                                      %出现频率%统计直方图结果数据

nK=zeros(L,1);                                      %初始化原始图像灰度统计数组

nK2=zeros(L,1);                                     %初始化直方图均衡图像灰度统计数组

nK3=zeros(L,1);                                     %初始化双向直方图均衡图像灰度统计数组

[row,col]=size(I);

%直方图均衡化

n=row*col;                                          %总像素个数

for i =1:row

for j =1:col

num=double(I(i,j)+1);                        %获取像素点灰度级

nK(num)=nK(num)+1;                          %统计nK

end

end

for i =1;L

Ps(i)=nK(i)/n;                                  %统计直方图概率估计

end

S(1)=1;

for i=2:L

S(i)=S(i-1)+Ps(i)*L;                            %建立直方图均衡化查表S

end

for i=1:row

for j= 1:col

J(i,j)=S(g(i,j));                            %得到均衡化像素值

end

end

num=0;

for i=1:row

for j=1:col

num=(double),(J(i,j));                      %获取像素点灰度级

nK2(num)=nK2(num)+1;                       %统计nK

end

end

%双向均衡化

count=0;

intv=zeros(L,1);

for i=1:L

if(nK2(i)>0)

count=count+1;

intv(i)=count;                             %获取像素有效值在其中的位置

end

end

lut=zeros(L,1);

for i=1:L

lut(i)=256/count*intv(i);                      %建立查找表

end

for i=1:row

for j=1:col

JJ(i,j)=lut(J(i,j));                       %得到双向直方图均衡化像素值

end

end

num=0;

for i=1:row

for j=1:col

num=double(JJ(i,j))+1;                     %获取像素点灰度级

nK3(num)=nK3(num)+1;                       %统计nK

end

end

%绘制输出结果

subplot(3,2,1);imshow(I),title('(a)原图');

subplot(3,2,2);bar(nK),title('(b)原图直方图');

subplot(3,2,3);imshow(J),title('(c)均衡化');

subplot(3,2,4);bar(nK2),title('(d)均衡化直方图');

subplot(3,2,5);imshow(JJ),title('(e)双向均衡化');

subplot(3,2,6);bar(nK3),title('(f)双向均衡化直方图');

%计算MEAN、MES、PSNR值

A=I;

B=abs(J);

PSNR(double(A./max(max(A))),double(B./max(max(B))));

??? Error using ==> double

Not enough input arguments.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值