其他分享
首页 > 其他分享> > 数字图像处理笔记(一)Matlab实现直方图均衡化

数字图像处理笔记(一)Matlab实现直方图均衡化

作者:互联网

第一种(直接调用Matlab内置函数):

G=imread('Fig0111(katrina_2005_08_29_NOAA).tif');
J=histeq(G);  %直方图均衡化,这一个函数就可以做到均衡化的效果
figure,
subplot(121),imshow(uint8(G));
title('原图')
subplot(122),imshow(uint8(J));
title('均衡化后')
figure,
subplot(121),imhist(G,64);
title('原图像直方图');
subplot(122),imhist(J,64);
title('均衡化后的直方图');

运行结果:

请添加图片描述

第二种(自己编写):

% 输入图像
H = imread('Fig0111(katrina_2005_08_29_NOAA).tif');

[m,n]=size(H);       % 计算图像的长宽
p=zeros(1,256);     %创建数组存储像素概率
% 统计每个像素值出现的概率, 得到概率直方图
for i=0:255
   % 用length函数计算相同像素的个数
   p(i+1)=length(find(H==i))/(m*n);  
end 

%输出原图
subplot(2,2,1);      %用subploy函数将多个图像画到同一个平面中
imshow(H);          %输出图像
title('原图');
%画出原图直方图
subplot(2,2,2);  
bar(0:255,p,'b');  
title('原图直方图');  

% 求累计概率,得到累计直方图
s=zeros(1,256);  
for i=1:256  
     for j=1:i  
         s(i)=p(j)+s(i);                  
     end  
end  
 
%完成每个像素点的映射
a=round(s*255);  
b=H;  
for i=0:255  
     b(H==i)=a(i+1);                
end 

%输出均衡化后的图像
subplot(2,2,3);  
imshow(b)                            
title('均衡化后图像');  

for i=0:255  
    GPeq(i+1)=sum(p(a==i));            
end
%画出均衡化后的直方图
subplot(2,2,4);  
bar(0:255,GPeq,'b'); 
title('均衡化后的直方图');  

运行结果:
请添加图片描述

标签:subplot,原图,title,均衡化,数字图像处理,直方图,255
来源: https://blog.csdn.net/csh1807266489/article/details/120664748