第一种(直接调用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('均衡化后的直方图');
运行结果:
感谢观看,如果有帮助到你,请给题解点个赞和收藏,让更多的人看到。🌹🌹🌹
也欢迎你,关注我。👍👍👍
你们的点赞和留言对我真的很重要!!! ✿✿✿