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.

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐