Processing math: 100%
随笔 - 15  文章 - 0  评论 - 1  阅读 - 37862

matlab 直方图均衡化

原理:

直方图均衡化首先是一种灰度级变换的方法:

原来的灰度范围[r0,rk]变换到[s0,sk]变换函数为:s=T(r);

为便于实现,可以用查找表(look-up table)的方式存储,即:原始的灰度作为查找表的索引,表中的内容是新的灰度值。

 

其次,直方图均衡化是图像增强的一种基本方法,可提高图像的对比度,即:将较窄的图像灰度范围以一定规则拉伸至较大(整个灰度级范围内)的范围。

目的是在得到在整个灰度级范围内具有均匀分布的图像。

所以,当输入:直方图H(r)【此处指每个灰度级占有的像素数】;灰度级范围[r0,rk];目的是找到一个s=T(r)使得输出图像的直方图G(s)【同指】在整个灰度级范围内均匀分布。且需满足

(1)0—L(灰度范围)单调递增,避免黑白颠倒;

(2)0<r<L,时0<s<L,保持动态范围一致。

累积分布函数满足这几个要求。

ki=0G(si)=kj=0H(rj)

 若图像有M*N个像素,则均衡化后的直方图G(q)就有均匀分布:

F=NMsks0

代入上式:

NMss01sks0ds=NM(ss0)sks0=rr0H(r)dr

则:

s=T(r)=sks0NMrr0H(r)dr+s0

转换成离散形式:

 s=T(r)=sks0NMrr0H(r)+s0

一般sk=255,s0=0

自此就得到了与r相应的s。


 

matlab代码:

复制代码
[filename,pathname]=uigetfile('*.*','select an image');
input_I=imread([pathname filename]);%读入图像

subplot(3,3,1);imshow(input_I);                                 
title('原始图像');%显示原始图像

I_gray = rgb2gray(input_I);
subplot(3,3,4);imshow(I_gray);                                 
title('灰度图像');
subplot(3,3,5);imhist(I_gray);
title('灰度图像直方图');%显示灰度图像及直方图

[height,width]=size(I_gray);

r=zeros(1,256);
for i=1:height
   for j=1:width
       r(I_gray(i,j)+1)= r(I_gray(i,j)+1)+1;
    end
end  %计算灰度直方图中的数值:每个灰度级对应的像素数目。
subplot(3,3,6);stem(r);
title('计算所得灰度图像直方图');

s=zeros(1,256);
s(1)=r(1);
for i=2:256
    s(i)=s(i-1)+r(i);
end         %累积分布函数:对应的也是像素的数目。
subplot(3,3,9);stem(s);

for i=1:256
    s(i)=floor(255*s(i)/(height*width));
end   % s(i)/(height*width) 为频率,*256 为归一到0—255之间,floor为取整(整数部分)函数。【round为四舍五入函数,ceil为取整数部分加1】



 I_HE=I_gray;
for i=1:height
   for j=1:width
       I_HE(i,j)= s(I_gray(i,j)+1);
    end
end%得到均衡化后的图像。s(1)~s(256)里的数值即为灰度值,1~256标号对应的是原始灰度图像的0~255的灰度值。

m=zeros(1,256);
for i=1:height
   for j=1:width
       m(I_HE(i,j)+1)= m(I_HE(i,j)+1)+1;
    end
end  %计算直方图中的数值:每个灰度级对应的像素数目。
subplot(3,3,9);stem(m);
title('计算所得均衡化后图像直方图');



imwrite(I_gray,'1gray.png');
imwrite(I_HE,'1he.png'); 
subplot(3,3,7);imshow(I_HE);                          
title('均衡化后的图像');
subplot(3,3,8);imhist(I_HE);
title('均衡化后图像直方图');
复制代码

结果:

问题

直方图确实拉伸了,人眼视觉上对比度也提升了,可是说好的均匀分布呢?

posted on   Sweet Smile  阅读(25615)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示